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

Side by Side Diff: src/elements.cc

Issue 1865343002: [elements] revert overzealous optimzation for fast sloppy arguments delete (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: addressing comment Created 4 years, 8 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 | « no previous file | test/mjsunit/arguments.js » ('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 1418 matching lines...) Expand 10 before | Expand all | Expand 10 after
1429 1429
1430 static void DeleteAtEnd(Handle<JSObject> obj, 1430 static void DeleteAtEnd(Handle<JSObject> obj,
1431 Handle<BackingStore> backing_store, uint32_t entry) { 1431 Handle<BackingStore> backing_store, uint32_t entry) {
1432 uint32_t length = static_cast<uint32_t>(backing_store->length()); 1432 uint32_t length = static_cast<uint32_t>(backing_store->length());
1433 Heap* heap = obj->GetHeap(); 1433 Heap* heap = obj->GetHeap();
1434 for (; entry > 0; entry--) { 1434 for (; entry > 0; entry--) {
1435 if (!backing_store->is_the_hole(entry - 1)) break; 1435 if (!backing_store->is_the_hole(entry - 1)) break;
1436 } 1436 }
1437 if (entry == 0) { 1437 if (entry == 0) {
1438 FixedArray* empty = heap->empty_fixed_array(); 1438 FixedArray* empty = heap->empty_fixed_array();
1439 if (Subclass::kind() == FAST_SLOPPY_ARGUMENTS_ELEMENTS) { 1439 // Dynamically ask for the elements kind here since we manually redirect
1440 // the operations for argument backing stores.
1441 if (obj->GetElementsKind() == FAST_SLOPPY_ARGUMENTS_ELEMENTS) {
1440 FixedArray::cast(obj->elements())->set(1, empty); 1442 FixedArray::cast(obj->elements())->set(1, empty);
1441 } else { 1443 } else {
1442 obj->set_elements(empty); 1444 obj->set_elements(empty);
1443 } 1445 }
1444 return; 1446 return;
1445 } 1447 }
1446 1448
1447 heap->RightTrimFixedArray<Heap::CONCURRENT_TO_SWEEPER>(*backing_store, 1449 heap->RightTrimFixedArray<Heap::CONCURRENT_TO_SWEEPER>(*backing_store,
1448 length - entry); 1450 length - entry);
1449 } 1451 }
(...skipping 886 matching lines...) Expand 10 before | Expand all | Expand 10 after
2336 static uint32_t GetEntryForIndexImpl(JSObject* holder, 2338 static uint32_t GetEntryForIndexImpl(JSObject* holder,
2337 FixedArrayBase* parameters, 2339 FixedArrayBase* parameters,
2338 uint32_t index, PropertyFilter filter) { 2340 uint32_t index, PropertyFilter filter) {
2339 FixedArray* parameter_map = FixedArray::cast(parameters); 2341 FixedArray* parameter_map = FixedArray::cast(parameters);
2340 Object* probe = GetParameterMapArg(parameter_map, index); 2342 Object* probe = GetParameterMapArg(parameter_map, index);
2341 if (!probe->IsTheHole()) return index; 2343 if (!probe->IsTheHole()) return index;
2342 2344
2343 FixedArray* arguments = FixedArray::cast(parameter_map->get(1)); 2345 FixedArray* arguments = FixedArray::cast(parameter_map->get(1));
2344 uint32_t entry = ArgumentsAccessor::GetEntryForIndexImpl(holder, arguments, 2346 uint32_t entry = ArgumentsAccessor::GetEntryForIndexImpl(holder, arguments,
2345 index, filter); 2347 index, filter);
2346 if (entry == kMaxUInt32) return entry; 2348 if (entry == kMaxUInt32) return kMaxUInt32;
2347 return (parameter_map->length() - 2) + entry; 2349 return (parameter_map->length() - 2) + entry;
2348 } 2350 }
2349 2351
2350 static PropertyDetails GetDetailsImpl(JSObject* holder, uint32_t entry) { 2352 static PropertyDetails GetDetailsImpl(JSObject* holder, uint32_t entry) {
2351 FixedArray* parameter_map = FixedArray::cast(holder->elements()); 2353 FixedArray* parameter_map = FixedArray::cast(holder->elements());
2352 uint32_t length = parameter_map->length() - 2; 2354 uint32_t length = parameter_map->length() - 2;
2353 if (entry < length) { 2355 if (entry < length) {
2354 return PropertyDetails(NONE, DATA, 0, PropertyCellType::kNoCell); 2356 return PropertyDetails(NONE, DATA, 0, PropertyCellType::kNoCell);
2355 } 2357 }
2356 FixedArray* arguments = FixedArray::cast(parameter_map->get(1)); 2358 FixedArray* arguments = FixedArray::cast(parameter_map->get(1));
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after
3039 insertion_index += len; 3041 insertion_index += len;
3040 } 3042 }
3041 3043
3042 DCHECK_EQ(insertion_index, result_len); 3044 DCHECK_EQ(insertion_index, result_len);
3043 return result_array; 3045 return result_array;
3044 } 3046 }
3045 3047
3046 ElementsAccessor** ElementsAccessor::elements_accessors_ = NULL; 3048 ElementsAccessor** ElementsAccessor::elements_accessors_ = NULL;
3047 } // namespace internal 3049 } // namespace internal
3048 } // namespace v8 3050 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/arguments.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698