Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: src/elements.cc

Issue 2059173002: Reland of place all remaining Oddball checks with new function (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/debug/debug-frames.cc ('k') | src/execution.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/elements.h" 5 #include "src/elements.h"
6 6
7 #include "src/arguments.h" 7 #include "src/arguments.h"
8 #include "src/conversions.h" 8 #include "src/conversions.h"
9 #include "src/factory.h" 9 #include "src/factory.h"
10 #include "src/isolate-inl.h" 10 #include "src/isolate-inl.h"
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 } 443 }
444 } 444 }
445 JavaScriptFrame::PrintTop(isolate, stdout, false, true); 445 JavaScriptFrame::PrintTop(isolate, stdout, false, true);
446 } 446 }
447 447
448 static void SortIndices( 448 static void SortIndices(
449 Handle<FixedArray> indices, uint32_t sort_size, 449 Handle<FixedArray> indices, uint32_t sort_size,
450 WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER) { 450 WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER) {
451 struct { 451 struct {
452 bool operator()(Object* a, Object* b) { 452 bool operator()(Object* a, Object* b) {
453 if (!a->IsUndefined()) { 453 if (a->IsSmi() || !a->IsUndefined(HeapObject::cast(a)->GetIsolate())) {
454 if (b->IsUndefined()) return true; 454 if (!b->IsSmi() && b->IsUndefined(HeapObject::cast(b)->GetIsolate())) {
455 return true;
456 }
455 return a->Number() < b->Number(); 457 return a->Number() < b->Number();
456 } 458 }
457 return b->IsUndefined(); 459 return !b->IsSmi() && b->IsUndefined(HeapObject::cast(b)->GetIsolate());
458 } 460 }
459 } cmp; 461 } cmp;
460 Object** start = 462 Object** start =
461 reinterpret_cast<Object**>(indices->GetFirstElementAddress()); 463 reinterpret_cast<Object**>(indices->GetFirstElementAddress());
462 std::sort(start, start + sort_size, cmp); 464 std::sort(start, start + sort_size, cmp);
463 if (write_barrier_mode != SKIP_WRITE_BARRIER) { 465 if (write_barrier_mode != SKIP_WRITE_BARRIER) {
464 FIXED_ARRAY_ELEMENTS_WRITE_BARRIER(indices->GetIsolate()->heap(), *indices, 466 FIXED_ARRAY_ELEMENTS_WRITE_BARRIER(indices->GetIsolate()->heap(), *indices,
465 0, sort_size); 467 0, sort_size);
466 } 468 }
467 } 469 }
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after
1167 } 1169 }
1168 1170
1169 1171
1170 static void DeleteImpl(Handle<JSObject> obj, uint32_t entry) { 1172 static void DeleteImpl(Handle<JSObject> obj, uint32_t entry) {
1171 // TODO(verwaest): Remove reliance on index in Shrink. 1173 // TODO(verwaest): Remove reliance on index in Shrink.
1172 Handle<SeededNumberDictionary> dict( 1174 Handle<SeededNumberDictionary> dict(
1173 SeededNumberDictionary::cast(obj->elements())); 1175 SeededNumberDictionary::cast(obj->elements()));
1174 uint32_t index = GetIndexForEntryImpl(*dict, entry); 1176 uint32_t index = GetIndexForEntryImpl(*dict, entry);
1175 Handle<Object> result = SeededNumberDictionary::DeleteProperty(dict, entry); 1177 Handle<Object> result = SeededNumberDictionary::DeleteProperty(dict, entry);
1176 USE(result); 1178 USE(result);
1177 DCHECK(result->IsTrue()); 1179 DCHECK(result->IsTrue(dict->GetIsolate()));
1178 Handle<FixedArray> new_elements = 1180 Handle<FixedArray> new_elements =
1179 SeededNumberDictionary::Shrink(dict, index); 1181 SeededNumberDictionary::Shrink(dict, index);
1180 obj->set_elements(*new_elements); 1182 obj->set_elements(*new_elements);
1181 } 1183 }
1182 1184
1183 static bool HasAccessorsImpl(JSObject* holder, 1185 static bool HasAccessorsImpl(JSObject* holder,
1184 FixedArrayBase* backing_store) { 1186 FixedArrayBase* backing_store) {
1185 DisallowHeapAllocation no_gc; 1187 DisallowHeapAllocation no_gc;
1186 SeededNumberDictionary* dict = SeededNumberDictionary::cast(backing_store); 1188 SeededNumberDictionary* dict = SeededNumberDictionary::cast(backing_store);
1187 if (!dict->requires_slow_elements()) return false; 1189 if (!dict->requires_slow_elements()) return false;
(...skipping 1250 matching lines...) Expand 10 before | Expand all | Expand 10 after
2438 ElementsKindTraits<SLOW_SLOPPY_ARGUMENTS_ELEMENTS> >(name) {} 2440 ElementsKindTraits<SLOW_SLOPPY_ARGUMENTS_ELEMENTS> >(name) {}
2439 2441
2440 static void DeleteFromArguments(Handle<JSObject> obj, uint32_t entry) { 2442 static void DeleteFromArguments(Handle<JSObject> obj, uint32_t entry) {
2441 Handle<FixedArray> parameter_map(FixedArray::cast(obj->elements())); 2443 Handle<FixedArray> parameter_map(FixedArray::cast(obj->elements()));
2442 Handle<SeededNumberDictionary> dict( 2444 Handle<SeededNumberDictionary> dict(
2443 SeededNumberDictionary::cast(parameter_map->get(1))); 2445 SeededNumberDictionary::cast(parameter_map->get(1)));
2444 // TODO(verwaest): Remove reliance on index in Shrink. 2446 // TODO(verwaest): Remove reliance on index in Shrink.
2445 uint32_t index = GetIndexForEntryImpl(*dict, entry); 2447 uint32_t index = GetIndexForEntryImpl(*dict, entry);
2446 Handle<Object> result = SeededNumberDictionary::DeleteProperty(dict, entry); 2448 Handle<Object> result = SeededNumberDictionary::DeleteProperty(dict, entry);
2447 USE(result); 2449 USE(result);
2448 DCHECK(result->IsTrue()); 2450 DCHECK(result->IsTrue(dict->GetIsolate()));
2449 Handle<FixedArray> new_elements = 2451 Handle<FixedArray> new_elements =
2450 SeededNumberDictionary::Shrink(dict, index); 2452 SeededNumberDictionary::Shrink(dict, index);
2451 parameter_map->set(1, *new_elements); 2453 parameter_map->set(1, *new_elements);
2452 } 2454 }
2453 2455
2454 static void AddImpl(Handle<JSObject> object, uint32_t index, 2456 static void AddImpl(Handle<JSObject> object, uint32_t index,
2455 Handle<Object> value, PropertyAttributes attributes, 2457 Handle<Object> value, PropertyAttributes attributes,
2456 uint32_t new_capacity) { 2458 uint32_t new_capacity) {
2457 Handle<FixedArray> parameter_map(FixedArray::cast(object->elements())); 2459 Handle<FixedArray> parameter_map(FixedArray::cast(object->elements()));
2458 Handle<FixedArrayBase> old_elements( 2460 Handle<FixedArrayBase> old_elements(
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
3024 insertion_index += len; 3026 insertion_index += len;
3025 } 3027 }
3026 3028
3027 DCHECK_EQ(insertion_index, result_len); 3029 DCHECK_EQ(insertion_index, result_len);
3028 return result_array; 3030 return result_array;
3029 } 3031 }
3030 3032
3031 ElementsAccessor** ElementsAccessor::elements_accessors_ = NULL; 3033 ElementsAccessor** ElementsAccessor::elements_accessors_ = NULL;
3032 } // namespace internal 3034 } // namespace internal
3033 } // namespace v8 3035 } // namespace v8
OLDNEW
« no previous file with comments | « src/debug/debug-frames.cc ('k') | src/execution.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698