2 * Copyright (C) 2010 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
34 class FunctionParameters;
40 UnaryOpTokenFlag = 64,
41 KeywordTokenFlag = 128,
42 BinaryOpTokenPrecedenceShift = 8,
43 BinaryOpTokenAllowsInPrecedenceAdditionalShift = 4,
44 BinaryOpTokenPrecedenceMask = 15 << BinaryOpTokenPrecedenceShift,
47 #define BINARY_OP_PRECEDENCE(prec) (((prec) << BinaryOpTokenPrecedenceShift) | ((prec) << (BinaryOpTokenPrecedenceShift + BinaryOpTokenAllowsInPrecedenceAdditionalShift)))
48 #define IN_OP_PRECEDENCE(prec) ((prec) << (BinaryOpTokenPrecedenceShift + BinaryOpTokenAllowsInPrecedenceAdditionalShift))
51 NULLTOKEN = KeywordTokenFlag,
108 // Begin tagged tokens
109 PLUSPLUS = 0 | UnaryOpTokenFlag,
110 MINUSMINUS = 1 | UnaryOpTokenFlag,
111 EXCLAMATION = 2 | UnaryOpTokenFlag,
112 TILDE = 3 | UnaryOpTokenFlag,
113 AUTOPLUSPLUS = 4 | UnaryOpTokenFlag,
114 AUTOMINUSMINUS = 5 | UnaryOpTokenFlag,
115 TYPEOF = 6 | UnaryOpTokenFlag | KeywordTokenFlag,
116 VOIDTOKEN = 7 | UnaryOpTokenFlag | KeywordTokenFlag,
117 DELETETOKEN = 8 | UnaryOpTokenFlag | KeywordTokenFlag,
118 OR = 0 | BINARY_OP_PRECEDENCE(1),
119 AND = 1 | BINARY_OP_PRECEDENCE(2),
120 BITOR = 2 | BINARY_OP_PRECEDENCE(3),
121 BITXOR = 3 | BINARY_OP_PRECEDENCE(4),
122 BITAND = 4 | BINARY_OP_PRECEDENCE(5),
123 EQEQ = 5 | BINARY_OP_PRECEDENCE(6),
124 NE = 6 | BINARY_OP_PRECEDENCE(6),
125 STREQ = 7 | BINARY_OP_PRECEDENCE(6),
126 STRNEQ = 8 | BINARY_OP_PRECEDENCE(6),
127 LT = 9 | BINARY_OP_PRECEDENCE(7),
128 GT = 10 | BINARY_OP_PRECEDENCE(7),
129 LE = 11 | BINARY_OP_PRECEDENCE(7),
130 GE = 12 | BINARY_OP_PRECEDENCE(7),
131 INSTANCEOF = 13 | BINARY_OP_PRECEDENCE(7) | KeywordTokenFlag,
132 INTOKEN = 14 | IN_OP_PRECEDENCE(7) | KeywordTokenFlag,
133 LSHIFT = 15 | BINARY_OP_PRECEDENCE(8),
134 RSHIFT = 16 | BINARY_OP_PRECEDENCE(8),
135 URSHIFT = 17 | BINARY_OP_PRECEDENCE(8),
136 PLUS = 18 | BINARY_OP_PRECEDENCE(9) | UnaryOpTokenFlag,
137 MINUS = 19 | BINARY_OP_PRECEDENCE(9) | UnaryOpTokenFlag,
138 TIMES = 20 | BINARY_OP_PRECEDENCE(10),
139 DIVIDE = 21 | BINARY_OP_PRECEDENCE(10),
140 MOD = 22 | BINARY_OP_PRECEDENCE(10)
146 const Identifier* ident;
150 JSTokenInfo() : line(0) {}
162 enum JSParserStrictness { JSParseNormal, JSParseStrict };
163 enum JSParserMode { JSParseProgramCode, JSParseFunctionCode };
165 UString jsParse(JSGlobalData*, FunctionParameters*, JSParserStrictness, JSParserMode, const SourceCode*);