Changeset 155558 in webkit
- Timestamp:
- Sep 11, 2013 1:34:09 PM (11 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r155499 r155558 1 2013-09-11 Sam Weinig <sam@webkit.org> 2 3 MapData and WeakMapData don't need to be objects 4 https://bugs.webkit.org/show_bug.cgi?id=121167 5 6 Reviewed by Geoffrey Garen. 7 8 * runtime/JSGlobalObject.cpp: 9 (JSC::JSGlobalObject::reset): 10 (JSC::JSGlobalObject::visitChildren): 11 * runtime/JSGlobalObject.h: 12 (JSC::JSGlobalObject::mapStructure): 13 Remove MapData and WeakMapData structures (they moved to VM with other non-object Structures). 14 15 * runtime/JSMap.cpp: 16 (JSC::JSMap::finishCreation): 17 * runtime/JSMap.h: 18 (JSC::JSMap::create): 19 * runtime/JSSet.cpp: 20 (JSC::JSSet::finishCreation): 21 * runtime/JSSet.h: 22 (JSC::JSSet::create): 23 * runtime/JSWeakMap.cpp: 24 (JSC::JSWeakMap::finishCreation): 25 * runtime/JSWeakMap.h: 26 (JSC::JSWeakMap::create): 27 Update to not pass a global object to the MapData or WeakMapData Structure. 28 29 * runtime/MapData.cpp: 30 (JSC::MapData::MapData): 31 * runtime/MapData.h: 32 (JSC::MapData::create): 33 (JSC::MapData::createStructure): 34 * runtime/WeakMapData.cpp: 35 (JSC::WeakMapData::WeakMapData): 36 (JSC::WeakMapData::set): Change to take a VM rather than a CallFrame, as that it all it needs. 37 * runtime/WeakMapData.h: 38 (JSC::WeakMapData::create): 39 (JSC::WeakMapData::createStructure): 40 Instead of inheriting from JSDestructibleObject, inherit from JSCell and mark self as needing destruction 41 and having an immortal structure. 42 43 * runtime/VM.cpp: 44 (JSC::VM::VM): 45 * runtime/VM.h: 46 Add MapData and WeakMapData Structures. 47 48 * runtime/WeakMapPrototype.cpp: 49 (JSC::protoFuncWeakMapSet): 50 Pass a VM rather than an ExecState. 51 1 52 2013-09-10 Filip Pizlo <fpizlo@apple.com> 2 53 -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
r155473 r155558 77 77 #include "Lookup.h" 78 78 #include "MapConstructor.h" 79 #include "MapData.h"80 79 #include "MapPrototype.h" 81 80 #include "MathObject.h" … … 102 101 #include "StringPrototype.h" 103 102 #include "WeakMapConstructor.h" 104 #include "WeakMapData.h"105 103 #include "WeakMapPrototype.h" 106 104 … … 311 309 m_promiseWrapperCallbackStructure.set(exec->vm(), this, JSPromiseWrapperCallback::createStructure(exec->vm(), this, m_functionPrototype.get())); 312 310 #endif // ENABLE(PROMISES) 313 314 315 m_mapDataStructure.set(exec->vm(), this, MapData::createStructure(exec->vm(), this, jsNull()));316 m_weakMapDataStructure.set(exec->vm(), this, WeakMapData::createStructure(exec->vm(), this, jsNull()));317 311 318 312 #define CREATE_PROTOTYPE_FOR_SIMPLE_TYPE(capitalName, lowerName, properName, instanceType, jsName) \ … … 645 639 #undef VISIT_SIMPLE_TYPE 646 640 647 visitor.append(&thisObject->m_mapDataStructure);648 visitor.append(&thisObject->m_weakMapDataStructure);649 650 641 for (unsigned i = NUMBER_OF_TYPED_ARRAY_TYPES; i--;) { 651 642 visitor.append(&thisObject->m_typedArrays[i].prototype); -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h
r155473 r155558 201 201 #endif // ENABLE(PROMISES) 202 202 203 WriteBarrier<Structure> m_mapDataStructure;204 WriteBarrier<Structure> m_weakMapDataStructure;205 206 203 #define DEFINE_STORAGE_FOR_SIMPLE_TYPE(capitalName, lowerName, properName, instanceType, jsName) \ 207 204 WriteBarrier<capitalName ## Prototype> m_ ## lowerName ## Prototype; \ … … 400 397 Structure* internalFunctionStructure() const { return m_internalFunctionStructure.get(); } 401 398 Structure* mapStructure() const { return m_mapStructure.get(); } 402 Structure* mapDataStructure() const { return m_mapDataStructure.get(); }403 Structure* weakMapDataStructure() const { return m_weakMapDataStructure.get(); }404 399 Structure* regExpMatchesArrayStructure() const { return m_regExpMatchesArrayStructure.get(); } 405 400 Structure* regExpStructure() const { return m_regExpStructure.get(); } -
trunk/Source/JavaScriptCore/runtime/JSMap.cpp
r154861 r155558 42 42 } 43 43 44 void JSMap::finishCreation(VM& vm , JSGlobalObject* globalObject)44 void JSMap::finishCreation(VM& vm) 45 45 { 46 46 Base::finishCreation(vm); 47 m_mapData.set(vm, this, MapData::create(vm , globalObject));47 m_mapData.set(vm, this, MapData::create(vm)); 48 48 } 49 49 -
trunk/Source/JavaScriptCore/runtime/JSMap.h
r155008 r155558 47 47 { 48 48 JSMap* instance = new (NotNull, allocateCell<JSMap>(vm.heap)) JSMap(vm, structure); 49 instance->finishCreation(vm , structure->globalObject());49 instance->finishCreation(vm); 50 50 return instance; 51 51 } … … 59 59 60 60 private: 61 62 61 static const unsigned StructureFlags = OverridesVisitChildren | Base::StructureFlags; 63 62 … … 67 66 } 68 67 69 JS_EXPORT_PRIVATE void finishCreation(VM& , JSGlobalObject*);68 JS_EXPORT_PRIVATE void finishCreation(VM&); 70 69 71 70 static void visitChildren(JSCell*, SlotVisitor&); -
trunk/Source/JavaScriptCore/runtime/JSSet.cpp
r154916 r155558 42 42 } 43 43 44 void JSSet::finishCreation(VM& vm , JSGlobalObject* globalObject)44 void JSSet::finishCreation(VM& vm) 45 45 { 46 46 Base::finishCreation(vm); 47 m_mapData.set(vm, this, MapData::create(vm , globalObject));47 m_mapData.set(vm, this, MapData::create(vm)); 48 48 } 49 49 -
trunk/Source/JavaScriptCore/runtime/JSSet.h
r155008 r155558 47 47 { 48 48 JSSet* instance = new (NotNull, allocateCell<JSSet>(vm.heap)) JSSet(vm, structure); 49 instance->finishCreation(vm , structure->globalObject());49 instance->finishCreation(vm); 50 50 return instance; 51 51 } … … 67 67 } 68 68 69 JS_EXPORT_PRIVATE void finishCreation(VM& , JSGlobalObject*);69 JS_EXPORT_PRIVATE void finishCreation(VM&); 70 70 71 71 static void visitChildren(JSCell*, SlotVisitor&); -
trunk/Source/JavaScriptCore/runtime/JSWeakMap.cpp
r155473 r155558 35 35 const ClassInfo JSWeakMap::s_info = { "WeakMap", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(JSWeakMap) }; 36 36 37 void JSWeakMap::finishCreation(VM& vm , JSGlobalObject* globalObject)37 void JSWeakMap::finishCreation(VM& vm) 38 38 { 39 39 Base::finishCreation(vm); 40 m_weakMapData.set(vm, this, WeakMapData::create(vm , globalObject));40 m_weakMapData.set(vm, this, WeakMapData::create(vm)); 41 41 } 42 42 -
trunk/Source/JavaScriptCore/runtime/JSWeakMap.h
r155473 r155558 44 44 } 45 45 46 static JSWeakMap* create(VM& vm, Structure* structure) 47 { 48 JSWeakMap* instance = new (NotNull, allocateCell<JSWeakMap>(vm.heap)) JSWeakMap(vm, structure); 49 instance->finishCreation(vm); 50 return instance; 51 } 52 46 53 static JSWeakMap* create(ExecState* exec, Structure* structure) 47 54 { 48 VM& vm = exec->vm(); 49 JSWeakMap* instance = new (NotNull, allocateCell<JSWeakMap>(vm.heap)) JSWeakMap(vm, structure); 50 instance->finishCreation(vm, structure->globalObject()); 51 return instance; 55 return create(exec->vm(), structure); 52 56 } 53 57 … … 62 66 63 67 private: 64 65 68 static const unsigned StructureFlags = OverridesVisitChildren | Base::StructureFlags; 66 69 … … 70 73 } 71 74 72 void finishCreation(VM& , JSGlobalObject*);75 void finishCreation(VM&); 73 76 static void visitChildren(JSCell*, SlotVisitor&); 74 77 -
trunk/Source/JavaScriptCore/runtime/MapData.cpp
r155487 r155558 38 38 namespace JSC { 39 39 40 const ClassInfo MapData::s_info = { "MapData", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(MapData) };40 const ClassInfo MapData::s_info = { "MapData", 0, 0, 0, CREATE_METHOD_TABLE(MapData) }; 41 41 42 42 static const int32_t minimumMapSize = 8; 43 43 44 MapData::MapData(VM& vm , JSGlobalObject* globalObject)45 : Base(vm, globalObject->mapDataStructure())44 MapData::MapData(VM& vm) 45 : Base(vm, vm.mapDataStructure.get()) 46 46 , m_capacity(0) 47 47 , m_size(0) -
trunk/Source/JavaScriptCore/runtime/MapData.h
r155487 r155558 27 27 #define MapData_h 28 28 29 #include "CallFrame.h" 30 #include "JSCJSValue.h" 31 #include "JSDestructibleObject.h" 32 29 #include "JSCell.h" 30 #include "Structure.h" 33 31 #include <wtf/HashFunctions.h> 34 32 #include <wtf/HashMap.h> … … 37 35 namespace JSC { 38 36 39 class MapData : public JS DestructibleObject{37 class MapData : public JSCell { 40 38 public: 41 typedef JS DestructibleObjectBase;39 typedef JSCell Base; 42 40 43 41 struct const_iterator { … … 69 67 }; 70 68 71 static MapData* create(VM& vm , JSGlobalObject* globalObject)69 static MapData* create(VM& vm) 72 70 { 73 MapData* mapData = new (NotNull, allocateCell<MapData>(vm.heap)) MapData(vm , globalObject);71 MapData* mapData = new (NotNull, allocateCell<MapData>(vm.heap)) MapData(vm); 74 72 mapData->finishCreation(vm); 75 73 return mapData; … … 78 76 static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) 79 77 { 80 return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info()); 81 } 78 return Structure::create(vm, globalObject, prototype, TypeInfo(CompoundType, StructureFlags), info()); 79 } 80 81 static const bool needsDestruction = true; 82 static const bool hasImmortalStructure = true; 82 83 83 84 JS_EXPORT_PRIVATE void set(CallFrame*, KeyType, JSValue); … … 110 111 size_t capacityInBytes() { return m_capacity * sizeof(Entry); } 111 112 112 MapData(VM& , JSGlobalObject*);113 MapData(VM&); 113 114 static void destroy(JSCell*); 114 115 static void visitChildren(JSCell*, SlotVisitor&); -
trunk/Source/JavaScriptCore/runtime/VM.cpp
r155495 r155558 47 47 #include "IncrementalSweeper.h" 48 48 #include "Interpreter.h" 49 #include "JSAPIValueWrapper.h" 49 50 #include "JSActivation.h" 50 #include "JSAPIValueWrapper.h"51 51 #include "JSArray.h" 52 52 #include "JSFunction.h" … … 69 69 #include "StrongInlines.h" 70 70 #include "UnlinkedCodeBlock.h" 71 #include "WeakMapData.h" 71 72 #include <wtf/ProcessID.h> 72 73 #include <wtf/RetainPtr.h> … … 242 243 unlinkedFunctionCodeBlockStructure.set(*this, UnlinkedFunctionCodeBlock::createStructure(*this, 0, jsNull())); 243 244 propertyTableStructure.set(*this, PropertyTable::createStructure(*this, 0, jsNull())); 245 mapDataStructure.set(*this, MapData::createStructure(*this, 0, jsNull())); 246 weakMapDataStructure.set(*this, WeakMapData::createStructure(*this, 0, jsNull())); 247 244 248 smallStrings.initializeCommonStrings(*this); 245 249 -
trunk/Source/JavaScriptCore/runtime/VM.h
r155219 r155558 271 271 Strong<Structure> unlinkedFunctionCodeBlockStructure; 272 272 Strong<Structure> propertyTableStructure; 273 Strong<Structure> mapDataStructure; 274 Strong<Structure> weakMapDataStructure; 273 275 274 276 IdentifierTable* identifierTable; -
trunk/Source/JavaScriptCore/runtime/WeakMapData.cpp
r155473 r155558 35 35 #include <wtf/MathExtras.h> 36 36 37 38 37 namespace JSC { 39 38 40 const ClassInfo WeakMapData::s_info = { "WeakMapData", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(WeakMapData) };39 const ClassInfo WeakMapData::s_info = { "WeakMapData", 0, 0, 0, CREATE_METHOD_TABLE(WeakMapData) }; 41 40 42 WeakMapData::WeakMapData(VM& vm , JSGlobalObject* globalObject)43 : Base(vm, globalObject->weakMapDataStructure())41 WeakMapData::WeakMapData(VM& vm) 42 : Base(vm, vm.weakMapDataStructure.get()) 44 43 , m_deadKeyCleaner(this) 45 44 { … … 69 68 } 70 69 71 void WeakMapData::set( CallFrame* callFrame, JSObject* key, JSValue value)70 void WeakMapData::set(VM& vm, JSObject* key, JSValue value) 72 71 { 73 72 // Here we force the write barrier on the key. 74 auto result = m_map.add(WriteBarrier<JSObject>( callFrame->vm(), this, key).get(), WriteBarrier<Unknown>());75 result.iterator->value.set( callFrame->vm(), this, value);73 auto result = m_map.add(WriteBarrier<JSObject>(vm, this, key).get(), WriteBarrier<Unknown>()); 74 result.iterator->value.set(vm, this, value); 76 75 } 77 76 -
trunk/Source/JavaScriptCore/runtime/WeakMapData.h
r155473 r155558 27 27 #define WeakMapData_h 28 28 29 #include "CallFrame.h" 30 #include "JSCJSValue.h" 31 #include "JSDestructibleObject.h" 32 29 #include "JSCell.h" 30 #include "Structure.h" 33 31 #include <wtf/HashFunctions.h> 34 32 #include <wtf/HashMap.h> … … 37 35 namespace JSC { 38 36 39 class WeakImpl; 40 class WeakMapData; 37 class WeakMapData : public JSCell { 38 public: 39 typedef JSCell Base; 41 40 42 class WeakMapData : public JSDestructibleObject { 43 public: 44 typedef JSDestructibleObject Base; 45 46 static WeakMapData* create(VM& vm, JSGlobalObject* globalObject) 41 static WeakMapData* create(VM& vm) 47 42 { 48 WeakMapData* weakMapData = new (NotNull, allocateCell<WeakMapData>(vm.heap)) WeakMapData(vm , globalObject);43 WeakMapData* weakMapData = new (NotNull, allocateCell<WeakMapData>(vm.heap)) WeakMapData(vm); 49 44 weakMapData->finishCreation(vm); 50 45 return weakMapData; … … 53 48 static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) 54 49 { 55 return Structure::create(vm, globalObject, prototype, TypeInfo( ObjectType, StructureFlags), info());50 return Structure::create(vm, globalObject, prototype, TypeInfo(CompoundType, StructureFlags), info()); 56 51 } 57 52 58 void set(CallFrame*, JSObject*, JSValue); 53 static const bool needsDestruction = true; 54 static const bool hasImmortalStructure = true; 55 56 void set(VM&, JSObject*, JSValue); 59 57 JSValue get(JSObject*); 60 58 bool remove(JSObject*); 61 void removeDead(JSObject*);62 59 bool contains(JSObject*); 63 60 void clear(); 64 61 65 62 DECLARE_INFO; 63 66 64 static const unsigned StructureFlags = OverridesVisitChildren | Base::StructureFlags; 67 65 68 66 private: 69 WeakMapData(VM& , JSGlobalObject*);67 WeakMapData(VM&); 70 68 static void destroy(JSCell*); 71 69 static void visitChildren(JSCell*, SlotVisitor&); -
trunk/Source/JavaScriptCore/runtime/WeakMapPrototype.cpp
r155473 r155558 120 120 if (!key.isObject()) 121 121 return JSValue::encode(throwTypeError(callFrame, WTF::ASCIILiteral("Attempted to set a non-object key in a WeakMap"))); 122 map->set(callFrame , asObject(key), callFrame->argument(1));122 map->set(callFrame->vm(), asObject(key), callFrame->argument(1)); 123 123 return JSValue::encode(callFrame->thisValue()); 124 124 }
Note: See TracChangeset
for help on using the changeset viewer.