X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=forth.jl.git;a=blobdiff_plain;f=src%2Fforth.jl;h=90cf1cfafee4e3e56c9924d38dbb86ca428abf8a;hp=16791158bba44e90991b2339db55d7f2ab7e69bf;hb=6162399a858a397add5ed60ba33f31a4d6dba4c2;hpb=4aaffe598cbf92821d47324d80ba8a8044572aaa diff --git a/src/forth.jl b/src/forth.jl index 1679115..90cf1cf 100644 --- a/src/forth.jl +++ b/src/forth.jl @@ -679,7 +679,7 @@ TOCFA = defPrimWord(">CFA", () -> begin return NEXT end) -TODFA = defWord(">DFA", [TOCFA, INCR, EXIT]) +TOPFA = defWord(">PFA", [TOCFA, INCR, EXIT]) # Branching @@ -767,11 +767,16 @@ WORD = defPrimWord("WORD", () -> begin # Start reading in word count = 0 - while (mem[TOIN] begin return NEXT end) +PARSE = defPrimWord("PARSE", () -> begin + delim = popPS() + + # Chew up initial occurrences of delim + addr = mem[HERE] + + # Start reading input stream + count = 0 + while (mem[TOIN] begin end) INCLUDE = defPrimWord("INCLUDE", () -> begin + pushPS(32) callPrim(mem[WORD]) - wordLen = popPS() - wordAddr = popPS() + wordAddr = popPS()+1 + wordLen = mem[wordAddr-1] word = getString(wordAddr, wordLen) push!(sources, open(word, "r")) @@ -851,7 +883,6 @@ end) # Compilation HEADER = defPrimWord("HEADER", () -> begin - wordAddr = popPS()+1 wordLen = mem[wordAddr-1] word = getString(wordAddr, wordLen) @@ -878,13 +909,13 @@ HIDDEN = defPrimWord("HIDDEN", () -> begin end) HIDE = defWord("HIDE", - [WORD, + [LIT, 32, WORD, FIND, HIDDEN, EXIT]) COLON = defWord(":", - [WORD, + [LIT, 32, WORD, HEADER, LIT, DOCOL, COMMA, LATEST_CFA, FETCH, HIDDEN, @@ -904,7 +935,7 @@ IMMEDIATE = defPrimWord("IMMEDIATE", () -> begin end, flags=F_IMMED) TICK = defWord("'", - [WORD, FIND, TOCFA, EXIT]) + [LIT, 32, WORD, FIND, TOCFA, EXIT]) #### VM loop ####