106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen/* 206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * Copyright (C) 2010 Apple Inc. All rights reserved. 306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * 406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * Redistribution and use in source and binary forms, with or without 506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * modification, are permitted provided that the following conditions 606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * are met: 706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * 1. Redistributions of source code must retain the above copyright 806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * notice, this list of conditions and the following disclaimer. 906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * 2. Redistributions in binary form must reproduce the above copyright 1006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * notice, this list of conditions and the following disclaimer in the 1106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * documentation and/or other materials provided with the distribution. 1206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * 1306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 1406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 1506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 1706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 2306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * THE POSSIBILITY OF SUCH DAMAGE. 2406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen */ 2506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 2606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#ifndef JSParser_h 2706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#define JSParser_h 2806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 2906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsennamespace JSC { 3006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 31a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochclass ExecState; 3268513a70bcd92384395513322f1b801e7bf9c729Steve Blockclass FunctionParameters; 3306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenclass Identifier; 34f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass JSGlobalData; 35e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeclass SourceCode; 36e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 37e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeenum { 38e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke UnaryOpTokenFlag = 64, 39967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch KeywordTokenFlag = 128, 40967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch BinaryOpTokenPrecedenceShift = 8, 41e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke BinaryOpTokenAllowsInPrecedenceAdditionalShift = 4, 42967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch BinaryOpTokenPrecedenceMask = 15 << BinaryOpTokenPrecedenceShift, 43e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}; 44e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 45e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#define BINARY_OP_PRECEDENCE(prec) (((prec) << BinaryOpTokenPrecedenceShift) | ((prec) << (BinaryOpTokenPrecedenceShift + BinaryOpTokenAllowsInPrecedenceAdditionalShift))) 46e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#define IN_OP_PRECEDENCE(prec) ((prec) << (BinaryOpTokenPrecedenceShift + BinaryOpTokenAllowsInPrecedenceAdditionalShift)) 4706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 4806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenenum JSTokenType { 49967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch NULLTOKEN = KeywordTokenFlag, 50e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke TRUETOKEN, 51e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke FALSETOKEN, 52e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke BREAK, 53e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke CASE, 54e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke DEFAULT, 55e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke FOR, 56e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke NEW, 57e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke VAR, 58e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke CONSTTOKEN, 59e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke CONTINUE, 60e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke FUNCTION, 61e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke RETURN, 62e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke IF, 63e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke THISTOKEN, 64e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke DO, 65e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke WHILE, 66e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke SWITCH, 67e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke WITH, 68e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke RESERVED, 69e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke THROW, 70e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke TRY, 71e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke CATCH, 72e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke FINALLY, 73e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke DEBUGGER, 74e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ELSE, 75967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch OPENBRACE = 0, 76e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke CLOSEBRACE, 77e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke OPENPAREN, 78e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke CLOSEPAREN, 79e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke OPENBRACKET, 80e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke CLOSEBRACKET, 81e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke COMMA, 82e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke QUESTION, 83e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke NUMBER, 84e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke IDENT, 85e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke STRING, 86e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke SEMICOLON, 87e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke COLON, 88e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke DOT, 89e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ERRORTOK, 90e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke EOFTOK, 91e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke EQUAL, 92e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke PLUSEQUAL, 93e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke MINUSEQUAL, 94e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke MULTEQUAL, 95e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke DIVEQUAL, 96e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke LSHIFTEQUAL, 97e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke RSHIFTEQUAL, 98e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke URSHIFTEQUAL, 99e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ANDEQUAL, 100e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke MODEQUAL, 101e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke XOREQUAL, 102e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke OREQUAL, 103e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke LastUntaggedToken, 104e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 105e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke // Begin tagged tokens 106e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke PLUSPLUS = 0 | UnaryOpTokenFlag, 107e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke MINUSMINUS = 1 | UnaryOpTokenFlag, 108e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke EXCLAMATION = 2 | UnaryOpTokenFlag, 109e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke TILDE = 3 | UnaryOpTokenFlag, 110e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke AUTOPLUSPLUS = 4 | UnaryOpTokenFlag, 111e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke AUTOMINUSMINUS = 5 | UnaryOpTokenFlag, 112967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch TYPEOF = 6 | UnaryOpTokenFlag | KeywordTokenFlag, 113967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch VOIDTOKEN = 7 | UnaryOpTokenFlag | KeywordTokenFlag, 114967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch DELETETOKEN = 8 | UnaryOpTokenFlag | KeywordTokenFlag, 115e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke OR = 0 | BINARY_OP_PRECEDENCE(1), 116e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke AND = 1 | BINARY_OP_PRECEDENCE(2), 117e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke BITOR = 2 | BINARY_OP_PRECEDENCE(3), 118e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke BITXOR = 3 | BINARY_OP_PRECEDENCE(4), 119e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke BITAND = 4 | BINARY_OP_PRECEDENCE(5), 120e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke EQEQ = 5 | BINARY_OP_PRECEDENCE(6), 121e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke NE = 6 | BINARY_OP_PRECEDENCE(6), 122e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke STREQ = 7 | BINARY_OP_PRECEDENCE(6), 123e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke STRNEQ = 8 | BINARY_OP_PRECEDENCE(6), 124e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke LT = 9 | BINARY_OP_PRECEDENCE(7), 125e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke GT = 10 | BINARY_OP_PRECEDENCE(7), 126e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke LE = 11 | BINARY_OP_PRECEDENCE(7), 127e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke GE = 12 | BINARY_OP_PRECEDENCE(7), 128967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch INSTANCEOF = 13 | BINARY_OP_PRECEDENCE(7) | KeywordTokenFlag, 129967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch INTOKEN = 14 | IN_OP_PRECEDENCE(7) | KeywordTokenFlag, 130e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke LSHIFT = 15 | BINARY_OP_PRECEDENCE(8), 131e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke RSHIFT = 16 | BINARY_OP_PRECEDENCE(8), 132e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke URSHIFT = 17 | BINARY_OP_PRECEDENCE(8), 133e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke PLUS = 18 | BINARY_OP_PRECEDENCE(9) | UnaryOpTokenFlag, 134e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke MINUS = 19 | BINARY_OP_PRECEDENCE(9) | UnaryOpTokenFlag, 135e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke TIMES = 20 | BINARY_OP_PRECEDENCE(10), 136e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke DIVIDE = 21 | BINARY_OP_PRECEDENCE(10), 137e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke MOD = 22 | BINARY_OP_PRECEDENCE(10) 13806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}; 13906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 14006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenunion JSTokenData { 14106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int intValue; 14206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen double doubleValue; 14306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen const Identifier* ident; 14406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}; 14506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 14606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenstruct JSTokenInfo { 147e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke JSTokenInfo() : line(0) {} 148e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke int line; 149e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke int startOffset; 150e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke int endOffset; 15106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}; 152e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 15306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenstruct JSToken { 154e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke JSTokenType m_type; 15506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen JSTokenData m_data; 15606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen JSTokenInfo m_info; 15706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}; 15806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 159a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochenum JSParserStrictness { JSParseNormal, JSParseStrict }; 160a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochenum JSParserMode { JSParseProgramCode, JSParseFunctionCode }; 161a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochconst char* jsParse(JSGlobalData*, FunctionParameters*, JSParserStrictness, JSParserMode, const SourceCode*); 16306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 16406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif // JSParser_h 165