Website Summary Files Commits Branches @commit @diff @stats
path: root / JSImpl / src / ExpressionDefinitions.h
blob: 33f13b3d1b9ef6087a8066ca9287cab53cde4e37 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#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 LITERAL_FIELD_MEMBERS(MACRO)\
		MACRO(ExpressionPtr, Identifier, nullptr)\
		MACRO(ExpressionPtr, Value, nullptr)

#define LITERAL_OBJECT_MEMBERS(MACRO)\
		MACRO(IPLVector<ExpressionPtr>, Values, IPLVector<ExpressionPtr>())

#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 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 CALL_EXPRESSION_MEMBERS(MACRO)\
		MACRO(ExpressionPtr, ObjectOrCall, ExpressionPtr())\
		MACRO(ExpressionPtr, Member, ExpressionPtr())

#define MEMBER_ACCESS_EXPRESSION_MEMBERS(MACRO)\
		MACRO(IPLString, Name, "")

#define MEMBER_NO_MEMBERS(MACRO)

#define EXPRESSION_DEFINITION_ITERATOR(MACRO)\
		MACRO(LiteralNull, NO_MEMBERS)\
		MACRO(LiteralUndefined, NO_MEMBERS)\
		MACRO(LiteralBoolean, LITERAL_BOOLEAN_MEMBERS)\
		MACRO(LiteralNumber, LITERAL_NUMBER_MEMBERS)\
		MACRO(LiteralString, LITERAL_STRING_MEMBERS)\
		MACRO(LiteralField, LITERAL_FIELD_MEMBERS)\
		MACRO(LiteralObject, LITERAL_OBJECT_MEMBERS)\
		MACRO(BinaryExpression, BINARY_EXPRESSION_MEMBERS)\
		MACRO(UnaryExpression, UNARY_EXPRESSION_MEMBERS)\
		MACRO(IdentifierExpression, IDENTIFIER_EXPRESSION_MEMBERS)\
		MACRO(VariableDefinitionExpression, VARIABLEDEFINITION_EXPRESSION_MEMBERS)\
		MACRO(ListExpression, LIST_EXPRESSION_MEMBERS)\
		MACRO(BlockStatement, BLOCK_EXPRESSION_MEMBERS)\
		MACRO(LabeledStatement, LABELED_EXPRESSION_MEMBERS)\
		MACRO(IfStatement, IF_EXPRESSION_MEMBERS)\
		MACRO(SwitchStatement, SWITCH_EXPRESSION_MEMBERS)\
		MACRO(CaseStatement, CASE_EXPRESSION_MEMBERS)\
		MACRO(WhileStatement, WHILE_EXPRESSION_MEMBERS)\
		MACRO(ForStatement, FOR_EXPRESSION_MEMBERS)\
		MACRO(FunctionDeclaration, FUNCTION_EXPRESSION_MEMBERS)\
		MACRO(TopStatements, TOP_EXPRESSION_MEMBERS)\
		MACRO(EmptyExpression, NO_MEMBERS)\
		MACRO(Call, CALL_EXPRESSION_MEMBERS)\
		MACRO(MemberAccess, MEMBER_ACCESS_EXPRESSION_MEMBERS)\
		MACRO(Break, MEMBER_NO_MEMBERS)\
		MACRO(Continue, MEMBER_NO_MEMBERS)