X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=compile.asm;h=8e87bf87012e2403217c7aa8e29963c79a41f70f;hb=76f3fb73eedebb34c932d40f61b7578d9f5177c9;hp=fa850d404f16c15b96aa2b6b7df3c1f450c51143;hpb=b2fd831eae011ac8353e283820e47c8840a1099c;p=rrq%2Frrqforth.git diff --git a/compile.asm b/compile.asm index fa850d4..8e87bf8 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 @@ -257,6 +281,7 @@ 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: