From: Ralph Ronnquist Date: Fri, 11 Jun 2021 09:52:43 +0000 (+1000) Subject: fixup S" and LIT-STRING for forced NUL termination X-Git-Url: https://git.rrq.au/?a=commitdiff_plain;h=0391d16ece3a9f4d7d023ae1f0be610b8a915fc3;hp=c6fd5bdf3bae68aac49a239548c82a8d08384da8;p=rrq%2Frrqforth.git fixup S" and LIT-STRING for forced NUL termination --- diff --git a/compile.asm b/compile.asm index c815291..ff5d853 100644 --- a/compile.asm +++ b/compile.asm @@ -89,12 +89,22 @@ p_quote_end: add rsi,8 next - WORD p_literal_string,'S"',fasm,IMMEDIATE ;; " (fool emacs) + WORD p_literal_string,'LIT-STRING',fasm ;; ( -- 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 + ;; Save NUL string length and pointer on heap to make + ;; available at interpretation. Not for interactive use!! + mov rax,qword [rsi] + add rsi,8 + push rsi + add rsi,rax + dec rax + push rax + next + + + WORD p_literal_string_compile,'S"',fasm,IMMEDIATE ;; " (fool emacs) + ;; ( "..." -- ) + ;; Lay out a LIT-STRING and a NUL string with length pushr rsi mov rdi,qword [p_here_DFA] mov qword [rdi],p_literal_string @@ -103,9 +113,11 @@ p_quote_end: DOFORTH p_double_quote pop rcx pop rsi + inc rcx ; include the terminating NUL in count mov rdi,qword [p_here_DFA] mov qword [rdi],rcx add rdi,8 + cld p_literal_string_copy: dec rcx jl p_literal_string_copied @@ -116,14 +128,6 @@ p_literal_string_copied: popr rsi next -p_literal_string_executing: - mov rax,qword [rsi] - add rsi,8 - push rsi - push rax - add rsi,rax - next - WORD p_state,'STATE',dovariable ;; Interpretation state (0=interpreting, 1=compiling) dq 0