diff -r 000000000000 -r 4f2f89ce4247 JavaScriptCore/parser/SyntaxChecker.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/JavaScriptCore/parser/SyntaxChecker.h Fri Sep 17 09:02:29 2010 +0300 @@ -0,0 +1,195 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef SyntaxChecker_h +#define SyntaxChecker_h + +namespace JSC { +class SyntaxChecker { +public: + SyntaxChecker(JSGlobalData* , Lexer*) + { + } + + typedef SyntaxChecker FunctionBodyBuilder; + + typedef int Expression; + typedef int SourceElements; + typedef int Arguments; + typedef int Comma; + struct Property { + ALWAYS_INLINE Property(void* = 0) + : type((PropertyNode::Type)0) + { + } + ALWAYS_INLINE Property(const Identifier* ident, PropertyNode::Type ty) + : name(ident) + , type(ty) + { + } + ALWAYS_INLINE Property(PropertyNode::Type ty) + : name(0) + , type(ty) + { + } + ALWAYS_INLINE bool operator!() { return !type; } + const Identifier* name; + PropertyNode::Type type; + }; + typedef int PropertyList; + typedef int ElementList; + typedef int ArgumentsList; + typedef int FormalParameterList; + typedef int FunctionBody; + typedef int Statement; + typedef int ClauseList; + typedef int Clause; + typedef int ConstDeclList; + typedef int BinaryOperand; + + static const bool CreatesAST = false; + + int createSourceElements() { return 1; } + int makeFunctionCallNode(int, int, int, int, int) { return 1; } + void appendToComma(int, int) { } + int createCommaExpr(int, int) { return 1; } + int makeAssignNode(int, Operator, int, bool, bool, int, int, int) { return 1; } + int makePrefixNode(int, Operator, int, int, int) { return 1; } + int makePostfixNode(int, Operator, int, int, int) { return 1; } + int makeTypeOfNode(int) { return 1; } + int makeDeleteNode(int, int, int, int) { return 1; } + int makeNegateNode(int) { return 1; } + int makeBitwiseNotNode(int) { return 1; } + int createLogicalNot(int) { return 1; } + int createUnaryPlus(int) { return 1; } + int createVoid(int) { return 1; } + int thisExpr() { return 1; } + int createResolve(const Identifier*, int) { return 1; } + int createObjectLiteral() { return 1; } + int createObjectLiteral(int) { return 1; } + int createArray(int) { return 1; } + int createArray(int, int) { return 1; } + int createNumberExpr(double) { return 1; } + int createString(const Identifier*) { return 1; } + int createBoolean(bool) { return 1; } + int createNull() { return 1; } + int createBracketAccess(int, int, bool, int, int, int) { return 1; } + int createDotAccess(int, const Identifier&, int, int, int) { return 1; } + int createRegex(const Identifier&, const Identifier&, int) { return 1; } + int createNewExpr(int, int, int, int, int) { return 1; } + int createNewExpr(int, int, int) { return 1; } + int createConditionalExpr(int, int, int) { return 1; } + int createAssignResolve(const Identifier&, int, bool, int, int, int) { return 1; } + int createFunctionExpr(const Identifier*, int, int, int, int, int, int) { return 1; } + int createFunctionBody() { return 1; } + int createArguments() { return 1; } + int createArguments(int) { return 1; } + int createArgumentsList(int) { return 1; } + int createArgumentsList(int, int) { return 1; } + template Property createProperty(const Identifier* name, int, PropertyNode::Type type) + { + ASSERT(name); + if (!complete) + return Property(type); + return Property(name, type); + } + template Property createProperty(JSGlobalData* globalData, double name, int, PropertyNode::Type type) + { + if (!complete) + return Property(type); + return Property(&globalData->parser->arena().identifierArena().makeNumericIdentifier(globalData, name), type); + } + int createPropertyList(Property) { return 1; } + int createPropertyList(Property, int) { return 1; } + int createElementList(int, int) { return 1; } + int createElementList(int, int, int) { return 1; } + int createFormalParameterList(const Identifier&) { return 1; } + int createFormalParameterList(int, const Identifier&) { return 1; } + int createClause(int, int) { return 1; } + int createClauseList(int) { return 1; } + int createClauseList(int, int) { return 1; } + void setUsesArguments(int) { } + int createFuncDeclStatement(const Identifier*, int, int, int, int, int, int) { return 1; } + int createBlockStatement(int, int, int) { return 1; } + int createExprStatement(int, int, int) { return 1; } + int createIfStatement(int, int, int, int) { return 1; } + int createIfStatement(int, int, int, int, int) { return 1; } + int createForLoop(int, int, int, int, bool, int, int) { return 1; } + int createForInLoop(const Identifier*, int, int, int, int, int, int, int, int, int, int) { return 1; } + int createForInLoop(int, int, int, int, int, int, int, int) { return 1; } + int createEmptyStatement() { return 1; } + int createVarStatement(int, int, int) { return 1; } + int createReturnStatement(int, int, int, int, int) { return 1; } + int createBreakStatement(int, int, int, int) { return 1; } + int createBreakStatement(const Identifier*, int, int, int, int) { return 1; } + int createContinueStatement(int, int, int, int) { return 1; } + int createContinueStatement(const Identifier*, int, int, int, int) { return 1; } + int createTryStatement(int, const Identifier*, bool, int, int, int, int) { return 1; } + int createSwitchStatement(int, int, int, int, int, int) { return 1; } + int createWhileStatement(int, int, int, int) { return 1; } + int createWithStatement(int, int, int, int, int, int) { return 1; } + int createDoWhileStatement(int, int, int, int) { return 1; } + int createLabelStatement(const Identifier*, int, int, int) { return 1; } + int createThrowStatement(int, int, int, int, int) { return 1; } + int createDebugger(int, int) { return 1; } + int createConstStatement(int, int, int) { return 1; } + int appendConstDecl(int, const Identifier*, int) { return 1; } + template Property createGetterOrSetterProperty(PropertyNode::Type type, const Identifier* name, int, int, int, int, int, int) + { + ASSERT(name); + if (!strict) + return Property(type); + return Property(name, type); + } + + void appendStatement(int, int) { } + void addVar(const Identifier*, bool) { } + int combineCommaNodes(int, int) { return 1; } + int evalCount() const { return 0; } + void appendBinaryExpressionInfo(int& operandStackDepth, int, int, int, int, bool) { operandStackDepth++; } + + // Logic to handle datastructures used during parsing of binary expressions + void operatorStackPop(int& operatorStackDepth) { operatorStackDepth--; } + bool operatorStackHasHigherPrecedence(int&, int) { return true; } + BinaryOperand getFromOperandStack(int) { return 1; } + void shrinkOperandStackBy(int& operandStackDepth, int amount) { operandStackDepth -= amount; } + void appendBinaryOperation(int& operandStackDepth, int&, BinaryOperand, BinaryOperand) { operandStackDepth++; } + void operatorStackAppend(int& operatorStackDepth, int, int) { operatorStackDepth++; } + int popOperandStack(int&) { return 1; } + + void appendUnaryToken(int&, int, int) { } + int unaryTokenStackLastType(int&) { ASSERT_NOT_REACHED(); return 1; } + int unaryTokenStackLastStart(int&) { ASSERT_NOT_REACHED(); return 1; } + void unaryTokenStackRemoveLast(int&) { } + + void assignmentStackAppend(int, int, int, int, int, Operator) { } + int createAssignment(int, int, int, int, int) { ASSERT_NOT_REACHED(); return 1; } + const Identifier& getName(const Property& property) { ASSERT(property.name); return *property.name; } + PropertyNode::Type getType(const Property& property) { return property.type; } +}; + +} + +#endif