X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=compile.asm;h=c815291554239862cc17b422f4dfb1b92b947e9f;hb=e5fe03259bcad1abf45257971eb92de95f269b1d;hp=72a8763375abfa406e77a9816f1df9cd66d723ed;hpb=f92a7c96cb562f8c9d9e5e6c86cf9770a09edda1;p=rrq%2Frrqforth.git diff --git a/compile.asm b/compile.asm index 72a8763..c815291 100644 --- a/compile.asm +++ b/compile.asm @@ -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_literal, 8, p_get_n_increment, p_put, 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