Website Summary Files Commits Branches @commit @diff @stats
path: root / JSImpl / src / Expression.h
diff options
context:
space:
mode:
Commit370d2afe025f899caab7829407363a37a37093b2 (patch)
Author
 martin dobrev <martindobrev0@gmail.com>
2018-10-14 18:09:45 +0300
Committer
 martin dobrev <martindobrev0@gmail.com>
2018-10-14 18:09:45 +0300
Filesc9cf14183738b92052879009babdad16d0f7dfad /JSImpl/src/Expression.h
IPL-370d2afe025f899caab7829407363a37a37093b2.tar
IPL-370d2afe025f899caab7829407363a37a37093b2.tar.gz
IPL-370d2afe025f899caab7829407363a37a37093b2.zip
Parenta24ea4d6be0a92f9d2d8e937d08f6ea5575021ef (diff)
Split literls in different classes and remove all handwritten code.
1 files changed, 16 insertions, 32 deletions
-rw-r--r--JSImpl/src/Expression.h48
diff --git a/JSImpl/src/Expression.h b/JSImpl/src/Expression.h
index df8c00b..30405f7 100644
--- a/JSImpl/src/Expression.h
+++ b/JSImpl/src/Expression.h
@@ -11,37 +11,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,
@@ -72,6 +41,17 @@ private:
};
+#define NO_MEMBERS(MACRO)
+
+#define LITERAL_BOOLEAN_MEMBERS(MACRO)\
+ MACRO(bool, Value, false)
+
+#define LITERAL_NUMBER_MEMBERS(MACRO)\
+ MACRO(double, Value, 0.0)
+
+#define LITERAL_STRING_MEMBERS(MACRO)\
+ MACRO(IPLString, Value, "")
+
#define BINARY_EXPRESSION_MEMBERS(MACRO)\
MACRO(ExpressionPtr, Left, nullptr)\
MACRO(ExpressionPtr, Right, nullptr)\
@@ -141,6 +121,11 @@ private:
#define EMPTY_EXPRESSION_MEMBERS(MACRO)
#define EXPRESSION_DEFINITION_ITERATOR(MACRO)\
+ MACRO(LiteralNull, Expression, NO_MEMBERS)\
+ MACRO(LiteralUndefined, Expression, NO_MEMBERS)\
+ MACRO(LiteralBoolean, Expression, LITERAL_BOOLEAN_MEMBERS)\
+ MACRO(LiteralNumber, Expression, LITERAL_NUMBER_MEMBERS)\
+ MACRO(LiteralString, Expression, LITERAL_STRING_MEMBERS)\
MACRO(BinaryExpression, Expression, BINARY_EXPRESSION_MEMBERS)\
MACRO(UnaryExpression, Expression, UNARY_EXPRESSION_MEMBERS)\
MACRO(IdentifierExpression, Expression, IDENTIFIER_EXPRESSION_MEMBERS)\
@@ -157,7 +142,6 @@ private:
MACRO(TopStatements, Expression, TOP_EXPRESSION_MEMBERS)\
MACRO(EmptyExpression, Expression, EMPTY_EXPRESSION_MEMBERS)
-
EXPRESSION_DEFINITION_ITERATOR(GENERATE_EXPRESSION);
inline ExpressionPtr CreateEmptyExpression() { return IPLMakeSharePtr<EmptyExpression>(); }