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

Side by Side Diff: src/objects.cc

Issue 1148863002: Fix for-in for large indexes and indexes on proxies (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 7 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/objects.h ('k') | src/objects-inl.h » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 <iomanip> 5 #include <iomanip>
6 #include <sstream> 6 #include <sstream>
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/accessors.h" 10 #include "src/accessors.h"
(...skipping 8185 matching lines...) Expand 10 before | Expand all | Expand 10 after
8196 } 8196 }
8197 8197
8198 8198
8199 MaybeHandle<FixedArray> FixedArray::AddKeysFromArrayLike( 8199 MaybeHandle<FixedArray> FixedArray::AddKeysFromArrayLike(
8200 Handle<FixedArray> content, Handle<JSObject> array, KeyFilter filter) { 8200 Handle<FixedArray> content, Handle<JSObject> array, KeyFilter filter) {
8201 DCHECK(array->IsJSArray() || array->HasSloppyArgumentsElements()); 8201 DCHECK(array->IsJSArray() || array->HasSloppyArgumentsElements());
8202 ElementsAccessor* accessor = array->GetElementsAccessor(); 8202 ElementsAccessor* accessor = array->GetElementsAccessor();
8203 Handle<FixedArray> result; 8203 Handle<FixedArray> result;
8204 ASSIGN_RETURN_ON_EXCEPTION( 8204 ASSIGN_RETURN_ON_EXCEPTION(
8205 array->GetIsolate(), result, 8205 array->GetIsolate(), result,
8206 accessor->AddElementsToFixedArray(array, array, content, filter), 8206 accessor->AddElementsToFixedArray(array, content, filter), FixedArray);
8207 FixedArray);
8208 8207
8209 #ifdef ENABLE_SLOW_DCHECKS 8208 #ifdef ENABLE_SLOW_DCHECKS
8210 if (FLAG_enable_slow_asserts) { 8209 if (FLAG_enable_slow_asserts) {
8211 DisallowHeapAllocation no_allocation; 8210 DisallowHeapAllocation no_allocation;
8212 for (int i = 0; i < result->length(); i++) { 8211 for (int i = 0; i < result->length(); i++) {
8213 Object* current = result->get(i); 8212 Object* current = result->get(i);
8214 DCHECK(current->IsNumber() || current->IsName()); 8213 DCHECK(current->IsNumber() || current->IsName());
8215 } 8214 }
8216 } 8215 }
8217 #endif 8216 #endif
8218 return result; 8217 return result;
8219 } 8218 }
8220 8219
8221 8220
8222 MaybeHandle<FixedArray> FixedArray::UnionOfKeys(Handle<FixedArray> first, 8221 MaybeHandle<FixedArray> FixedArray::UnionOfKeys(Handle<FixedArray> first,
8223 Handle<FixedArray> second) { 8222 Handle<FixedArray> second) {
8224 ElementsAccessor* accessor = ElementsAccessor::ForArray(second); 8223 if (second->length() == 0) return first;
8225 Handle<FixedArray> result; 8224 if (first->length() == 0) return second;
8226 ASSIGN_RETURN_ON_EXCEPTION( 8225 Isolate* isolate = first->GetIsolate();
8227 first->GetIsolate(), result, 8226 Handle<FixedArray> result =
8228 accessor->AddElementsToFixedArray( 8227 isolate->factory()->NewFixedArray(first->length() + second->length());
8229 Handle<Object>::null(), // receiver 8228 for (int i = 0; i < first->length(); i++) {
8230 Handle<JSObject>::null(), // holder 8229 result->set(i, first->get(i));
8231 first, Handle<FixedArrayBase>::cast(second), ALL_KEYS), 8230 }
8232 FixedArray); 8231 int pos = first->length();
8233 8232 for (int j = 0; j < second->length(); j++) {
8234 #ifdef ENABLE_SLOW_DCHECKS 8233 Object* current = second->get(j);
8235 if (FLAG_enable_slow_asserts) { 8234 int i;
8236 DisallowHeapAllocation no_allocation; 8235 for (i = 0; i < first->length(); i++) {
8237 for (int i = 0; i < result->length(); i++) { 8236 if (current->KeyEquals(first->get(i))) break;
8238 Object* current = result->get(i); 8237 }
8239 DCHECK(current->IsNumber() || current->IsName()); 8238 if (i == first->length()) {
8239 result->set(pos++, current);
8240 } 8240 }
8241 } 8241 }
8242 #endif 8242
8243 result->Shrink(pos);
8243 return result; 8244 return result;
8244 } 8245 }
8245 8246
8246 8247
8247 Handle<FixedArray> FixedArray::CopySize( 8248 Handle<FixedArray> FixedArray::CopySize(
8248 Handle<FixedArray> array, int new_length, PretenureFlag pretenure) { 8249 Handle<FixedArray> array, int new_length, PretenureFlag pretenure) {
8249 Isolate* isolate = array->GetIsolate(); 8250 Isolate* isolate = array->GetIsolate();
8250 if (new_length == 0) return isolate->factory()->empty_fixed_array(); 8251 if (new_length == 0) return isolate->factory()->empty_fixed_array();
8251 Handle<FixedArray> result = 8252 Handle<FixedArray> result =
8252 isolate->factory()->NewFixedArray(new_length, pretenure); 8253 isolate->factory()->NewFixedArray(new_length, pretenure);
(...skipping 8999 matching lines...) Expand 10 before | Expand all | Expand 10 after
17252 void PropertyCell::SetValueWithInvalidation(Handle<PropertyCell> cell, 17253 void PropertyCell::SetValueWithInvalidation(Handle<PropertyCell> cell,
17253 Handle<Object> new_value) { 17254 Handle<Object> new_value) {
17254 if (cell->value() != *new_value) { 17255 if (cell->value() != *new_value) {
17255 cell->set_value(*new_value); 17256 cell->set_value(*new_value);
17256 Isolate* isolate = cell->GetIsolate(); 17257 Isolate* isolate = cell->GetIsolate();
17257 cell->dependent_code()->DeoptimizeDependentCodeGroup( 17258 cell->dependent_code()->DeoptimizeDependentCodeGroup(
17258 isolate, DependentCode::kPropertyCellChangedGroup); 17259 isolate, DependentCode::kPropertyCellChangedGroup);
17259 } 17260 }
17260 } 17261 }
17261 } } // namespace v8::internal 17262 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698