Website Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit0c666088bdf8ad15bbdfbc687cef38532dff96b4 (patch)
Author
 martin dobrev <martindobrev0@gmail.com>
2018-10-14 18:27:53 +0300
Committer
 martin dobrev <martindobrev0@gmail.com>
2018-10-14 18:27:53 +0300
Files8e77300f1deeb3bc3b753542716de6b7d9028760
IPL-0c666088bdf8ad15bbdfbc687cef38532dff96b4.tar
IPL-0c666088bdf8ad15bbdfbc687cef38532dff96b4.tar.gz
IPL-0c666088bdf8ad15bbdfbc687cef38532dff96b4.zip
Parent370d2afe025f899caab7829407363a37a37093b2 (diff)
Split expression definitions in different file.
5 files changed, 134 insertions, 130 deletions
-rw-r--r--JSImpl/solution/JSImpl.vcxproj1
-rw-r--r--JSImpl/solution/JSImpl.vcxproj.filters57
-rw-r--r--JSImpl/src/Expression.h104
-rw-r--r--JSImpl/src/ExpressionDefinitions.h100
-rw-r--r--JSImpl/src/main.cpp2
diff --git a/JSImpl/solution/JSImpl.vcxproj b/JSImpl/solution/JSImpl.vcxproj
index e55b38d..99b34cc 100644
--- a/JSImpl/solution/JSImpl.vcxproj
+++ b/JSImpl/solution/JSImpl.vcxproj
@@ -115,6 +115,7 @@
<ClInclude Include="..\src\ASTPrinter.h" />
<ClInclude Include="..\src\CommonTypes.h" />
<ClInclude Include="..\src\Expression.h" />
+ <ClInclude Include="..\src\ExpressionDefinitions.h" />
<ClInclude Include="..\src\ExpressionsFwd.h" />
<ClInclude Include="..\src\ExpressionVisitor.h" />
<ClInclude Include="..\src\Lexer.h" />
diff --git a/JSImpl/solution/JSImpl.vcxproj.filters b/JSImpl/solution/JSImpl.vcxproj.filters
index d56f6a1..314e0f3 100644
--- a/JSImpl/solution/JSImpl.vcxproj.filters
+++ b/JSImpl/solution/JSImpl.vcxproj.filters
@@ -1,53 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ <Filter Include="Expressions">
+ <UniqueIdentifier>{9e65384d-2e18-4a3f-9b02-4abf632f9f06}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
- <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ <Filter Include="Lexer">
+ <UniqueIdentifier>{177dbff8-a919-4a03-89ba-cb0a96e9e21e}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Visitors">
+ <UniqueIdentifier>{948e229c-5a7a-4b3c-a75a-4b1b299c9e38}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Parser">
+ <UniqueIdentifier>{cf3787a3-5a0e-49f9-9a9f-99e14b57f391}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\src\CommonTypes.h">
- <Filter>Header Files</Filter>
+ <ClInclude Include="..\src\Expression.h">
+ <Filter>Expressions</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\ExpressionDefinitions.h">
+ <Filter>Expressions</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\ExpressionsFwd.h">
+ <Filter>Expressions</Filter>
</ClInclude>
<ClInclude Include="..\src\Lexer.h">
- <Filter>Header Files</Filter>
+ <Filter>Lexer</Filter>
</ClInclude>
<ClInclude Include="..\src\Parser.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\src\Expression.h">
- <Filter>Header Files</Filter>
+ <Filter>Parser</Filter>
</ClInclude>
<ClInclude Include="..\src\ASTPrinter.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\src\ExpressionsFwd.h">
- <Filter>Header Files</Filter>
+ <Filter>Visitors</Filter>
</ClInclude>
<ClInclude Include="..\src\ExpressionVisitor.h">
- <Filter>Header Files</Filter>
+ <Filter>Visitors</Filter>
</ClInclude>
+ <ClInclude Include="..\src\CommonTypes.h" />
</ItemGroup>
<ItemGroup>
- <ClCompile Include="..\src\Lexer.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="..\src\Expression.cpp">
+ <Filter>Expressions</Filter>
</ClCompile>
- <ClCompile Include="..\src\main.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="..\src\Lexer.cpp">
+ <Filter>Lexer</Filter>
</ClCompile>
<ClCompile Include="..\src\Parser.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\src\Expression.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Parser</Filter>
</ClCompile>
<ClCompile Include="..\src\ASTPrinter.cpp">
- <Filter>Source Files</Filter>
+ <Filter>Visitors</Filter>
</ClCompile>
+ <ClCompile Include="..\src\main.cpp" />
</ItemGroup>
</Project> \ No newline at end of file
diff --git a/JSImpl/src/Expression.h b/JSImpl/src/Expression.h
index 30405f7..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>
{
@@ -40,108 +41,7 @@ class Expression : public IPLEnableShared<Expression>
bool m_dummy; \
};
-
-#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)\
- 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(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)\
- 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>(); }
diff --git a/JSImpl/src/ExpressionDefinitions.h b/JSImpl/src/ExpressionDefinitions.h
new file mode 100644
index 0000000..b1b2595
--- /dev/null
+++ b/JSImpl/src/ExpressionDefinitions.h
@@ -0,0 +1,100 @@
+#pragma once
+
+#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)\
+ 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 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)\
+ 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, NO_MEMBERS)
diff --git a/JSImpl/src/main.cpp b/JSImpl/src/main.cpp
index b51d1a9..586eef1 100644
--- a/JSImpl/src/main.cpp
+++ b/JSImpl/src/main.cpp
@@ -90,7 +90,7 @@ int main()
//EXECUTE_TEST(TestVariableDeclaration);
- EXECUTE_TEST(TestParseUnaryExpr);
+ TestParseUnaryExpr();
#if defined(_WIN32)
//std::system("pause");
#endif