pop rsi ; ( -- )
xor rdi,rdi
p_number_LOOP:
- dec rbx
+ dec rcx
jl p_number_DONE
lodsb
mov bl,al ; into bl
dq 0,0 ; ( n chars* )
WORD p_evaluate_stream,'EVALUATE-STREAM'
- ;; ( stream -- *?* flag )
+ ;; ( stream* -- *?* flag )
;; Execute the words from the given stream
;; returns 1 if stream ends and 0 if an unknown word is found
+ dq p_ltR ; Keep the stream on the return stack.
p_evaluate_stream_LOOP:
+ dq p_Rget ; ( -- stream*
dq p_read_word ; ( -- chars* n )
dq p_dup
- BRANCH 0,p_evaluate_stream_END
+ BRANCH 0,p_evaluate_stream_END ; branch if 0 on TOP
dq p_2dup ; ( -- chars* n chars* n )
dq p_this_word ; ( -- chars* n chars* n p )
dq p_2put ; ( -- chars* n )
dq p_find ; ( -- [ chars* n 0 ]/[ tfa ] )
dq p_dup ; ( -- [ chars* n 0 0 ]/[ tfa tfa ] )
- BRANCH 0,p_evaluate_stream_NOTWORD ; ( -- chars* n tfa/0 )
- dq p_execute ; ( -- chars* n tfa/0 )
+ BRANCH 0,p_evaluate_stream_NOTWORD ; branch if 0 on TOP
+ dq p_execute ; consumes tfa
BRANCH ,p_evaluate_stream_LOOP
p_evaluate_stream_NOTWORD:
dq p_drop ; ( -- chars* n )
dq p_number ; ( -- [ 0 ]/[ v 1 ] )
dq p_dup
- BRANCH 0,p_evaluate_stream_BAD
+ BRANCH 0,p_evaluate_stream_BAD ; branch if 0 on TOP
dq p_drop
BRANCH ,p_evaluate_stream_LOOP
p_evaluate_stream_END:
+ dq p_2drop
dq p_literal
dq 1
p_evaluate_stream_BAD:
+ dq p_Rgt ; Discard the stream from the return stack
+ dq p_drop
dq p_exit