CREATE, ALLOT and VARIABLE now work as they should.
authorTim Vaughan <tgvaughan@gmail.com>
Mon, 2 May 2016 02:11:33 +0000 (14:11 +1200)
committerTim Vaughan <tgvaughan@gmail.com>
Mon, 2 May 2016 02:11:33 +0000 (14:11 +1200)
src/forth.jl
src/lib.4th

index c1ca1a0..98999a3 100644 (file)
@@ -768,6 +768,8 @@ end)
 
 # Compilation
 
+STATE, STATE_CFA = defNewVar("STATE", 0)
+
 HEADER = defPrimWord("HEADER", () -> begin
 
     wordLen = popPS()
@@ -786,8 +788,6 @@ COMMA = defPrimWord(",", () -> begin
     return NEXT
 end)
 
-STATE, STATE_CFA = defNewVar("STATE", 0)
-
 LBRAC = defPrimWord("[", () -> begin
     mem[STATE] = 0
     return NEXT
@@ -810,6 +810,11 @@ HIDE = defWord("HIDE",
     HIDDEN,
     EXIT])
 
+CREATE = defWord("CREATE",
+    [WORD,
+    HEADER,
+    LIT, DOVAR, COMMA, EXIT]);
+
 COLON = defWord(":",
     [WORD,
     HEADER,
index 28aa451..9e40b2d 100644 (file)
         ['] EXIT ,      ( append the codeword EXIT )
 ;
 
-: ALLOT         ( n -- addr )
-        HERE @ SWAP     ( here n )
+: ALLOT         ( n -- )
         HERE +!         ( adds n to HERE, after this the old value of HERE is still on the stack )
 ;
 
 : VARIABLE
+        CREATE
         1 CELLS ALLOT   ( allocate 1 cell of memory, push the pointer to this memory )
-        WORD HEADER     ( make the dictionary entry (the name follows VARIABLE) )
-        DOCOL ,         ( append DOCOL (the codeword field of this word) )
-        ['] LIT ,         ( append the codeword LIT )
-        ,               ( append the pointer to the new memory )
-        ['] EXIT ,        ( append the codeword EXIT )
 ;