Changeset 77113 in webkit for trunk/Source/JavaScriptCore/runtime/JSArray.cpp
- Timestamp:
- Jan 30, 2011, 10:56:20 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/JSArray.cpp
r77098 r77113 189 189 m_storage->m_length = initialLength; 190 190 m_storage->m_numValuesInVector = 0; 191 WriteBarrier<Unknown>* vector = m_storage->m_vector;191 JSValue* vector = m_storage->m_vector; 192 192 for (size_t i = 0; i < initialCapacity; ++i) 193 vector[i] .clear();193 vector[i] = JSValue(); 194 194 } 195 195 … … 199 199 } 200 200 201 JSArray::JSArray( JSGlobalData& globalData,NonNullPassRefPtr<Structure> structure, const ArgList& list)201 JSArray::JSArray(NonNullPassRefPtr<Structure> structure, const ArgList& list) 202 202 : JSObject(structure) 203 203 { … … 226 226 227 227 size_t i = 0; 228 WriteBarrier<Unknown>* vector = m_storage->m_vector;228 JSValue* vector = m_storage->m_vector; 229 229 ArgList::const_iterator end = list.end(); 230 230 for (ArgList::const_iterator it = list.begin(); it != end; ++it, ++i) 231 vector[i] .set(globalData, this, *it);231 vector[i] = *it; 232 232 for (; i < initialStorage; i++) 233 vector[i] .clear();233 vector[i] = JSValue(); 234 234 235 235 checkConsistency(); … … 258 258 259 259 if (i < m_vectorLength) { 260 WriteBarrier<Unknown>& valueSlot = storage->m_vector[i];260 JSValue& valueSlot = storage->m_vector[i]; 261 261 if (valueSlot) { 262 slot.setValueSlot( valueSlot.slot());262 slot.setValueSlot(&valueSlot); 263 263 return true; 264 264 } … … 267 267 SparseArrayValueMap::iterator it = map->find(i); 268 268 if (it != map->end()) { 269 slot.setValueSlot( it->second.slot());269 slot.setValueSlot(&it->second); 270 270 return true; 271 271 } … … 306 306 return false; 307 307 if (i < m_vectorLength) { 308 WriteBarrier<Unknown>& value = storage->m_vector[i];308 JSValue& value = storage->m_vector[i]; 309 309 if (value) { 310 descriptor.setDescriptor(value .get(), 0);310 descriptor.setDescriptor(value, 0); 311 311 return true; 312 312 } … … 315 315 SparseArrayValueMap::iterator it = map->find(i); 316 316 if (it != map->end()) { 317 descriptor.setDescriptor(it->second .get(), 0);317 descriptor.setDescriptor(it->second, 0); 318 318 return true; 319 319 } … … 360 360 361 361 if (i < m_vectorLength) { 362 WriteBarrier<Unknown>& valueSlot = storage->m_vector[i];362 JSValue& valueSlot = storage->m_vector[i]; 363 363 if (valueSlot) { 364 valueSlot .set(exec->globalData(), this, value);364 valueSlot = value; 365 365 checkConsistency(); 366 366 return; 367 367 } 368 valueSlot .set(exec->globalData(), this, value);368 valueSlot = value; 369 369 ++storage->m_numValuesInVector; 370 370 checkConsistency(); … … 396 396 } 397 397 398 WriteBarrier<Unknown> temp; 399 pair<SparseArrayValueMap::iterator, bool> result = map->add(i, temp); 400 result.first->second.set(exec->globalData(), this, value); 401 if (!result.second) // pre-existing entry 398 pair<SparseArrayValueMap::iterator, bool> result = map->add(i, value); 399 if (!result.second) { // pre-existing entry 400 result.first->second = value; 402 401 return; 402 } 403 403 404 404 size_t capacity = map->capacity(); … … 416 416 if (increaseVectorLength(i + 1)) { 417 417 storage = m_storage; 418 storage->m_vector[i] .set(exec->globalData(), this, value);418 storage->m_vector[i] = value; 419 419 ++storage->m_numValuesInVector; 420 420 checkConsistency(); … … 458 458 459 459 unsigned vectorLength = m_vectorLength; 460 WriteBarrier<Unknown>* vector = storage->m_vector;460 JSValue* vector = storage->m_vector; 461 461 462 462 if (newNumValuesInVector == storage->m_numValuesInVector + 1) { 463 463 for (unsigned j = vectorLength; j < newVectorLength; ++j) 464 vector[j] .clear();464 vector[j] = JSValue(); 465 465 if (i > MIN_SPARSE_ARRAY_INDEX) 466 466 map->remove(i); 467 467 } else { 468 468 for (unsigned j = vectorLength; j < max(vectorLength, MIN_SPARSE_ARRAY_INDEX); ++j) 469 vector[j].clear(); 470 JSGlobalData& globalData = exec->globalData(); 469 vector[j] = JSValue(); 471 470 for (unsigned j = max(vectorLength, MIN_SPARSE_ARRAY_INDEX); j < newVectorLength; ++j) 472 vector[j] .set(globalData, this, map->take(j).get());471 vector[j] = map->take(j); 473 472 } 474 473 … … 478 477 storage->m_numValuesInVector = newNumValuesInVector; 479 478 480 storage->m_vector[i] .set(exec->globalData(), this, value);479 storage->m_vector[i] = value; 481 480 482 481 checkConsistency(); … … 505 504 506 505 if (i < m_vectorLength) { 507 WriteBarrier<Unknown>& valueSlot = storage->m_vector[i];506 JSValue& valueSlot = storage->m_vector[i]; 508 507 if (!valueSlot) { 509 508 checkConsistency(); 510 509 return false; 511 510 } 512 valueSlot .clear();511 valueSlot = JSValue(); 513 512 --storage->m_numValuesInVector; 514 513 checkConsistency(); … … 607 606 m_storage->m_allocBase = baseStorage; 608 607 609 WriteBarrier<Unknown>* vector = storage->m_vector;608 JSValue* vector = storage->m_vector; 610 609 for (unsigned i = vectorLength; i < newVectorLength; ++i) 611 vector[i] .clear();610 vector[i] = JSValue(); 612 611 613 612 m_vectorLength = newVectorLength; … … 668 667 unsigned usedVectorLength = min(length, m_vectorLength); 669 668 for (unsigned i = newLength; i < usedVectorLength; ++i) { 670 WriteBarrier<Unknown>& valueSlot = storage->m_vector[i];669 JSValue& valueSlot = storage->m_vector[i]; 671 670 bool hadValue = valueSlot; 672 valueSlot .clear();671 valueSlot = JSValue(); 673 672 storage->m_numValuesInVector -= hadValue; 674 673 } … … 708 707 709 708 if (length < m_vectorLength) { 710 WriteBarrier<Unknown>& valueSlot = storage->m_vector[length];709 JSValue& valueSlot = storage->m_vector[length]; 711 710 if (valueSlot) { 712 711 --storage->m_numValuesInVector; 713 result = valueSlot .get();714 valueSlot .clear();712 result = valueSlot; 713 valueSlot = JSValue(); 715 714 } else 716 715 result = jsUndefined(); … … 720 719 SparseArrayValueMap::iterator it = map->find(length); 721 720 if (it != map->end()) { 722 result = it->second .get();721 result = it->second; 723 722 map->remove(it); 724 723 if (map->isEmpty()) { … … 744 743 745 744 if (storage->m_length < m_vectorLength) { 746 storage->m_vector[storage->m_length] .set(exec->globalData(), this, value);745 storage->m_vector[storage->m_length] = value; 747 746 ++storage->m_numValuesInVector; 748 747 ++storage->m_length; … … 756 755 if (increaseVectorLength(storage->m_length + 1)) { 757 756 storage = m_storage; 758 storage->m_vector[storage->m_length] .set(exec->globalData(), this, value);757 storage->m_vector[storage->m_length] = value; 759 758 ++storage->m_numValuesInVector; 760 759 ++storage->m_length; … … 859 858 } 860 859 861 WriteBarrier<Unknown>* vector = m_storage->m_vector;860 JSValue* vector = m_storage->m_vector; 862 861 for (int i = 0; i < count; i++) 863 vector[i] .clear();862 vector[i] = JSValue(); 864 863 } 865 864 … … 943 942 944 943 for (size_t i = 0; i < lengthNotIncludingUndefined; i++) { 945 JSValue value = storage->m_vector[i] .get();944 JSValue value = storage->m_vector[i]; 946 945 ASSERT(!value.isUndefined()); 947 946 values[i].first = value; … … 976 975 if (storage->m_length < lengthNotIncludingUndefined) 977 976 storage->m_length = lengthNotIncludingUndefined; 978 979 JSGlobalData& globalData = exec->globalData(); 977 980 978 for (size_t i = 0; i < lengthNotIncludingUndefined; i++) 981 storage->m_vector[i] .set(globalData, this, values[i].first);979 storage->m_vector[i] = values[i].first; 982 980 983 981 Heap::heap(this)->popTempSortVector(&values); … … 1108 1106 // Iterate over the array, ignoring missing values, counting undefined ones, and inserting all other ones into the tree. 1109 1107 for (; numDefined < usedVectorLength; ++numDefined) { 1110 JSValue v = storage->m_vector[numDefined] .get();1108 JSValue v = storage->m_vector[numDefined]; 1111 1109 if (!v || v.isUndefined()) 1112 1110 break; … … 1115 1113 } 1116 1114 for (unsigned i = numDefined; i < usedVectorLength; ++i) { 1117 JSValue v = storage->m_vector[i] .get();1115 JSValue v = storage->m_vector[i]; 1118 1116 if (v) { 1119 1117 if (v.isUndefined()) … … 1143 1141 SparseArrayValueMap::iterator end = map->end(); 1144 1142 for (SparseArrayValueMap::iterator it = map->begin(); it != end; ++it) { 1145 tree.abstractor().m_nodes[numDefined].value = it->second .get();1143 tree.abstractor().m_nodes[numDefined].value = it->second; 1146 1144 tree.insert(numDefined); 1147 1145 ++numDefined; … … 1160 1158 AVLTree<AVLTreeAbstractorForArrayCompare, 44>::Iterator iter; 1161 1159 iter.start_iter_least(tree); 1162 JSGlobalData& globalData = exec->globalData();1163 1160 for (unsigned i = 0; i < numDefined; ++i) { 1164 storage->m_vector[i] .set(globalData, this, tree.abstractor().m_nodes[*iter].value);1161 storage->m_vector[i] = tree.abstractor().m_nodes[*iter].value; 1165 1162 ++iter; 1166 1163 } … … 1168 1165 // Put undefined values back in. 1169 1166 for (unsigned i = numDefined; i < newUsedVectorLength; ++i) 1170 storage->m_vector[i] .setUndefined();1167 storage->m_vector[i] = jsUndefined(); 1171 1168 1172 1169 // Ensure that unused values in the vector are zeroed out. 1173 1170 for (unsigned i = newUsedVectorLength; i < usedVectorLength; ++i) 1174 storage->m_vector[i] .clear();1171 storage->m_vector[i] = JSValue(); 1175 1172 1176 1173 storage->m_numValuesInVector = newUsedVectorLength; … … 1183 1180 ArrayStorage* storage = m_storage; 1184 1181 1185 WriteBarrier<Unknown>* vector = storage->m_vector;1182 JSValue* vector = storage->m_vector; 1186 1183 unsigned vectorEnd = min(storage->m_length, m_vectorLength); 1187 1184 unsigned i = 0; 1188 1185 for (; i < vectorEnd; ++i) { 1189 WriteBarrier<Unknown>& v = vector[i];1186 JSValue& v = vector[i]; 1190 1187 if (!v) 1191 1188 break; 1192 args.append(v .get());1189 args.append(v); 1193 1190 } 1194 1191 … … 1201 1198 ASSERT(m_storage->m_length >= maxSize); 1202 1199 UNUSED_PARAM(maxSize); 1203 WriteBarrier<Unknown>* vector = m_storage->m_vector;1200 JSValue* vector = m_storage->m_vector; 1204 1201 unsigned vectorEnd = min(maxSize, m_vectorLength); 1205 1202 unsigned i = 0; 1206 1203 for (; i < vectorEnd; ++i) { 1207 WriteBarrier<Unknown>& v = vector[i];1204 JSValue& v = vector[i]; 1208 1205 if (!v) 1209 1206 break; 1210 buffer[i] = v .get();1207 buffer[i] = v; 1211 1208 } 1212 1209 … … 1227 1224 1228 1225 for (; numDefined < usedVectorLength; ++numDefined) { 1229 JSValue v = storage->m_vector[numDefined] .get();1226 JSValue v = storage->m_vector[numDefined]; 1230 1227 if (!v || v.isUndefined()) 1231 1228 break; 1232 1229 } 1233 1234 1230 for (unsigned i = numDefined; i < usedVectorLength; ++i) { 1235 JSValue v = storage->m_vector[i] .get();1231 JSValue v = storage->m_vector[i]; 1236 1232 if (v) { 1237 1233 if (v.isUndefined()) 1238 1234 ++numUndefined; 1239 1235 else 1240 storage->m_vector[numDefined++] .setWithoutWriteBarrier(v);1236 storage->m_vector[numDefined++] = v; 1241 1237 } 1242 1238 } … … 1257 1253 SparseArrayValueMap::iterator end = map->end(); 1258 1254 for (SparseArrayValueMap::iterator it = map->begin(); it != end; ++it) 1259 storage->m_vector[numDefined++] .setWithoutWriteBarrier(it->second.get());1255 storage->m_vector[numDefined++] = it->second; 1260 1256 1261 1257 delete map; … … 1264 1260 1265 1261 for (unsigned i = numDefined; i < newUsedVectorLength; ++i) 1266 storage->m_vector[i] .setUndefined();1262 storage->m_vector[i] = jsUndefined(); 1267 1263 for (unsigned i = newUsedVectorLength; i < usedVectorLength; ++i) 1268 storage->m_vector[i] .clear();1264 storage->m_vector[i] = JSValue(); 1269 1265 1270 1266 storage->m_numValuesInVector = newUsedVectorLength;
Note:
See TracChangeset
for help on using the changeset viewer.