File: OOJSExprNodeHelpers.h

package info (click to toggle)
oolite 1.77.1-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 41,264 kB
  • ctags: 5,362
  • sloc: objc: 132,090; ansic: 10,457; python: 2,225; sh: 1,325; makefile: 332; perl: 259; xml: 125; php: 5
file content (171 lines) | stat: -rw-r--r-- 6,900 bytes parent folder | download
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#import "OOJSExprNode.h"
#import "OOFunctionAttributes.h"


// Tokens
// Identifier
#define EX_ID(x)				[OOJSIdentifierExprNode nodeWithIdentifier:(x)]
// String
#define EX_STR(x)				[OOJSStringLiteralExprNode nodeWithStringValue:(x)]
// Integer
#define EX_INT(x)				[OOJSIntLiteralExprNode nodeWithIntValue:(x)]
// Double
#define EX_DOUBLE(x)			[OOJSDoubleLiteralExprNode nodeWithDoubleValue:(x)]

// Returns int or double literal, or nil if invalid.
OOJSExprNode *OOJSExprNumberFromLiteral(NSString *literal);

// Keywords
// true
#define EX_TRUE					[OOJSBoolLiteralExprNode nodeWithBoolValue:YES]
// false
#define EX_FALSE				[OOJSBoolLiteralExprNode nodeWithBoolValue:NO]
// undefined
#define EX_UNDEFINED			EX_ID(@"undefined")
// null
#define EX_NULL					EX_ID(@"null")

// Precedence 1 operators
// x.y or x[y]
#define EX_PROP(x, y)			[OOJSPropertyAccessExprNode nodeWithObject:(x) property:(y)]
#define EX_THIS_PROP(y)			[OOJSPropertyAccessExprNode nodeWithObject:@"this" property:(y)]
// new x
#define EX_NEW(x)				[OOJSNewOpExprNode nodeWithSubExpression:(x)]

// Precedence 2 operator
// f(...)
#define EX_CALL(f, ...)			[OOJSFunctionCallExprNode nodeWithFunction:(f) arguments:[NSArray arrayWithObjects: __VA_ARGS__, nil]]
// f()
#define EX_VOID_CALL(f)			[OOJSFunctionCallExprNode nodeWithFunction:(f) arguments:nil]

// Precedence 3 operators
// x++
#define EX_POST_INCR(x)			[OOJSPostfixIncrementOpExprNode nodeWithSubExpression:(x)]
// x--
#define EX_POST_DECR(x)			[OOJSPostfixDecrementOpExprNode nodeWithSubExpression:(x)]

// Precedence 4 operators
// ++x
#define EX_PRE_INCR(x)			[OOJSPrefixIncrementOpExprNode nodeWithSubExpression:(x)]
// --x
#define EX_PRE_DECR(x)			[OOJSPrefixDecrementOpExprNode nodeWithSubExpression:(x)]
// delete x
#define EX_DELETE(x)			[OOJSDeleteOpExprNode nodeWithSubExpression:(x)]
// void x
#define EX_VOID(x)				[OOJSVoidOpExprNode nodeWithSubExpression:(x)]
// typeof x
#define EX_TYPEOF(x)			[OOJSTypeofOpExprNode nodeWithSubExpression:(x)]
// +x
#define EX_UNRY_PLUS(x)			[OOJSUnaryPlusOpExprNode nodeWithSubExpression:(x)]
// -x
#define EX_UNRY_MINUS(x)		[OOJSUnaryMinusOpExprNode nodeWithSubExpression:(x)]
// ~x
#define EX_BITNOT(x)			[OOJSBitwiseNotOpExprNode nodeWithSubExpression:(x)]
// !x
#define EX_NOT(x)				[OOJSLogicalNotOpExprNode nodeWithSubExpression:(x)]

// Precedence 5 operators
// x * y
#define EX_MULTIPLY(x, y)		[OOJSMultiplyOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x / y
#define EX_DIVIDE(x, y)			[OOJSDivideOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x % y
#define EX_REMAINDER(x, y)		[OOJSRemainderOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]

// Precedence 6 operators
// x + y
#define EX_ADD(x, y)			[OOJSAddOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x - y
#define EX_SUBTRACT(x, y)		[OOJSSubtractOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]

// Precedence 7 operators
// x << y
#define EX_SH_LEFT(x, y)		[OOJSLeftShiftOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x >> y
#define EX_SH_RIGHT(x, y)		[OOJSRightShiftOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x >>> y
#define EX_SH_RIGHT_U(x, y)		[OOJSUnsignedRightShiftOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]

// Precedence 8 operators
// x < y
#define EX_LESS(x, y)			[OOJSLessThanOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x > y
#define EX_GRTR(x, y)			[OOJSGreaterThanOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x <= y
#define EX_LESS_EQ(x, y)		[OOJSLessThanOrEqualOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x >= y
#define EX_GRTR_EQ(x, y)		[OOJSGreaterThanOrEqualOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x instanceof y
#define EX_INSTANCEOF(x, y)		[OOJSInstanceOfOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x in y
#define EX_IN(x, y)				[OOJSInOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]

// Precedence 9 operators
// x == y
#define EX_EQUAL(x, y)			[OOJSEqualOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x != y
#define EX_NOT_EQUAL(x, y)		[OOJSNotEqualOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x === y
#define EX_STRICT_EQUAL(x, y)	[OOJSStrictlyEqualOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x !== y
#define EX_NOT_STRICT_EQUAL(x, y) [OOJSNotStrictlyEqualOpExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]

// Precedence 10 operator
// x & y
#define EX_BITAND(x, y)			[OOJSBitwiseAndExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]

// Precedence 11 operator
// x ^ y
#define EX_BITXOR(x, y)			[OOJSBitwiseXorExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]

// Precedence 12 operator
// x | y
#define EX_BITOR(x, y)			[OOJSBitwiseOrExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]

// Precedence 13 operator
// x && y
#define EX_AND(x, y)			[OOJSLogicalAndExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]

// Precedence 14 operator
// x || y
#define EX_OR(x, y)				[OOJSLogicalOrExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]

// Precedence 15 operator
// x ? y : z
#define EX_CONDTIONAL(x, y, z)	[OOJSConditionalExprNode nodeWithCondition:(x) trueExpression:(y) falseExpression:(z)]

// Precedence 16 operators
// x = y
#define EX_ASSIGN(x, y)			[OOJSAssignExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x *= y
#define EX_MULTIPLY_ASGN(x, y)	[OOJSMultiplyAssignExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x /= y
#define EX_DIVIDE_ASGN(x, y)	[OOJSDivideAssignExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x %= y
#define EX_REMAINDER_ASGN(x, y)	[OOJSRemainderAssignExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x += y
#define EX_ADD_ASGN(x, y)		[OOJSAddAssignExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x -= y
#define EX__SUBTRACT_ASGN(x, y)	[OOJSSubtractAssignExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x <<= y
#define EX_SH_LEFT_ASGN(x, y)	[OOJSLeftShiftAssignExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x >>= y
#define EX_SH_RIGHT_ASGN(x, y)	[OOJSRightShiftAssignExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x >>>= y
#define EX_SH_RIGHT_U_ASGN(x, y) [OOJSUnsignedRightShiftAssignExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x &= y
#define EX_BITAND_ASGN(x, y)	[OOJSBitwiseAndAssignExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x ^= y
#define EX_BITXOR_ASGN(x, y)	[OOJSBitwiseXorAssignExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]
// x |= y
#define EX_BITOR_ASGN(x, y)		[OOJSBitwiseOrAssignExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]


// Precedence 17 operator
// x, y
#define EX_COMMA(x, y)			[OOJSSequentialEvaluationExprNode nodeWithLeftHandSide:(x) rightHandSide:(y)]


// Inline error message
#define EX_ERROR(x)				[OOJSErrorExprNode nodeWithMessage:(x)]
#define EX_ERROR_FMT(x, ...)	[OOJSErrorExprNode nodeWithMessage:[NSString stringWithFormat:(x), __VA_ARGS__]]