add postpone

main
Clyne 3 weeks ago
parent 221419aed9
commit c4ec3bea19
Signed by: clyne
GPG Key ID: 3267C8EBF3F9AFC7

@ -300,6 +300,16 @@ struct forth
if (fth.pop() == 0) if (fth.pop() == 0)
fth.ip = *reinterpret_cast<func **>(ptr) - 1; fth.ip = *reinterpret_cast<func **>(ptr) - 1;
}; };
auto f_postpone = [](auto) {
assert<error::compile_only_word>(fth.compiling);
auto w = fth.parse();
auto g = fth.get(w);
assert<error::word_not_found>(g.has_value());
*fth.here++ = reinterpret_cast<cell>((*g)->body());
};
constexpr static word w_dict {"_d", f_dict}; constexpr static word w_dict {"_d", f_dict};
constexpr static word w_add {"+", f_add, &w_dict}; constexpr static word w_add {"+", f_add, &w_dict};
@ -333,8 +343,9 @@ struct forth
constexpr static word w_cell {"cell", f_cell, &w_comm}; constexpr static word w_cell {"cell", f_cell, &w_comm};
constexpr static word w_jmp {"_jmp", f_jmp, &w_cell}; constexpr static word w_jmp {"_jmp", f_jmp, &w_cell};
constexpr static word w_jmp0 {"_jmp0", f_jmp0, &w_jmp}; constexpr static word w_jmp0 {"_jmp0", f_jmp0, &w_jmp};
constexpr static word w_postp {"postpone", f_postpone, &w_jmp0, word_base::immediate};
fth.latest = &w_jmp0; fth.latest = &w_postp;
fth.end = end_value; fth.end = end_value;
} }

Loading…
Cancel
Save