JSParser.h revision 967717af5423377c967781471ee106e2bb4e11c8
1/* 2 * Copyright (C) 2010 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 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. 12 * 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. 24 */ 25 26#ifndef JSParser_h 27#define JSParser_h 28 29namespace JSC { 30 31class Identifier; 32class JSGlobalData; 33class SourceCode; 34 35enum { 36 UnaryOpTokenFlag = 64, 37 KeywordTokenFlag = 128, 38 BinaryOpTokenPrecedenceShift = 8, 39 BinaryOpTokenAllowsInPrecedenceAdditionalShift = 4, 40 BinaryOpTokenPrecedenceMask = 15 << BinaryOpTokenPrecedenceShift, 41}; 42 43#define BINARY_OP_PRECEDENCE(prec) (((prec) << BinaryOpTokenPrecedenceShift) | ((prec) << (BinaryOpTokenPrecedenceShift + BinaryOpTokenAllowsInPrecedenceAdditionalShift))) 44#define IN_OP_PRECEDENCE(prec) ((prec) << (BinaryOpTokenPrecedenceShift + BinaryOpTokenAllowsInPrecedenceAdditionalShift)) 45 46enum JSTokenType { 47 NULLTOKEN = KeywordTokenFlag, 48 TRUETOKEN, 49 FALSETOKEN, 50 BREAK, 51 CASE, 52 DEFAULT, 53 FOR, 54 NEW, 55 VAR, 56 CONSTTOKEN, 57 CONTINUE, 58 FUNCTION, 59 RETURN, 60 IF, 61 THISTOKEN, 62 DO, 63 WHILE, 64 SWITCH, 65 WITH, 66 RESERVED, 67 THROW, 68 TRY, 69 CATCH, 70 FINALLY, 71 DEBUGGER, 72 ELSE, 73 OPENBRACE = 0, 74 CLOSEBRACE, 75 OPENPAREN, 76 CLOSEPAREN, 77 OPENBRACKET, 78 CLOSEBRACKET, 79 COMMA, 80 QUESTION, 81 NUMBER, 82 IDENT, 83 STRING, 84 SEMICOLON, 85 COLON, 86 DOT, 87 ERRORTOK, 88 EOFTOK, 89 EQUAL, 90 PLUSEQUAL, 91 MINUSEQUAL, 92 MULTEQUAL, 93 DIVEQUAL, 94 LSHIFTEQUAL, 95 RSHIFTEQUAL, 96 URSHIFTEQUAL, 97 ANDEQUAL, 98 MODEQUAL, 99 XOREQUAL, 100 OREQUAL, 101 LastUntaggedToken, 102 103 // Begin tagged tokens 104 PLUSPLUS = 0 | UnaryOpTokenFlag, 105 MINUSMINUS = 1 | UnaryOpTokenFlag, 106 EXCLAMATION = 2 | UnaryOpTokenFlag, 107 TILDE = 3 | UnaryOpTokenFlag, 108 AUTOPLUSPLUS = 4 | UnaryOpTokenFlag, 109 AUTOMINUSMINUS = 5 | UnaryOpTokenFlag, 110 TYPEOF = 6 | UnaryOpTokenFlag | KeywordTokenFlag, 111 VOIDTOKEN = 7 | UnaryOpTokenFlag | KeywordTokenFlag, 112 DELETETOKEN = 8 | UnaryOpTokenFlag | KeywordTokenFlag, 113 OR = 0 | BINARY_OP_PRECEDENCE(1), 114 AND = 1 | BINARY_OP_PRECEDENCE(2), 115 BITOR = 2 | BINARY_OP_PRECEDENCE(3), 116 BITXOR = 3 | BINARY_OP_PRECEDENCE(4), 117 BITAND = 4 | BINARY_OP_PRECEDENCE(5), 118 EQEQ = 5 | BINARY_OP_PRECEDENCE(6), 119 NE = 6 | BINARY_OP_PRECEDENCE(6), 120 STREQ = 7 | BINARY_OP_PRECEDENCE(6), 121 STRNEQ = 8 | BINARY_OP_PRECEDENCE(6), 122 LT = 9 | BINARY_OP_PRECEDENCE(7), 123 GT = 10 | BINARY_OP_PRECEDENCE(7), 124 LE = 11 | BINARY_OP_PRECEDENCE(7), 125 GE = 12 | BINARY_OP_PRECEDENCE(7), 126 INSTANCEOF = 13 | BINARY_OP_PRECEDENCE(7) | KeywordTokenFlag, 127 INTOKEN = 14 | IN_OP_PRECEDENCE(7) | KeywordTokenFlag, 128 LSHIFT = 15 | BINARY_OP_PRECEDENCE(8), 129 RSHIFT = 16 | BINARY_OP_PRECEDENCE(8), 130 URSHIFT = 17 | BINARY_OP_PRECEDENCE(8), 131 PLUS = 18 | BINARY_OP_PRECEDENCE(9) | UnaryOpTokenFlag, 132 MINUS = 19 | BINARY_OP_PRECEDENCE(9) | UnaryOpTokenFlag, 133 TIMES = 20 | BINARY_OP_PRECEDENCE(10), 134 DIVIDE = 21 | BINARY_OP_PRECEDENCE(10), 135 MOD = 22 | BINARY_OP_PRECEDENCE(10) 136}; 137 138union JSTokenData { 139 int intValue; 140 double doubleValue; 141 const Identifier* ident; 142}; 143 144struct JSTokenInfo { 145 JSTokenInfo() : line(0) {} 146 int line; 147 int startOffset; 148 int endOffset; 149}; 150 151struct JSToken { 152 JSTokenType m_type; 153 JSTokenData m_data; 154 JSTokenInfo m_info; 155}; 156 157int jsParse(JSGlobalData*, const SourceCode*); 158} 159#endif // JSParser_h 160