Changeset 161230 in webkit for trunk/Source/JavaScriptCore/runtime/JSObject.h
- Timestamp:
- Jan 2, 2014, 2:57:14 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/JSObject.h
r161220 r161230 28 28 #include "ArrayStorage.h" 29 29 #include "Butterfly.h" 30 #include "CallFrame.h" 30 31 #include "ClassInfo.h" 31 32 #include "CommonIdentifiers.h" 32 #include "C allFrame.h"33 #include "CopyWriteBarrier.h" 33 34 #include "DeferGC.h" 35 #include "Heap.h" 36 #include "IndexingHeaderInlines.h" 34 37 #include "JSCell.h" 35 38 #include "PropertySlot.h" … … 540 543 } 541 544 542 const Butterfly* butterfly() const { return m_butterfly ; }543 Butterfly* butterfly() { return m_butterfly ; }545 const Butterfly* butterfly() const { return m_butterfly.get(); } 546 Butterfly* butterfly() { return m_butterfly.get(); } 544 547 545 548 ConstPropertyStorage outOfLineStorage() const { return m_butterfly->propertyStorage(); } … … 606 609 607 610 JS_EXPORT_PRIVATE Butterfly* growOutOfLineStorage(VM&, size_t oldSize, size_t newSize); 608 void setButterflyWithoutChangingStructure( Butterfly*); // You probably don't want to call this.611 void setButterflyWithoutChangingStructure(VM&, Butterfly*); 609 612 610 613 void setStructure(VM&, Structure*); … … 976 979 977 980 protected: 978 Butterfly*m_butterfly;981 CopyWriteBarrier<Butterfly> m_butterfly; 979 982 }; 980 983 … … 1136 1139 inline void JSObject::setStructureAndButterfly(VM& vm, Structure* structure, Butterfly* butterfly) 1137 1140 { 1138 m_butterfly = butterfly; 1141 ASSERT(structure); 1142 ASSERT(!butterfly == (!structure->outOfLineCapacity() && !structure->hasIndexingHeader(this))); 1143 m_butterfly.set(vm, this, butterfly); 1139 1144 setStructure(vm, structure); 1140 1145 } … … 1147 1152 } 1148 1153 1149 inline void JSObject::setButterflyWithoutChangingStructure( Butterfly* butterfly)1150 { 1151 m_butterfly = butterfly;1154 inline void JSObject::setButterflyWithoutChangingStructure(VM& vm, Butterfly* butterfly) 1155 { 1156 m_butterfly.set(vm, this, butterfly); 1152 1157 } 1153 1158 … … 1179 1184 inline JSObject::JSObject(VM& vm, Structure* structure, Butterfly* butterfly) 1180 1185 : JSCell(vm, structure) 1181 , m_butterfly( butterfly)1186 , m_butterfly(vm, this, butterfly) 1182 1187 { 1183 1188 vm.heap.ascribeOwner(this, butterfly); … … 1303 1308 1304 1309 DeferGC deferGC(vm.heap); 1305 Butterfly* newButterfly = m_butterfly;1310 Butterfly* newButterfly = butterfly(); 1306 1311 if (structure()->putWillGrowOutOfLineStorage()) 1307 1312 newButterfly = growOutOfLineStorage(vm, structure()->outOfLineCapacity(), structure()->suggestedNewOutOfLineStorageCapacity()); … … 1324 1329 if (Structure* structure = Structure::addPropertyTransitionToExistingStructure(this->structure(), propertyName, attributes, specificFunction, offset)) { 1325 1330 DeferGC deferGC(vm.heap); 1326 Butterfly* newButterfly = m_butterfly; 1327 if (currentCapacity != structure->outOfLineCapacity()) 1331 Butterfly* newButterfly = butterfly(); 1332 if (currentCapacity != structure->outOfLineCapacity()) { 1333 ASSERT(structure != this->structure()); 1328 1334 newButterfly = growOutOfLineStorage(vm, currentCapacity, structure->outOfLineCapacity()); 1335 } 1329 1336 1330 1337 validateOffset(offset); … … 1437 1444 DeferGC deferGC(vm.heap); 1438 1445 ASSERT(!value.isGetterSetter() && !(attributes & Accessor)); 1439 Butterfly* newButterfly = m_butterfly ;1446 Butterfly* newButterfly = m_butterfly.get(); 1440 1447 if (structure()->putWillGrowOutOfLineStorage()) 1441 1448 newButterfly = growOutOfLineStorage(vm, structure()->outOfLineCapacity(), structure()->suggestedNewOutOfLineStorageCapacity());
Note:
See TracChangeset
for help on using the changeset viewer.