Changeset 61732 in webkit


Ignore:
Timestamp:
Jun 23, 2010 9:19:32 PM (14 years ago)
Author:
oliver@apple.com
Message:

2010-06-23 Oliver Hunt <oliver@apple.com>

Reviewed by Gavin Barraclough.

Custom-written JavaScript parser
https://bugs.webkit.org/show_bug.cgi?id=34019

Implement a recursive descent parser similar to that used by V8 and
SpiderMonkey. Greater than 2x improvement in SunSpider parsing tests.

The parser consists of a JSParser class that uses a TreeBuilder to actually
build the AST. There are currently two builders -- the ASTBuilder and
SyntaxChecker which separate the job of building an AST for code generation
and simply checking syntactic correctness.

There's still some less than ideal code remaining in the parser to allow
us to retain the existing lexing code with minimal changes. We'll tidy
this up at a later date.

  • GNUmakefile.am:
  • JavaScriptCore.gypi:
  • JavaScriptCore.pro:
  • JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • parser/ASTBuilder.h: Added. (JSC::ASTBuilder::BinaryOpInfo::BinaryOpInfo): (JSC::ASTBuilder::AssignmentInfo::AssignmentInfo): (JSC::ASTBuilder::ASTBuilder): (JSC::ASTBuilder::createSourceElements): (JSC::ASTBuilder::varDeclarations): (JSC::ASTBuilder::funcDeclarations): (JSC::ASTBuilder::features): (JSC::ASTBuilder::numConstants): (JSC::ASTBuilder::appendToComma): (JSC::ASTBuilder::createCommaExpr): (JSC::ASTBuilder::createLogicalNot): (JSC::ASTBuilder::createUnaryPlus): (JSC::ASTBuilder::createVoid): (JSC::ASTBuilder::thisExpr): (JSC::ASTBuilder::createResolve): (JSC::ASTBuilder::createObjectLiteral): (JSC::ASTBuilder::createArray): (JSC::ASTBuilder::createNumberExpr): (JSC::ASTBuilder::createString): (JSC::ASTBuilder::createBoolean): (JSC::ASTBuilder::createNull): (JSC::ASTBuilder::createBracketAccess): (JSC::ASTBuilder::createDotAccess): (JSC::ASTBuilder::createRegex): (JSC::ASTBuilder::createNewExpr): (JSC::ASTBuilder::createConditionalExpr): (JSC::ASTBuilder::createAssignResolve): (JSC::ASTBuilder::createFunctionExpr): (JSC::ASTBuilder::createFunctionBody): (JSC::ASTBuilder::createGetterOrSetterProperty): (JSC::ASTBuilder::createArguments): (JSC::ASTBuilder::createArgumentsList): (JSC::ASTBuilder::createProperty): (JSC::ASTBuilder::createPropertyList): (JSC::ASTBuilder::createElementList): (JSC::ASTBuilder::createFormalParameterList): (JSC::ASTBuilder::createClause): (JSC::ASTBuilder::createClauseList): (JSC::ASTBuilder::setUsesArguments): (JSC::ASTBuilder::createFuncDeclStatement): (JSC::ASTBuilder::createBlockStatement): (JSC::ASTBuilder::createExprStatement): (JSC::ASTBuilder::createIfStatement): (JSC::ASTBuilder::createForLoop): (JSC::ASTBuilder::createForInLoop): (JSC::ASTBuilder::createEmptyStatement): (JSC::ASTBuilder::createVarStatement): (JSC::ASTBuilder::createReturnStatement): (JSC::ASTBuilder::createBreakStatement): (JSC::ASTBuilder::createContinueStatement): (JSC::ASTBuilder::createTryStatement): (JSC::ASTBuilder::createSwitchStatement): (JSC::ASTBuilder::createWhileStatement): (JSC::ASTBuilder::createDoWhileStatement): (JSC::ASTBuilder::createLabelStatement): (JSC::ASTBuilder::createWithStatement): (JSC::ASTBuilder::createThrowStatement): (JSC::ASTBuilder::createDebugger): (JSC::ASTBuilder::createConstStatement): (JSC::ASTBuilder::appendConstDecl): (JSC::ASTBuilder::appendStatement): (JSC::ASTBuilder::addVar): (JSC::ASTBuilder::combineCommaNodes): (JSC::ASTBuilder::evalCount): (JSC::ASTBuilder::appendBinaryExpressionInfo): (JSC::ASTBuilder::operatorStackPop): (JSC::ASTBuilder::operatorStackHasHigherPrecedence): (JSC::ASTBuilder::getFromOperandStack): (JSC::ASTBuilder::shrinkOperandStackBy): (JSC::ASTBuilder::appendBinaryOperation): (JSC::ASTBuilder::operatorStackAppend): (JSC::ASTBuilder::popOperandStack): (JSC::ASTBuilder::appendUnaryToken): (JSC::ASTBuilder::unaryTokenStackLastType): (JSC::ASTBuilder::unaryTokenStackLastStart): (JSC::ASTBuilder::unaryTokenStackRemoveLast): (JSC::ASTBuilder::assignmentStackAppend): (JSC::ASTBuilder::createAssignment): (JSC::ASTBuilder::Scope::Scope): (JSC::ASTBuilder::setExceptionLocation): (JSC::ASTBuilder::incConstants): (JSC::ASTBuilder::usesThis): (JSC::ASTBuilder::usesCatch): (JSC::ASTBuilder::usesClosures): (JSC::ASTBuilder::usesArguments): (JSC::ASTBuilder::usesAssignment): (JSC::ASTBuilder::usesWith): (JSC::ASTBuilder::usesEval): (JSC::ASTBuilder::createNumber): (JSC::ASTBuilder::makeTypeOfNode): (JSC::ASTBuilder::makeDeleteNode): (JSC::ASTBuilder::makeNegateNode): (JSC::ASTBuilder::makeBitwiseNotNode): (JSC::ASTBuilder::makeMultNode): (JSC::ASTBuilder::makeDivNode): (JSC::ASTBuilder::makeAddNode): (JSC::ASTBuilder::makeSubNode): (JSC::ASTBuilder::makeLeftShiftNode): (JSC::ASTBuilder::makeRightShiftNode): (JSC::ASTBuilder::makeFunctionCallNode): (JSC::ASTBuilder::makeBinaryNode): (JSC::ASTBuilder::makeAssignNode): (JSC::ASTBuilder::makePrefixNode): (JSC::ASTBuilder::makePostfixNode):
  • parser/JSParser.cpp: Added. (JSC::JSParser::AllowInOverride::AllowInOverride): (JSC::JSParser::AllowInOverride::~AllowInOverride): (JSC::JSParser::token): (JSC::JSParser::next): (JSC::JSParser::consume): (JSC::JSParser::match): (JSC::JSParser::tokenStart): (JSC::JSParser::tokenLine): (JSC::JSParser::tokenEnd): (JSC::JSParser::): (JSC::JSParser::autoSemiColon): (JSC::JSParser::canRecurse): (JSC::JSParser::lastTokenEnd): (JSC::jsParse): (JSC::JSParser::JSParser): (JSC::JSParser::parseProgram): (JSC::JSParser::allowAutomaticSemicolon): (JSC::JSParser::parseSourceElements): (JSC::JSParser::parseVarDeclaration): (JSC::JSParser::parseConstDeclaration): (JSC::JSParser::parseDoWhileStatement): (JSC::JSParser::parseWhileStatement): (JSC::JSParser::parseVarDeclarationList): (JSC::JSParser::parseConstDeclarationList): (JSC::JSParser::parseForStatement): (JSC::JSParser::parseBreakStatement): (JSC::JSParser::parseContinueStatement): (JSC::JSParser::parseReturnStatement): (JSC::JSParser::parseThrowStatement): (JSC::JSParser::parseWithStatement): (JSC::JSParser::parseSwitchStatement): (JSC::JSParser::parseSwitchClauses): (JSC::JSParser::parseSwitchDefaultClause): (JSC::JSParser::parseTryStatement): (JSC::JSParser::parseDebuggerStatement): (JSC::JSParser::parseBlockStatement): (JSC::JSParser::parseStatement): (JSC::JSParser::parseFormalParameters): (JSC::JSParser::parseFunctionBody): (JSC::JSParser::parseFunctionInfo): (JSC::JSParser::parseFunctionDeclaration): (JSC::JSParser::parseExpressionOrLabelStatement): (JSC::JSParser::parseExpressionStatement): (JSC::JSParser::parseIfStatement): (JSC::JSParser::parseExpression): (JSC::JSParser::parseAssignmentExpression): (JSC::JSParser::parseConditionalExpression): (JSC::isUnaryOp): (JSC::JSParser::isBinaryOperator): (JSC::JSParser::parseBinaryExpression): (JSC::JSParser::parseProperty): (JSC::JSParser::parseObjectLiteral): (JSC::JSParser::parseArrayLiteral): (JSC::JSParser::parsePrimaryExpression): (JSC::JSParser::parseArguments): (JSC::JSParser::parseMemberExpression): (JSC::JSParser::parseUnaryExpression):
  • parser/JSParser.h: Added. (JSC::): (JSC::JSTokenInfo::JSTokenInfo):
  • parser/Lexer.cpp: (JSC::Lexer::lex):
  • parser/Lexer.h: (JSC::Lexer::setLastLineNumber): (JSC::Lexer::lastLineNumber):
  • parser/NodeConstructors.h: (JSC::Node::Node):
  • parser/Parser.cpp: (JSC::Parser::parse):
  • parser/SyntaxChecker.h: Added. (JSC::SyntaxChecker::SyntaxChecker): (JSC::SyntaxChecker::createSourceElements): (JSC::SyntaxChecker::makeFunctionCallNode): (JSC::SyntaxChecker::appendToComma): (JSC::SyntaxChecker::createCommaExpr): (JSC::SyntaxChecker::makeAssignNode): (JSC::SyntaxChecker::makePrefixNode): (JSC::SyntaxChecker::makePostfixNode): (JSC::SyntaxChecker::makeTypeOfNode): (JSC::SyntaxChecker::makeDeleteNode): (JSC::SyntaxChecker::makeNegateNode): (JSC::SyntaxChecker::makeBitwiseNotNode): (JSC::SyntaxChecker::createLogicalNot): (JSC::SyntaxChecker::createUnaryPlus): (JSC::SyntaxChecker::createVoid): (JSC::SyntaxChecker::thisExpr): (JSC::SyntaxChecker::createResolve): (JSC::SyntaxChecker::createObjectLiteral): (JSC::SyntaxChecker::createArray): (JSC::SyntaxChecker::createNumberExpr): (JSC::SyntaxChecker::createString): (JSC::SyntaxChecker::createBoolean): (JSC::SyntaxChecker::createNull): (JSC::SyntaxChecker::createBracketAccess): (JSC::SyntaxChecker::createDotAccess): (JSC::SyntaxChecker::createRegex): (JSC::SyntaxChecker::createNewExpr): (JSC::SyntaxChecker::createConditionalExpr): (JSC::SyntaxChecker::createAssignResolve): (JSC::SyntaxChecker::createFunctionExpr): (JSC::SyntaxChecker::createFunctionBody): (JSC::SyntaxChecker::createArguments): (JSC::SyntaxChecker::createArgumentsList): (JSC::SyntaxChecker::createProperty): (JSC::SyntaxChecker::createPropertyList): (JSC::SyntaxChecker::createElementList): (JSC::SyntaxChecker::createFormalParameterList): (JSC::SyntaxChecker::createClause): (JSC::SyntaxChecker::createClauseList): (JSC::SyntaxChecker::setUsesArguments): (JSC::SyntaxChecker::createFuncDeclStatement): (JSC::SyntaxChecker::createBlockStatement): (JSC::SyntaxChecker::createExprStatement): (JSC::SyntaxChecker::createIfStatement): (JSC::SyntaxChecker::createForLoop): (JSC::SyntaxChecker::createForInLoop): (JSC::SyntaxChecker::createEmptyStatement): (JSC::SyntaxChecker::createVarStatement): (JSC::SyntaxChecker::createReturnStatement): (JSC::SyntaxChecker::createBreakStatement): (JSC::SyntaxChecker::createContinueStatement): (JSC::SyntaxChecker::createTryStatement): (JSC::SyntaxChecker::createSwitchStatement): (JSC::SyntaxChecker::createWhileStatement): (JSC::SyntaxChecker::createWithStatement): (JSC::SyntaxChecker::createDoWhileStatement): (JSC::SyntaxChecker::createLabelStatement): (JSC::SyntaxChecker::createThrowStatement): (JSC::SyntaxChecker::createDebugger): (JSC::SyntaxChecker::createConstStatement): (JSC::SyntaxChecker::appendConstDecl): (JSC::SyntaxChecker::createGetterOrSetterProperty): (JSC::SyntaxChecker::appendStatement): (JSC::SyntaxChecker::addVar): (JSC::SyntaxChecker::combineCommaNodes): (JSC::SyntaxChecker::evalCount): (JSC::SyntaxChecker::appendBinaryExpressionInfo): (JSC::SyntaxChecker::operatorStackPop):
  • runtime/JSGlobalData.h:
  • wtf/Platform.h:
  • wtf/ThreadSpecific.h: (WTF::T):
Location:
trunk/JavaScriptCore
Files:
4 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r61726 r61732  
     12010-06-23  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Gavin Barraclough.
     4
     5        Custom-written JavaScript parser
     6        https://bugs.webkit.org/show_bug.cgi?id=34019
     7
     8        Implement a recursive descent parser similar to that used by V8 and
     9        SpiderMonkey.  Greater than 2x improvement in SunSpider parsing tests.
     10
     11        The parser consists of a JSParser class that uses a TreeBuilder to actually
     12        build the AST.  There are currently two builders -- the ASTBuilder and
     13        SyntaxChecker which separate the job of building an AST for code generation
     14        and simply checking syntactic correctness.
     15
     16        There's still some less than ideal code remaining in the parser to allow
     17        us to retain the existing lexing code with minimal changes.  We'll tidy
     18        this up at a later date.
     19
     20        * GNUmakefile.am:
     21        * JavaScriptCore.gypi:
     22        * JavaScriptCore.pro:
     23        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
     24        * JavaScriptCore.xcodeproj/project.pbxproj:
     25        * parser/ASTBuilder.h: Added.
     26        (JSC::ASTBuilder::BinaryOpInfo::BinaryOpInfo):
     27        (JSC::ASTBuilder::AssignmentInfo::AssignmentInfo):
     28        (JSC::ASTBuilder::ASTBuilder):
     29        (JSC::ASTBuilder::createSourceElements):
     30        (JSC::ASTBuilder::varDeclarations):
     31        (JSC::ASTBuilder::funcDeclarations):
     32        (JSC::ASTBuilder::features):
     33        (JSC::ASTBuilder::numConstants):
     34        (JSC::ASTBuilder::appendToComma):
     35        (JSC::ASTBuilder::createCommaExpr):
     36        (JSC::ASTBuilder::createLogicalNot):
     37        (JSC::ASTBuilder::createUnaryPlus):
     38        (JSC::ASTBuilder::createVoid):
     39        (JSC::ASTBuilder::thisExpr):
     40        (JSC::ASTBuilder::createResolve):
     41        (JSC::ASTBuilder::createObjectLiteral):
     42        (JSC::ASTBuilder::createArray):
     43        (JSC::ASTBuilder::createNumberExpr):
     44        (JSC::ASTBuilder::createString):
     45        (JSC::ASTBuilder::createBoolean):
     46        (JSC::ASTBuilder::createNull):
     47        (JSC::ASTBuilder::createBracketAccess):
     48        (JSC::ASTBuilder::createDotAccess):
     49        (JSC::ASTBuilder::createRegex):
     50        (JSC::ASTBuilder::createNewExpr):
     51        (JSC::ASTBuilder::createConditionalExpr):
     52        (JSC::ASTBuilder::createAssignResolve):
     53        (JSC::ASTBuilder::createFunctionExpr):
     54        (JSC::ASTBuilder::createFunctionBody):
     55        (JSC::ASTBuilder::createGetterOrSetterProperty):
     56        (JSC::ASTBuilder::createArguments):
     57        (JSC::ASTBuilder::createArgumentsList):
     58        (JSC::ASTBuilder::createProperty):
     59        (JSC::ASTBuilder::createPropertyList):
     60        (JSC::ASTBuilder::createElementList):
     61        (JSC::ASTBuilder::createFormalParameterList):
     62        (JSC::ASTBuilder::createClause):
     63        (JSC::ASTBuilder::createClauseList):
     64        (JSC::ASTBuilder::setUsesArguments):
     65        (JSC::ASTBuilder::createFuncDeclStatement):
     66        (JSC::ASTBuilder::createBlockStatement):
     67        (JSC::ASTBuilder::createExprStatement):
     68        (JSC::ASTBuilder::createIfStatement):
     69        (JSC::ASTBuilder::createForLoop):
     70        (JSC::ASTBuilder::createForInLoop):
     71        (JSC::ASTBuilder::createEmptyStatement):
     72        (JSC::ASTBuilder::createVarStatement):
     73        (JSC::ASTBuilder::createReturnStatement):
     74        (JSC::ASTBuilder::createBreakStatement):
     75        (JSC::ASTBuilder::createContinueStatement):
     76        (JSC::ASTBuilder::createTryStatement):
     77        (JSC::ASTBuilder::createSwitchStatement):
     78        (JSC::ASTBuilder::createWhileStatement):
     79        (JSC::ASTBuilder::createDoWhileStatement):
     80        (JSC::ASTBuilder::createLabelStatement):
     81        (JSC::ASTBuilder::createWithStatement):
     82        (JSC::ASTBuilder::createThrowStatement):
     83        (JSC::ASTBuilder::createDebugger):
     84        (JSC::ASTBuilder::createConstStatement):
     85        (JSC::ASTBuilder::appendConstDecl):
     86        (JSC::ASTBuilder::appendStatement):
     87        (JSC::ASTBuilder::addVar):
     88        (JSC::ASTBuilder::combineCommaNodes):
     89        (JSC::ASTBuilder::evalCount):
     90        (JSC::ASTBuilder::appendBinaryExpressionInfo):
     91        (JSC::ASTBuilder::operatorStackPop):
     92        (JSC::ASTBuilder::operatorStackHasHigherPrecedence):
     93        (JSC::ASTBuilder::getFromOperandStack):
     94        (JSC::ASTBuilder::shrinkOperandStackBy):
     95        (JSC::ASTBuilder::appendBinaryOperation):
     96        (JSC::ASTBuilder::operatorStackAppend):
     97        (JSC::ASTBuilder::popOperandStack):
     98        (JSC::ASTBuilder::appendUnaryToken):
     99        (JSC::ASTBuilder::unaryTokenStackLastType):
     100        (JSC::ASTBuilder::unaryTokenStackLastStart):
     101        (JSC::ASTBuilder::unaryTokenStackRemoveLast):
     102        (JSC::ASTBuilder::assignmentStackAppend):
     103        (JSC::ASTBuilder::createAssignment):
     104        (JSC::ASTBuilder::Scope::Scope):
     105        (JSC::ASTBuilder::setExceptionLocation):
     106        (JSC::ASTBuilder::incConstants):
     107        (JSC::ASTBuilder::usesThis):
     108        (JSC::ASTBuilder::usesCatch):
     109        (JSC::ASTBuilder::usesClosures):
     110        (JSC::ASTBuilder::usesArguments):
     111        (JSC::ASTBuilder::usesAssignment):
     112        (JSC::ASTBuilder::usesWith):
     113        (JSC::ASTBuilder::usesEval):
     114        (JSC::ASTBuilder::createNumber):
     115        (JSC::ASTBuilder::makeTypeOfNode):
     116        (JSC::ASTBuilder::makeDeleteNode):
     117        (JSC::ASTBuilder::makeNegateNode):
     118        (JSC::ASTBuilder::makeBitwiseNotNode):
     119        (JSC::ASTBuilder::makeMultNode):
     120        (JSC::ASTBuilder::makeDivNode):
     121        (JSC::ASTBuilder::makeAddNode):
     122        (JSC::ASTBuilder::makeSubNode):
     123        (JSC::ASTBuilder::makeLeftShiftNode):
     124        (JSC::ASTBuilder::makeRightShiftNode):
     125        (JSC::ASTBuilder::makeFunctionCallNode):
     126        (JSC::ASTBuilder::makeBinaryNode):
     127        (JSC::ASTBuilder::makeAssignNode):
     128        (JSC::ASTBuilder::makePrefixNode):
     129        (JSC::ASTBuilder::makePostfixNode):
     130        * parser/JSParser.cpp: Added.
     131        (JSC::JSParser::AllowInOverride::AllowInOverride):
     132        (JSC::JSParser::AllowInOverride::~AllowInOverride):
     133        (JSC::JSParser::token):
     134        (JSC::JSParser::next):
     135        (JSC::JSParser::consume):
     136        (JSC::JSParser::match):
     137        (JSC::JSParser::tokenStart):
     138        (JSC::JSParser::tokenLine):
     139        (JSC::JSParser::tokenEnd):
     140        (JSC::JSParser::):
     141        (JSC::JSParser::autoSemiColon):
     142        (JSC::JSParser::canRecurse):
     143        (JSC::JSParser::lastTokenEnd):
     144        (JSC::jsParse):
     145        (JSC::JSParser::JSParser):
     146        (JSC::JSParser::parseProgram):
     147        (JSC::JSParser::allowAutomaticSemicolon):
     148        (JSC::JSParser::parseSourceElements):
     149        (JSC::JSParser::parseVarDeclaration):
     150        (JSC::JSParser::parseConstDeclaration):
     151        (JSC::JSParser::parseDoWhileStatement):
     152        (JSC::JSParser::parseWhileStatement):
     153        (JSC::JSParser::parseVarDeclarationList):
     154        (JSC::JSParser::parseConstDeclarationList):
     155        (JSC::JSParser::parseForStatement):
     156        (JSC::JSParser::parseBreakStatement):
     157        (JSC::JSParser::parseContinueStatement):
     158        (JSC::JSParser::parseReturnStatement):
     159        (JSC::JSParser::parseThrowStatement):
     160        (JSC::JSParser::parseWithStatement):
     161        (JSC::JSParser::parseSwitchStatement):
     162        (JSC::JSParser::parseSwitchClauses):
     163        (JSC::JSParser::parseSwitchDefaultClause):
     164        (JSC::JSParser::parseTryStatement):
     165        (JSC::JSParser::parseDebuggerStatement):
     166        (JSC::JSParser::parseBlockStatement):
     167        (JSC::JSParser::parseStatement):
     168        (JSC::JSParser::parseFormalParameters):
     169        (JSC::JSParser::parseFunctionBody):
     170        (JSC::JSParser::parseFunctionInfo):
     171        (JSC::JSParser::parseFunctionDeclaration):
     172        (JSC::JSParser::parseExpressionOrLabelStatement):
     173        (JSC::JSParser::parseExpressionStatement):
     174        (JSC::JSParser::parseIfStatement):
     175        (JSC::JSParser::parseExpression):
     176        (JSC::JSParser::parseAssignmentExpression):
     177        (JSC::JSParser::parseConditionalExpression):
     178        (JSC::isUnaryOp):
     179        (JSC::JSParser::isBinaryOperator):
     180        (JSC::JSParser::parseBinaryExpression):
     181        (JSC::JSParser::parseProperty):
     182        (JSC::JSParser::parseObjectLiteral):
     183        (JSC::JSParser::parseArrayLiteral):
     184        (JSC::JSParser::parsePrimaryExpression):
     185        (JSC::JSParser::parseArguments):
     186        (JSC::JSParser::parseMemberExpression):
     187        (JSC::JSParser::parseUnaryExpression):
     188        * parser/JSParser.h: Added.
     189        (JSC::):
     190        (JSC::JSTokenInfo::JSTokenInfo):
     191        * parser/Lexer.cpp:
     192        (JSC::Lexer::lex):
     193        * parser/Lexer.h:
     194        (JSC::Lexer::setLastLineNumber):
     195        (JSC::Lexer::lastLineNumber):
     196        * parser/NodeConstructors.h:
     197        (JSC::Node::Node):
     198        * parser/Parser.cpp:
     199        (JSC::Parser::parse):
     200        * parser/SyntaxChecker.h: Added.
     201        (JSC::SyntaxChecker::SyntaxChecker):
     202        (JSC::SyntaxChecker::createSourceElements):
     203        (JSC::SyntaxChecker::makeFunctionCallNode):
     204        (JSC::SyntaxChecker::appendToComma):
     205        (JSC::SyntaxChecker::createCommaExpr):
     206        (JSC::SyntaxChecker::makeAssignNode):
     207        (JSC::SyntaxChecker::makePrefixNode):
     208        (JSC::SyntaxChecker::makePostfixNode):
     209        (JSC::SyntaxChecker::makeTypeOfNode):
     210        (JSC::SyntaxChecker::makeDeleteNode):
     211        (JSC::SyntaxChecker::makeNegateNode):
     212        (JSC::SyntaxChecker::makeBitwiseNotNode):
     213        (JSC::SyntaxChecker::createLogicalNot):
     214        (JSC::SyntaxChecker::createUnaryPlus):
     215        (JSC::SyntaxChecker::createVoid):
     216        (JSC::SyntaxChecker::thisExpr):
     217        (JSC::SyntaxChecker::createResolve):
     218        (JSC::SyntaxChecker::createObjectLiteral):
     219        (JSC::SyntaxChecker::createArray):
     220        (JSC::SyntaxChecker::createNumberExpr):
     221        (JSC::SyntaxChecker::createString):
     222        (JSC::SyntaxChecker::createBoolean):
     223        (JSC::SyntaxChecker::createNull):
     224        (JSC::SyntaxChecker::createBracketAccess):
     225        (JSC::SyntaxChecker::createDotAccess):
     226        (JSC::SyntaxChecker::createRegex):
     227        (JSC::SyntaxChecker::createNewExpr):
     228        (JSC::SyntaxChecker::createConditionalExpr):
     229        (JSC::SyntaxChecker::createAssignResolve):
     230        (JSC::SyntaxChecker::createFunctionExpr):
     231        (JSC::SyntaxChecker::createFunctionBody):
     232        (JSC::SyntaxChecker::createArguments):
     233        (JSC::SyntaxChecker::createArgumentsList):
     234        (JSC::SyntaxChecker::createProperty):
     235        (JSC::SyntaxChecker::createPropertyList):
     236        (JSC::SyntaxChecker::createElementList):
     237        (JSC::SyntaxChecker::createFormalParameterList):
     238        (JSC::SyntaxChecker::createClause):
     239        (JSC::SyntaxChecker::createClauseList):
     240        (JSC::SyntaxChecker::setUsesArguments):
     241        (JSC::SyntaxChecker::createFuncDeclStatement):
     242        (JSC::SyntaxChecker::createBlockStatement):
     243        (JSC::SyntaxChecker::createExprStatement):
     244        (JSC::SyntaxChecker::createIfStatement):
     245        (JSC::SyntaxChecker::createForLoop):
     246        (JSC::SyntaxChecker::createForInLoop):
     247        (JSC::SyntaxChecker::createEmptyStatement):
     248        (JSC::SyntaxChecker::createVarStatement):
     249        (JSC::SyntaxChecker::createReturnStatement):
     250        (JSC::SyntaxChecker::createBreakStatement):
     251        (JSC::SyntaxChecker::createContinueStatement):
     252        (JSC::SyntaxChecker::createTryStatement):
     253        (JSC::SyntaxChecker::createSwitchStatement):
     254        (JSC::SyntaxChecker::createWhileStatement):
     255        (JSC::SyntaxChecker::createWithStatement):
     256        (JSC::SyntaxChecker::createDoWhileStatement):
     257        (JSC::SyntaxChecker::createLabelStatement):
     258        (JSC::SyntaxChecker::createThrowStatement):
     259        (JSC::SyntaxChecker::createDebugger):
     260        (JSC::SyntaxChecker::createConstStatement):
     261        (JSC::SyntaxChecker::appendConstDecl):
     262        (JSC::SyntaxChecker::createGetterOrSetterProperty):
     263        (JSC::SyntaxChecker::appendStatement):
     264        (JSC::SyntaxChecker::addVar):
     265        (JSC::SyntaxChecker::combineCommaNodes):
     266        (JSC::SyntaxChecker::evalCount):
     267        (JSC::SyntaxChecker::appendBinaryExpressionInfo):
     268        (JSC::SyntaxChecker::operatorStackPop):
     269        * runtime/JSGlobalData.h:
     270        * wtf/Platform.h:
     271        * wtf/ThreadSpecific.h:
     272        (WTF::T):
     273
    12742010-06-23  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>
    2275
  • trunk/JavaScriptCore/GNUmakefile.am

    r61623 r61732  
    382382        JavaScriptCore/debugger/Debugger.cpp \
    383383        JavaScriptCore/debugger/Debugger.h \
     384        JavaScriptCore/parser/ASTBuilder.h \
     385        JavaScriptCore/parser/JSParser.cpp \
     386        JavaScriptCore/parser/JSParser.h \
    384387        JavaScriptCore/parser/Lexer.cpp \
    385388        JavaScriptCore/parser/Lexer.h \
     
    395398        JavaScriptCore/parser/SourceCode.h \
    396399        JavaScriptCore/parser/SourceProvider.h \
     400        JavaScriptCore/parser/SyntaxChecker.h \
    397401        JavaScriptCore/runtime/ArgList.cpp \
    398402        JavaScriptCore/runtime/ArgList.h \
  • trunk/JavaScriptCore/JavaScriptCore.gypi

    r61623 r61732  
    131131            'os-win32/stdbool.h',
    132132            'os-win32/stdint.h',
     133            'parser/ASTBuilder.h',
     134            'parser/JSParser.cpp',
     135            'parser/JSParser.h',
    133136            'parser/Lexer.cpp',
    134137            'parser/Lexer.h',
     
    144147            'parser/SourceCode.h',
    145148            'parser/SourceProvider.h',
     149            'parser/SyntaxChecker.h',
    146150            'pcre/pcre.h',
    147151            'pcre/pcre_compile.cpp',
  • trunk/JavaScriptCore/JavaScriptCore.pro

    r61623 r61732  
    110110    jit/JITStubs.cpp \
    111111    jit/ThunkGenerators.cpp \
     112    parser/JSParser.cpp \
    112113    parser/Lexer.cpp \
    113114    parser/Nodes.cpp \
  • trunk/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj

    r61623 r61732  
    18021802                        >
    18031803                        <File
     1804                                RelativePath="..\..\parser\ASTBuilder.h"
     1805                                >
     1806                        </File>
     1807                        <File
     1808                                RelativePath="..\..\parser\JSParser.cpp"
     1809                                >
     1810                        </File>
     1811                        <File
     1812                                RelativePath="..\..\parser\JSParser.h"
     1813                                >
     1814                        </File>
     1815                        <File
    18041816                                RelativePath="..\..\parser\Lexer.cpp"
    18051817                                >
     
    18511863                        <File
    18521864                                RelativePath="..\..\parser\SourceProvider.h"
     1865                                >
     1866                        </File>
     1867                        <File
     1868                                RelativePath="..\..\parser\SyntaxChecker.h"
    18531869                                >
    18541870                        </File>
  • trunk/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

    r61623 r61732  
    317317                A783A0D111A36DCA00563D20 /* JSObjectWithGlobalObject.h in Headers */ = {isa = PBXBuildFile; fileRef = A783A0D011A36DCA00563D20 /* JSObjectWithGlobalObject.h */; settings = {ATTRIBUTES = (Private, ); }; };
    318318                A783A2AB11A5BE8400563D20 /* JSObjectWithGlobalObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A783A2AA11A5BE8400563D20 /* JSObjectWithGlobalObject.cpp */; };
     319                A784A26111D16622005776AC /* ASTBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A7EE7411B98B8D0065A14F /* ASTBuilder.h */; };
     320                A784A26211D16622005776AC /* JSParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7A7EE7511B98B8D0065A14F /* JSParser.cpp */; };
     321                A784A26311D16622005776AC /* JSParser.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A7EE7611B98B8D0065A14F /* JSParser.h */; };
     322                A784A26411D16622005776AC /* SyntaxChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A7EE7711B98B8D0065A14F /* SyntaxChecker.h */; };
    319323                A791EF280F11E07900AE1F68 /* JSByteArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A791EF260F11E07900AE1F68 /* JSByteArray.h */; settings = {ATTRIBUTES = (Private, ); }; };
    320324                A791EF290F11E07900AE1F68 /* JSByteArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A791EF270F11E07900AE1F68 /* JSByteArray.cpp */; };
     
    922926                A7A1F7AA0F252B3C00E184E2 /* ByteArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ByteArray.cpp; sourceTree = "<group>"; };
    923927                A7A1F7AB0F252B3C00E184E2 /* ByteArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ByteArray.h; sourceTree = "<group>"; };
     928                A7A7EE7411B98B8D0065A14F /* ASTBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASTBuilder.h; sourceTree = "<group>"; };
     929                A7A7EE7511B98B8D0065A14F /* JSParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSParser.cpp; sourceTree = "<group>"; };
     930                A7A7EE7611B98B8D0065A14F /* JSParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSParser.h; sourceTree = "<group>"; };
     931                A7A7EE7711B98B8D0065A14F /* SyntaxChecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SyntaxChecker.h; sourceTree = "<group>"; };
    924932                A7B48DB50EE74CFC00DCBDB6 /* ExecutableAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExecutableAllocator.h; sourceTree = "<group>"; };
    925933                A7B48DB60EE74CFC00DCBDB6 /* ExecutableAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExecutableAllocator.cpp; sourceTree = "<group>"; };
     
    15231531                        isa = PBXGroup;
    15241532                        children = (
     1533                                A7A7EE7411B98B8D0065A14F /* ASTBuilder.h */,
    15251534                                933A3499038AE7C6008635CE /* Grammar.y */,
     1535                                A7A7EE7511B98B8D0065A14F /* JSParser.cpp */,
     1536                                A7A7EE7611B98B8D0065A14F /* JSParser.h */,
    15261537                                93F1981A08245AAE001E9ABC /* Keywords.table */,
    15271538                                F692A8650255597D01FF60F7 /* Lexer.cpp */,
     
    15381549                                65E866EE0DD59AFA00A2B2A1 /* SourceCode.h */,
    15391550                                65E866ED0DD59AFA00A2B2A1 /* SourceProvider.h */,
     1551                                A7A7EE7711B98B8D0065A14F /* SyntaxChecker.h */,
    15401552                        );
    15411553                        path = parser;
     
    21782190                                A1712B3F11C7B228007A5315 /* RegExpCache.h in Headers */,
    21792191                                A1712B4111C7B235007A5315 /* RegExpKey.h in Headers */,
     2192                                A784A26111D16622005776AC /* ASTBuilder.h in Headers */,
     2193                                A784A26311D16622005776AC /* JSParser.h in Headers */,
     2194                                A784A26411D16622005776AC /* SyntaxChecker.h in Headers */,
    21802195                        );
    21812196                        runOnlyForDeploymentPostprocessing = 0;
     
    26182633                                BC01D4F111A8F1FF00A54B2A /* JSZombie.cpp in Sources */,
    26192634                                A1712B3B11C7B212007A5315 /* RegExpCache.cpp in Sources */,
     2635                                A784A26211D16622005776AC /* JSParser.cpp in Sources */,
    26202636                        );
    26212637                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/JavaScriptCore/parser/Lexer.cpp

    r61450 r61732  
    2525
    2626#include "JSFunction.h"
     27
    2728#include "JSGlobalObjectFunctions.h"
     29#include "Identifier.h"
    2830#include "NodeInfo.h"
    2931#include "Nodes.h"
     
    3739using namespace Unicode;
    3840
    39 // We can't specify the namespace in yacc's C output, so do it here instead.
     41#if ENABLE(RECURSIVE_PARSE)
     42#include "JSParser.h"
     43#else
    4044using namespace JSC;
    41 
    4245#include "Grammar.h"
     46#endif
     47
    4348#include "Lookup.h"
    4449#include "Lexer.lut.h"
     
    873878    m_buffer16.resize(0);
    874879    const HashEntry* entry = m_keywordTable.entry(m_globalData, *lvalp->ident);
    875     token = entry ? entry->lexerValue() : IDENT;
     880    token = entry ? entry->lexerValue() : static_cast<int>(IDENT);
    876881    goto returnToken;
    877882}
     
    894899    llocp->first_column = startOffset;
    895900    llocp->last_column = currentOffset();
    896 
    897901    m_lastToken = token;
    898902    return token;
  • trunk/JavaScriptCore/parser/Lexer.h

    r49365 r61732  
    5050        int lex(void* lvalp, void* llocp);
    5151        int lineNumber() const { return m_lineNumber; }
     52        void setLastLineNumber(int lastLineNumber) { m_lastLineNumber = lastLineNumber; }
     53        int lastLineNumber() const { return m_lastLineNumber; }
    5254        bool prevTerminator() const { return m_terminator; }
    5355        SourceCode sourceCode(int openBrace, int closeBrace, int firstLine);
     
    8587
    8688        static const size_t initialReadBufferCapacity = 32;
    87 
     89       
    8890        int m_lineNumber;
     91        int m_lastLineNumber;
    8992
    9093        Vector<char> m_buffer8;
  • trunk/JavaScriptCore/parser/NodeConstructors.h

    r55751 r61732  
    4444
    4545    inline Node::Node(JSGlobalData* globalData)
     46#if ENABLE(RECURSIVE_PARSE)
     47        : m_line(globalData->lexer->lastLineNumber())
     48#else
    4649        : m_line(globalData->lexer->lineNumber())
     50#endif
    4751    {
    4852    }
  • trunk/JavaScriptCore/parser/Parser.cpp

    r55120 r61732  
    2525
    2626#include "Debugger.h"
     27#include "JSParser.h"
    2728#include "Lexer.h"
    2829#include <wtf/HashSet.h>
     
    5253    Lexer& lexer = *globalData->lexer;
    5354    lexer.setCode(*m_source, m_arena);
    54 
     55   
     56#if ENABLE(RECURSIVE_PARSE)
     57    int parseError = jsParse(globalData);
     58#else
    5559    int parseError = jscyyparse(globalData);
     60#endif
     61    int lineNumber = lexer.lineNumber();
    5662    bool lexError = lexer.sawError();
    57     int lineNumber = lexer.lineNumber();
    5863    lexer.clear();
    5964
  • trunk/JavaScriptCore/runtime/JSGlobalData.h

    r61623 r61732  
    4545#include <wtf/HashMap.h>
    4646#include <wtf/RefCounted.h>
     47#include <wtf/ThreadSpecific.h>
    4748
    4849struct OpaqueJSClass;
     
    221222
    222223        CachedTranscendentalFunction<sin> cachedSin;
     224        WTF::ThreadSpecific<char*> stackGuards;
    223225
    224226        void resetDateCache();
  • trunk/JavaScriptCore/wtf/Platform.h

    r61614 r61732  
    10901090#define ENABLE_JSC_ZOMBIES 0
    10911091
     1092#define ENABLE_RECURSIVE_PARSE 1
     1093
    10921094/* FIXME: Eventually we should enable this for all platforms and get rid of the define. */
    10931095#if PLATFORM(MAC)
  • trunk/JavaScriptCore/wtf/ThreadSpecific.h

    r61712 r61732  
    324324        // Set up thread-specific value's memory pointer before invoking constructor, in case any function it calls
    325325        // needs to access the value, to avoid recursion.
    326         ptr = static_cast<T*>(fastMalloc(sizeof(T)));
     326        ptr = static_cast<T*>(fastZeroedMalloc(sizeof(T)));
    327327        set(ptr);
    328328        new (ptr) T;
Note: See TracChangeset for help on using the changeset viewer.