WORD p_number,'NUMBER',fasm
;; ( chars* n -- [ 0 ]/[ v 1 ] )
pushr rsi
- pop rcx
- pop rsi
+ pop rcx ; ( -- chars* )
+ pop rsi ; ( -- )
xor rdi,rdi
p_number_LOOP:
dec rbx
- je p_number_DONE
+ jl p_number_DONE
lodsb
mov bl,al ; into bl
cmp bl,'0'
cmp bl,'9'
jg p_number_ALPHA
sub bl,'0'
- cmp bl,bl
- jge p_number_BAD
p_number_CONSUME:
mov rax,rdi
mul qword [p_base_DFA]
dq p_2dup ; ( -- chars* n chars* n )
dq p_this_word ; ( -- chars* n chars* n p )
dq p_2put ; ( -- chars* n )
- dq p_2dup ; ( -- chars* n chars* n )
- dq p_find ; ( -- chars* n tfa/0 )
- dq p_dup ; ( -- chars* n tfa/0 tfa/0 )
+ 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 ,p_evaluate_stream_LOOP
p_evaluate_stream_NOTWORD:
- dq p_this_word ; ( -- chars* n tfa/0 )
- dq p_2get
- dq p_number
- dq p_not
- BRANCH 0,p_evaluate_stream_LOOP
- dq p_literal
- dq 0
- dq p_exit
+ dq p_drop ; ( -- chars* n )
+ dq p_number ; ( -- [ 0 ]/[ v 1 ] )
+ dq p_dup
+ BRANCH 0,p_evaluate_stream_BAD
+ dq p_drop
+ BRANCH ,p_evaluate_stream_LOOP
p_evaluate_stream_END:
dq p_literal
dq 1
+p_evaluate_stream_BAD:
dq p_exit