Changeset 233426 in webkit
- Timestamp:
- Jul 2, 2018, 10:51:21 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JSTests/ChangeLog
r233377 r233426 1 2018-06-30 Mark Lam <mark.lam@apple.com> 2 3 Builtins and host functions should get their own structures. 4 https://bugs.webkit.org/show_bug.cgi?id=187211 5 <rdar://problem/41646336> 6 7 Reviewed by Saam Barati. 8 9 * stress/regress-187211.js: Added. 10 1 11 2018-06-29 Saam Barati <sbarati@apple.com> 2 12 -
trunk/Source/JavaScriptCore/ChangeLog
r233410 r233426 1 2018-07-01 Mark Lam <mark.lam@apple.com> 2 3 Builtins and host functions should get their own structures. 4 https://bugs.webkit.org/show_bug.cgi?id=187211 5 <rdar://problem/41646336> 6 7 Reviewed by Saam Barati. 8 9 JSFunctions do lazy reification of properties, but ordinary functions applies 10 different rules of property reification than builtin and host functions. Hence, 11 we should give builtins and host functions their own structures. 12 13 * runtime/JSFunction.cpp: 14 (JSC::JSFunction::selectStructureForNewFuncExp): 15 (JSC::JSFunction::create): 16 (JSC::JSFunction::getOwnPropertySlot): 17 * runtime/JSGlobalObject.cpp: 18 (JSC::JSGlobalObject::init): 19 (JSC::JSGlobalObject::visitChildren): 20 * runtime/JSGlobalObject.h: 21 (JSC::JSGlobalObject::hostFunctionStructure const): 22 (JSC::JSGlobalObject::arrowFunctionStructure const): 23 (JSC::JSGlobalObject::sloppyFunctionStructure const): 24 (JSC::JSGlobalObject::strictFunctionStructure const): 25 1 26 2018-07-01 David Kilzer <ddkilzer@apple.com> 2 27 -
trunk/Source/JavaScriptCore/runtime/JSFunction.cpp
r233122 r233426 2 2 * Copyright (C) 1999-2002 Harri Porten (porten@kde.org) 3 3 * Copyright (C) 2001 Peter Kelly (pmk@post.com) 4 * Copyright (C) 2003-20 09, 2015-2017Apple Inc. All rights reserved.4 * Copyright (C) 2003-2018 Apple Inc. All rights reserved. 5 5 * Copyright (C) 2007 Cameron Zwarich (cwzwarich@uwaterloo.ca) 6 6 * Copyright (C) 2007 Maks Orlovich … … 68 68 Structure* JSFunction::selectStructureForNewFuncExp(JSGlobalObject* globalObject, FunctionExecutable* executable) 69 69 { 70 ASSERT(!executable->isHostFunction()); 71 bool isBuiltin = executable->isBuiltinFunction(); 70 72 if (executable->isArrowFunction()) 71 return globalObject->arrowFunctionStructure( );73 return globalObject->arrowFunctionStructure(isBuiltin); 72 74 if (executable->isStrictMode()) 73 return globalObject->strictFunctionStructure( );74 return globalObject->sloppyFunctionStructure( );75 return globalObject->strictFunctionStructure(isBuiltin); 76 return globalObject->sloppyFunctionStructure(isBuiltin); 75 77 } 76 78 … … 90 92 { 91 93 NativeExecutable* executable = vm.getHostFunction(nativeFunction, intrinsic, nativeConstructor, signature, name); 92 Structure* structure = globalObject-> strictFunctionStructure();94 Structure* structure = globalObject->hostFunctionStructure(); 93 95 JSFunction* function = new (NotNull, allocateCell<JSFunction>(vm.heap)) JSFunction(vm, globalObject, structure); 94 96 // Can't do this during initialization because getHostFunction might do a GC allocation. … … 437 439 slot.setCacheableCustom(thisObject, PropertyAttribute::ReadOnly | PropertyAttribute::DontEnum | PropertyAttribute::DontDelete, argumentsGetter); 438 440 return true; 439 } 440 441 if (propertyName == vm.propertyNames->caller) { 441 442 } else if (propertyName == vm.propertyNames->caller) { 442 443 if (!thisObject->jsExecutable()->hasCallerAndArgumentsProperties()) 443 444 return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot); -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
r233245 r233426 417 417 ExecState* exec = JSGlobalObject::globalExec(); 418 418 419 m_strictFunctionStructure.set(vm, this, JSFunction::createStructure(vm, this, m_functionPrototype.get())); 420 m_sloppyFunctionStructure.set(vm, this, JSFunction::createStructure(vm, this, m_functionPrototype.get())); 421 m_arrowFunctionStructure.set(vm, this, JSFunction::createStructure(vm, this, m_functionPrototype.get())); 419 m_hostFunctionStructure.set(vm, this, JSFunction::createStructure(vm, this, m_functionPrototype.get())); 420 421 auto initFunctionStructures = [&] (FunctionStructures& structures) { 422 structures.strictFunctionStructure.set(vm, this, JSFunction::createStructure(vm, this, m_functionPrototype.get())); 423 structures.sloppyFunctionStructure.set(vm, this, JSFunction::createStructure(vm, this, m_functionPrototype.get())); 424 structures.arrowFunctionStructure.set(vm, this, JSFunction::createStructure(vm, this, m_functionPrototype.get())); 425 }; 426 initFunctionStructures(m_builtinFunctions); 427 initFunctionStructures(m_ordinaryFunctions); 428 422 429 m_customGetterSetterFunctionStructure.initLater( 423 430 [] (const Initializer<Structure>& init) { … … 1395 1402 visitor.append(thisObject->m_errorStructure); 1396 1403 visitor.append(thisObject->m_calleeStructure); 1397 visitor.append(thisObject->m_strictFunctionStructure); 1398 visitor.append(thisObject->m_sloppyFunctionStructure); 1399 visitor.append(thisObject->m_arrowFunctionStructure); 1404 1405 visitor.append(thisObject->m_hostFunctionStructure); 1406 auto visitFunctionStructures = [&] (FunctionStructures& structures) { 1407 visitor.append(structures.arrowFunctionStructure); 1408 visitor.append(structures.sloppyFunctionStructure); 1409 visitor.append(structures.strictFunctionStructure); 1410 }; 1411 visitFunctionStructures(thisObject->m_builtinFunctions); 1412 visitFunctionStructures(thisObject->m_ordinaryFunctions); 1413 1400 1414 thisObject->m_customGetterSetterFunctionStructure.visit(visitor); 1401 1415 thisObject->m_boundFunctionStructure.visit(visitor); -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h
r232442 r233426 342 342 WriteBarrier<Structure> m_nullPrototypeObjectStructure; 343 343 WriteBarrier<Structure> m_calleeStructure; 344 WriteBarrier<Structure> m_strictFunctionStructure; 345 WriteBarrier<Structure> m_arrowFunctionStructure; 346 WriteBarrier<Structure> m_sloppyFunctionStructure; 344 345 WriteBarrier<Structure> m_hostFunctionStructure; 346 347 struct FunctionStructures { 348 WriteBarrier<Structure> arrowFunctionStructure; 349 WriteBarrier<Structure> sloppyFunctionStructure; 350 WriteBarrier<Structure> strictFunctionStructure; 351 }; 352 FunctionStructures m_builtinFunctions; 353 FunctionStructures m_ordinaryFunctions; 354 347 355 LazyProperty<JSGlobalObject, Structure> m_boundFunctionStructure; 348 356 LazyProperty<JSGlobalObject, Structure> m_customGetterSetterFunctionStructure; … … 658 666 Structure* errorStructure() const { return m_errorStructure.get(); } 659 667 Structure* calleeStructure() const { return m_calleeStructure.get(); } 660 Structure* strictFunctionStructure() const { return m_strictFunctionStructure.get(); } 661 Structure* sloppyFunctionStructure() const { return m_sloppyFunctionStructure.get(); } 662 Structure* arrowFunctionStructure() const { return m_arrowFunctionStructure.get(); } 668 Structure* hostFunctionStructure() const { return m_hostFunctionStructure.get(); } 669 670 Structure* arrowFunctionStructure(bool isBuiltin) const 671 { 672 if (isBuiltin) 673 return m_builtinFunctions.arrowFunctionStructure.get(); 674 return m_ordinaryFunctions.arrowFunctionStructure.get(); 675 } 676 Structure* sloppyFunctionStructure(bool isBuiltin) const 677 { 678 if (isBuiltin) 679 return m_builtinFunctions.sloppyFunctionStructure.get(); 680 return m_ordinaryFunctions.sloppyFunctionStructure.get(); 681 } 682 Structure* strictFunctionStructure(bool isBuiltin) const 683 { 684 if (isBuiltin) 685 return m_builtinFunctions.strictFunctionStructure.get(); 686 return m_ordinaryFunctions.strictFunctionStructure.get(); 687 } 688 663 689 Structure* boundFunctionStructure() const { return m_boundFunctionStructure.get(this); } 664 690 Structure* customGetterSetterFunctionStructure() const { return m_customGetterSetterFunctionStructure.get(this); }
Note:
See TracChangeset
for help on using the changeset viewer.