diff options
Fixed for increment step filling up the stack
1 files changed, 34 insertions, 33 deletions
| -rw-r--r-- | JSImpl/src/ASTInterpreter.h | 67 |
diff --git a/JSImpl/src/ASTInterpreter.h b/JSImpl/src/ASTInterpreter.h index 4d5b46f..7dc58de 100644 --- a/JSImpl/src/ASTInterpreter.h +++ b/JSImpl/src/ASTInterpreter.h @@ -1,54 +1,55 @@ #pragma once #include "ExpressionVisitor.h" -#include <stack> -#include <string> -#include <unordered_map> class ASTInterpreter : public ExpressionVisitor { public: - ASTInterpreter(); - ~ASTInterpreter(); + ASTInterpreter(); + ~ASTInterpreter(); + + // TODO: Changing this to a shared_ptr<Value> (or GC-enabled value*) will + // allow for much simpler implementation of all varible assignments. typedef double value_type; - typedef IPLStack<value_type> ValueStack; + typedef IPLVector<value_type> ValueStack; ValueStack Run(Expression* program); - virtual void Visit(LiteralNull* e) override; - virtual void Visit(LiteralUndefined* e) override; - virtual void Visit(LiteralString* e) override; - virtual void Visit(LiteralNumber* e) override; - virtual void Visit(LiteralBoolean* e) override; - virtual void Visit(BinaryExpression* e) override; - virtual void Visit(UnaryExpression* e) override; - virtual void Visit(IdentifierExpression* e) override; - virtual void Visit(ListExpression* e) override; - virtual void Visit(VariableDefinitionExpression* e) override; - virtual void Visit(BlockStatement* e) override; - virtual void Visit(LabeledStatement* e) override; - virtual void Visit(IfStatement* e) override; - virtual void Visit(SwitchStatement* e) override; - virtual void Visit(CaseStatement *) override; - virtual void Visit(WhileStatement* e) override; - virtual void Visit(ForStatement* e) override; - virtual void Visit(FunctionDeclaration* e) override; - virtual void Visit(TopStatements* e) override; - virtual void Visit(EmptyExpression* e) override; + virtual void Visit(LiteralNull* e) override; + virtual void Visit(LiteralUndefined* e) override; + virtual void Visit(LiteralString* e) override; + virtual void Visit(LiteralNumber* e) override; + virtual void Visit(LiteralBoolean* e) override; + virtual void Visit(BinaryExpression* e) override; + virtual void Visit(UnaryExpression* e) override; + virtual void Visit(IdentifierExpression* e) override; + virtual void Visit(ListExpression* e) override; + virtual void Visit(VariableDefinitionExpression* e) override; + virtual void Visit(BlockStatement* e) override; + virtual void Visit(LabeledStatement* e) override; + virtual void Visit(IfStatement* e) override; + virtual void Visit(SwitchStatement* e) override; + virtual void Visit(CaseStatement *) override; + virtual void Visit(WhileStatement* e) override; + virtual void Visit(ForStatement* e) override; + virtual void Visit(FunctionDeclaration* e) override; + virtual void Visit(TopStatements* e) override; + virtual void Visit(EmptyExpression* e) override; - value_type& ModifyVariable(const IPLString& name); + value_type& ModifyVariable(const IPLString& name); private: void RunExpression(const ExpressionPtr& e); bool EvalToBool(const ExpressionPtr& e); - void EnterScope(); - void LeaveScope(); - friend struct VariableScope; + void EnterScope(); + void LeaveScope(); + friend struct VariableScope; + friend struct StackScope;; ValueStack m_Evaluation; - IPLUnorderedMap<IPLString, ValueStack> m_Variables; + IPLUnorderedMap<IPLString, ValueStack> m_Variables; - typedef IPLVector<IPLString> Scope; - IPLStack<Scope> m_Scopes; + typedef IPLVector<IPLString> Scope; + IPLStack<Scope> m_Scopes; }; |
