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

Side by Side Diff: src/objects.cc

Issue 9073007: Store transitioned JSArray maps in global context (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: review feedback Created 8 years, 11 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 | Annotate | Revision Log
« 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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 2438 matching lines...) Expand 10 before | Expand all | Expand 10 after
2449 } 2449 }
2450 set_instance_descriptors(DescriptorArray::cast(new_descriptors)); 2450 set_instance_descriptors(DescriptorArray::cast(new_descriptors));
2451 return this; 2451 return this;
2452 } 2452 }
2453 2453
2454 2454
2455 Handle<Map> JSObject::GetElementsTransitionMap(Handle<JSObject> object, 2455 Handle<Map> JSObject::GetElementsTransitionMap(Handle<JSObject> object,
2456 ElementsKind to_kind) { 2456 ElementsKind to_kind) {
2457 Isolate* isolate = object->GetIsolate(); 2457 Isolate* isolate = object->GetIsolate();
2458 CALL_HEAP_FUNCTION(isolate, 2458 CALL_HEAP_FUNCTION(isolate,
2459 object->GetElementsTransitionMap(to_kind), 2459 object->GetElementsTransitionMap(isolate, to_kind),
2460 Map); 2460 Map);
2461 } 2461 }
2462 2462
2463 2463
2464 MaybeObject* JSObject::GetElementsTransitionMap(ElementsKind to_kind) { 2464 MaybeObject* JSObject::GetElementsTransitionMapSlow(ElementsKind to_kind) {
2465 Map* current_map = map(); 2465 Map* current_map = map();
2466 ElementsKind from_kind = current_map->elements_kind(); 2466 ElementsKind from_kind = current_map->elements_kind();
2467 2467
2468 if (from_kind == to_kind) return current_map; 2468 if (from_kind == to_kind) return current_map;
2469 2469
2470 // Only objects with FastProperties can have DescriptorArrays and can track 2470 // Only objects with FastProperties can have DescriptorArrays and can track
2471 // element-related maps. Also don't add descriptors to maps that are shared. 2471 // element-related maps. Also don't add descriptors to maps that are shared.
2472 bool safe_to_add_transition = HasFastProperties() && 2472 bool safe_to_add_transition = HasFastProperties() &&
2473 !current_map->IsUndefined() && 2473 !current_map->IsUndefined() &&
2474 !current_map->is_shared(); 2474 !current_map->is_shared();
(...skipping 21 matching lines...) Expand all
2496 // one. 2496 // one.
2497 { MaybeObject* maybe_map = current_map->CopyDropTransitions(); 2497 { MaybeObject* maybe_map = current_map->CopyDropTransitions();
2498 if (!maybe_map->To(&new_map)) return maybe_map; 2498 if (!maybe_map->To(&new_map)) return maybe_map;
2499 } 2499 }
2500 2500
2501 new_map->set_elements_kind(to_kind); 2501 new_map->set_elements_kind(to_kind);
2502 2502
2503 // Only remember the map transition if the object's map is NOT equal to the 2503 // Only remember the map transition if the object's map is NOT equal to the
2504 // global object_function's map and there is not an already existing 2504 // global object_function's map and there is not an already existing
2505 // non-matching element transition. 2505 // non-matching element transition.
2506 Context* global_context = GetIsolate()->context()->global_context();
2506 bool allow_map_transition = safe_to_add_transition && 2507 bool allow_map_transition = safe_to_add_transition &&
2507 (GetIsolate()->context()->global_context()->object_function()->map() != 2508 (global_context->object_function()->map() != map());
2508 map());
2509 if (allow_map_transition) { 2509 if (allow_map_transition) {
2510 MaybeObject* maybe_transition = 2510 MaybeObject* maybe_transition =
2511 current_map->AddElementsTransition(to_kind, new_map); 2511 current_map->AddElementsTransition(to_kind, new_map);
2512 if (maybe_transition->IsFailure()) return maybe_transition; 2512 if (maybe_transition->IsFailure()) return maybe_transition;
2513 } 2513 }
2514 return new_map; 2514 return new_map;
2515 } 2515 }
2516 2516
2517 2517
2518 void JSObject::LocalLookupRealNamedProperty(String* name, 2518 void JSObject::LocalLookupRealNamedProperty(String* name,
(...skipping 1052 matching lines...) Expand 10 before | Expand all | Expand 10 after
3571 } 3571 }
3572 } 3572 }
3573 3573
3574 // Switch to using the dictionary as the backing storage for elements. 3574 // Switch to using the dictionary as the backing storage for elements.
3575 if (is_arguments) { 3575 if (is_arguments) {
3576 FixedArray::cast(elements())->set(1, dictionary); 3576 FixedArray::cast(elements())->set(1, dictionary);
3577 } else { 3577 } else {
3578 // Set the new map first to satify the elements type assert in 3578 // Set the new map first to satify the elements type assert in
3579 // set_elements(). 3579 // set_elements().
3580 Object* new_map; 3580 Object* new_map;
3581 MaybeObject* maybe = GetElementsTransitionMap(DICTIONARY_ELEMENTS); 3581 MaybeObject* maybe = GetElementsTransitionMap(GetIsolate(),
3582 DICTIONARY_ELEMENTS);
3582 if (!maybe->ToObject(&new_map)) return maybe; 3583 if (!maybe->ToObject(&new_map)) return maybe;
3583 set_map(Map::cast(new_map)); 3584 set_map(Map::cast(new_map));
3584 set_elements(dictionary); 3585 set_elements(dictionary);
3585 } 3586 }
3586 3587
3587 old_map->GetHeap()->isolate()->counters()->elements_to_dictionary()-> 3588 old_map->GetHeap()->isolate()->counters()->elements_to_dictionary()->
3588 Increment(); 3589 Increment();
3589 3590
3590 #ifdef DEBUG 3591 #ifdef DEBUG
3591 if (FLAG_trace_normalization) { 3592 if (FLAG_trace_normalization) {
(...skipping 3702 matching lines...) Expand 10 before | Expand all | Expand 10 after
7294 if (!shared_info->script()->IsScript()) return false; 7295 if (!shared_info->script()->IsScript()) return false;
7295 if (shared_info->optimization_disabled()) return false; 7296 if (shared_info->optimization_disabled()) return false;
7296 Code* code = shared_info->code(); 7297 Code* code = shared_info->code();
7297 if (code->kind() == Code::OPTIMIZED_FUNCTION) return true; 7298 if (code->kind() == Code::OPTIMIZED_FUNCTION) return true;
7298 // If we never ran this (unlikely) then lets try to optimize it. 7299 // If we never ran this (unlikely) then lets try to optimize it.
7299 if (code->kind() != Code::FUNCTION) return true; 7300 if (code->kind() != Code::FUNCTION) return true;
7300 return code->optimizable(); 7301 return code->optimizable();
7301 } 7302 }
7302 7303
7303 7304
7304 Object* JSFunction::SetInstancePrototype(Object* value) { 7305 MaybeObject* JSFunction::SetInstancePrototype(Object* value) {
7305 ASSERT(value->IsJSObject()); 7306 ASSERT(value->IsJSObject());
7306 Heap* heap = GetHeap(); 7307 Heap* heap = GetHeap();
7307 if (has_initial_map()) { 7308 if (has_initial_map()) {
7308 initial_map()->set_prototype(value); 7309 // If the function has allocated the initial map
7310 // replace it with a copy containing the new prototype.
7311 Map* new_map;
7312 MaybeObject* maybe_new_map = initial_map()->CopyDropTransitions();
7313 if (!maybe_new_map->To(&new_map)) return maybe_new_map;
7314 new_map->set_prototype(value);
7315 MaybeObject* maybe_object =
7316 set_initial_map_and_cache_transitions(new_map);
7317 if (maybe_object->IsFailure()) return maybe_object;
7309 } else { 7318 } else {
7310 // Put the value in the initial map field until an initial map is 7319 // Put the value in the initial map field until an initial map is
7311 // needed. At that point, a new initial map is created and the 7320 // needed. At that point, a new initial map is created and the
7312 // prototype is put into the initial map where it belongs. 7321 // prototype is put into the initial map where it belongs.
7313 set_prototype_or_initial_map(value); 7322 set_prototype_or_initial_map(value);
7314 } 7323 }
7315 heap->ClearInstanceofCache(); 7324 heap->ClearInstanceofCache();
7316 return value; 7325 return value;
7317 } 7326 }
7318 7327
(...skipping 995 matching lines...) Expand 10 before | Expand all | Expand 10 after
8314 // The resized array has FAST_SMI_ONLY_ELEMENTS if the capacity mode forces 8323 // The resized array has FAST_SMI_ONLY_ELEMENTS if the capacity mode forces
8315 // it, or if it's allowed and the old elements array contained only SMIs. 8324 // it, or if it's allowed and the old elements array contained only SMIs.
8316 bool has_fast_smi_only_elements = 8325 bool has_fast_smi_only_elements =
8317 (set_capacity_mode == kForceSmiOnlyElements) || 8326 (set_capacity_mode == kForceSmiOnlyElements) ||
8318 ((set_capacity_mode == kAllowSmiOnlyElements) && 8327 ((set_capacity_mode == kAllowSmiOnlyElements) &&
8319 (elements()->map()->has_fast_smi_only_elements() || 8328 (elements()->map()->has_fast_smi_only_elements() ||
8320 elements() == heap->empty_fixed_array())); 8329 elements() == heap->empty_fixed_array()));
8321 ElementsKind elements_kind = has_fast_smi_only_elements 8330 ElementsKind elements_kind = has_fast_smi_only_elements
8322 ? FAST_SMI_ONLY_ELEMENTS 8331 ? FAST_SMI_ONLY_ELEMENTS
8323 : FAST_ELEMENTS; 8332 : FAST_ELEMENTS;
8324 MaybeObject* maybe = GetElementsTransitionMap(elements_kind); 8333 MaybeObject* maybe = GetElementsTransitionMap(GetIsolate(), elements_kind);
8325 if (!maybe->ToObject(&object)) return maybe; 8334 if (!maybe->ToObject(&object)) return maybe;
8326 new_map = Map::cast(object); 8335 new_map = Map::cast(object);
8327 } 8336 }
8328 8337
8329 FixedArrayBase* old_elements_raw = elements(); 8338 FixedArrayBase* old_elements_raw = elements();
8330 ElementsKind elements_kind = GetElementsKind(); 8339 ElementsKind elements_kind = GetElementsKind();
8331 switch (elements_kind) { 8340 switch (elements_kind) {
8332 case FAST_SMI_ONLY_ELEMENTS: 8341 case FAST_SMI_ONLY_ELEMENTS:
8333 case FAST_ELEMENTS: { 8342 case FAST_ELEMENTS: {
8334 AssertNoAllocation no_gc; 8343 AssertNoAllocation no_gc;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
8398 case EXTERNAL_UNSIGNED_INT_ELEMENTS: 8407 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
8399 case EXTERNAL_FLOAT_ELEMENTS: 8408 case EXTERNAL_FLOAT_ELEMENTS:
8400 case EXTERNAL_DOUBLE_ELEMENTS: 8409 case EXTERNAL_DOUBLE_ELEMENTS:
8401 case EXTERNAL_PIXEL_ELEMENTS: 8410 case EXTERNAL_PIXEL_ELEMENTS:
8402 UNREACHABLE(); 8411 UNREACHABLE();
8403 break; 8412 break;
8404 } 8413 }
8405 8414
8406 if (FLAG_trace_elements_transitions) { 8415 if (FLAG_trace_elements_transitions) {
8407 PrintElementsTransition(stdout, elements_kind, old_elements_raw, 8416 PrintElementsTransition(stdout, elements_kind, old_elements_raw,
8408 FAST_ELEMENTS, new_elements); 8417 GetElementsKind(), new_elements);
8409 } 8418 }
8410 8419
8411 // Update the length if necessary. 8420 // Update the length if necessary.
8412 if (IsJSArray()) { 8421 if (IsJSArray()) {
8413 JSArray::cast(this)->set_length(Smi::FromInt(length)); 8422 JSArray::cast(this)->set_length(Smi::FromInt(length));
8414 } 8423 }
8415 8424
8416 return new_elements; 8425 return new_elements;
8417 } 8426 }
8418 8427
8419 8428
8420 MaybeObject* JSObject::SetFastDoubleElementsCapacityAndLength( 8429 MaybeObject* JSObject::SetFastDoubleElementsCapacityAndLength(
8421 int capacity, 8430 int capacity,
8422 int length) { 8431 int length) {
8423 Heap* heap = GetHeap(); 8432 Heap* heap = GetHeap();
8424 // We should never end in here with a pixel or external array. 8433 // We should never end in here with a pixel or external array.
8425 ASSERT(!HasExternalArrayElements()); 8434 ASSERT(!HasExternalArrayElements());
8426 8435
8427 Object* obj; 8436 Object* obj;
8428 { MaybeObject* maybe_obj = 8437 { MaybeObject* maybe_obj =
8429 heap->AllocateUninitializedFixedDoubleArray(capacity); 8438 heap->AllocateUninitializedFixedDoubleArray(capacity);
8430 if (!maybe_obj->ToObject(&obj)) return maybe_obj; 8439 if (!maybe_obj->ToObject(&obj)) return maybe_obj;
8431 } 8440 }
8432 FixedDoubleArray* elems = FixedDoubleArray::cast(obj); 8441 FixedDoubleArray* elems = FixedDoubleArray::cast(obj);
8433 8442
8434 { MaybeObject* maybe_obj = 8443 { MaybeObject* maybe_obj =
8435 GetElementsTransitionMap(FAST_DOUBLE_ELEMENTS); 8444 GetElementsTransitionMap(heap->isolate(), FAST_DOUBLE_ELEMENTS);
8436 if (!maybe_obj->ToObject(&obj)) return maybe_obj; 8445 if (!maybe_obj->ToObject(&obj)) return maybe_obj;
8437 } 8446 }
8438 Map* new_map = Map::cast(obj); 8447 Map* new_map = Map::cast(obj);
8439 8448
8440 FixedArrayBase* old_elements = elements(); 8449 FixedArrayBase* old_elements = elements();
8441 ElementsKind elements_kind(GetElementsKind()); 8450 ElementsKind elements_kind(GetElementsKind());
8442 AssertNoAllocation no_gc; 8451 AssertNoAllocation no_gc;
8443 switch (elements_kind) { 8452 switch (elements_kind) {
8444 case FAST_SMI_ONLY_ELEMENTS: 8453 case FAST_SMI_ONLY_ELEMENTS:
8445 case FAST_ELEMENTS: { 8454 case FAST_ELEMENTS: {
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after
9235 // Convert to fast double elements if appropriate. 9244 // Convert to fast double elements if appropriate.
9236 if (HasFastSmiOnlyElements() && !value->IsSmi() && value->IsNumber()) { 9245 if (HasFastSmiOnlyElements() && !value->IsSmi() && value->IsNumber()) {
9237 MaybeObject* maybe = 9246 MaybeObject* maybe =
9238 SetFastDoubleElementsCapacityAndLength(new_capacity, array_length); 9247 SetFastDoubleElementsCapacityAndLength(new_capacity, array_length);
9239 if (maybe->IsFailure()) return maybe; 9248 if (maybe->IsFailure()) return maybe;
9240 FixedDoubleArray::cast(elements())->set(index, value->Number()); 9249 FixedDoubleArray::cast(elements())->set(index, value->Number());
9241 return value; 9250 return value;
9242 } 9251 }
9243 // Change elements kind from SMI_ONLY to generic FAST if necessary. 9252 // Change elements kind from SMI_ONLY to generic FAST if necessary.
9244 if (HasFastSmiOnlyElements() && !value->IsSmi()) { 9253 if (HasFastSmiOnlyElements() && !value->IsSmi()) {
9245 MaybeObject* maybe_new_map = GetElementsTransitionMap(FAST_ELEMENTS); 9254 MaybeObject* maybe_new_map = GetElementsTransitionMap(GetIsolate(),
9255 FAST_ELEMENTS);
9246 Map* new_map; 9256 Map* new_map;
9247 if (!maybe_new_map->To<Map>(&new_map)) return maybe_new_map; 9257 if (!maybe_new_map->To<Map>(&new_map)) return maybe_new_map;
9248 set_map(new_map); 9258 set_map(new_map);
9249 if (FLAG_trace_elements_transitions) { 9259 if (FLAG_trace_elements_transitions) {
9250 PrintElementsTransition(stdout, FAST_SMI_ONLY_ELEMENTS, elements(), 9260 PrintElementsTransition(stdout, FAST_SMI_ONLY_ELEMENTS, elements(),
9251 FAST_ELEMENTS, elements()); 9261 FAST_ELEMENTS, elements());
9252 } 9262 }
9253 } 9263 }
9254 // Increase backing store capacity if that's been decided previously. 9264 // Increase backing store capacity if that's been decided previously.
9255 if (new_capacity != capacity) { 9265 if (new_capacity != capacity) {
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
9645 9655
9646 9656
9647 Handle<Object> JSObject::TransitionElementsKind(Handle<JSObject> object, 9657 Handle<Object> JSObject::TransitionElementsKind(Handle<JSObject> object,
9648 ElementsKind to_kind) { 9658 ElementsKind to_kind) {
9649 CALL_HEAP_FUNCTION(object->GetIsolate(), 9659 CALL_HEAP_FUNCTION(object->GetIsolate(),
9650 object->TransitionElementsKind(to_kind), 9660 object->TransitionElementsKind(to_kind),
9651 Object); 9661 Object);
9652 } 9662 }
9653 9663
9654 9664
9655 MUST_USE_RESULT MaybeObject* JSObject::TransitionElementsKind( 9665 MaybeObject* JSObject::TransitionElementsKind(ElementsKind to_kind) {
9656 ElementsKind to_kind) {
9657 ElementsKind from_kind = map()->elements_kind(); 9666 ElementsKind from_kind = map()->elements_kind();
9667
9668 Isolate* isolate = GetIsolate();
9669 if (from_kind == FAST_SMI_ONLY_ELEMENTS &&
9670 (to_kind == FAST_ELEMENTS ||
9671 elements() == isolate->heap()->empty_fixed_array())) {
9672 MaybeObject* maybe_new_map = GetElementsTransitionMap(isolate, to_kind);
9673 Map* new_map;
9674 if (!maybe_new_map->To(&new_map)) return maybe_new_map;
9675 set_map(new_map);
9676 if (FLAG_trace_elements_transitions) {
9677 FixedArrayBase* elms = FixedArrayBase::cast(elements());
9678 PrintElementsTransition(stdout, from_kind, elms, to_kind, elms);
9679 }
9680 return this;
9681 }
9682
9658 FixedArrayBase* elms = FixedArrayBase::cast(elements()); 9683 FixedArrayBase* elms = FixedArrayBase::cast(elements());
9659 uint32_t capacity = static_cast<uint32_t>(elms->length()); 9684 uint32_t capacity = static_cast<uint32_t>(elms->length());
9660 uint32_t length = capacity; 9685 uint32_t length = capacity;
9661 9686
9662 if (IsJSArray()) { 9687 if (IsJSArray()) {
9663 Object* raw_length = JSArray::cast(this)->length(); 9688 Object* raw_length = JSArray::cast(this)->length();
9664 if (raw_length->IsUndefined()) { 9689 if (raw_length->IsUndefined()) {
9665 // If length is undefined, then JSArray is being initialized and has no 9690 // If length is undefined, then JSArray is being initialized and has no
9666 // elements, assume a length of zero. 9691 // elements, assume a length of zero.
9667 length = 0; 9692 length = 0;
9668 } else { 9693 } else {
9669 CHECK(JSArray::cast(this)->length()->ToArrayIndex(&length)); 9694 CHECK(JSArray::cast(this)->length()->ToArrayIndex(&length));
9670 } 9695 }
9671 } 9696 }
9672 9697
9673 if ((from_kind == FAST_SMI_ONLY_ELEMENTS && to_kind == FAST_ELEMENTS) ||
9674 (length == 0)) {
9675 MaybeObject* maybe_new_map = GetElementsTransitionMap(to_kind);
9676 Map* new_map;
9677 if (!maybe_new_map->To(&new_map)) return maybe_new_map;
9678 if (FLAG_trace_elements_transitions) {
9679 PrintElementsTransition(stdout, from_kind, elms, to_kind, elms);
9680 }
9681 set_map(new_map);
9682 return this;
9683 }
9684
9685 if (from_kind == FAST_SMI_ONLY_ELEMENTS && 9698 if (from_kind == FAST_SMI_ONLY_ELEMENTS &&
9686 to_kind == FAST_DOUBLE_ELEMENTS) { 9699 to_kind == FAST_DOUBLE_ELEMENTS) {
9687 MaybeObject* maybe_result = 9700 MaybeObject* maybe_result =
9688 SetFastDoubleElementsCapacityAndLength(capacity, length); 9701 SetFastDoubleElementsCapacityAndLength(capacity, length);
9689 if (maybe_result->IsFailure()) return maybe_result; 9702 if (maybe_result->IsFailure()) return maybe_result;
9690 return this; 9703 return this;
9691 } 9704 }
9692 9705
9693 if (from_kind == FAST_DOUBLE_ELEMENTS && to_kind == FAST_ELEMENTS) { 9706 if (from_kind == FAST_DOUBLE_ELEMENTS && to_kind == FAST_ELEMENTS) {
9694 MaybeObject* maybe_result = SetFastElementsCapacityAndLength( 9707 MaybeObject* maybe_result = SetFastElementsCapacityAndLength(
(...skipping 1546 matching lines...) Expand 10 before | Expand all | Expand 10 after
11241 // Convert to fast elements containing only the existing properties. 11254 // Convert to fast elements containing only the existing properties.
11242 // Ordering is irrelevant, since we are going to sort anyway. 11255 // Ordering is irrelevant, since we are going to sort anyway.
11243 SeededNumberDictionary* dict = element_dictionary(); 11256 SeededNumberDictionary* dict = element_dictionary();
11244 if (IsJSArray() || dict->requires_slow_elements() || 11257 if (IsJSArray() || dict->requires_slow_elements() ||
11245 dict->max_number_key() >= limit) { 11258 dict->max_number_key() >= limit) {
11246 return PrepareSlowElementsForSort(limit); 11259 return PrepareSlowElementsForSort(limit);
11247 } 11260 }
11248 // Convert to fast elements. 11261 // Convert to fast elements.
11249 11262
11250 Object* obj; 11263 Object* obj;
11251 { MaybeObject* maybe_obj = GetElementsTransitionMap(FAST_ELEMENTS); 11264 { MaybeObject* maybe_obj = GetElementsTransitionMap(GetIsolate(),
11265 FAST_ELEMENTS);
11252 if (!maybe_obj->ToObject(&obj)) return maybe_obj; 11266 if (!maybe_obj->ToObject(&obj)) return maybe_obj;
11253 } 11267 }
11254 Map* new_map = Map::cast(obj); 11268 Map* new_map = Map::cast(obj);
11255 11269
11256 PretenureFlag tenure = heap->InNewSpace(this) ? NOT_TENURED: TENURED; 11270 PretenureFlag tenure = heap->InNewSpace(this) ? NOT_TENURED: TENURED;
11257 Object* new_array; 11271 Object* new_array;
11258 { MaybeObject* maybe_new_array = 11272 { MaybeObject* maybe_new_array =
11259 heap->AllocateFixedArray(dict->NumberOfElements(), tenure); 11273 heap->AllocateFixedArray(dict->NumberOfElements(), tenure);
11260 if (!maybe_new_array->ToObject(&new_array)) return maybe_new_array; 11274 if (!maybe_new_array->ToObject(&new_array)) return maybe_new_array;
11261 } 11275 }
(...skipping 1547 matching lines...) Expand 10 before | Expand all | Expand 10 after
12809 if (break_point_objects()->IsUndefined()) return 0; 12823 if (break_point_objects()->IsUndefined()) return 0;
12810 // Single break point. 12824 // Single break point.
12811 if (!break_point_objects()->IsFixedArray()) return 1; 12825 if (!break_point_objects()->IsFixedArray()) return 1;
12812 // Multiple break points. 12826 // Multiple break points.
12813 return FixedArray::cast(break_point_objects())->length(); 12827 return FixedArray::cast(break_point_objects())->length();
12814 } 12828 }
12815 #endif // ENABLE_DEBUGGER_SUPPORT 12829 #endif // ENABLE_DEBUGGER_SUPPORT
12816 12830
12817 12831
12818 } } // namespace v8::internal 12832 } } // 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