fix(v4.0.0): 29 values left on the stack hung the node; and what the review of step 6d found
The review of step 6d found it not sound. Mended here, with a check that failed first: a text that left 29 values on the stack hung the node for ever, on the products too -- the passes over the messages waiting that follow every text need four cells, and a stack fault in the middle of one left the messages in pieces. Such a text ends 'Stack overflow', as before step 6d. hosted-check types it. The other findings are open and are written under step 6d in MESH.md section 10; the README no longer says the aim is met. make -C v4 test and sanitize at both widths, hosted-check. The bare metal boots have not been made again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
2b587206ee
commit
380f1cc6ec
@@ -1134,6 +1134,21 @@ int main(void)
|
||||
}
|
||||
printf(" %u values may wait on the stack while the next line is typed and interpreted\n", most);
|
||||
CHECK(most + 4u >= V4_DATA_DEPTH, "the prompt and the interpreter take no more than four cells of the stack");
|
||||
/* one more than may wait: the line ends in an error that says so, and the node goes on (found by the review of step 6d) */
|
||||
{
|
||||
char line[4 * V4_DATA_DEPTH + 16];
|
||||
size_t at = 0;
|
||||
unsigned m;
|
||||
const char *r;
|
||||
boot_bare();
|
||||
for (m = 0; m < most + 1; m++) at += (size_t)snprintf(line + at, sizeof line - at, "1 ");
|
||||
snprintf(line + at, sizeof line - at, "\n");
|
||||
r = say(line);
|
||||
CHECK(strstr(r, "Stack overflow") != NULL && strstr(r, " ERROR\nok> ") != NULL, "a line that leaves one value more than may wait ends in an error that says so: \"%s\"", r);
|
||||
CHECK(strcmp(say("1 2 + .\n"), "3 ok\nok> ") == 0, "and the next line is done as usual");
|
||||
for (m = 0; m < 2000 && !node_idle(); m++) (void)v4_exec_step_word(&n, &es, &h); /* it finishes what it was doing when its answer went */
|
||||
CHECK(n.mem[MQ_COUNT] == 0 && node_idle(), "with nothing left among the messages waiting, and the node at its ports");
|
||||
}
|
||||
}
|
||||
|
||||
/* ---- how much of the data stack a line has ---- */
|
||||
|
||||
Reference in New Issue
Block a user