fixed NUMBER
[rrq/rrqforth.git] / compile.asm
index 83343845d727e108ece6026c29a662655dd27221..d06913876a00feab6e6a6a2d74815cc3166b1f7c 100644 (file)
@@ -137,12 +137,12 @@ p_create_COPY:
        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'
@@ -150,8 +150,6 @@ p_number_LOOP:
        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]
@@ -196,22 +194,20 @@ p_evaluate_stream_LOOP:
        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