Website Summary Files Commits Branches @commit @diff @stats
path: root / JSImpl / src / ASTInterpreter.cpp
diff options
context:
space:
mode:
Commitd51e7e38448e24123af13f0fa2682b861a64f964 (patch)
Author
 martin dobrev <martindobrev0@gmail.com>
2018-11-02 00:12:31 +0200
Committer
 martin dobrev <martindobrev0@gmail.com>
2018-11-02 00:12:31 +0200
Filesff687e7a9aba1f8d53af110afe3e1e079e7b2614 /JSImpl/src/ASTInterpreter.cpp
IPL-d51e7e38448e24123af13f0fa2682b861a64f964.tar
IPL-d51e7e38448e24123af13f0fa2682b861a64f964.tar.gz
IPL-d51e7e38448e24123af13f0fa2682b861a64f964.zip
Parent8f90af904002a028d37cbf25a07d81f7984577d1 (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.cpp24
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;
+}