From d51e7e38448e24123af13f0fa2682b861a64f964 Mon Sep 17 00:00:00 2001 From: martin dobrev Date: Fri, 2 Nov 2018 00:12:31 +0200 Subject: Add many fixes to parser. Introduce Object Literal and Call expression. Add more test for parser. Little enhance around interpreter. --- JSImpl/src/ASTInterpreter.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'JSImpl/src/ASTInterpreter.cpp') 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 #include - +#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; +} -- cgit v1.3.1-23-gd82d