diff --git a/pila.c b/pila.c index 0ad140c..823f765 100644 --- a/pila.c +++ b/pila.c @@ -387,14 +387,30 @@ compile_end_nat(RpnState *st) add_word(st, w); } -void -tick_nat(RpnState *st) +Str +next_word(RpnState *st) +{ + skip_whitespace(&st->rsp, st->rep); + return read_word_name(&st->rsp, st->rep); +} + +Word * +next_word_read_get(RpnState *st) { Str wn; skip_whitespace(&st->rsp, st->rep); wn = read_word_name(&st->rsp, st->rep); wn = Str_new(wn.s, wn.len); Word *w = search_word(st, wn); + if (w == nil) + return nil; + return w; +} + +void +tick_nat(RpnState *st) +{ + Word *w = next_word_read_get(st); if (w == nil) { push_val(st, BOX_INTN(0)); return; @@ -442,9 +458,7 @@ to_number_nat(RpnState *st) void parse_word_nat(RpnState *st) { - skip_whitespace(&st->rsp, st->rep); - Str wn = read_word_name(&st->rsp, st->rep); - push_val(st, BOX_STR(wn)); + push_val(st, BOX_STR(next_word(st))); } void