From 9f45afe3d072ef81709f82af2f2c1d406f34036f Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Wed, 10 Jan 2024 13:52:21 -0800 Subject: [PATCH] Maybe I have the compile words right --- images/apple/PLFORTH.PO | Bin 143360 -> 143360 bytes src/toolsrc/plforth.pla | 49 +++++++++++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/images/apple/PLFORTH.PO b/images/apple/PLFORTH.PO index 124bbcd636dc7f49cb50acd844e765d7fb8e7df6..6eb49ac85e4876cf7d70b0bdd72df67c54a75afc 100755 GIT binary patch delta 8759 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 diff --git a/src/toolsrc/plforth.pla b/src/toolsrc/plforth.pla index f4c575e..c413195 100644 --- a/src/toolsrc/plforth.pla +++ b/src/toolsrc/plforth.pla @@ -104,8 +104,8 @@ predef _branch_#0, _0branch_(a)#0, _if_#0, _else_#0, _then_#0 predef _begin_#0, _again_#0, _until_#0, _while_#0, _repeat_#0 predef _case_#0, _of_#0, _endof_#0, _endcase_#0 predef _dodo_(a,b)#0, _do_#0, _doloop_#0, _doplusloop_(a)#0, _plusloop_#0, _loop_#0, _leave_#0, _j_#1 -predef _create_#0, _itcdoes_(a)#0, _does_#0, _compoff_#0, _compon_#0 -predef _compile_#0, _dictaddw_(a)#0, _dictaddb_(a)#0, _colon_#0, _semi_#0 +predef _create_#0, _itcdoes_(a)#0, _does_#0, _compoff_#0, _compon_#0, _state_#1 +predef _compile_#0, _forcecomp_#0, _dictaddw_(a)#0, _dictaddb_(a)#0, _colon_#0, _semi_#0 predef _componly_#0, _interponly_#0, _immediate_#0, _exit_#0, _pad_#1, _trailing_(a,b)#2 predef _tors_(a)#0, _fromrs_#1, _toprs_#1, _lookup_#1 predef _cmove_(a,b,c)#0, _move_(a,b,c)#0, _fill_(a,b,c)#0, _plasma_(a)#0 @@ -448,10 +448,14 @@ word = @d_does, 0, @_dictaddw_ char d_commab = "C," byte = showcr_flag word = @d_comma, 0, @_dictaddb_ +// STATE +char d_state = "STATE" +byte = 0 +word = @d_commab, 0, @_state_ // COLON char d_colon = ":" byte = interponly_flag -word = @d_commab, 0, @_colon_ +word = @d_state, 0, @_colon_ // COMP OFF char d_compoff = "[" byte = imm_flag | componly_flag @@ -460,14 +464,22 @@ word = @d_colon, 0, @_compoff_ char d_compon = "]" byte = interponly_flag word = @d_compoff, 0, @_compon_ +// COMPILE WORD ON STACK +char d_compword = "(COMPILE)" +byte = componly_flag +word = @d_compon, 0, @_compword_ // COMPILE NEXT WORD -char d_compile = "[COMPILE]" +char d_compile = "COMPILE" byte = imm_flag | componly_flag -word = @d_compon, 0, @_compile_ +word = @d_compword, 0, @_compile_ +// FORCE COMPILE NEXT WORD +char d_forcecomp = "[COMPILE]" +byte = imm_flag | componly_flag +word = @d_compile, 0, @_forcecomp_ // COMPILE ONLY char d_componly = "COMPONLY" byte = imm_flag -word = @d_compile, 0, @_componly_ +word = @d_forcecomp, 0, @_componly_ // INTERPRET ONLY char d_interponly = "INTERPONLY" byte = imm_flag @@ -1218,6 +1230,9 @@ def _create_#0 // 9 bytes after PFA, data follows... // end +def _state_#1 + return state & comp_flag +end def _dodoes_#0 (@push)(W + 11)#0 // Pointer to PFA storage execwords(*(W + 2)) // Exec PFA ptr @@ -1296,7 +1311,24 @@ def _compile_#0 dentry = find(nextword(' ')) if dentry - _compword_(dentry) + if ^_ffa_(dentry) & imm_flag + _compword_(dentry) + else + _compliteral_(dentry) + _compword_(@d_compword) + fin + else + puts("No match\n") + _quit_ + fin +end +def _forcecomp_#0 + word dentry + + dentry = find(nextword(' ')) + if dentry + _compliteral_(dentry) + _compword_(@d_compword) else puts("No match\n") _quit_ @@ -1748,14 +1780,15 @@ def _show_#0 pfa = pfa + 2 w = *pfa if !w - puts(" EXIT\n") pfa = pfa + 2 w = *pfa + if !*w; puts(" EXIT\n"); fin fin if conio:keypressed() conio:getkey(); conio:getkey() fin loop + puts(" EXIT\n") fin end def _showstack_#0