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 SyntaxChecker_h 2706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#define SyntaxChecker_h 2806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <yarr/YarrSyntaxChecker.h> 3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsennamespace JSC { 3206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenclass SyntaxChecker { 3306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenpublic: 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch struct BinaryExprContext { 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch BinaryExprContext(SyntaxChecker& context) 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : m_context(&context) 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_context->m_topBinaryExprs.append(m_context->m_topBinaryExpr); 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_context->m_topBinaryExpr = 0; 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ~BinaryExprContext() 4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_context->m_topBinaryExpr = m_context->m_topBinaryExprs.last(); 4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_context->m_topBinaryExprs.removeLast(); 4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch private: 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch SyntaxChecker* m_context; 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }; 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch struct UnaryExprContext { 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch UnaryExprContext(SyntaxChecker& context) 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : m_context(&context) 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_context->m_topUnaryTokens.append(m_context->m_topUnaryToken); 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_context->m_topUnaryToken = 0; 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ~UnaryExprContext() 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_context->m_topUnaryToken = m_context->m_topUnaryTokens.last(); 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_context->m_topUnaryTokens.removeLast(); 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch private: 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch SyntaxChecker* m_context; 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }; 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 65e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke SyntaxChecker(JSGlobalData* , Lexer*) 6606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen { 6706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen } 6806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 6906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen typedef SyntaxChecker FunctionBodyBuilder; 70a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch enum { NoneExpr = 0, 71a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ResolveEvalExpr, ResolveExpr, NumberExpr, StringExpr, 72a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ThisExpr, NullExpr, BoolExpr, RegExpExpr, ObjectLiteralExpr, 73a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch FunctionExpr, BracketExpr, DotExpr, CallExpr, 74a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch NewExpr, PreExpr, PostExpr, UnaryExpr, BinaryExpr, 75a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ConditionalExpr, AssignmentExpr, TypeofExpr, 76a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch DeleteExpr, ArrayLiteralExpr }; 77a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch typedef int ExpressionType; 7806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 79a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch typedef ExpressionType Expression; 8006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen typedef int SourceElements; 8106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen typedef int Arguments; 82a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch typedef ExpressionType Comma; 83e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke struct Property { 84e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ALWAYS_INLINE Property(void* = 0) 85e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke : type((PropertyNode::Type)0) 86e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke { 87e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke } 88e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ALWAYS_INLINE Property(const Identifier* ident, PropertyNode::Type ty) 89e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke : name(ident) 90e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke , type(ty) 91e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke { 92e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke } 93e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ALWAYS_INLINE Property(PropertyNode::Type ty) 94e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke : name(0) 95e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke , type(ty) 96e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke { 97e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke } 98e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ALWAYS_INLINE bool operator!() { return !type; } 99e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke const Identifier* name; 100e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke PropertyNode::Type type; 101e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke }; 10206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen typedef int PropertyList; 10306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen typedef int ElementList; 10406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen typedef int ArgumentsList; 10506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen typedef int FormalParameterList; 10606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen typedef int FunctionBody; 10706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen typedef int Statement; 10806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen typedef int ClauseList; 10906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen typedef int Clause; 11006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen typedef int ConstDeclList; 11106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen typedef int BinaryOperand; 11206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 11306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen static const bool CreatesAST = false; 11468513a70bcd92384395513322f1b801e7bf9c729Steve Block static const bool NeedsFreeVariableInfo = false; 115ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch static const bool CanUseFunctionCache = true; 11606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 11706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createSourceElements() { return 1; } 118a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType makeFunctionCallNode(int, int, int, int, int) { return CallExpr; } 119a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch void appendToComma(ExpressionType& base, ExpressionType right) { base = right; } 120a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createCommaExpr(ExpressionType, ExpressionType right) { return right; } 121a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType makeAssignNode(ExpressionType, Operator, ExpressionType, bool, bool, int, int, int) { return AssignmentExpr; } 122a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType makePrefixNode(ExpressionType, Operator, int, int, int) { return PreExpr; } 123a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType makePostfixNode(ExpressionType, Operator, int, int, int) { return PostExpr; } 124a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType makeTypeOfNode(ExpressionType) { return TypeofExpr; } 125a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType makeDeleteNode(ExpressionType, int, int, int) { return DeleteExpr; } 126a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType makeNegateNode(ExpressionType) { return UnaryExpr; } 127a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType makeBitwiseNotNode(ExpressionType) { return UnaryExpr; } 128a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createLogicalNot(ExpressionType) { return UnaryExpr; } 129a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createUnaryPlus(ExpressionType) { return UnaryExpr; } 130a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createVoid(ExpressionType) { return UnaryExpr; } 131a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType thisExpr() { return ThisExpr; } 132a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createResolve(const Identifier*, int) { return ResolveExpr; } 133a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createObjectLiteral() { return ObjectLiteralExpr; } 134a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createObjectLiteral(int) { return ObjectLiteralExpr; } 135a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createArray(int) { return ArrayLiteralExpr; } 136a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createArray(int, int) { return ArrayLiteralExpr; } 137a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createNumberExpr(double) { return NumberExpr; } 138a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createString(const Identifier*) { return StringExpr; } 139a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createBoolean(bool) { return BoolExpr; } 140a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createNull() { return NullExpr; } 141a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createBracketAccess(ExpressionType, ExpressionType, bool, int, int, int) { return BracketExpr; } 142a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createDotAccess(ExpressionType, const Identifier&, int, int, int) { return DotExpr; } 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ExpressionType createRegExp(const Identifier& pattern, const Identifier&, int) { return Yarr::checkSyntax(pattern.ustring()) ? 0 : RegExpExpr; } 144a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createNewExpr(ExpressionType, int, int, int, int) { return NewExpr; } 145a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createNewExpr(ExpressionType, int, int) { return NewExpr; } 146a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createConditionalExpr(ExpressionType, ExpressionType, ExpressionType) { return ConditionalExpr; } 147a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createAssignResolve(const Identifier&, ExpressionType, bool, int, int, int) { return AssignmentExpr; } 148a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ExpressionType createFunctionExpr(const Identifier*, int, int, int, int, int, int) { return FunctionExpr; } 149a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch int createFunctionBody(bool) { return 1; } 15006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createArguments() { return 1; } 15106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createArguments(int) { return 1; } 15206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createArgumentsList(int) { return 1; } 15306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createArgumentsList(int, int) { return 1; } 154e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke template <bool complete> Property createProperty(const Identifier* name, int, PropertyNode::Type type) 155e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke { 156e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ASSERT(name); 157e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke if (!complete) 158e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke return Property(type); 159e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke return Property(name, type); 160e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke } 161e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke template <bool complete> Property createProperty(JSGlobalData* globalData, double name, int, PropertyNode::Type type) 162e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke { 163e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke if (!complete) 164e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke return Property(type); 165e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke return Property(&globalData->parser->arena().identifierArena().makeNumericIdentifier(globalData, name), type); 166e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke } 167e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke int createPropertyList(Property) { return 1; } 168e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke int createPropertyList(Property, int) { return 1; } 16906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createElementList(int, int) { return 1; } 17006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createElementList(int, int, int) { return 1; } 17106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createFormalParameterList(const Identifier&) { return 1; } 17206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createFormalParameterList(int, const Identifier&) { return 1; } 17306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createClause(int, int) { return 1; } 17406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createClauseList(int) { return 1; } 17506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createClauseList(int, int) { return 1; } 17606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void setUsesArguments(int) { } 17706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createFuncDeclStatement(const Identifier*, int, int, int, int, int, int) { return 1; } 17806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createBlockStatement(int, int, int) { return 1; } 17906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createExprStatement(int, int, int) { return 1; } 18006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createIfStatement(int, int, int, int) { return 1; } 18106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createIfStatement(int, int, int, int, int) { return 1; } 18206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createForLoop(int, int, int, int, bool, int, int) { return 1; } 18306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createForInLoop(const Identifier*, int, int, int, int, int, int, int, int, int, int) { return 1; } 18406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createForInLoop(int, int, int, int, int, int, int, int) { return 1; } 18506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createEmptyStatement() { return 1; } 18606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createVarStatement(int, int, int) { return 1; } 18706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createReturnStatement(int, int, int, int, int) { return 1; } 18806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createBreakStatement(int, int, int, int) { return 1; } 18906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createBreakStatement(const Identifier*, int, int, int, int) { return 1; } 19006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createContinueStatement(int, int, int, int) { return 1; } 19106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createContinueStatement(const Identifier*, int, int, int, int) { return 1; } 19206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createTryStatement(int, const Identifier*, bool, int, int, int, int) { return 1; } 19306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createSwitchStatement(int, int, int, int, int, int) { return 1; } 19406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createWhileStatement(int, int, int, int) { return 1; } 19506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createWithStatement(int, int, int, int, int, int) { return 1; } 19606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createDoWhileStatement(int, int, int, int) { return 1; } 19706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createLabelStatement(const Identifier*, int, int, int) { return 1; } 19806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createThrowStatement(int, int, int, int, int) { return 1; } 19906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createDebugger(int, int) { return 1; } 20006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createConstStatement(int, int, int) { return 1; } 20106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int appendConstDecl(int, const Identifier*, int) { return 1; } 202e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke template <bool strict> Property createGetterOrSetterProperty(PropertyNode::Type type, const Identifier* name, int, int, int, int, int, int) 203e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke { 204e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ASSERT(name); 205e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke if (!strict) 206e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke return Property(type); 207e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke return Property(name, type); 208e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke } 20906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 21006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void appendStatement(int, int) { } 21106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void addVar(const Identifier*, bool) { } 21206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int combineCommaNodes(int, int) { return 1; } 21306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int evalCount() const { return 0; } 214a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch void appendBinaryExpressionInfo(int& operandStackDepth, int expr, int, int, int, bool) 215a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 216a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!m_topBinaryExpr) 217a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_topBinaryExpr = expr; 218a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch else 219a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_topBinaryExpr = BinaryExpr; 220a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch operandStackDepth++; 221a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 22206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 22306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // Logic to handle datastructures used during parsing of binary expressions 22406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void operatorStackPop(int& operatorStackDepth) { operatorStackDepth--; } 22506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen bool operatorStackHasHigherPrecedence(int&, int) { return true; } 226a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch BinaryOperand getFromOperandStack(int) { return m_topBinaryExpr; } 22706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void shrinkOperandStackBy(int& operandStackDepth, int amount) { operandStackDepth -= amount; } 22806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void appendBinaryOperation(int& operandStackDepth, int&, BinaryOperand, BinaryOperand) { operandStackDepth++; } 22906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void operatorStackAppend(int& operatorStackDepth, int, int) { operatorStackDepth++; } 230a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch int popOperandStack(int&) { int res = m_topBinaryExpr; m_topBinaryExpr = 0; return res; } 23106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 232a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch void appendUnaryToken(int& stackDepth, int tok, int) { stackDepth = 1; m_topUnaryToken = tok; } 233a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch int unaryTokenStackLastType(int&) { return m_topUnaryToken; } 234a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch int unaryTokenStackLastStart(int&) { return 0; } 235a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch void unaryTokenStackRemoveLast(int& stackDepth) { stackDepth = 0; } 23606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 23706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void assignmentStackAppend(int, int, int, int, int, Operator) { } 23806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int createAssignment(int, int, int, int, int) { ASSERT_NOT_REACHED(); return 1; } 239f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch const Identifier& getName(const Property& property) const { ASSERT(property.name); return *property.name; } 240f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PropertyNode::Type getType(const Property& property) const { return property.type; } 241f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool isResolve(ExpressionType expr) const { return expr == ResolveExpr || expr == ResolveEvalExpr; } 242a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 243a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochprivate: 244a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch int m_topBinaryExpr; 245a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch int m_topUnaryToken; 24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<int, 8> m_topBinaryExprs; 24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<int, 8> m_topUnaryTokens; 24806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}; 24906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 25006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 25106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 25206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif 253