- compile.v4: CASE OF ENDOF ENDCASE, as v3 (they nest; a word out of place is a control structure mismatch); ['] and [LITERAL]. - quit.v4: S" and its run-time word; at the prompt the text is copied to PAD. - capsule/system.v4: WORDS and VLIST; FORGET (FORTH-79), which gives the space back and will not remove a word below FENCE -- the capsule's own words -- where v3's FORGET DUP succeeds. - tests/test_host_quit.c: ten more transcripts of the v3 binary, and nesting, the fence and the listing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
46 lines
1.6 KiB
Plaintext
46 lines
1.6 KiB
Plaintext
\ system.v4 -- words about the dictionary as a whole: WORDS, FORGET, FENCE.
|
|
\
|
|
\ DECOMPOSITION.md 5.13 and 5.15. Part of the compiler capsule; rests on
|
|
\ dict.v4, quit.v4 and forth.v4.
|
|
\
|
|
\ Constants the loader supplies:
|
|
\ FENCE word address of the variable: FORGET will not remove an entry
|
|
\ that starts below the address it holds
|
|
|
|
header FENCE inline : FENCE' FENCE ;
|
|
|
|
\ ( -- ) the names in the dictionary, the newest first, a blank after
|
|
\ each, a new line whenever one has passed column 64. Hidden entries -- a
|
|
\ definition under way -- are not shown. (Q)+0 is the column.
|
|
header WORDS
|
|
: WORDS
|
|
0 (Q) a! !
|
|
LATEST
|
|
L: if DONE
|
|
dup -3 + a! @ 2 and if SHOW drop jump NXT
|
|
SHOW: drop
|
|
dup -2 + a! @ 4* COUNT 31 and \ xt baddr u
|
|
dup (Q) a! @ + 1 + !
|
|
TYPE SPACE
|
|
(Q) a! @ -64 + -if WRAP drop jump NXT
|
|
WRAP: drop CR 0 (Q) a! !
|
|
NXT: -1 + a! @ jump L
|
|
DONE: drop jump CR
|
|
header VLIST
|
|
: VLIST jump WORDS
|
|
|
|
\ FORGET xxx FORTH-79: remove xxx and every word defined after it. The
|
|
\ space they took is free again. A word that is not there is an error, and
|
|
\ so is one below FENCE, which is where the capsule's own words are (code
|
|
\ 10, "Protected word").
|
|
header FORGET
|
|
: FORGET
|
|
32 WORD (LOOKUP) if MISSING
|
|
dup -2 + a! @ \ xt name
|
|
dup FENCE a! @ inv + 1 + -if OK \ name - fence
|
|
drop drop drop NODE-ERROR b! 10 !b ;
|
|
OK: drop
|
|
4* DP a! ! \ the space from its name on
|
|
-1 + a! @ (LATEST) a! ! ; \ and the entry before it is the newest
|
|
MISSING: drop (UNKNOWN) drop ;
|