feat: implement missing Forth features and fix compiler warnings

Co-authored-by: aider (openrouter/moonshotai/kimi-k2.6) <aider@aider.chat>
This commit is contained in:
2026-05-03 17:30:46 +03:00
parent e5c6fdf9d0
commit 330370e740
3 changed files with 411 additions and 34 deletions
+26 -3
View File
@@ -7,8 +7,8 @@ int main(void) {
add_primitive("docolon", do_docolon, 1 << 6); // Hidden
add_primitive("lit", do_lit, 1 << 6); // Hidden
add_primitive("do_dot_quote_inner", do_dot_quote_inner, 1 << 6); // Hidden
add_primitive("0branch", do_zero_branch, 1 << 6); // Hidden (for IF)
add_primitive("branch", do_branch, 1 << 6); // Hidden (for ELSE, BEGIN)
add_primitive("0branch", do_zero_branch, 1 << 6); // Hidden (for IF, UNTIL, WHILE)
add_primitive("branch", do_branch, 1 << 6); // Hidden (for ELSE, REPEAT)
// Public primitives
// Stack ops
@@ -64,9 +64,32 @@ int main(void) {
add_primitive(".\"", do_dot_quote, 1 << 7); // Immediate
add_primitive("words", do_words, 0);
// Compilation words
// Memory
add_primitive("@", do_fetch, 0);
add_primitive("!", do_store, 0);
add_primitive("+!", do_plus_store, 0);
add_primitive("c@", do_cfetch, 0);
add_primitive("c!", do_cstore, 0);
add_primitive("variable", do_variable, 0);
add_primitive("constant", do_constant, 0);
add_primitive("here", do_here, 0);
add_primitive("allot", do_allot, 0);
// Return stack
add_primitive(">r", do_to_r, 0);
add_primitive("r>", do_r_from, 0);
add_primitive("r@", do_r_fetch, 0);
// Compilation / control flow
add_primitive(":", do_colon, 0);
add_primitive(";", do_semicolon, 1 << 7); // Immediate
add_primitive("if", do_if, 1 << 7); // Immediate
add_primitive("else", do_else, 1 << 7); // Immediate
add_primitive("then", do_then, 1 << 7); // Immediate
add_primitive("begin", do_begin, 1 << 7); // Immediate
add_primitive("until", do_until, 1 << 7); // Immediate
add_primitive("while", do_while, 1 << 7); // Immediate
add_primitive("repeat", do_repeat, 1 << 7); // Immediate
// Start outer interpreter
outer_interpreter();