Website Summary Files Commits Branches @commit @diff @stats
path: root / JSImpl / src / ASTInterpreter.h
diff options
context:
space:
mode:
Commit0ba5eb38f9e6974271c5efa09438f11055820933 (patch)
Author
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-10-28 17:08:32 +0200
Committer
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-10-28 17:08:32 +0200
Files51effc8b809c5d71ed323181ad6bb585f72c2ee0 /JSImpl/src/ASTInterpreter.h
IPL-0ba5eb38f9e6974271c5efa09438f11055820933.tar
IPL-0ba5eb38f9e6974271c5efa09438f11055820933.tar.gz
IPL-0ba5eb38f9e6974271c5efa09438f11055820933.zip
Parent0bf63ffd7e8643198223e3820260082cfbb3b654 (diff)
Fixed for increment step filling up the stack
1 files changed, 34 insertions, 33 deletions
-rw-r--r--JSImpl/src/ASTInterpreter.h67
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;
};