Changeset 61732 in webkit
- Timestamp:
- Jun 23, 2010 9:19:32 PM (14 years ago)
- Location:
- trunk/JavaScriptCore
- Files:
-
- 4 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r61726 r61732 1 2010-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 1 274 2010-06-23 Jedrzej Nowacki <jedrzej.nowacki@nokia.com> 2 275 -
trunk/JavaScriptCore/GNUmakefile.am
r61623 r61732 382 382 JavaScriptCore/debugger/Debugger.cpp \ 383 383 JavaScriptCore/debugger/Debugger.h \ 384 JavaScriptCore/parser/ASTBuilder.h \ 385 JavaScriptCore/parser/JSParser.cpp \ 386 JavaScriptCore/parser/JSParser.h \ 384 387 JavaScriptCore/parser/Lexer.cpp \ 385 388 JavaScriptCore/parser/Lexer.h \ … … 395 398 JavaScriptCore/parser/SourceCode.h \ 396 399 JavaScriptCore/parser/SourceProvider.h \ 400 JavaScriptCore/parser/SyntaxChecker.h \ 397 401 JavaScriptCore/runtime/ArgList.cpp \ 398 402 JavaScriptCore/runtime/ArgList.h \ -
trunk/JavaScriptCore/JavaScriptCore.gypi
r61623 r61732 131 131 'os-win32/stdbool.h', 132 132 'os-win32/stdint.h', 133 'parser/ASTBuilder.h', 134 'parser/JSParser.cpp', 135 'parser/JSParser.h', 133 136 'parser/Lexer.cpp', 134 137 'parser/Lexer.h', … … 144 147 'parser/SourceCode.h', 145 148 'parser/SourceProvider.h', 149 'parser/SyntaxChecker.h', 146 150 'pcre/pcre.h', 147 151 'pcre/pcre_compile.cpp', -
trunk/JavaScriptCore/JavaScriptCore.pro
r61623 r61732 110 110 jit/JITStubs.cpp \ 111 111 jit/ThunkGenerators.cpp \ 112 parser/JSParser.cpp \ 112 113 parser/Lexer.cpp \ 113 114 parser/Nodes.cpp \ -
trunk/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
r61623 r61732 1802 1802 > 1803 1803 <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 1804 1816 RelativePath="..\..\parser\Lexer.cpp" 1805 1817 > … … 1851 1863 <File 1852 1864 RelativePath="..\..\parser\SourceProvider.h" 1865 > 1866 </File> 1867 <File 1868 RelativePath="..\..\parser\SyntaxChecker.h" 1853 1869 > 1854 1870 </File> -
trunk/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r61623 r61732 317 317 A783A0D111A36DCA00563D20 /* JSObjectWithGlobalObject.h in Headers */ = {isa = PBXBuildFile; fileRef = A783A0D011A36DCA00563D20 /* JSObjectWithGlobalObject.h */; settings = {ATTRIBUTES = (Private, ); }; }; 318 318 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 */; }; 319 323 A791EF280F11E07900AE1F68 /* JSByteArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A791EF260F11E07900AE1F68 /* JSByteArray.h */; settings = {ATTRIBUTES = (Private, ); }; }; 320 324 A791EF290F11E07900AE1F68 /* JSByteArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A791EF270F11E07900AE1F68 /* JSByteArray.cpp */; }; … … 922 926 A7A1F7AA0F252B3C00E184E2 /* ByteArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ByteArray.cpp; sourceTree = "<group>"; }; 923 927 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>"; }; 924 932 A7B48DB50EE74CFC00DCBDB6 /* ExecutableAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExecutableAllocator.h; sourceTree = "<group>"; }; 925 933 A7B48DB60EE74CFC00DCBDB6 /* ExecutableAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExecutableAllocator.cpp; sourceTree = "<group>"; }; … … 1523 1531 isa = PBXGroup; 1524 1532 children = ( 1533 A7A7EE7411B98B8D0065A14F /* ASTBuilder.h */, 1525 1534 933A3499038AE7C6008635CE /* Grammar.y */, 1535 A7A7EE7511B98B8D0065A14F /* JSParser.cpp */, 1536 A7A7EE7611B98B8D0065A14F /* JSParser.h */, 1526 1537 93F1981A08245AAE001E9ABC /* Keywords.table */, 1527 1538 F692A8650255597D01FF60F7 /* Lexer.cpp */, … … 1538 1549 65E866EE0DD59AFA00A2B2A1 /* SourceCode.h */, 1539 1550 65E866ED0DD59AFA00A2B2A1 /* SourceProvider.h */, 1551 A7A7EE7711B98B8D0065A14F /* SyntaxChecker.h */, 1540 1552 ); 1541 1553 path = parser; … … 2178 2190 A1712B3F11C7B228007A5315 /* RegExpCache.h in Headers */, 2179 2191 A1712B4111C7B235007A5315 /* RegExpKey.h in Headers */, 2192 A784A26111D16622005776AC /* ASTBuilder.h in Headers */, 2193 A784A26311D16622005776AC /* JSParser.h in Headers */, 2194 A784A26411D16622005776AC /* SyntaxChecker.h in Headers */, 2180 2195 ); 2181 2196 runOnlyForDeploymentPostprocessing = 0; … … 2618 2633 BC01D4F111A8F1FF00A54B2A /* JSZombie.cpp in Sources */, 2619 2634 A1712B3B11C7B212007A5315 /* RegExpCache.cpp in Sources */, 2635 A784A26211D16622005776AC /* JSParser.cpp in Sources */, 2620 2636 ); 2621 2637 runOnlyForDeploymentPostprocessing = 0; -
trunk/JavaScriptCore/parser/Lexer.cpp
r61450 r61732 25 25 26 26 #include "JSFunction.h" 27 27 28 #include "JSGlobalObjectFunctions.h" 29 #include "Identifier.h" 28 30 #include "NodeInfo.h" 29 31 #include "Nodes.h" … … 37 39 using namespace Unicode; 38 40 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 40 44 using namespace JSC; 41 42 45 #include "Grammar.h" 46 #endif 47 43 48 #include "Lookup.h" 44 49 #include "Lexer.lut.h" … … 873 878 m_buffer16.resize(0); 874 879 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); 876 881 goto returnToken; 877 882 } … … 894 899 llocp->first_column = startOffset; 895 900 llocp->last_column = currentOffset(); 896 897 901 m_lastToken = token; 898 902 return token; -
trunk/JavaScriptCore/parser/Lexer.h
r49365 r61732 50 50 int lex(void* lvalp, void* llocp); 51 51 int lineNumber() const { return m_lineNumber; } 52 void setLastLineNumber(int lastLineNumber) { m_lastLineNumber = lastLineNumber; } 53 int lastLineNumber() const { return m_lastLineNumber; } 52 54 bool prevTerminator() const { return m_terminator; } 53 55 SourceCode sourceCode(int openBrace, int closeBrace, int firstLine); … … 85 87 86 88 static const size_t initialReadBufferCapacity = 32; 87 89 88 90 int m_lineNumber; 91 int m_lastLineNumber; 89 92 90 93 Vector<char> m_buffer8; -
trunk/JavaScriptCore/parser/NodeConstructors.h
r55751 r61732 44 44 45 45 inline Node::Node(JSGlobalData* globalData) 46 #if ENABLE(RECURSIVE_PARSE) 47 : m_line(globalData->lexer->lastLineNumber()) 48 #else 46 49 : m_line(globalData->lexer->lineNumber()) 50 #endif 47 51 { 48 52 } -
trunk/JavaScriptCore/parser/Parser.cpp
r55120 r61732 25 25 26 26 #include "Debugger.h" 27 #include "JSParser.h" 27 28 #include "Lexer.h" 28 29 #include <wtf/HashSet.h> … … 52 53 Lexer& lexer = *globalData->lexer; 53 54 lexer.setCode(*m_source, m_arena); 54 55 56 #if ENABLE(RECURSIVE_PARSE) 57 int parseError = jsParse(globalData); 58 #else 55 59 int parseError = jscyyparse(globalData); 60 #endif 61 int lineNumber = lexer.lineNumber(); 56 62 bool lexError = lexer.sawError(); 57 int lineNumber = lexer.lineNumber();58 63 lexer.clear(); 59 64 -
trunk/JavaScriptCore/runtime/JSGlobalData.h
r61623 r61732 45 45 #include <wtf/HashMap.h> 46 46 #include <wtf/RefCounted.h> 47 #include <wtf/ThreadSpecific.h> 47 48 48 49 struct OpaqueJSClass; … … 221 222 222 223 CachedTranscendentalFunction<sin> cachedSin; 224 WTF::ThreadSpecific<char*> stackGuards; 223 225 224 226 void resetDateCache(); -
trunk/JavaScriptCore/wtf/Platform.h
r61614 r61732 1090 1090 #define ENABLE_JSC_ZOMBIES 0 1091 1091 1092 #define ENABLE_RECURSIVE_PARSE 1 1093 1092 1094 /* FIXME: Eventually we should enable this for all platforms and get rid of the define. */ 1093 1095 #if PLATFORM(MAC) -
trunk/JavaScriptCore/wtf/ThreadSpecific.h
r61712 r61732 324 324 // Set up thread-specific value's memory pointer before invoking constructor, in case any function it calls 325 325 // needs to access the value, to avoid recursion. 326 ptr = static_cast<T*>(fast Malloc(sizeof(T)));326 ptr = static_cast<T*>(fastZeroedMalloc(sizeof(T))); 327 327 set(ptr); 328 328 new (ptr) T;
Note: See TracChangeset
for help on using the changeset viewer.