X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;ds=sidebyside;f=compile.asm;h=d5fee48e49add74dee2a2fa7941b039f2f769ceb;hb=0520f31ccfaa9bf44bb41db3c2a1ca9d309ec21e;hp=fa850d404f16c15b96aa2b6b7df3c1f450c51143;hpb=b2fd831eae011ac8353e283820e47c8840a1099c;p=rrq%2Frrqforth.git diff --git a/compile.asm b/compile.asm index fa850d4..d5fee48 100644 --- a/compile.asm +++ b/compile.asm @@ -115,10 +115,34 @@ p_quote_end: add rsi,8 next - WORD p_literal_string,'S"',fasm ;; " (fool emacs) + WORD p_literal_string,'S"',fasm,IMMEDIATE ;; " (fool emacs) ;; ( -- char* n ) ;; Save string on heap to make available at interpretation ;; not for interactive use!! + cmp qword [p_state_DFA],0 + je p_literal_string_executing + pushr rsi + mov rdi,qword [p_here_DFA] + mov qword [rdi],p_literal_string + add rdi,8 + mov qword [p_here_DFA],rdi + DOFORTH p_double_quote + pop rcx + pop rsi + mov rdi,qword [p_here_DFA] + mov qword [rdi],rcx + add rdi,8 +p_literal_string_copy: + dec rcx + jl p_literal_string_copied + movsb + jmp p_literal_string_copy +p_literal_string_copied: + mov qword [p_here_DFA],rdi + popr rsi + next + +p_literal_string_executing: mov rax,qword [rsi] add rsi,8 push rsi @@ -226,6 +250,9 @@ p_numper_POSITIVE: ;; returns 1 if stream ends and 0 if an unknown word is found dq p_gtR ; Keep the stream on the return stack. p_evaluate_stream_PROMPT: + dq p_verboseQ + dq p_get + BRANCH 0,p_evaluate_stream_LOOP dq p_depth dq p_dot dq p_literal_string @@ -257,12 +284,15 @@ p_evaluate_stream_INTERPRET: dq p_execute BRANCH ,p_evaluate_stream_AFTER p_evaluate_stream_COMPILE: + dq p_tfa2cfa dq p_comma BRANCH ,p_evaluate_stream_AFTER p_evaluate_stream_NOTWORD: dq p_drop dq p_number + dq p_dup BRANCH 0,p_evaluate_stream_BAD ; branch if 0 + dq p_drop dq p_state dq p_get BRANCH 0,p_evaluate_stream_AFTER ; branch if 0