diff options
| Commit | d51e7e38448e24123af13f0fa2682b861a64f964 (patch) | |
|---|---|---|
| Author | 2018-11-02 00:12:31 +0200 | |
| Committer | 2018-11-02 00:12:31 +0200 | |
| Files | ff687e7a9aba1f8d53af110afe3e1e079e7b2614 /JSImpl/src/ASTInterpreter.cpp | |
| IPL-d51e7e38448e24123af13f0fa2682b861a64f964.tar IPL-d51e7e38448e24123af13f0fa2682b861a64f964.tar.gz IPL-d51e7e38448e24123af13f0fa2682b861a64f964.zip | ||
| Parent | 8f90af904002a028d37cbf25a07d81f7984577d1 (diff) | |
Add many fixes to parser.
Introduce Object Literal and Call expression.
Add more test for parser.
Little enhance around interpreter.
1 files changed, 21 insertions, 3 deletions
| -rw-r--r-- | JSImpl/src/ASTInterpreter.cpp | 24 |
diff --git a/JSImpl/src/ASTInterpreter.cpp b/JSImpl/src/ASTInterpreter.cpp index edfdc9c..f92fc37 100644 --- a/JSImpl/src/ASTInterpreter.cpp +++ b/JSImpl/src/ASTInterpreter.cpp @@ -1,12 +1,10 @@ #include "ASTInterpreter.h" #include "Expression.h" -#include <cassert> #include <iostream> - +#undef NOT_IMPLEMENTED #define NOT_IMPLEMENTED (void)e; assert(0 && "not-implemented") - struct LValueExtractor : public ExpressionVisitor { public: @@ -27,6 +25,7 @@ public: virtual void Visit(LiteralString* e) override { NOT_IMPLEMENTED; } virtual void Visit(LiteralNumber* e) override { NOT_IMPLEMENTED; } virtual void Visit(LiteralBoolean* e) override { NOT_IMPLEMENTED; } + virtual void Visit(LiteralObject* e) override { NOT_IMPLEMENTED; } virtual void Visit(BinaryExpression* e) override { NOT_IMPLEMENTED; } virtual void Visit(UnaryExpression* e) override { NOT_IMPLEMENTED; } virtual void Visit(IdentifierExpression* e) override { m_LValue = &m_Interpreter->ModifyVariable(e->GetName()); } @@ -42,6 +41,7 @@ public: virtual void Visit(FunctionDeclaration* e) override { NOT_IMPLEMENTED; } virtual void Visit(TopStatements* e) override { NOT_IMPLEMENTED; } virtual void Visit(EmptyExpression* e) override { NOT_IMPLEMENTED; } + virtual void Visit(CallExpression* e) override { NOT_IMPLEMENTED; } ASTInterpreter* m_Interpreter; ASTInterpreter::value_type* m_LValue; @@ -152,6 +152,11 @@ ASTInterpreter::value_type& ASTInterpreter::ModifyVariable(const IPLString& name return undefined; } +bool ASTInterpreter::HasVariable(const IPLString& name) +{ + return m_Variables.find(name) != m_Variables.end(); +} + void ASTInterpreter::Visit(LiteralNull* e) { NOT_IMPLEMENTED; } @@ -163,6 +168,11 @@ void ASTInterpreter::Visit(LiteralString* e) { NOT_IMPLEMENTED; } +void ASTInterpreter::Visit(LiteralObject* e) +{ + NOT_IMPLEMENTED; +} + void ASTInterpreter::Visit(LiteralNumber* e) { m_Evaluation.push_back(e->GetValue()); } @@ -198,6 +208,9 @@ void ASTInterpreter::Visit(BinaryExpression* e) { case TokenType::Comma: m_Evaluation.push_back(right); break; + case TokenType::EqualEqual: + m_Evaluation.push_back(fabs(left - right) < 0.0001); + break; default: NOT_IMPLEMENTED; } @@ -311,3 +324,8 @@ void ASTInterpreter::Visit(TopStatements* e) { void ASTInterpreter::Visit(EmptyExpression* e) { NOT_IMPLEMENTED; } + +void ASTInterpreter::Visit(CallExpression* e) +{ + NOT_IMPLEMENTED; +} |
