Website Summary Files Commits Branches @commit @diff @stats
path: root / JSImpl / src / Expression.h
diff options
context:
space:
mode:
Commit202194341e3697d77077aa50652acf1042350997 (patch)
Author
 Martin Dobrev <martindobrev0@gmail.com>
2018-10-15 09:00:16 +0300
Committer
 GitHub <noreply@github.com>
2018-10-15 09:00:16 +0300
Filesd530d0243407e86be9e9116e3853bf7992757ebd /JSImpl/src/Expression.h
IPL-202194341e3697d77077aa50652acf1042350997.tar
IPL-202194341e3697d77077aa50652acf1042350997.tar.gz
IPL-202194341e3697d77077aa50652acf1042350997.zip
Parent6c7fc844cebe201408017602ff54bf442df0da25 (diff)
Parentf671c0492871418a7b6fed235196b85f79236cff (diff)
Merge branch 'master' into lexer-errors-handling
1 files changed, 2 insertions, 118 deletions
-rw-r--r--JSImpl/src/Expression.h120
diff --git a/JSImpl/src/Expression.h b/JSImpl/src/Expression.h
index df8c00b..01c9b68 100644
--- a/JSImpl/src/Expression.h
+++ b/JSImpl/src/Expression.h
@@ -3,6 +3,7 @@
#include "CommonTypes.h"
#include "Lexer.h"
#include "ExpressionVisitor.h"
+#include "ExpressionDefinitions.h"
class Expression : public IPLEnableShared<Expression>
{
@@ -11,37 +12,6 @@ class Expression : public IPLEnableShared<Expression>
virtual void Accept(ExpressionVisitor& v) = 0;
};
-enum class LiteralType
-{
- Number,
- String,
- Boolean,
- Null,
- Undefined
-};
-
-class LiteralExpression : public Expression
-{
-public:
-
- virtual ~LiteralExpression() {}
- LiteralExpression(double);
- LiteralExpression(IPLString&);
- LiteralExpression(bool);
- LiteralExpression(TokenType type);
- virtual void Accept(ExpressionVisitor& v) override { v.Visit(this); }
- double GetNumValue() const { return m_NumValue; }
- const IPLString& GetStringValue() const { return m_StringValue; }
- bool GetBooleanValue() const { return m_BooleanValue; }
- LiteralType GetLiteralType() const { return m_Type; }
-private:
- LiteralType m_Type;
- bool m_BooleanValue;
- double m_NumValue;
- IPLString m_StringValue;
-};
-
-
#define EXPAND_ARGUMENT(type, name, def)\
type name = def,
@@ -71,93 +41,7 @@ private:
bool m_dummy; \
};
-
-#define BINARY_EXPRESSION_MEMBERS(MACRO)\
- MACRO(ExpressionPtr, Left, nullptr)\
- MACRO(ExpressionPtr, Right, nullptr)\
- MACRO(TokenType, Operator, TokenType::Invalid)
-
-#define UNARY_EXPRESSION_MEMBERS(MACRO)\
- MACRO(IPLSharedPtr<Expression>, Expr, nullptr)\
- MACRO(TokenType, Operator, TokenType::Invalid)\
- MACRO(bool, Suffix, false)
-
-#define LITERAL_EXPRESSION_MEMBERS(MACRO)\
- MACRO(double, NumValue, 0.)\
- MACRO(IPLString, StringValue, "")\
- MACRO(bool, BooleanValue, false)\
- MACRO(LiteralType, Type, LiteralType::Undefined)
-
-#define IDENTIFIER_EXPRESSION_MEMBERS(MACRO)\
- MACRO(IPLString, Name, "")
-
-#define VARIABLEDEFINITION_EXPRESSION_MEMBERS(MACRO)\
- MACRO(IPLString, Name, "")\
- MACRO(ExpressionPtr, Value, nullptr)
-
-#define LIST_EXPRESSION_MEMBERS(MACRO)\
- MACRO(IPLVector<ExpressionPtr>, Values, IPLVector<ExpressionPtr>())
-
-#define BLOCK_EXPRESSION_MEMBERS(MACRO)\
- MACRO(IPLVector<ExpressionPtr>, Values, IPLVector<ExpressionPtr>())
-
-#define LABELED_EXPRESSION_MEMBERS(MACRO)\
- MACRO(IPLString, Identifier, "")\
- MACRO(ExpressionPtr, Statement, nullptr)
-
-#define IF_EXPRESSION_MEMBERS(MACRO)\
- MACRO(ExpressionPtr, Condition, nullptr)\
- MACRO(ExpressionPtr, IfStatement, nullptr)\
- MACRO(ExpressionPtr, ElseStatement, nullptr)
-
-#define CASE_EXPRESSION_MEMBERS(MACRO)\
- MACRO(ExpressionPtr, Condition, nullptr)\
- MACRO(ExpressionPtr, Body, nullptr)
-
-#define SWITCH_EXPRESSION_MEMBERS(MACRO)\
- MACRO(ExpressionPtr, Condition, nullptr)\
- MACRO(IPLVector<ExpressionPtr>, Cases, IPLVector<ExpressionPtr>())\
- MACRO(ExpressionPtr, DefaultCase, nullptr)
-
-#define WHILE_EXPRESSION_MEMBERS(MACRO)\
- MACRO(ExpressionPtr, Condition, nullptr)\
- MACRO(ExpressionPtr, Body, nullptr)\
- MACRO(bool, DoWhile, false)
-
-#define FOR_EXPRESSION_MEMBERS(MACRO)\
- MACRO(ExpressionPtr, Initialization, nullptr)\
- MACRO(ExpressionPtr, Condition, nullptr)\
- MACRO(ExpressionPtr, Iteration, nullptr)\
- MACRO(ExpressionPtr, Body, nullptr)
-
-#define FUNCTION_EXPRESSION_MEMBERS(MACRO)\
- MACRO(IPLString, Name, "")\
- MACRO(IPLVector<IPLString>, ArgumentsIdentifiers, IPLVector<IPLString>())\
- MACRO(ExpressionPtr, Body, nullptr)
-
-#define TOP_EXPRESSION_MEMBERS(MACRO)\
- MACRO(IPLVector<ExpressionPtr>, Values, IPLVector<ExpressionPtr>())
-
-#define EMPTY_EXPRESSION_MEMBERS(MACRO)
-
-#define EXPRESSION_DEFINITION_ITERATOR(MACRO)\
- MACRO(BinaryExpression, Expression, BINARY_EXPRESSION_MEMBERS)\
- MACRO(UnaryExpression, Expression, UNARY_EXPRESSION_MEMBERS)\
- MACRO(IdentifierExpression, Expression, IDENTIFIER_EXPRESSION_MEMBERS)\
- MACRO(VariableDefinitionExpression, Expression, VARIABLEDEFINITION_EXPRESSION_MEMBERS)\
- MACRO(ListExpression, Expression, LIST_EXPRESSION_MEMBERS)\
- MACRO(BlockStatement, Expression, BLOCK_EXPRESSION_MEMBERS)\
- MACRO(LabeledStatement, Expression, LABELED_EXPRESSION_MEMBERS)\
- MACRO(IfStatement, Expression, IF_EXPRESSION_MEMBERS)\
- MACRO(SwitchStatement, Expression, SWITCH_EXPRESSION_MEMBERS)\
- MACRO(CaseStatement, Expression, CASE_EXPRESSION_MEMBERS)\
- MACRO(WhileStatement, Expression, WHILE_EXPRESSION_MEMBERS)\
- MACRO(ForStatement, Expression, FOR_EXPRESSION_MEMBERS)\
- MACRO(FunctionDeclaration, Expression, FUNCTION_EXPRESSION_MEMBERS)\
- MACRO(TopStatements, Expression, TOP_EXPRESSION_MEMBERS)\
- MACRO(EmptyExpression, Expression, EMPTY_EXPRESSION_MEMBERS)
-
-
EXPRESSION_DEFINITION_ITERATOR(GENERATE_EXPRESSION);
+#undef GENERATE_EXPRESSION
inline ExpressionPtr CreateEmptyExpression() { return IPLMakeSharePtr<EmptyExpression>(); }