projects
/
rrq
/
rrqforth.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
c6fd5bd
)
fixup S" and LIT-STRING for forced NUL termination
author
Ralph Ronnquist
<ralph.ronnquist@gmail.com>
Fri, 11 Jun 2021 09:52:43 +0000
(19:52 +1000)
committer
Ralph Ronnquist
<ralph.ronnquist@gmail.com>
Fri, 11 Jun 2021 09:52:43 +0000
(19:52 +1000)
compile.asm
patch
|
blob
|
history
diff --git
a/compile.asm
b/compile.asm
index c815291554239862cc17b422f4dfb1b92b947e9f..ff5d853421005525e02035f3374abadc0a890390 100644
(file)
--- a/
compile.asm
+++ b/
compile.asm
@@
-89,12
+89,22
@@
p_quote_end:
add rsi,8
next
add rsi,8
next
- WORD p_literal_string,'
S"',fasm,IMMEDIATE ;; " (fool emacs)
+ WORD p_literal_string,'
LIT-STRING',fasm
;; ( -- char* n )
;; ( -- 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
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
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
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
p_literal_string_copy:
dec rcx
jl p_literal_string_copied
@@
-116,14
+128,6
@@
p_literal_string_copied:
popr rsi
next
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
WORD p_state,'STATE',dovariable
;; Interpretation state (0=interpreting, 1=compiling)
dq 0