Website Summary Files Commits Branches @commit @diff @stats
path: root / JSImpl / src / ExpressionDefinitions.h
blob: b1b2595848b3484d71c08c2ff6efaf2b05ea82c5 (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
#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)