Changeset 153132 in webkit for trunk/Source/JavaScriptCore/runtime/JSSymbolTableObject.h
- Timestamp:
- Jul 24, 2013, 8:59:04 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/JSSymbolTableObject.h
r148696 r153132 74 74 { 75 75 SymbolTable& symbolTable = *object->symbolTable(); 76 SymbolTable::iterator iter = symbolTable.find(propertyName.publicName()); 77 if (iter == symbolTable.end()) 76 SymbolTable::Locker locker(symbolTable.m_lock); 77 SymbolTable::Map::iterator iter = symbolTable.find(locker, propertyName.publicName()); 78 if (iter == symbolTable.end(locker)) 78 79 return false; 79 80 SymbolTableEntry::Fast entry = iter->value; … … 88 89 { 89 90 SymbolTable& symbolTable = *object->symbolTable(); 90 SymbolTable::iterator iter = symbolTable.find(propertyName.publicName()); 91 if (iter == symbolTable.end()) 91 SymbolTable::Locker locker(symbolTable.m_lock); 92 SymbolTable::Map::iterator iter = symbolTable.find(locker, propertyName.publicName()); 93 if (iter == symbolTable.end(locker)) 92 94 return false; 93 95 SymbolTableEntry::Fast entry = iter->value; … … 104 106 { 105 107 SymbolTable& symbolTable = *object->symbolTable(); 106 SymbolTable::iterator iter = symbolTable.find(propertyName.publicName()); 107 if (iter == symbolTable.end()) 108 SymbolTable::Locker locker(symbolTable.m_lock); 109 SymbolTable::Map::iterator iter = symbolTable.find(locker, propertyName.publicName()); 110 if (iter == symbolTable.end(locker)) 108 111 return false; 109 112 SymbolTableEntry::Fast entry = iter->value; … … 122 125 ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(object)); 123 126 124 SymbolTable& symbolTable = *object->symbolTable(); 125 SymbolTable::iterator iter = symbolTable.find(propertyName.publicName()); 126 if (iter == symbolTable.end()) 127 return false; 128 bool wasFat; 129 SymbolTableEntry::Fast fastEntry = iter->value.getFast(wasFat); 130 ASSERT(!fastEntry.isNull()); 131 if (fastEntry.isReadOnly()) { 132 if (shouldThrow) 133 throwTypeError(exec, StrictModeReadonlyPropertyWriteError); 134 return true; 127 WriteBarrierBase<Unknown>* reg; 128 { 129 SymbolTable& symbolTable = *object->symbolTable(); 130 SymbolTable::Locker locker(symbolTable.m_lock); 131 SymbolTable::Map::iterator iter = symbolTable.find(locker, propertyName.publicName()); 132 if (iter == symbolTable.end(locker)) 133 return false; 134 bool wasFat; 135 SymbolTableEntry::Fast fastEntry = iter->value.getFast(wasFat); 136 ASSERT(!fastEntry.isNull()); 137 if (fastEntry.isReadOnly()) { 138 if (shouldThrow) 139 throwTypeError(exec, StrictModeReadonlyPropertyWriteError); 140 return true; 141 } 142 if (UNLIKELY(wasFat)) 143 iter->value.notifyWrite(); 144 reg = &object->registerAt(fastEntry.getIndex()); 135 145 } 136 if (UNLIKELY(wasFat)) 137 iter->value.notifyWrite(); 138 object->registerAt(fastEntry.getIndex()).set(vm, object, value); 146 // I'd prefer we not hold lock while executing barriers, since I prefer to reserve 147 // the right for barriers to be able to trigger GC. And I don't want to hold VM 148 // locks while GC'ing. 149 reg->set(vm, object, value); 139 150 return true; 140 151 } … … 146 157 { 147 158 ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(object)); 148 149 SymbolTable::iterator iter = object->symbolTable()->find(propertyName.publicName()); 150 if (iter == object->symbolTable()->end()) 151 return false; 152 SymbolTableEntry& entry = iter->value; 153 ASSERT(!entry.isNull()); 154 entry.notifyWrite(); 155 entry.setAttributes(attributes); 156 object->registerAt(entry.getIndex()).set(vm, object, value); 159 160 WriteBarrierBase<Unknown>* reg; 161 { 162 SymbolTable& symbolTable = *object->symbolTable(); 163 SymbolTable::Locker locker(symbolTable.m_lock); 164 SymbolTable::Map::iterator iter = symbolTable.find(locker, propertyName.publicName()); 165 if (iter == symbolTable.end(locker)) 166 return false; 167 SymbolTableEntry& entry = iter->value; 168 ASSERT(!entry.isNull()); 169 entry.notifyWrite(); 170 entry.setAttributes(attributes); 171 reg = &object->registerAt(entry.getIndex()); 172 } 173 reg->set(vm, object, value); 157 174 return true; 158 175 }
Note:
See TracChangeset
for help on using the changeset viewer.