add immediate
nat word
This commit is contained in:
parent
bc9bc44e5d
commit
657164429f
1 changed files with 15 additions and 3 deletions
18
pila.c
18
pila.c
|
@ -399,8 +399,6 @@ compile_end_nat(Pila *st)
|
||||||
push_val(st, BOX_INTN((u64)st->cur_compw));
|
push_val(st, BOX_INTN((u64)st->cur_compw));
|
||||||
|
|
||||||
st->compiling = false;
|
st->compiling = false;
|
||||||
st->cur_compw = nil;
|
|
||||||
st->cur_compw_cap = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Str
|
Str
|
||||||
|
@ -484,6 +482,16 @@ find_word_nat(Pila *st)
|
||||||
push_val(st, BOX_INTN((u64)w));
|
push_val(st, BOX_INTN((u64)w));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
immediate_nat(Pila *st)
|
||||||
|
{
|
||||||
|
if (st->cur_compw == nil) {
|
||||||
|
signal_error(st, "no word to mark as immediate");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
st->cur_compw->flags |= WRDF_IMMEDIATE;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
branch_nat(Pila *st)
|
branch_nat(Pila *st)
|
||||||
{
|
{
|
||||||
|
@ -694,7 +702,9 @@ main(int argc, char **argv)
|
||||||
{.name = Sl(">#"), .kind = WORD_NATIVE, .nat = to_number_nat },
|
{.name = Sl(">#"), .kind = WORD_NATIVE, .nat = to_number_nat },
|
||||||
{.name = Sl("parse-word"), .kind = WORD_NATIVE, .nat = parse_word_nat },
|
{.name = Sl("parse-word"), .kind = WORD_NATIVE, .nat = parse_word_nat },
|
||||||
{.name = Sl("find-word"), .kind = WORD_NATIVE, .nat = find_word_nat },
|
{.name = Sl("find-word"), .kind = WORD_NATIVE, .nat = find_word_nat },
|
||||||
|
{.name = Sl("immediate"), .kind = WORD_NATIVE, .nat = immediate_nat },
|
||||||
{.name = Sl("call"), .kind = WORD_NATIVE, .nat = call_nat},
|
{.name = Sl("call"), .kind = WORD_NATIVE, .nat = call_nat},
|
||||||
|
{.name = Sl("branch"), .kind = WORD_NATIVE, .nat = branch_nat },
|
||||||
{.name = Sl("eval"), .kind = WORD_NATIVE, .nat = eval_nat},
|
{.name = Sl("eval"), .kind = WORD_NATIVE, .nat = eval_nat},
|
||||||
{.name = Sl("dup"), .kind = WORD_NATIVE, .nat = dup_nat },
|
{.name = Sl("dup"), .kind = WORD_NATIVE, .nat = dup_nat },
|
||||||
{.name = Sl("drop"), .kind = WORD_NATIVE, .nat = drop_nat },
|
{.name = Sl("drop"), .kind = WORD_NATIVE, .nat = drop_nat },
|
||||||
|
@ -704,12 +714,14 @@ main(int argc, char **argv)
|
||||||
{.name = Sl("emit"), .kind = WORD_NATIVE, .nat = emit_nat },
|
{.name = Sl("emit"), .kind = WORD_NATIVE, .nat = emit_nat },
|
||||||
{.name = Sl("."), .kind = WORD_NATIVE, .nat = print_nat },
|
{.name = Sl("."), .kind = WORD_NATIVE, .nat = print_nat },
|
||||||
{.name = Sl(","), .kind = WORD_NATIVE, .nat = getch_nat },
|
{.name = Sl(","), .kind = WORD_NATIVE, .nat = getch_nat },
|
||||||
{.name = Sl("branch"), .kind = WORD_NATIVE, .nat = branch_nat },
|
|
||||||
};
|
};
|
||||||
for (isize i = 0; i < countof(natws); ++i)
|
for (isize i = 0; i < countof(natws); ++i)
|
||||||
add_word(&st, &natws[i]);
|
add_word(&st, &natws[i]);
|
||||||
|
|
||||||
eval(&st, Sl(": ' parse-word find-word ;"));
|
eval(&st, Sl(": ' parse-word find-word ;"));
|
||||||
|
/* isolate prelude state */
|
||||||
|
st.cur_compw = nil;
|
||||||
|
st.cur_compw_cap = 0;
|
||||||
|
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
eval(&st, Str_from_c(argv[1]));
|
eval(&st, Str_from_c(argv[1]));
|
||||||
|
|
Loading…
Add table
Reference in a new issue