add branch
word
This commit is contained in:
parent
63799ae8e8
commit
96709aa013
1 changed files with 19 additions and 0 deletions
19
pila.c
19
pila.c
|
@ -477,6 +477,24 @@ find_word_nat(RpnState *st)
|
||||||
push_val(st, BOX_INTN((u64)w));
|
push_val(st, BOX_INTN((u64)w));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
branch_nat(RpnState *st)
|
||||||
|
{
|
||||||
|
Value predw = pop_val(st);
|
||||||
|
if (predw.kind != VAL_INT) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Str wn = next_word(st);
|
||||||
|
if (predw.intn == PILA_TRUE) {
|
||||||
|
Word *w = search_word(st, wn);
|
||||||
|
if (w == nil) {
|
||||||
|
signal_errorf(st, "no such word '%.*s'", (int)wn.len, wn.s);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
eval_word(st, w);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
add_word(RpnState *st, Word *w)
|
add_word(RpnState *st, Word *w)
|
||||||
{
|
{
|
||||||
|
@ -682,6 +700,7 @@ 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]);
|
||||||
|
|
Loading…
Add table
Reference in a new issue