changed STR>TEMP to assembler
[rrq/rrqforth.git] / compile.asm
index be5a9088e76a186fe9e6e9c22e09e84ae1f301c1..c815291554239862cc17b422f4dfb1b92b947e9f 100644 (file)
@@ -18,7 +18,7 @@
        mov qword [rbx+24],rcx  ; PFA (length)
        pop rsi                 ; chars* (source)
        lea rdi,[rbx+32]        ; (dest)
-       ;; clear DF
+       cld
 p_create_COPY:
        movsb
        dec rcx
@@ -41,7 +41,7 @@ p_create_COPY:
        WORD p_allot,'ALLOT'
        ;; ( n -- )
        ;; Allocate n bytes on the heap
-       dq p_here, p_put_plus, p_exit
+       dq p_here, p_put_plus, p_return
        
        WORD p_quote,"'"
        ;; ( "word" -- cfa )
@@ -50,22 +50,22 @@ p_create_COPY:
        BRANCH 0,p_quote_end
        dq p_tfa2cfa
 p_quote_end:
-       dq p_exit
+       dq p_return
 
        WORD p_bracketed_quote,"[']",doforth,IMMEDIATE
        ;; Compilation ( "word" -- cfa )
        ;; Compile down " LIT value "
-       dq p_literal, p_literal, p_comma,p_quote, p_comma, p_exit
+       dq p_literal, p_literal, p_comma,p_quote, p_comma, p_return
 
        WORD p_comma,','
        ;; ( v -- )
        ;; Put cell value onto the heap and advance "HERE"
-       dq p_here, p_put, p_literal, 8, p_here, p_put_plus, p_exit
-       
+       dq p_here, p_literal, 8, p_get_n_increment, p_put, p_return
+
        WORD p_Ccomma,'C,'
        ;; ( c -- )
        ;; Put byte value onto the heap and advance "HERE"
-       dq p_here, p_Cput, p_literal, 1, p_here, p_put_plus, p_exit
+       dq p_here, p_Cput, p_literal, 1, p_here, p_put_plus, p_return
 
        WORD p_does,"DOES>",fasm,IMMEDIATE
        ;; ( -- )
@@ -193,6 +193,8 @@ p_number_ALPHA:
        cmp al,'Z'
        jg p_number_alpha
        sub al,'A'-10
+       cmp rax,qword [p_base_DFA]
+       jge p_number_BAD
        jmp p_number_CONSUME
 p_number_alpha:
        cmp al,'a'
@@ -200,6 +202,8 @@ p_number_alpha:
        cmp al,'z'
        jg p_number_BAD
        sub al,'a'-10
+       cmp rax,qword [p_base_DFA]
+       jge p_number_BAD
        jmp p_number_CONSUME
 p_number_BAD:
        push qword 0
@@ -282,7 +286,8 @@ p_evaluate_stream_END:
        dq p_literal, 1
 p_evaluate_stream_BAD:
        dq p_Rgt, p_input, p_put ; restore previous stream
-       dq p_exit
+       dq p_literal,0, p_state, p_put ; set interactive mode
+       dq p_return
 
        WORD p_colon,':'
        ;; ( -- )
@@ -295,12 +300,12 @@ p_evaluate_stream_BAD:
        dq p_tfa2cfa
        dq p_put
        dq p_right_bracket
-       dq p_exit
+       dq p_return
 
        WORD p_semicolon,';',,IMMEDIATE
        ;; ( -- )
-       ;; Lay out p_exit, and set interpreting mode
-       dq p_literal, p_exit, p_comma, p_left_bracket, p_exit
+       ;; Lay out p_return, and set interpreting mode
+       dq p_literal, p_return, p_comma, p_left_bracket, p_return
 
        WORD p_immediate,'IMMEDIATE',fasm,IMMEDIATE
        ;; ( -- )
@@ -342,4 +347,4 @@ p_load_file_badfile:
        dq p_tell, p_dot, p_nl, p_emit
        dq p_literal,1
 p_load_file_exit:
-       dq p_exit
+       dq p_return