From 0ba5eb38f9e6974271c5efa09438f11055820933 Mon Sep 17 00:00:00 2001 From: Dimitar Trendafilov Date: Sun, 28 Oct 2018 17:08:32 +0200 Subject: Fixed for increment step filling up the stack --- JSImpl/src/ASTInterpreter.h | 69 +++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 34 deletions(-) (limited to 'JSImpl/src/ASTInterpreter.h') 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 -#include -#include class ASTInterpreter : public ExpressionVisitor { public: - ASTInterpreter(); - ~ASTInterpreter(); + ASTInterpreter(); + ~ASTInterpreter(); + + // TODO: Changing this to a shared_ptr (or GC-enabled value*) will + // allow for much simpler implementation of all varible assignments. typedef double value_type; - typedef IPLStack ValueStack; + typedef IPLVector 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; - - value_type& ModifyVariable(const IPLString& name); + 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); 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 m_Variables; + IPLUnorderedMap m_Variables; - typedef IPLVector Scope; - IPLStack m_Scopes; + typedef IPLVector Scope; + IPLStack m_Scopes; }; -- cgit v1.3.1-23-gd82d