From 5b420e0799ec6e51c555f0f41d7c5540419da281 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Sun, 11 Sep 2022 05:51:25 +0100 Subject: [PATCH] Changed how parseCompountToPureValue() is called --- source/interpreter.c | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/source/interpreter.c b/source/interpreter.c index 592158c..bd56e6b 100644 --- a/source/interpreter.c +++ b/source/interpreter.c @@ -56,24 +56,10 @@ bool injectNativeFn(Interpreter* interpreter, char* name, NativeFn func) { return true; } -bool parseIdentifierToValue(Interpreter* interpreter, Literal* literalPtr) { - //this converts identifiers to values - if (IS_IDENTIFIER(*literalPtr)) { - // Literal idn = *literalPtr; - if (!getScopeVariable(interpreter->scope, *literalPtr, literalPtr)) { - interpreter->errorOutput("Undeclared variable ");; - printLiteralCustom(*literalPtr, interpreter->errorOutput); - interpreter->errorOutput("\n"); - return false; - } - // freeLiteral(idn); - } - - return true; -} - void parseCompoundToPureValues(Interpreter* interpreter, Literal* literalPtr) { - parseIdentifierToValue(interpreter, literalPtr); + if (IS_IDENTIFIER(*literalPtr)) { + parseIdentifierToValue(interpreter, literalPtr); + } //parse out an array if (IS_ARRAY(*literalPtr)) { @@ -129,6 +115,24 @@ void parseCompoundToPureValues(Interpreter* interpreter, Literal* literalPtr) { } } +bool parseIdentifierToValue(Interpreter* interpreter, Literal* literalPtr) { + //this converts identifiers to values + if (IS_IDENTIFIER(*literalPtr)) { + if (!getScopeVariable(interpreter->scope, *literalPtr, literalPtr)) { + interpreter->errorOutput("Undeclared variable "); + printLiteralCustom(*literalPtr, interpreter->errorOutput); + interpreter->errorOutput("\n"); + return false; + } + } + + if (IS_ARRAY(*literalPtr) || IS_DICTIONARY(*literalPtr)) { + parseCompoundToPureValues(interpreter, literalPtr); + } + + return true; +} + //utilities for the host program void setInterpreterPrint(Interpreter* interpreter, PrintFn printOutput) { interpreter->printOutput = printOutput;