Remove ";" word

The ":" now takes care of scanning for ";". Conceptually, having
";" as an immediate word is slightly simpler than the approach in
this commit, but when bootstrapping is involved, this simpler
approach gets murkier.

Moreover, it got even murkier-er when trying to de-stabilize EXIT,
so here we are.
This commit is contained in:
Virgil Dupras 2020-09-19 20:19:23 -04:00
parent 53239c8f84
commit 3aa681ceca
8 changed files with 12 additions and 19 deletions

View File

@ -1,6 +1,7 @@
: X:
(xentry) 1 ( compiled ) C,
BEGIN WORD
BEGIN
WORD DUP LIT" ;" S= IF DROP 0x0b , EXIT THEN
XCURRENT @ SWAP ( xcur w ) _find ( a f )
IF ( a )
DUP IMMED? IF ABORT THEN

View File

@ -1 +1 @@
1 20 LOADR+ ( xcomp core high )
1 19 LOADR+ ( xcomp core high )

View File

@ -9,7 +9,7 @@
: _ ( : will get its name almost at the very end )
(entry) 1 ( compiled ) C,
BEGIN
WORD FIND
IF ( is word ) DUP IMMED? IF EXECUTE ELSE , THEN
WORD DUP LIT" ;" S= IF DROP 0x0b , EXIT THEN
FIND IF ( is word ) DUP IMMED? IF EXECUTE ELSE , THEN
ELSE ( maybe number ) (parse) LITN THEN
AGAIN ;

View File

@ -10,3 +10,7 @@
[COMPILE] THEN
H@ 1- ( push a. 1- for allot offset )
; IMMEDIATE
: LIT"
COMPILE (s) H@ 0 C, ,"
DUP H@ -^ 1- ( a len ) SWAP C!
; IMMEDIATE

View File

@ -1,7 +1,3 @@
: 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
@ -13,3 +9,5 @@
: COMPILE ' LITN ['] , , ; IMMEDIATE
: [COMPILE] ' , ; IMMEDIATE
: ['] ' LITN ; IMMEDIATE
':' X' _ 4 - C! ( give : its name )
'(' X' _ 4 - C!

View File

@ -1,9 +0,0 @@
( ';' can't have its name right away because, when created, it
is not an IMMEDIATE yet and will not be treated properly by
xcomp. )
: _
0x0b ( EXIT ) , R> DROP ( exit : )
; IMMEDIATE
';' X' _ 4 - C! ( give ; its name )
':' X' _ 4 - C! ( give : its name )
'(' X' _ 4 - C!

Binary file not shown.

View File

@ -63,8 +63,7 @@ WORD( a -- a Get wordref's beginning addr.
# Defining words
: x ... -- Define a new word
; R:I -- Exit a colon definition
: x ... ; -- Define a new word
CREATE x -- Create cell named x. Doesn't allocate a PF.
[COMPILE] x -- *I* Compile word x and write it to HERE.
IMMEDIATE words are *not* executed.