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.
32 class FunctionParameters
;
38 UnaryOpTokenFlag
= 64,
39 KeywordTokenFlag
= 128,
40 BinaryOpTokenPrecedenceShift
= 8,
41 BinaryOpTokenAllowsInPrecedenceAdditionalShift
= 4,
42 BinaryOpTokenPrecedenceMask
= 15 << BinaryOpTokenPrecedenceShift
,
45 #define BINARY_OP_PRECEDENCE(prec) (((prec) << BinaryOpTokenPrecedenceShift) | ((prec) << (BinaryOpTokenPrecedenceShift + BinaryOpTokenAllowsInPrecedenceAdditionalShift)))
46 #define IN_OP_PRECEDENCE(prec) ((prec) << (BinaryOpTokenPrecedenceShift + BinaryOpTokenAllowsInPrecedenceAdditionalShift))
49 NULLTOKEN
= KeywordTokenFlag
,
105 // Begin tagged tokens
106 PLUSPLUS
= 0 | UnaryOpTokenFlag
,
107 MINUSMINUS
= 1 | UnaryOpTokenFlag
,
108 EXCLAMATION
= 2 | UnaryOpTokenFlag
,
109 TILDE
= 3 | UnaryOpTokenFlag
,
110 AUTOPLUSPLUS
= 4 | UnaryOpTokenFlag
,
111 AUTOMINUSMINUS
= 5 | UnaryOpTokenFlag
,
112 TYPEOF
= 6 | UnaryOpTokenFlag
| KeywordTokenFlag
,
113 VOIDTOKEN
= 7 | UnaryOpTokenFlag
| KeywordTokenFlag
,
114 DELETETOKEN
= 8 | UnaryOpTokenFlag
| KeywordTokenFlag
,
115 OR
= 0 | BINARY_OP_PRECEDENCE(1),
116 AND
= 1 | BINARY_OP_PRECEDENCE(2),
117 BITOR
= 2 | BINARY_OP_PRECEDENCE(3),
118 BITXOR
= 3 | BINARY_OP_PRECEDENCE(4),
119 BITAND
= 4 | BINARY_OP_PRECEDENCE(5),
120 EQEQ
= 5 | BINARY_OP_PRECEDENCE(6),
121 NE
= 6 | BINARY_OP_PRECEDENCE(6),
122 STREQ
= 7 | BINARY_OP_PRECEDENCE(6),
123 STRNEQ
= 8 | BINARY_OP_PRECEDENCE(6),
124 LT
= 9 | BINARY_OP_PRECEDENCE(7),
125 GT
= 10 | BINARY_OP_PRECEDENCE(7),
126 LE
= 11 | BINARY_OP_PRECEDENCE(7),
127 GE
= 12 | BINARY_OP_PRECEDENCE(7),
128 INSTANCEOF
= 13 | BINARY_OP_PRECEDENCE(7) | KeywordTokenFlag
,
129 INTOKEN
= 14 | IN_OP_PRECEDENCE(7) | KeywordTokenFlag
,
130 LSHIFT
= 15 | BINARY_OP_PRECEDENCE(8),
131 RSHIFT
= 16 | BINARY_OP_PRECEDENCE(8),
132 URSHIFT
= 17 | BINARY_OP_PRECEDENCE(8),
133 PLUS
= 18 | BINARY_OP_PRECEDENCE(9) | UnaryOpTokenFlag
,
134 MINUS
= 19 | BINARY_OP_PRECEDENCE(9) | UnaryOpTokenFlag
,
135 TIMES
= 20 | BINARY_OP_PRECEDENCE(10),
136 DIVIDE
= 21 | BINARY_OP_PRECEDENCE(10),
137 MOD
= 22 | BINARY_OP_PRECEDENCE(10)
143 const Identifier
* ident
;
147 JSTokenInfo() : line(0) {}
159 enum JSParserStrictness
{ JSParseNormal
, JSParseStrict
};
160 enum JSParserMode
{ JSParseProgramCode
, JSParseFunctionCode
};
162 const char* jsParse(JSGlobalData
*, FunctionParameters
*, JSParserStrictness
, JSParserMode
, const SourceCode
*);