;; Resolves all open branches for the preceding BEGIN and
;; optional several IFBREAK
mov rax,rsp
+p_end_scan:
cmp qword [rax],0
je p_end_resolve
add rax,8
- jmp p_end_DFA
+ jmp p_end_scan
p_end_resolve:
mov rax,qword [rax+8] ; address of BEGIN
p_end_next:
pop rbx
cmp rbx,0
je p_end_ending
- mov rcx,rax
+ mov rcx,qword [p_here_DFA]
sub rcx,rbx
mov qword [rbx-8],rcx
jmp p_end_next
pop rbx
next
-
+ WORD p_again,'AGAIN',fasm,IMMEDIATE
+ ;; Compiling: ( a 0 * -- )
+ ;; Lay out unconditional loop-back, then perform END action
+ mov rax,qword [p_here_DFA]
+ mov qword [rax],p_branch_CFA
+ mov qword [rax+8],0
+ add rax,16
+ mov qword [p_here_DFA],rax
+ mov rbx,rsp
+p_again_loop:
+ cmp qword [rbx],0
+ je p_again_resolve
+ add rbx,8
+ jmp p_again_loop
+p_again_resolve:
+ mov rbx,qword [rbx+8]
+ sub rbx,rax
+ mov qword [rax-8],rbx
+ jmp p_end_DFA