feat(v4.0.0): the dictionary: its space, its entries, and FIND

The second layer of the compiler capsule, v4/capsule/dict.v4: HERE ALIGN
ALLOT , C, 2, PAD LATEST; an entry layout reached entirely from the xt,
with >LINK LFA LINK> >NAME NFA NAME> CFA PFA >BODY TRAVERSE SMUDGE
HIDDEN on it; and FIND and ' .

FIND is FORTH-79's and v3's.  ' is FORTH-79's: the parameter field
address, which for a code word is what FIND gives.  ALLOT counts cells
(D-1).  31 characters of a name are significant.

Executed at both cell widths against a list of 300 entries kept in C.
WORD no longer holds its length on the return stack.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rajames
2026-10-04 08:59:06 -04:00
co-authored by Claude Opus 5.5
parent 01b5bbb23f
commit c10d3a9cca
4 changed files with 610 additions and 6 deletions
+6 -4
View File
@@ -42,7 +42,8 @@ macro BL 32 endmacro
: QUERY TIB 80 EXPECT 0 >IN a! ! ;
\ ---- WORD ------------------------------------------------------------------
\ (P)+0 the delimiter, (P)+1 the length of the text in TIB.
\ (P)+0 the delimiter, (P)+1 the length of the text in TIB, (P)+2 the length
\ of the word (CONVERT uses (P)+2 too; the two never run inside each other).
macro (WDELIM) (P) endmacro
macro (WLEN) (P) 1 + endmacro
@@ -70,11 +71,12 @@ macro (WLEN) (P) 1 + endmacro
pop over over - \ end start len
dup -256 + -if CAP drop jump FITS CAP: drop drop 255 FITS:
dup WBUF C!
dup push push TIB + WBUF 1 + pop CMOVE \ end R: len
dup (P) 2 + a! ! \ the length waits in (P)+2, not on a stack
push TIB + WBUF 1 + pop CMOVE \ end
(LEFT) -if RANOUT
drop (WDELIM) a! @ pop WBUF + 1 + C! \ the delimiter after the text
drop (WDELIM) a! @ (P) 2 + a! @ WBUF + 1 + C! \ the delimiter after the text
1 + >IN a! ! WBUF ;
RANOUT: drop 0 pop WBUF + 1 + C!
RANOUT: drop 0 (P) 2 + a! @ WBUF + 1 + C!
>IN a! ! WBUF ;
\ ---- ENCLOSE ---------------------------------------------------------------