diff --git a/blk/263 b/blk/263 index 6b47543..eb8ed08 100644 --- a/blk/263 +++ b/blk/263 @@ -7,9 +7,9 @@ CREATE XCURRENT 0 , : XFIND XCURRENT @ SWAP _find DROP _xapply ; : X' XCON ' XCOFF ; : X['] XCON ' _xapply LITN XCOFF ; : XCOMPILE XCON ' _xapply LITN - LIT< , FIND DROP _xapply , XCOFF ; + LIT" ," FIND DROP _xapply , XCOFF ; : X[COMPILE] XCON ' _xapply , XCOFF ; -: XDO LIT< 2>R XFIND , H@ ; -: XLOOP LIT< (loop) XFIND , H@ - C, ; -: XIF LIT< (?br) XFIND , H@ 1 ALLOT ; -: XELSE LIT< (br) XFIND , 1 ALLOT [COMPILE] THEN H@ 1- ; +: XDO LIT" 2>R" XFIND , H@ ; +: XLOOP LIT" (loop)" XFIND , H@ - C, ; +: XIF LIT" (?br)" XFIND , H@ 1 ALLOT ; +: XELSE LIT" (br)" XFIND , 1 ALLOT [COMPILE] THEN H@ 1- ; diff --git a/blk/264 b/blk/264 index 176d03e..ff054f5 100644 --- a/blk/264 +++ b/blk/264 @@ -1,7 +1,6 @@ -: XAGAIN LIT< (br) XFIND , H@ - C, ; -: XUNTIL LIT< (?br) XFIND , H@ - C, ; -: XLIT< LIT< (s) XFIND , WORD DUP C@ 1+ MOVE, ; +: XAGAIN LIT" (br)" XFIND , H@ - C, ; +: XUNTIL LIT" (?br)" XFIND , H@ - C, ; : XLIT" - LIT< (s) XFIND , H@ 0 C, ," + LIT" (s)" XFIND , H@ 0 C, ," DUP H@ -^ 1- SWAP C! ; diff --git a/blk/270 b/blk/270 index a169868..615258c 100644 --- a/blk/270 +++ b/blk/270 @@ -5,7 +5,7 @@ : DO XDO ; IMMEDIATE : LOOP XLOOP ; IMMEDIATE : IF XIF ; IMMEDIATE : ELSE XELSE ; IMMEDIATE : AGAIN XAGAIN ; IMMEDIATE : UNTIL XUNTIL ; IMMEDIATE -: LIT< XLIT< ; IMMEDIATE : LIT" XLIT" ; IMMEDIATE +: LIT" XLIT" ; IMMEDIATE : IMMEDIATE XIMM ; : (entry) (xentry) ; : CREATE XCREATE ; diff --git a/blk/353 b/blk/353 index 2ff63bf..dc2d8ed 100644 --- a/blk/353 +++ b/blk/353 @@ -9,6 +9,6 @@ : (infl) 0 IN( DUP IN> ! ! ; ( flush input buffer ) : QUIT (resRS) 0 0x08 RAM+ ! ( C<* override ) (infl) - LIT< (main) FIND DROP EXECUTE + LIT" (main)" FIND DROP EXECUTE ; 1 25 LOADR+ ( xcomp core low ) diff --git a/blk/354 b/blk/354 index 9471640..302b2ab 100644 --- a/blk/354 +++ b/blk/354 @@ -1,5 +1,5 @@ : ABORT (resSP) QUIT ; -: ERR LIT< (print) FIND IF EXECUTE THEN ABORT ; +: ERR LIT" (print)" FIND IF EXECUTE THEN ABORT ; : = CMP NOT ; : < CMP -1 = ; : > CMP 1 = ; : 0< 32767 > ; : >= < NOT ; : <= > NOT ; : 0>= 0< NOT ; : >< ( n l h -- f ) 2 PICK > ( n l f ) ROT ROT > AND ; diff --git a/blk/363 b/blk/363 index 1017ee8..a5da7b5 100644 --- a/blk/363 +++ b/blk/363 @@ -1,8 +1,10 @@ +: (wnf) LIT" (print)" FIND DROP EXECUTE + LIT" word not found" ERR ; : (parse) ( a -- n ) _pc IF EXIT THEN _ph IF EXIT THEN _pb IF EXIT THEN _pd IF EXIT THEN ( nothing works ) - LIT< (wnf) FIND IF EXECUTE ELSE ABORT THEN + (wnf) ; diff --git a/blk/369 b/blk/369 index 5f1848b..579a5cb 100644 --- a/blk/369 +++ b/blk/369 @@ -1,5 +1,5 @@ : '? WORD FIND ; -: ' '? NOT IF LIT< (wnf) FIND DROP EXECUTE THEN ; +: ' '? NOT IF (wnf) THEN ; : ROLL ?DUP NOT IF EXIT THEN 1+ DUP PICK ( n val ) diff --git a/blk/372 b/blk/372 index 8b8ae1d..20860d1 100644 --- a/blk/372 +++ b/blk/372 @@ -11,4 +11,4 @@ WORD( HERE ! ( w ) PREV CURRENT ! ; -: EMPTY LIT< _sys FIND IF DUP HERE ! CURRENT ! THEN ; +: EMPTY LIT" _sys" FIND IF DUP HERE ! CURRENT ! THEN ; diff --git a/blk/374 b/blk/374 index 6535bea..5919535 100644 --- a/blk/374 +++ b/blk/374 @@ -1,4 +1,4 @@ : [IF] IF EXIT THEN - LIT< [THEN] BEGIN DUP WORD S= UNTIL DROP ; + LIT" [THEN]" BEGIN DUP WORD S= UNTIL DROP ; : [THEN] ; diff --git a/blk/381 b/blk/381 index 8df37ff..12d7936 100644 --- a/blk/381 +++ b/blk/381 @@ -9,4 +9,3 @@ XCURRENT @ _xapply ORG @ 0x06 ( stable ABI uflw ) + ! : (oflw) LIT" stack overflow" ERR ; XCURRENT @ _xapply ORG @ 0x13 ( stable ABI oflw ) + ! -: (wnf) (print) SPC LIT" word not found" ERR ; diff --git a/blk/382 b/blk/382 index 83d7076..8bc9584 100644 --- a/blk/382 +++ b/blk/382 @@ -2,9 +2,3 @@ BEGIN C< DUP 34 ( ASCII " ) = IF DROP EXIT THEN C, AGAIN ; -: LIT" - COMPILE (s) H@ 0 C, ," - DUP H@ -^ 1- ( a len ) SWAP C! -; IMMEDIATE -: ." [COMPILE] LIT" COMPILE (print) ; IMMEDIATE -: ABORT" [COMPILE] ." COMPILE ABORT ; IMMEDIATE diff --git a/blk/392 b/blk/392 index 9b1af66..0364a2f 100644 --- a/blk/392 +++ b/blk/392 @@ -2,7 +2,7 @@ BEGIN WORD DUP @ 0x0401 = ( EOT ) IF DROP EXIT THEN FIND NOT IF (parse) ELSE EXECUTE THEN - C IF LIT< br-ovfl (print) ABORT THEN ; +: _bchk DUP 0x7f + 0xff > IF LIT" br ovfl" (print) ABORT THEN ; : DO COMPILE 2>R H@ ; IMMEDIATE : LOOP COMPILE (loop) H@ - _bchk C, ; IMMEDIATE ( LEAVE is implemented in low xcomp ) : LITN 0x23 ( n ) , , ; ( gets its name at the very end. can't comment afterwards ) -: _ BEGIN LIT< ) WORD S= UNTIL ; IMMEDIATE +: _ BEGIN LIT" )" WORD S= UNTIL ; IMMEDIATE : _ ( : will get its name almost at the very end ) (entry) 1 ( compiled ) C, BEGIN diff --git a/blk/399 b/blk/399 index 46ab344..cf8e01b 100644 --- a/blk/399 +++ b/blk/399 @@ -1,4 +1,10 @@ -: LIT< COMPILE (s) WORD DUP C@ 1+ MOVE, ; IMMEDIATE +: LIT" + COMPILE (s) H@ 0 C, ," + DUP H@ -^ 1- ( a len ) SWAP C! +; IMMEDIATE +( We don't use ." and ABORT in core, they're not xcomp-ed ) +: ." [COMPILE] LIT" COMPILE (print) ; IMMEDIATE +: ABORT" [COMPILE] ." COMPILE ABORT ; IMMEDIATE : BEGIN H@ ; IMMEDIATE : AGAIN COMPILE (br) H@ - _bchk C, ; IMMEDIATE : UNTIL COMPILE (?br) H@ - _bchk C, ; IMMEDIATE diff --git a/cvm/forth.bin b/cvm/forth.bin index 15879e4..d7ccc3e 100644 Binary files a/cvm/forth.bin and b/cvm/forth.bin differ diff --git a/doc/dict.txt b/doc/dict.txt index 47d0fce..c57b725 100644 --- a/doc/dict.txt +++ b/doc/dict.txt @@ -221,9 +221,8 @@ NOT f -- f Push the logical opposite of f # Strings -LIT< x -- Read following word and write to HERE as a - string literal. -LIT" x" -- Same as LIT<, but can contain whitespaces. +LIT" x" -- Read following characters and write to HERE + as a string literal. S= a1 a2 -- f Returns whether string a1 == a2. # I/O