projects
/
rrq
/
rrqforth.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
dd99a1e
)
final(?) fixing of NUMBER and EVALUATE-STREAM
author
Ralph Ronnquist
<ralph.ronnquist@gmail.com>
Thu, 20 May 2021 19:23:30 +0000
(
05:23
+1000)
committer
Ralph Ronnquist
<ralph.ronnquist@gmail.com>
Thu, 20 May 2021 19:23:30 +0000
(
05:23
+1000)
compile.asm
patch
|
blob
|
history
diff --git
a/compile.asm
b/compile.asm
index d06913876a00feab6e6a6a2d74815cc3166b1f7c..3d5433ef5ff133ae51dfd033492fbe7336ce4f17 100644
(file)
--- a/
compile.asm
+++ b/
compile.asm
@@
-141,7
+141,7
@@
p_create_COPY:
pop rsi ; ( -- )
xor rdi,rdi
p_number_LOOP:
pop rsi ; ( -- )
xor rdi,rdi
p_number_LOOP:
- dec r
b
x
+ dec r
c
x
jl p_number_DONE
lodsb
mov bl,al ; into bl
jl p_number_DONE
lodsb
mov bl,al ; into bl
@@
-184,30
+184,35
@@
p_number_DONE:
dq 0,0 ; ( n chars* )
WORD p_evaluate_stream,'EVALUATE-STREAM'
dq 0,0 ; ( n chars* )
WORD p_evaluate_stream,'EVALUATE-STREAM'
- ;; ( stream -- *?* flag )
+ ;; ( stream
*
-- *?* flag )
;; Execute the words from the given stream
;; returns 1 if stream ends and 0 if an unknown word is found
;; Execute the words from the given stream
;; returns 1 if stream ends and 0 if an unknown word is found
+ dq p_ltR ; Keep the stream on the return stack.
p_evaluate_stream_LOOP:
p_evaluate_stream_LOOP:
+ dq p_Rget ; ( -- stream*
dq p_read_word ; ( -- chars* n )
dq p_dup
dq p_read_word ; ( -- chars* n )
dq p_dup
- BRANCH 0,p_evaluate_stream_END
+ BRANCH 0,p_evaluate_stream_END
; branch if 0 on TOP
dq p_2dup ; ( -- chars* n chars* n )
dq p_this_word ; ( -- chars* n chars* n p )
dq p_2put ; ( -- chars* n )
dq p_find ; ( -- [ chars* n 0 ]/[ tfa ] )
dq p_dup ; ( -- [ chars* n 0 0 ]/[ tfa tfa ] )
dq p_2dup ; ( -- chars* n chars* n )
dq p_this_word ; ( -- chars* n chars* n p )
dq p_2put ; ( -- chars* n )
dq p_find ; ( -- [ chars* n 0 ]/[ tfa ] )
dq p_dup ; ( -- [ chars* n 0 0 ]/[ tfa tfa ] )
- BRANCH 0,p_evaluate_stream_NOTWORD ;
( -- chars* n tfa/0 )
- dq p_execute ;
( -- chars* n tfa/0 )
+ BRANCH 0,p_evaluate_stream_NOTWORD ;
branch if 0 on TOP
+ dq p_execute ;
consumes tfa
BRANCH ,p_evaluate_stream_LOOP
p_evaluate_stream_NOTWORD:
dq p_drop ; ( -- chars* n )
dq p_number ; ( -- [ 0 ]/[ v 1 ] )
dq p_dup
BRANCH ,p_evaluate_stream_LOOP
p_evaluate_stream_NOTWORD:
dq p_drop ; ( -- chars* n )
dq p_number ; ( -- [ 0 ]/[ v 1 ] )
dq p_dup
- BRANCH 0,p_evaluate_stream_BAD
+ BRANCH 0,p_evaluate_stream_BAD
; branch if 0 on TOP
dq p_drop
BRANCH ,p_evaluate_stream_LOOP
p_evaluate_stream_END:
dq p_drop
BRANCH ,p_evaluate_stream_LOOP
p_evaluate_stream_END:
+ dq p_2drop
dq p_literal
dq 1
p_evaluate_stream_BAD:
dq p_literal
dq 1
p_evaluate_stream_BAD:
+ dq p_Rgt ; Discard the stream from the return stack
+ dq p_drop
dq p_exit
dq p_exit