Transitioning to julia 0.6 (may be hard)
[forth.jl.git] / src / lib_8_vocab.4th
index 34b8251..8ad875f 100644 (file)
@@ -1,18 +1,51 @@
 \ Vocabulary management
 
+\ Forget word and everything defined after it in compilation dict
 : FORGET
-        BL WORD FIND >LINK  ( find the word, gets the dictionary entry address )
-        DUP @ LATEST !      ( set LATEST to point to the previous word )
-        H !                 ( and store H with the dictionary address )
+        BL WORD CURRENT @ FINDVOCAB ( find the word, gets the dictionary entry address )
+
+        0= if
+                drop exit
+        then
+
+        >link
+
+        dup @ current @ 1+ !      ( set LATEST to point to the previous word )
 ;
 
-: HIDE
+\ Mark word as hidden
+: HIDE ( -- )
         BL WORD FIND DROP >NAME
         DUP @ F_HIDDEN OR SWAP !
 ;
 
-: VOCAB>LATEST ( vcfa -- vlatest )
-        1+ @ @ ;
+: ?HIDDEN
+        1+              ( skip over the link pointer )
+        @               ( get the flags/length byte )
+        F_HIDDEN AND    ( mask the F_HIDDEN flag and return it (as a truth value) )
+;
+
+\ Display name of word
+: .NAME ( cfa -- )
+        DUP @           ( get the flags/length byte )
+        F_LENMASK AND   ( mask out the flags - just want the length )
+
+        BEGIN
+                DUP 0>          ( length > 0? )
+        WHILE
+                SWAP 1+         ( addr len -- len addr+1 )
+                DUP @           ( len addr -- len addr char | get the next character)
+                DUP 32 >= IF
+                        EMIT    ( len addr char -- len addr | and print it)
+                ELSE
+                        BASE @ SWAP HEX
+                        ." \x" 0 .R
+                        BASE !
+                THEN
+                SWAP 1-         ( len addr -- addr len-1    | subtract one from length )
+        REPEAT
+        2DROP           ( len addr -- )
+;
 
 \ Create new vocabulary
 : VOCABULARY
@@ -36,6 +69,9 @@ vocabulary ROOT
 ;
 
 : PREVIOUS
+        #context @
+        1 <= abort" Cannot empty search order stack!"
+
         1 #context -!
 ;