Changeset 200177 in webkit
- Timestamp:
- Apr 27, 2016, 11:54:54 PM (9 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r200149 r200177 1 2016-04-27 Mark Lam <mark.lam@apple.com> 2 3 The GetterSetter structure needs a globalObject. 4 https://bugs.webkit.org/show_bug.cgi?id=157120 5 6 Reviewed by Filip Pizlo. 7 8 In r199170: <http://trac.webkit.org/r199170>, GetterSetter was promoted from 9 being a JSCell to a JSObject. JSObject methods expect their structure to have a 10 globalObject. For example, see JSObject::calculatedClassName(). GetterSetter 11 was previously using a singleton getterSetterStructure owned by the VM. That 12 singleton getterSetterStructure is not associated with any globalObjects. As a 13 result, JSObject::calculatedClassName() will run into a null globalObject when it 14 is called on a GetterSetter object. 15 16 This patch removes the VM singleton getterSetterStructure, and instead, creates 17 a getterSetterStructure for each JSGlobalObject. 18 19 * dfg/DFGAbstractInterpreterInlines.h: 20 (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): 21 * dfg/DFGStructureRegistrationPhase.cpp: 22 (JSC::DFG::StructureRegistrationPhase::run): 23 * runtime/GetterSetter.h: 24 * runtime/JSGlobalObject.cpp: 25 (JSC::JSGlobalObject::init): 26 (JSC::JSGlobalObject::visitChildren): 27 * runtime/JSGlobalObject.h: 28 (JSC::JSGlobalObject::functionStructure): 29 (JSC::JSGlobalObject::boundFunctionStructure): 30 (JSC::JSGlobalObject::boundSlotBaseFunctionStructure): 31 (JSC::JSGlobalObject::getterSetterStructure): 32 (JSC::JSGlobalObject::nativeStdFunctionStructure): 33 (JSC::JSGlobalObject::namedFunctionStructure): 34 (JSC::JSGlobalObject::functionNameOffset): 35 * runtime/VM.cpp: 36 (JSC::VM::VM): 37 * runtime/VM.h: 38 1 39 2016-04-27 Keith Miller <keith_miller@apple.com> 2 40 -
trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h
r200149 r200177 2372 2372 } 2373 2373 2374 forNode(node).set(m_graph, m_graph. m_vm.getterSetterStructure.get());2374 forNode(node).set(m_graph, m_graph.globalObjectFor(node->origin.semantic)->getterSetterStructure()); 2375 2375 break; 2376 2376 } -
trunk/Source/JavaScriptCore/dfg/DFGStructureRegistrationPhase.cpp
r199300 r200177 63 63 registerStructure(m_graph.m_vm.stringStructure.get()); 64 64 registerStructure(m_graph.m_vm.symbolStructure.get()); 65 registerStructure(m_graph.m_vm.getterSetterStructure.get());66 65 67 66 for (FrozenValue* value : m_graph.m_frozenValues) … … 93 92 registerStructure(node->transition()->next); 94 93 break; 95 94 95 case GetGetterSetterByOffset: 96 registerStructure(m_graph.globalObjectFor(node->origin.semantic)->getterSetterStructure()); 97 break; 98 96 99 case MultiGetByOffset: 97 100 for (const MultiGetByOffsetCase& getCase : node->multiGetByOffsetData().cases) -
trunk/Source/JavaScriptCore/runtime/GetterSetter.h
r199170 r200177 47 47 private: 48 48 GetterSetter(VM& vm, JSGlobalObject* globalObject) 49 : Base(vm, vm.getterSetterStructure.get())49 : Base(vm, globalObject->getterSetterStructure()) 50 50 { 51 51 m_getter.set(vm, this, globalObject->nullGetterFunction()); -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
r200149 r200177 295 295 m_boundSlotBaseFunctionStructure.set(vm, this, JSBoundSlotBaseFunction::createStructure(vm, this, m_functionPrototype.get())); 296 296 m_boundFunctionStructure.set(vm, this, JSBoundFunction::createStructure(vm, this, m_functionPrototype.get())); 297 m_getterSetterStructure.set(vm, this, GetterSetter::createStructure(vm, this, jsNull())); 297 298 m_nativeStdFunctionStructure.set(vm, this, JSNativeStdFunction::createStructure(vm, this, m_functionPrototype.get())); 298 299 m_namedFunctionStructure.set(vm, this, Structure::addPropertyTransition(vm, m_functionStructure.get(), vm.propertyNames->name, DontDelete | ReadOnly | DontEnum, m_functionNameOffset)); … … 977 978 visitor.append(&thisObject->m_boundSlotBaseFunctionStructure); 978 979 visitor.append(&thisObject->m_boundFunctionStructure); 980 visitor.append(&thisObject->m_getterSetterStructure); 979 981 visitor.append(&thisObject->m_nativeStdFunctionStructure); 980 982 visitor.append(&thisObject->m_namedFunctionStructure); -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h
r200117 r200177 274 274 WriteBarrier<Structure> m_boundFunctionStructure; 275 275 WriteBarrier<Structure> m_boundSlotBaseFunctionStructure; 276 WriteBarrier<Structure> m_getterSetterStructure; 276 277 WriteBarrier<Structure> m_nativeStdFunctionStructure; 277 278 WriteBarrier<Structure> m_namedFunctionStructure; … … 532 533 Structure* boundFunctionStructure() const { return m_boundFunctionStructure.get(); } 533 534 Structure* boundSlotBaseFunctionStructure() const { return m_boundSlotBaseFunctionStructure.get(); } 535 Structure* getterSetterStructure() const { return m_getterSetterStructure.get(); } 534 536 Structure* nativeStdFunctionStructure() const { return m_nativeStdFunctionStructure.get(); } 535 537 Structure* namedFunctionStructure() const { return m_namedFunctionStructure.get(); } -
trunk/Source/JavaScriptCore/runtime/VM.cpp
r199949 r200177 218 218 stringStructure.set(*this, JSString::createStructure(*this, 0, jsNull())); 219 219 propertyNameEnumeratorStructure.set(*this, JSPropertyNameEnumerator::createStructure(*this, 0, jsNull())); 220 getterSetterStructure.set(*this, GetterSetter::createStructure(*this, 0, jsNull()));221 220 customGetterSetterStructure.set(*this, CustomGetterSetter::createStructure(*this, 0, jsNull())); 222 221 scopedArgumentsTableStructure.set(*this, ScopedArgumentsTable::createStructure(*this, 0, jsNull())); -
trunk/Source/JavaScriptCore/runtime/VM.h
r200121 r200177 289 289 Strong<Structure> propertyNameIteratorStructure; 290 290 Strong<Structure> propertyNameEnumeratorStructure; 291 Strong<Structure> getterSetterStructure;292 291 Strong<Structure> customGetterSetterStructure; 293 292 Strong<Structure> scopedArgumentsTableStructure;
Note:
See TracChangeset
for help on using the changeset viewer.