diff options
| Commit | 370d2afe025f899caab7829407363a37a37093b2 (patch) | |
|---|---|---|
| Author | 2018-10-14 18:09:45 +0300 | |
| Committer | 2018-10-14 18:09:45 +0300 | |
| Files | c9cf14183738b92052879009babdad16d0f7dfad /JSImpl/src/Expression.h | |
| IPL-370d2afe025f899caab7829407363a37a37093b2.tar IPL-370d2afe025f899caab7829407363a37a37093b2.tar.gz IPL-370d2afe025f899caab7829407363a37a37093b2.zip | ||
| Parent | a24ea4d6be0a92f9d2d8e937d08f6ea5575021ef (diff) | |
Split literls in different classes and remove all handwritten code.
1 files changed, 16 insertions, 32 deletions
| -rw-r--r-- | JSImpl/src/Expression.h | 48 |
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>(); } |
