eof_char = Char(EOF)
c = eof_char
- skip_to_end = false
while true
-
callPrim(mem[KEY])
c = Char(popPS())
- if c == '\\'
- skip_to_end = true
- continue
- end
-
- if skip_to_end
- if c == '\n' || c == eof_char
- skip_to_end = false
- end
- continue
- end
-
if c == ' ' || c == '\t'
continue
end
HIDDEN,
EXIT])
-CREATE = defWord("CREATE",
- [WORD,
- HEADER,
- LIT, DOVAR, COMMA, EXIT]);
-
COLON = defWord(":",
[WORD,
HEADER,
BTICK = defWord("[']",
[FROMR, DUP, INCR, TOR, FETCH, EXIT])
+# CREATE and DOES>
+
+CREATE = defWord("CREATE",
+ [WORD,
+ HEADER,
+ LIT, DOVAR, COMMA, EXIT]);
+
+DODOES = defPrim(() -> begin
+ pushRS(reg.IP)
+ reg.IP = reg.W + 1
+ return NEXT
+end, name="DOCOL")
+
+defConst("DODOES", DODOES)
+
+FROMDOES_PAREN = defWord("(DOES>)",
+ [DODOES, LATEST, FETCH, TOCFA, STORE, EXIT])
+
+FROMDOES = defWord("DOES>",
+ [BTICK, FROMDOES_PAREN, COMMA, BTICK, EXIT, COMMA,
+ BTICK, LIT, COMMA, LATEST, FETCH, TODFA, COMMA], flags=F_IMMED)
+
# Strings
return NEXT
end)
-TELL = defPrimWord("TELL", () -> begin
+TYPE = defPrimWord("TYPE", () -> begin
len = popPS()
addr = popPS()
str = getString(addr, len)
end
end, flags=F_IMMED)
-# Odds and Ends
-
-CHAR = defPrimWord("CHAR", () -> begin
- callPrim(mem[WORD])
- wordLen = popPS()
- wordAddr = popPS()
- word = getString(wordAddr, wordLen)
- pushPS(Int64(word[1]))
-
- return NEXT
-end)
+#### VM loop ####
initialized = false
initFileName = nothing
initFileName = Pkg.dir("forth/src/lib.4th")
end
-
-#### VM loop ####
function run(;initialize=true)
# Begin with STDIN as source
push!(sources, STDIN)