fix: qdup/tuck/2swap bugs, getline, and cached word pointers

Co-authored-by: aider (openrouter/moonshotai/kimi-k2.6) <aider@aider.chat>
This commit is contained in:
2026-05-03 21:39:52 +03:00
parent bf3c15ec27
commit b115744991
7 changed files with 106 additions and 89 deletions
+15 -15
View File
@@ -11,12 +11,12 @@ int main(void) {
here = user_mem;
// Hidden words first
add_primitive("exit", do_exit, 0);
add_primitive("docolon", do_docolon, 1 << 6);
add_primitive("lit", do_lit, 1 << 6);
add_primitive("do_dot_quote_inner", do_dot_quote_inner, 1 << 6);
add_primitive("0branch", do_zero_branch, 1 << 6);
add_primitive("branch", do_branch, 1 << 6);
w_exit = add_primitive("exit", do_exit, 0);
w_docolon = add_primitive("docolon", do_docolon, F_HIDDEN);
w_lit = add_primitive("lit", do_lit, F_HIDDEN);
w_dot_quote_inner = add_primitive("do_dot_quote_inner", do_dot_quote_inner, F_HIDDEN);
w_zbranch = add_primitive("0branch", do_zero_branch, F_HIDDEN);
w_branch = add_primitive("branch", do_branch, F_HIDDEN);
// Public primitives
// Stack ops
@@ -69,7 +69,7 @@ int main(void) {
add_primitive("cr", do_cr, 0);
add_primitive("emit", do_emit, 0);
add_primitive("key", do_key, 0);
add_primitive(".\"", do_dot_quote, 1 << 7); // immediate
add_primitive(".\"", do_dot_quote, F_IMMEDIATE); // immediate
add_primitive("words", do_words, 0);
// Memory
@@ -90,14 +90,14 @@ int main(void) {
// Compilation / control flow
add_primitive(":", do_colon, 0);
add_primitive(";", do_semicolon, 1 << 7);
add_primitive("if", do_if, 1 << 7);
add_primitive("else", do_else, 1 << 7);
add_primitive("then", do_then, 1 << 7);
add_primitive("begin", do_begin, 1 << 7);
add_primitive("until", do_until, 1 << 7);
add_primitive("while", do_while, 1 << 7);
add_primitive("repeat", do_repeat, 1 << 7);
add_primitive(";", do_semicolon, F_IMMEDIATE);
add_primitive("if", do_if, F_IMMEDIATE);
add_primitive("else", do_else, F_IMMEDIATE);
add_primitive("then", do_then, F_IMMEDIATE);
add_primitive("begin", do_begin, F_IMMEDIATE);
add_primitive("until", do_until, F_IMMEDIATE);
add_primitive("while", do_while, F_IMMEDIATE);
add_primitive("repeat", do_repeat, F_IMMEDIATE);
/* Additional words */
add_primitive("depth", do_depth, 0);