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__]]
|