# Compilation
+HERE = defWord("HERE",
+ [H_CFA, FETCH, EXIT])
+
HEADER = defPrimWord("HEADER", () -> begin
wordAddr = popPS()+1
wordLen = mem[wordAddr-1]
return NEXT
end)
+CREATE = defWord("CREATE",
+ [LIT, 32, WORD, HEADER,
+ LIT, DOVAR, COMMA,
+ EXIT])
+
+DODOES = defPrim(() -> begin
+ pushRS(reg.IP)
+ reg.IP = popPS()
+ pushPS(reg.W + 1)
+ return NEXT
+end, name="DODOES")
+
+DOES_HELPER = defPrimWord("(DOES>)", () -> begin
+
+ pushPS(mem[LATEST])
+ callPrim(mem[TOCFA])
+ cfa = popPS()
+
+ runtimeAddr = popPS()
+
+ mem[cfa] = defPrim(eval(:(() -> begin
+ pushPS($(runtimeAddr))
+ return DODOES
+ end)), name="doesPrim")
+
+ return NEXT
+end, flags=F_IMMED)
+
+DOES = defWord("DOES>",
+ [BTICK, LIT, COMMA, HERE, LIT, 3, ADD, COMMA,
+ BTICK, DOES_HELPER, COMMA, BTICK, EXIT, COMMA, EXIT],
+ flags=F_IMMED)
+
LBRAC = defPrimWord("[", () -> begin
mem[STATE] = 0
return NEXT