From: Tim Vaughan Date: Sun, 2 Oct 2016 00:36:37 +0000 (+1300) Subject: Draft INTERPRET implementation. X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=commitdiff_plain;h=1e38c923ef9c80d3c276480f7cf5d1de302913d3;p=forth.jl.git Draft INTERPRET implementation. --- diff --git a/src/forth.jl b/src/forth.jl index 5aa447d..90fb3ae 100644 --- a/src/forth.jl +++ b/src/forth.jl @@ -1164,7 +1164,7 @@ INTERPRET_CFA = defWord("INTERPRET", [LIT_CFA, 32, WORD_CFA, # Read next space-delimited word DUP_CFA, FETCH_CFA, ZE_CFA, ZBRANCH_CFA, 3, - DROP_CFA, EXIT_CFA, # Exit if TIB is exhausted + DROP_CFA, EXIT_CFA, # Exit if input buffer is exhausted STATE_CFA, FETCH_CFA, ZBRANCH_CFA, 24, # Compiling @@ -1209,6 +1209,22 @@ QUIT_CFA = defWord("QUIT", INTERPRET_CFA, PROMPT_CFA, BRANCH_CFA,-4]) +INTERPRET_CFA = defWord("INTERPRET", + [SOURCE_ID_CFA, FETCH_CFA, TOR_CFA, # Store current source on return stack + + LIT_CFA, 32, WORD_CFA, # Read next word from current input source + + FAM_RO_CFA, FILE_OPEN, DROP_CFA, # Open the file named by this word. + + DUP_CFA, SOURCE_ID_CFA, STORE_CFA, # Mark this as the current source + + DUP_CFA, QUERY_FILE_CFA, # Read line from file + + INTERPRET_CFA, + + BRANCH_CFA, -4] + + ABORT_CFA = defWord("ABORT", [CLOSE_FILES_CFA, PSP0_CFA, PSPSTORE_CFA, QUIT_CFA])