Changeset 181818 in webkit
- Timestamp:
- Mar 20, 2015, 4:37:51 PM (11 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 7 edited
-
ChangeLog (modified) (1 diff)
-
parser/ASTBuilder.h (modified) (4 diffs)
-
parser/Nodes.cpp (modified) (1 diff)
-
parser/Nodes.h (modified) (3 diffs)
-
parser/Parser.cpp (modified) (15 diffs)
-
parser/Parser.h (modified) (2 diffs)
-
parser/SyntaxChecker.h (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r181817 r181818 1 2015-03-20 Geoffrey Garen <ggaren@apple.com> 2 3 FunctionBodyNode should known where its parameters started 4 https://bugs.webkit.org/show_bug.cgi?id=142926 5 6 Reviewed by Ryosuke Niwa. 7 8 This will allow us to re-parse parameters instead of keeping the 9 parameters piece of the AST around forever. 10 11 I also took the opportunity to initialize most FunctionBodyNode data 12 members at construction time, to help clarify that they are set right. 13 14 * parser/ASTBuilder.h: 15 (JSC::ASTBuilder::createFunctionExpr): No need to pass 16 functionKeywordStart here; we now provide it at FunctionBodyNode 17 creation time. 18 19 (JSC::ASTBuilder::createFunctionBody): Require everything we need at 20 construction time, including the start of our parameters. 21 22 (JSC::ASTBuilder::createGetterOrSetterProperty): 23 (JSC::ASTBuilder::createFuncDeclStatement): No need to pass 24 functionKeywordStart here; we now provide it at FunctionBodyNode 25 creation time. 26 27 (JSC::ASTBuilder::setFunctionNameStart): Deleted. 28 29 * parser/Nodes.cpp: 30 (JSC::FunctionBodyNode::FunctionBodyNode): Initialize everything at 31 construction time. 32 33 * parser/Nodes.h: Added a field for the location of our parameters. 34 35 * parser/Parser.cpp: 36 (JSC::Parser<LexerType>::parseFunctionBody): 37 (JSC::Parser<LexerType>::parseFunctionInfo): 38 (JSC::Parser<LexerType>::parseFunctionDeclaration): 39 (JSC::Parser<LexerType>::parseClass): 40 (JSC::Parser<LexerType>::parsePropertyMethod): 41 (JSC::Parser<LexerType>::parseGetterSetter): 42 (JSC::Parser<LexerType>::parsePrimaryExpression): 43 * parser/Parser.h: Refactored to match above interface changes. 44 45 * parser/SyntaxChecker.h: 46 (JSC::SyntaxChecker::createFunctionExpr): 47 (JSC::SyntaxChecker::createFunctionBody): 48 (JSC::SyntaxChecker::createFuncDeclStatement): 49 (JSC::SyntaxChecker::createGetterOrSetterProperty): Refactored to match 50 above interface changes. 51 52 (JSC::SyntaxChecker::setFunctionNameStart): Deleted. 53 1 54 2015-03-20 Filip Pizlo <fpizlo@apple.com> 2 55 -
trunk/Source/JavaScriptCore/parser/ASTBuilder.h
r181293 r181818 294 294 #endif 295 295 296 ExpressionNode* createFunctionExpr(const JSTokenLocation& location, const ParserFunctionInfo<ASTBuilder>& info , unsigned functionKeywordStart)296 ExpressionNode* createFunctionExpr(const JSTokenLocation& location, const ParserFunctionInfo<ASTBuilder>& info) 297 297 { 298 298 FuncExprNode* result = new (m_parserArena) FuncExprNode(location, *info.name, info.body, 299 299 m_sourceCode->subExpression(info.openBraceOffset, info.closeBraceOffset, info.bodyStartLine, info.bodyStartColumn), info.parameters); 300 300 info.body->setLoc(info.bodyStartLine, info.bodyEndLine, location.startOffset, location.lineStartOffset); 301 info.body->setFunctionKeywordStart(functionKeywordStart); 302 return result; 303 } 304 305 FunctionBodyNode* createFunctionBody(const JSTokenLocation& startLocation, const JSTokenLocation& endLocation, unsigned startColumn, unsigned endColumn, bool inStrictContext, ConstructorKind constructorKind) 306 { 307 return new (m_parserArena) FunctionBodyNode(m_parserArena, startLocation, endLocation, startColumn, endColumn, inStrictContext, constructorKind); 308 } 309 310 void setFunctionNameStart(FunctionBodyNode* body, int functionNameStart) 311 { 312 body->setFunctionNameStart(functionNameStart); 313 } 314 301 return result; 302 } 303 304 FunctionBodyNode* createFunctionBody( 305 const JSTokenLocation& startLocation, const JSTokenLocation& endLocation, 306 unsigned startColumn, unsigned endColumn, int functionKeywordStart, 307 int functionNameStart, int parametersStart, bool inStrictContext, 308 ConstructorKind constructorKind) 309 { 310 return new (m_parserArena) FunctionBodyNode( 311 m_parserArena, startLocation, endLocation, startColumn, endColumn, 312 functionKeywordStart, functionNameStart, parametersStart, 313 inStrictContext, constructorKind); 314 } 315 315 316 NEVER_INLINE PropertyNode* createGetterOrSetterProperty(const JSTokenLocation& location, PropertyNode::Type type, bool, 316 const Identifier* name, const ParserFunctionInfo<ASTBuilder>& info, unsigned getOrSetStartOffset,SuperBinding superBinding)317 const Identifier* name, const ParserFunctionInfo<ASTBuilder>& info, SuperBinding superBinding) 317 318 { 318 319 ASSERT(name); 319 320 info.body->setLoc(info.bodyStartLine, info.bodyEndLine, location.startOffset, location.lineStartOffset); 320 321 info.body->setInferredName(*name); 321 info.body->setFunctionKeywordStart(getOrSetStartOffset);322 322 SourceCode source = m_sourceCode->subExpression(info.openBraceOffset, info.closeBraceOffset, info.bodyStartLine, info.bodyStartColumn); 323 323 FuncExprNode* funcExpr = new (m_parserArena) FuncExprNode(location, m_vm->propertyNames->nullIdentifier, info.body, source, info.parameters); … … 326 326 327 327 NEVER_INLINE PropertyNode* createGetterOrSetterProperty(VM* vm, ParserArena& parserArena, const JSTokenLocation& location, PropertyNode::Type type, bool, 328 double name, const ParserFunctionInfo<ASTBuilder>& info, unsigned getOrSetStartOffset,SuperBinding superBinding)328 double name, const ParserFunctionInfo<ASTBuilder>& info, SuperBinding superBinding) 329 329 { 330 330 info.body->setLoc(info.bodyStartLine, info.bodyEndLine, location.startOffset, location.lineStartOffset); 331 info.body->setFunctionKeywordStart(getOrSetStartOffset);332 331 const Identifier& ident = parserArena.identifierArena().makeNumericIdentifier(vm, name); 333 332 SourceCode source = m_sourceCode->subExpression(info.openBraceOffset, info.closeBraceOffset, info.bodyStartLine, info.bodyStartColumn); … … 365 364 ClauseListNode* createClauseList(ClauseListNode* tail, CaseClauseNode* clause) { return new (m_parserArena) ClauseListNode(tail, clause); } 366 365 367 StatementNode* createFuncDeclStatement(const JSTokenLocation& location, const ParserFunctionInfo<ASTBuilder>& info , unsigned functionKeywordStart)366 StatementNode* createFuncDeclStatement(const JSTokenLocation& location, const ParserFunctionInfo<ASTBuilder>& info) 368 367 { 369 368 FuncDeclNode* decl = new (m_parserArena) FuncDeclNode(location, *info.name, info.body, … … 373 372 m_scope.m_funcDeclarations.append(decl->body()); 374 373 info.body->setLoc(info.bodyStartLine, info.bodyEndLine, location.startOffset, location.lineStartOffset); 375 info.body->setFunctionKeywordStart(functionKeywordStart);376 374 return decl; 377 375 } -
trunk/Source/JavaScriptCore/parser/Nodes.cpp
r181490 r181818 168 168 } 169 169 170 FunctionBodyNode::FunctionBodyNode(ParserArena&, const JSTokenLocation& startLocation, const JSTokenLocation& endLocation, unsigned startColumn, unsigned endColumn, bool isInStrictContext, ConstructorKind constructorKind) 171 : StatementNode(endLocation) 172 , m_startColumn(startColumn) 173 , m_endColumn(endColumn) 174 , m_startStartOffset(startLocation.startOffset) 175 , m_isInStrictContext(isInStrictContext) 176 , m_constructorKind(static_cast<unsigned>(constructorKind)) 170 FunctionBodyNode::FunctionBodyNode( 171 ParserArena&, const JSTokenLocation& startLocation, 172 const JSTokenLocation& endLocation, unsigned startColumn, unsigned endColumn, 173 int functionKeywordStart, int functionNameStart, int parametersStart, 174 bool isInStrictContext, ConstructorKind constructorKind) 175 : StatementNode(endLocation) 176 , m_startColumn(startColumn) 177 , m_endColumn(endColumn) 178 , m_functionKeywordStart(functionKeywordStart) 179 , m_functionNameStart(functionNameStart) 180 , m_parametersStart(parametersStart) 181 , m_startStartOffset(startLocation.startOffset) 182 , m_isInStrictContext(isInStrictContext) 183 , m_constructorKind(static_cast<unsigned>(constructorKind)) 177 184 { 178 185 ASSERT(m_constructorKind == static_cast<unsigned>(constructorKind)); -
trunk/Source/JavaScriptCore/parser/Nodes.h
r181810 r181818 1561 1561 using ParserArenaDeletable::operator new; 1562 1562 1563 FunctionBodyNode(ParserArena&, const JSTokenLocation& start, const JSTokenLocation& end, unsigned startColumn, unsigned endColumn, bool isInStrictContext, ConstructorKind); 1563 FunctionBodyNode( 1564 ParserArena&, const JSTokenLocation& start, const JSTokenLocation& end, 1565 unsigned startColumn, unsigned endColumn, int functionKeywordStart, 1566 int functionNameStart, int parametersStart, bool isInStrictContext, 1567 ConstructorKind); 1564 1568 1565 1569 FunctionParameters* parameters() const { return m_parameters.get(); } … … 1576 1580 FunctionMode functionMode() { return m_functionMode; } 1577 1581 1578 void setFunctionNameStart(int functionNameStart) { m_functionNameStart = functionNameStart; }1579 1582 int functionNameStart() const { return m_functionNameStart; } 1580 void setFunctionKeywordStart(int functionKeywordStart) { m_functionKeywordStart = functionKeywordStart; }1581 1583 int functionKeywordStart() const { return m_functionKeywordStart; } 1582 1584 unsigned startColumn() const { return m_startColumn; } … … 1596 1598 FunctionMode m_functionMode; 1597 1599 RefPtr<FunctionParameters> m_parameters; 1598 int m_functionNameStart;1599 int m_functionKeywordStart;1600 1600 unsigned m_startColumn; 1601 1601 unsigned m_endColumn; 1602 int m_functionKeywordStart; 1603 int m_functionNameStart; 1604 int m_parametersStart; 1602 1605 SourceCode m_source; 1603 1606 int m_startStartOffset; -
trunk/Source/JavaScriptCore/parser/Parser.cpp
r181724 r181818 1261 1261 1262 1262 template <typename LexerType> 1263 template <class TreeBuilder> TreeFunctionBody Parser<LexerType>::parseFunctionBody(TreeBuilder& context, ConstructorKind constructorKind) 1263 template <class TreeBuilder> TreeFunctionBody Parser<LexerType>::parseFunctionBody( 1264 TreeBuilder& context, int functionKeywordStart, int functionNameStart, 1265 int parametersStart, ConstructorKind constructorKind) 1264 1266 { 1265 1267 JSTokenLocation startLocation(tokenLocation()); … … 1269 1271 if (match(CLOSEBRACE)) { 1270 1272 unsigned endColumn = tokenColumn(); 1271 return context.createFunctionBody(startLocation, tokenLocation(), startColumn, endColumn, strictMode(), constructorKind);1273 return context.createFunctionBody(startLocation, tokenLocation(), startColumn, endColumn, functionKeywordStart, functionNameStart, parametersStart, strictMode(), constructorKind); 1272 1274 } 1273 1275 DepthManager statementDepth(&m_statementDepth); … … 1276 1278 failIfFalse(parseSourceElements(bodyBuilder, CheckForStrictMode), "Cannot parse body of this function"); 1277 1279 unsigned endColumn = tokenColumn(); 1278 return context.createFunctionBody(startLocation, tokenLocation(), startColumn, endColumn, strictMode(), constructorKind);1280 return context.createFunctionBody(startLocation, tokenLocation(), startColumn, endColumn, functionKeywordStart, functionNameStart, parametersStart, strictMode(), constructorKind); 1279 1281 } 1280 1282 … … 1297 1299 template <typename LexerType> 1298 1300 template <class TreeBuilder> bool Parser<LexerType>::parseFunctionInfo(TreeBuilder& context, FunctionRequirements requirements, FunctionParseMode mode, 1299 bool nameIsInContainingScope, ConstructorKind ownerClassKind, ParserFunctionInfo<TreeBuilder>& info)1301 bool nameIsInContainingScope, ConstructorKind ownerClassKind, int functionKeywordStart, ParserFunctionInfo<TreeBuilder>& info) 1300 1302 { 1301 1303 AutoPopScopeRef functionScope(this, pushScope()); … … 1317 1319 return false; 1318 1320 } 1321 int parametersStart = m_token.m_location.startOffset; 1319 1322 if (!consume(OPENPAREN)) { 1320 1323 semanticFailureDueToKeyword(stringForFunctionMode(mode), " name"); … … 1359 1362 unsigned currentLineStartOffset = m_token.m_location.lineStartOffset; 1360 1363 1361 info.body = context.createFunctionBody(startLocation, endLocation, info.bodyStartColumn, bodyEndColumn, cachedInfo->strictMode, constructorKind); 1364 info.body = context.createFunctionBody( 1365 startLocation, endLocation, info.bodyStartColumn, bodyEndColumn, 1366 functionKeywordStart, functionNameStart, parametersStart, 1367 cachedInfo->strictMode, constructorKind); 1362 1368 1363 1369 functionScope->restoreFromSourceProviderCache(cachedInfo); … … 1366 1372 info.closeBraceOffset = cachedInfo->closeBraceOffset; 1367 1373 1368 context.setFunctionNameStart(info.body, functionNameStart);1369 1374 m_token = cachedInfo->closeBraceToken(); 1370 1375 if (endColumnIsOnStartLine) … … 1382 1387 m_lastFunctionName = lastFunctionName; 1383 1388 ParserState oldState = saveState(); 1384 info.body = parseFunctionBody(context, constructorKind);1389 info.body = parseFunctionBody(context, functionKeywordStart, functionNameStart, parametersStart, constructorKind); 1385 1390 restoreState(oldState); 1386 1391 failIfFalse(info.body, "Cannot parse the body of this ", stringForFunctionMode(mode)); … … 1417 1422 1418 1423 } 1419 context.setFunctionNameStart(info.body, functionNameStart);1420 1424 1421 1425 failIfFalse(popScope(functionScope, TreeBuilder::NeedsFreeVariableInfo), "Parser error"); … … 1438 1442 next(); 1439 1443 ParserFunctionInfo<TreeBuilder> info; 1440 failIfFalse((parseFunctionInfo(context, FunctionNeedsName, FunctionMode, true, ConstructorKind::None, info)), "Cannot parse this function");1444 failIfFalse((parseFunctionInfo(context, FunctionNeedsName, FunctionMode, true, ConstructorKind::None, functionKeywordStart, info)), "Cannot parse this function"); 1441 1445 failIfFalse(info.name, "Function statements must have a name"); 1442 1446 failIfFalseIfStrict(declareVariable(info.name), "Cannot declare a function named '", info.name->impl(), "' in strict mode"); 1443 return context.createFuncDeclStatement(location, info , functionKeywordStart);1447 return context.createFuncDeclStatement(location, info); 1444 1448 } 1445 1449 … … 1526 1530 } else { 1527 1531 ParserFunctionInfo<TreeBuilder> methodInfo; 1528 failIfFalse((parseFunctionInfo(context, FunctionNeedsName, isStaticMethod ? FunctionMode : MethodMode, false, constructorKind, method Info)), "Cannot parse this method");1532 failIfFalse((parseFunctionInfo(context, FunctionNeedsName, isStaticMethod ? FunctionMode : MethodMode, false, constructorKind, methodStart, methodInfo)), "Cannot parse this method"); 1529 1533 failIfFalse(methodInfo.name, "method must have a name"); 1530 1534 failIfFalse(declareVariable(methodInfo.name), "Cannot declare a method named '", methodInfo.name->impl(), "'"); … … 1534 1538 methodInfo.name = className; 1535 1539 1536 TreeExpression method = context.createFunctionExpr(methodLocation, methodInfo , methodStart);1540 TreeExpression method = context.createFunctionExpr(methodLocation, methodInfo); 1537 1541 if (isConstructor) { 1538 1542 semanticFailIfTrue(constructor, "Cannot declare multiple constructors in a single class"); … … 2029 2033 unsigned methodStart = tokenStart(); 2030 2034 ParserFunctionInfo<TreeBuilder> methodInfo; 2031 failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, MethodMode, false, ConstructorKind::None, method Info)), "Cannot parse this method");2035 failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, MethodMode, false, ConstructorKind::None, methodStart, methodInfo)), "Cannot parse this method"); 2032 2036 methodInfo.name = methodName; 2033 return context.createFunctionExpr(methodLocation, methodInfo , methodStart);2037 return context.createFunctionExpr(methodLocation, methodInfo); 2034 2038 } 2035 2039 … … 2051 2055 if (type == PropertyNode::Getter) { 2052 2056 failIfFalse(match(OPENPAREN), "Expected a parameter list for getter definition"); 2053 failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, GetterMode, false, constructorKind, info)), "Cannot parse getter definition");2057 failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, GetterMode, false, constructorKind, getterOrSetterStartOffset, info)), "Cannot parse getter definition"); 2054 2058 } else { 2055 2059 failIfFalse(match(OPENPAREN), "Expected a parameter list for setter definition"); 2056 failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, SetterMode, false, constructorKind, info)), "Cannot parse setter definition");2060 failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, SetterMode, false, constructorKind, getterOrSetterStartOffset, info)), "Cannot parse setter definition"); 2057 2061 } 2058 2062 if (stringPropertyName) 2059 return context.createGetterOrSetterProperty(location, type, strict, stringPropertyName, info, getterOrSetterStartOffset,superBinding);2060 return context.createGetterOrSetterProperty(const_cast<VM*>(m_vm), m_parserArena, location, type, strict, numericPropertyName, info, getterOrSetterStartOffset,superBinding);2063 return context.createGetterOrSetterProperty(location, type, strict, stringPropertyName, info, superBinding); 2064 return context.createGetterOrSetterProperty(const_cast<VM*>(m_vm), m_parserArena, location, type, strict, numericPropertyName, info, superBinding); 2061 2065 } 2062 2066 … … 2243 2247 ParserFunctionInfo<TreeBuilder> info; 2244 2248 info.name = &m_vm->propertyNames->nullIdentifier; 2245 failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, FunctionMode, false, ConstructorKind::None, info)), "Cannot parse function expression");2246 return context.createFunctionExpr(location, info , functionKeywordStart);2249 failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, FunctionMode, false, ConstructorKind::None, functionKeywordStart, info)), "Cannot parse function expression"); 2250 return context.createFunctionExpr(location, info); 2247 2251 } 2248 2252 #if ENABLE(ES6_CLASS_SYNTAX) -
trunk/Source/JavaScriptCore/parser/Parser.h
r181673 r181818 763 763 template <class TreeBuilder> TreeExpression parsePropertyMethod(TreeBuilder& context, const Identifier* methodName); 764 764 template <class TreeBuilder> TreeProperty parseGetterSetter(TreeBuilder&, bool strict, PropertyNode::Type, unsigned getterOrSetterStartOffset, ConstructorKind = ConstructorKind::None, SuperBinding = SuperBinding::NotNeeded); 765 template <class TreeBuilder> ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&, ConstructorKind);765 template <class TreeBuilder> ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&, int functionKeywordStart, int functionNameStart, int parametersStart, ConstructorKind); 766 766 template <class TreeBuilder> ALWAYS_INLINE TreeFormalParameterList parseFormalParameters(TreeBuilder&); 767 767 enum VarDeclarationListContext { ForLoopContext, VarDeclarationContext }; … … 773 773 template <class TreeBuilder> NEVER_INLINE TreeDeconstructionPattern tryParseDeconstructionPatternExpression(TreeBuilder&); 774 774 775 template <class TreeBuilder> NEVER_INLINE bool parseFunctionInfo(TreeBuilder&, FunctionRequirements, FunctionParseMode, bool nameIsInContainingScope, ConstructorKind, ParserFunctionInfo<TreeBuilder>&);775 template <class TreeBuilder> NEVER_INLINE bool parseFunctionInfo(TreeBuilder&, FunctionRequirements, FunctionParseMode, bool nameIsInContainingScope, ConstructorKind, int functionKeywordStart, ParserFunctionInfo<TreeBuilder>&); 776 776 #if ENABLE(ES6_CLASS_SYNTAX) 777 777 template <class TreeBuilder> NEVER_INLINE TreeClassExpression parseClass(TreeBuilder&, FunctionRequirements); -
trunk/Source/JavaScriptCore/parser/SyntaxChecker.h
r181807 r181818 169 169 ClassExpression createClassExpr(const JSTokenLocation&, const Identifier&, ExpressionType, ExpressionType, PropertyList, PropertyList) { return ClassExpr; } 170 170 #endif 171 ExpressionType createFunctionExpr(const JSTokenLocation&, const ParserFunctionInfo<SyntaxChecker>&, int) { return FunctionExpr; } 172 int createFunctionBody(const JSTokenLocation&, const JSTokenLocation&, int, int, bool, ConstructorKind) { return FunctionBodyResult; } 173 void setFunctionNameStart(int, int) { } 171 ExpressionType createFunctionExpr(const JSTokenLocation&, const ParserFunctionInfo<SyntaxChecker>&) { return FunctionExpr; } 172 int createFunctionBody(const JSTokenLocation&, const JSTokenLocation&, int, int, bool, int, int, int, ConstructorKind) { return FunctionBodyResult; } 174 173 int createArguments() { return ArgumentsResult; } 175 174 int createArguments(int) { return ArgumentsResult; } … … 203 202 int createClauseList(int) { return ClauseListResult; } 204 203 int createClauseList(int, int) { return ClauseListResult; } 205 int createFuncDeclStatement(const JSTokenLocation&, const ParserFunctionInfo<SyntaxChecker>& , int) { return StatementResult; }204 int createFuncDeclStatement(const JSTokenLocation&, const ParserFunctionInfo<SyntaxChecker>&) { return StatementResult; } 206 205 #if ENABLE(ES6_CLASS_SYNTAX) 207 206 int createClassDeclStatement(const JSTokenLocation&, ClassExpression, … … 232 231 int createConstStatement(const JSTokenLocation&, int, int, int) { return StatementResult; } 233 232 int appendConstDecl(const JSTokenLocation&, int, const Identifier*, int) { return StatementResult; } 234 Property createGetterOrSetterProperty(const JSTokenLocation&, PropertyNode::Type type, bool strict, const Identifier* name, const ParserFunctionInfo<SyntaxChecker>&, unsigned,SuperBinding)233 Property createGetterOrSetterProperty(const JSTokenLocation&, PropertyNode::Type type, bool strict, const Identifier* name, const ParserFunctionInfo<SyntaxChecker>&, SuperBinding) 235 234 { 236 235 ASSERT(name); … … 239 238 return Property(name, type); 240 239 } 241 Property createGetterOrSetterProperty(VM* vm, ParserArena& parserArena, const JSTokenLocation&, PropertyNode::Type type, bool strict, double name, const ParserFunctionInfo<SyntaxChecker>&, unsigned,SuperBinding)240 Property createGetterOrSetterProperty(VM* vm, ParserArena& parserArena, const JSTokenLocation&, PropertyNode::Type type, bool strict, double name, const ParserFunctionInfo<SyntaxChecker>&, SuperBinding) 242 241 { 243 242 if (!strict)
Note:
See TracChangeset
for help on using the changeset viewer.