commit f616b132d330bd960a2010ad257a4dce10cbeb9c
parent 31170aa7bba69c8bbb786c7df9f7817b7cc79e9a
Author: Christian Ermann <christianermann@gmail.com>
Date: Tue, 5 Nov 2024 22:25:39 -0800
Fix default behavior of 'create'd words
Diffstat:
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/forth.s b/forth.s
@@ -760,12 +760,14 @@ _less_than:
# -----------------------------------------------------------------------------
defword "create", 6, 0, 0x26BB595D, create, less_than
+ .int parse_word
.int latest, fetch, comma # link
.int hash, comma # hash
.int lit, 0, comma # meta
.int lit, 0, char_comma # flags
.int align
.int here, lit, -code_offset, plus, latest, store # update 'latest'
+ .int lit, dovar, comma
.int exit
defcode "hash", 4, 0, 0xEDBF0FE3, hash, create
@@ -809,7 +811,8 @@ defcode "hidden", 6, 0, 0xF618F139, hidden, r_bracket
next
defword ":", 1, 0, 0x3F0CB86D, colon, hidden
- .int parse_word, create # create header
+ .int create # create header
+ .int lit, -cell, allot
.int lit, docol, comma # append 'docol'
.int latest, fetch, hidden # hide word
.int r_bracket # enter 'compile' mode
@@ -854,13 +857,13 @@ defword "immediate", 9, 0, 0xF232267A, immediate, postpone
.int exit
defword "variable", 8, 0, 0x19385305, variable, immediate
- .int parse_word, create # create header
- .int lit, dovar, comma # append 'dovar'
+ .int create # create header
.int lit, 0, comma # initialize to zero
.int exit
defword "constant", 8, 0, 0x0691EA25, constant, variable
- .int parse_word, create # create header
+ .int create # create header
+ .int lit, -cell, allot
.int lit, docon, comma # append 'docon'
.int comma # initialize to value on stack
.int exit