From 70e8c7e95903af959972fecb04608b915ba466d6 Mon Sep 17 00:00:00 2001 From: Starfflame Date: Tue, 25 May 2021 03:07:03 -0500 Subject: [PATCH] add compile, literal definitions --- CoreWords.tl | 15 +++++++++++---- DataStructures.tl | 2 ++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CoreWords.tl b/CoreWords.tl index 4d320ba..179ae7a 100644 --- a/CoreWords.tl +++ b/CoreWords.tl @@ -162,14 +162,18 @@ local function exitCompileMode(e: Environment) end local function compile(env: Environment) - + local stack = env.activeDataStack + local f = stack:pop() as function(Environment) + table.insert(env.currentDefinition, f) end local function literal(env: Environment) local stack = env.activeDataStack + local val = stack:pop() local fun = function(e: Environment) - - + local s = e.activeDataStack + s:push(val) end + table.insert(env.currentDefinition, fun) end local function postpone(env: Environment) @@ -197,8 +201,11 @@ defineWord(CoreWords, "TUCK", tuck, false) defineWord(CoreWords, "ROLL", roll, false) defineWord(CoreWords, "'", getExecutionToken, false) defineWord(CoreWords, "EXECUTE", execute, false) -defineWord(CoreWords, "[", exitCompileMode, false) +defineWord(CoreWords, "[", exitCompileMode, true) defineWord(CoreWords, "]", enterCompileMode, false) +defineWord(CoreWords, "COMPILE,", compile, true) +defineWord(CoreWords, "LITERAL", literal, true) + CoreWords:define("+", addInfo) CoreWords:define("-", subInfo) diff --git a/DataStructures.tl b/DataStructures.tl index 428695e..6c86161 100644 --- a/DataStructures.tl +++ b/DataStructures.tl @@ -46,6 +46,8 @@ local type DataStructures = record recognizers: {function(Environment)} instructionPointer: Pointer running: boolean + + currentDefinition: {function(Environment)} end end