| OLD | NEW |
| 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 2628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2639 AllocatePartialMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); | 2639 AllocatePartialMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); |
| 2640 if (!maybe_obj->ToObject(&obj)) return false; | 2640 if (!maybe_obj->ToObject(&obj)) return false; |
| 2641 } | 2641 } |
| 2642 set_fixed_array_map(Map::cast(obj)); | 2642 set_fixed_array_map(Map::cast(obj)); |
| 2643 | 2643 |
| 2644 { MaybeObject* maybe_obj = AllocatePartialMap(ODDBALL_TYPE, Oddball::kSize); | 2644 { MaybeObject* maybe_obj = AllocatePartialMap(ODDBALL_TYPE, Oddball::kSize); |
| 2645 if (!maybe_obj->ToObject(&obj)) return false; | 2645 if (!maybe_obj->ToObject(&obj)) return false; |
| 2646 } | 2646 } |
| 2647 set_oddball_map(Map::cast(obj)); | 2647 set_oddball_map(Map::cast(obj)); |
| 2648 | 2648 |
| 2649 { MaybeObject* maybe_obj = |
| 2650 AllocatePartialMap(CONSTANT_POOL_ARRAY_TYPE, kVariableSizeSentinel); |
| 2651 if (!maybe_obj->ToObject(&obj)) return false; |
| 2652 } |
| 2653 set_constant_pool_array_map(Map::cast(obj)); |
| 2654 |
| 2649 // Allocate the empty array. | 2655 // Allocate the empty array. |
| 2650 { MaybeObject* maybe_obj = AllocateEmptyFixedArray(); | 2656 { MaybeObject* maybe_obj = AllocateEmptyFixedArray(); |
| 2651 if (!maybe_obj->ToObject(&obj)) return false; | 2657 if (!maybe_obj->ToObject(&obj)) return false; |
| 2652 } | 2658 } |
| 2653 set_empty_fixed_array(FixedArray::cast(obj)); | 2659 set_empty_fixed_array(FixedArray::cast(obj)); |
| 2654 | 2660 |
| 2655 { MaybeObject* maybe_obj = Allocate(oddball_map(), OLD_POINTER_SPACE); | 2661 { MaybeObject* maybe_obj = Allocate(oddball_map(), OLD_POINTER_SPACE); |
| 2656 if (!maybe_obj->ToObject(&obj)) return false; | 2662 if (!maybe_obj->ToObject(&obj)) return false; |
| 2657 } | 2663 } |
| 2658 set_null_value(Oddball::cast(obj)); | 2664 set_null_value(Oddball::cast(obj)); |
| 2659 Oddball::cast(obj)->set_kind(Oddball::kNull); | 2665 Oddball::cast(obj)->set_kind(Oddball::kNull); |
| 2660 | 2666 |
| 2661 { MaybeObject* maybe_obj = Allocate(oddball_map(), OLD_POINTER_SPACE); | 2667 { MaybeObject* maybe_obj = Allocate(oddball_map(), OLD_POINTER_SPACE); |
| 2662 if (!maybe_obj->ToObject(&obj)) return false; | 2668 if (!maybe_obj->ToObject(&obj)) return false; |
| 2663 } | 2669 } |
| 2664 set_undefined_value(Oddball::cast(obj)); | 2670 set_undefined_value(Oddball::cast(obj)); |
| 2665 Oddball::cast(obj)->set_kind(Oddball::kUndefined); | 2671 Oddball::cast(obj)->set_kind(Oddball::kUndefined); |
| 2666 ASSERT(!InNewSpace(undefined_value())); | 2672 ASSERT(!InNewSpace(undefined_value())); |
| 2667 | 2673 |
| 2668 // Allocate the empty descriptor array. | 2674 // Allocate the empty descriptor array. |
| 2669 { MaybeObject* maybe_obj = AllocateEmptyFixedArray(); | 2675 { MaybeObject* maybe_obj = AllocateEmptyFixedArray(); |
| 2670 if (!maybe_obj->ToObject(&obj)) return false; | 2676 if (!maybe_obj->ToObject(&obj)) return false; |
| 2671 } | 2677 } |
| 2672 set_empty_descriptor_array(DescriptorArray::cast(obj)); | 2678 set_empty_descriptor_array(DescriptorArray::cast(obj)); |
| 2673 | 2679 |
| 2680 // Allocate the constant pool array. |
| 2681 { MaybeObject* maybe_obj = AllocateEmptyConstantPoolArray(); |
| 2682 if (!maybe_obj->ToObject(&obj)) return false; |
| 2683 } |
| 2684 set_empty_constant_pool_array(ConstantPoolArray::cast(obj)); |
| 2685 |
| 2674 // Fix the instance_descriptors for the existing maps. | 2686 // Fix the instance_descriptors for the existing maps. |
| 2675 meta_map()->set_code_cache(empty_fixed_array()); | 2687 meta_map()->set_code_cache(empty_fixed_array()); |
| 2676 meta_map()->set_dependent_code(DependentCode::cast(empty_fixed_array())); | 2688 meta_map()->set_dependent_code(DependentCode::cast(empty_fixed_array())); |
| 2677 meta_map()->init_back_pointer(undefined_value()); | 2689 meta_map()->init_back_pointer(undefined_value()); |
| 2678 meta_map()->set_instance_descriptors(empty_descriptor_array()); | 2690 meta_map()->set_instance_descriptors(empty_descriptor_array()); |
| 2679 | 2691 |
| 2680 fixed_array_map()->set_code_cache(empty_fixed_array()); | 2692 fixed_array_map()->set_code_cache(empty_fixed_array()); |
| 2681 fixed_array_map()->set_dependent_code( | 2693 fixed_array_map()->set_dependent_code( |
| 2682 DependentCode::cast(empty_fixed_array())); | 2694 DependentCode::cast(empty_fixed_array())); |
| 2683 fixed_array_map()->init_back_pointer(undefined_value()); | 2695 fixed_array_map()->init_back_pointer(undefined_value()); |
| 2684 fixed_array_map()->set_instance_descriptors(empty_descriptor_array()); | 2696 fixed_array_map()->set_instance_descriptors(empty_descriptor_array()); |
| 2685 | 2697 |
| 2686 oddball_map()->set_code_cache(empty_fixed_array()); | 2698 oddball_map()->set_code_cache(empty_fixed_array()); |
| 2687 oddball_map()->set_dependent_code(DependentCode::cast(empty_fixed_array())); | 2699 oddball_map()->set_dependent_code(DependentCode::cast(empty_fixed_array())); |
| 2688 oddball_map()->init_back_pointer(undefined_value()); | 2700 oddball_map()->init_back_pointer(undefined_value()); |
| 2689 oddball_map()->set_instance_descriptors(empty_descriptor_array()); | 2701 oddball_map()->set_instance_descriptors(empty_descriptor_array()); |
| 2690 | 2702 |
| 2703 constant_pool_array_map()->set_code_cache(empty_fixed_array()); |
| 2704 constant_pool_array_map()->set_dependent_code( |
| 2705 DependentCode::cast(empty_fixed_array())); |
| 2706 constant_pool_array_map()->init_back_pointer(undefined_value()); |
| 2707 constant_pool_array_map()->set_instance_descriptors(empty_descriptor_array()); |
| 2708 |
| 2691 // Fix prototype object for existing maps. | 2709 // Fix prototype object for existing maps. |
| 2692 meta_map()->set_prototype(null_value()); | 2710 meta_map()->set_prototype(null_value()); |
| 2693 meta_map()->set_constructor(null_value()); | 2711 meta_map()->set_constructor(null_value()); |
| 2694 | 2712 |
| 2695 fixed_array_map()->set_prototype(null_value()); | 2713 fixed_array_map()->set_prototype(null_value()); |
| 2696 fixed_array_map()->set_constructor(null_value()); | 2714 fixed_array_map()->set_constructor(null_value()); |
| 2697 | 2715 |
| 2698 oddball_map()->set_prototype(null_value()); | 2716 oddball_map()->set_prototype(null_value()); |
| 2699 oddball_map()->set_constructor(null_value()); | 2717 oddball_map()->set_constructor(null_value()); |
| 2700 | 2718 |
| 2719 constant_pool_array_map()->set_prototype(null_value()); |
| 2720 constant_pool_array_map()->set_constructor(null_value()); |
| 2721 |
| 2701 { MaybeObject* maybe_obj = | 2722 { MaybeObject* maybe_obj = |
| 2702 AllocateMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); | 2723 AllocateMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); |
| 2703 if (!maybe_obj->ToObject(&obj)) return false; | 2724 if (!maybe_obj->ToObject(&obj)) return false; |
| 2704 } | 2725 } |
| 2705 set_fixed_cow_array_map(Map::cast(obj)); | 2726 set_fixed_cow_array_map(Map::cast(obj)); |
| 2706 ASSERT(fixed_array_map() != fixed_cow_array_map()); | 2727 ASSERT(fixed_array_map() != fixed_cow_array_map()); |
| 2707 | 2728 |
| 2708 { MaybeObject* maybe_obj = | 2729 { MaybeObject* maybe_obj = |
| 2709 AllocateMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); | 2730 AllocateMap(FIXED_ARRAY_TYPE, kVariableSizeSentinel); |
| 2710 if (!maybe_obj->ToObject(&obj)) return false; | 2731 if (!maybe_obj->ToObject(&obj)) return false; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2747 set_undetectable_ascii_string_map(Map::cast(obj)); | 2768 set_undetectable_ascii_string_map(Map::cast(obj)); |
| 2748 Map::cast(obj)->set_is_undetectable(); | 2769 Map::cast(obj)->set_is_undetectable(); |
| 2749 | 2770 |
| 2750 { MaybeObject* maybe_obj = | 2771 { MaybeObject* maybe_obj = |
| 2751 AllocateMap(FIXED_DOUBLE_ARRAY_TYPE, kVariableSizeSentinel); | 2772 AllocateMap(FIXED_DOUBLE_ARRAY_TYPE, kVariableSizeSentinel); |
| 2752 if (!maybe_obj->ToObject(&obj)) return false; | 2773 if (!maybe_obj->ToObject(&obj)) return false; |
| 2753 } | 2774 } |
| 2754 set_fixed_double_array_map(Map::cast(obj)); | 2775 set_fixed_double_array_map(Map::cast(obj)); |
| 2755 | 2776 |
| 2756 { MaybeObject* maybe_obj = | 2777 { MaybeObject* maybe_obj = |
| 2757 AllocateMap(CONSTANT_POOL_ARRAY_TYPE, kVariableSizeSentinel); | |
| 2758 if (!maybe_obj->ToObject(&obj)) return false; | |
| 2759 } | |
| 2760 set_constant_pool_array_map(Map::cast(obj)); | |
| 2761 | |
| 2762 { MaybeObject* maybe_obj = | |
| 2763 AllocateMap(BYTE_ARRAY_TYPE, kVariableSizeSentinel); | 2778 AllocateMap(BYTE_ARRAY_TYPE, kVariableSizeSentinel); |
| 2764 if (!maybe_obj->ToObject(&obj)) return false; | 2779 if (!maybe_obj->ToObject(&obj)) return false; |
| 2765 } | 2780 } |
| 2766 set_byte_array_map(Map::cast(obj)); | 2781 set_byte_array_map(Map::cast(obj)); |
| 2767 | 2782 |
| 2768 { MaybeObject* maybe_obj = | 2783 { MaybeObject* maybe_obj = |
| 2769 AllocateMap(FREE_SPACE_TYPE, kVariableSizeSentinel); | 2784 AllocateMap(FREE_SPACE_TYPE, kVariableSizeSentinel); |
| 2770 if (!maybe_obj->ToObject(&obj)) return false; | 2785 if (!maybe_obj->ToObject(&obj)) return false; |
| 2771 } | 2786 } |
| 2772 set_free_space_map(Map::cast(obj)); | 2787 set_free_space_map(Map::cast(obj)); |
| (...skipping 1492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4265 code->set_is_crankshafted(crankshafted); | 4280 code->set_is_crankshafted(crankshafted); |
| 4266 code->set_deoptimization_data(empty_fixed_array(), SKIP_WRITE_BARRIER); | 4281 code->set_deoptimization_data(empty_fixed_array(), SKIP_WRITE_BARRIER); |
| 4267 code->set_raw_type_feedback_info(undefined_value()); | 4282 code->set_raw_type_feedback_info(undefined_value()); |
| 4268 code->set_handler_table(empty_fixed_array(), SKIP_WRITE_BARRIER); | 4283 code->set_handler_table(empty_fixed_array(), SKIP_WRITE_BARRIER); |
| 4269 code->set_gc_metadata(Smi::FromInt(0)); | 4284 code->set_gc_metadata(Smi::FromInt(0)); |
| 4270 code->set_ic_age(global_ic_age_); | 4285 code->set_ic_age(global_ic_age_); |
| 4271 code->set_prologue_offset(prologue_offset); | 4286 code->set_prologue_offset(prologue_offset); |
| 4272 if (code->kind() == Code::OPTIMIZED_FUNCTION) { | 4287 if (code->kind() == Code::OPTIMIZED_FUNCTION) { |
| 4273 code->set_marked_for_deoptimization(false); | 4288 code->set_marked_for_deoptimization(false); |
| 4274 } | 4289 } |
| 4290 code->set_constant_pool(empty_constant_pool_array()); |
| 4275 | 4291 |
| 4276 #ifdef ENABLE_DEBUGGER_SUPPORT | 4292 #ifdef ENABLE_DEBUGGER_SUPPORT |
| 4277 if (code->kind() == Code::FUNCTION) { | 4293 if (code->kind() == Code::FUNCTION) { |
| 4278 code->set_has_debug_break_slots( | 4294 code->set_has_debug_break_slots( |
| 4279 isolate_->debugger()->IsDebuggerActive()); | 4295 isolate_->debugger()->IsDebuggerActive()); |
| 4280 } | 4296 } |
| 4281 #endif | 4297 #endif |
| 4282 | 4298 |
| 4283 // Allow self references to created code object by patching the handle to | 4299 // Allow self references to created code object by patching the handle to |
| 4284 // point to the newly allocated Code object. | 4300 // point to the newly allocated Code object. |
| (...skipping 1226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5511 if (!maybe_object->To<HeapObject>(&object)) return maybe_object; | 5527 if (!maybe_object->To<HeapObject>(&object)) return maybe_object; |
| 5512 } | 5528 } |
| 5513 object = EnsureDoubleAligned(this, object, size); | 5529 object = EnsureDoubleAligned(this, object, size); |
| 5514 HeapObject::cast(object)->set_map_no_write_barrier(constant_pool_array_map()); | 5530 HeapObject::cast(object)->set_map_no_write_barrier(constant_pool_array_map()); |
| 5515 | 5531 |
| 5516 ConstantPoolArray* constant_pool = | 5532 ConstantPoolArray* constant_pool = |
| 5517 reinterpret_cast<ConstantPoolArray*>(object); | 5533 reinterpret_cast<ConstantPoolArray*>(object); |
| 5518 constant_pool->SetEntryCounts(number_of_int64_entries, | 5534 constant_pool->SetEntryCounts(number_of_int64_entries, |
| 5519 number_of_ptr_entries, | 5535 number_of_ptr_entries, |
| 5520 number_of_int32_entries); | 5536 number_of_int32_entries); |
| 5521 MemsetPointer( | 5537 if (number_of_ptr_entries > 0) { |
| 5522 HeapObject::RawField( | 5538 MemsetPointer( |
| 5523 constant_pool, | 5539 HeapObject::RawField( |
| 5524 constant_pool->OffsetOfElementAt(constant_pool->first_ptr_index())), | 5540 constant_pool, |
| 5525 undefined_value(), | 5541 constant_pool->OffsetOfElementAt(constant_pool->first_ptr_index())), |
| 5526 number_of_ptr_entries); | 5542 undefined_value(), |
| 5543 number_of_ptr_entries); |
| 5544 } |
| 5527 return constant_pool; | 5545 return constant_pool; |
| 5528 } | 5546 } |
| 5529 | 5547 |
| 5530 | 5548 |
| 5549 MaybeObject* Heap::AllocateEmptyConstantPoolArray() { |
| 5550 int size = ConstantPoolArray::SizeFor(0, 0, 0); |
| 5551 Object* result; |
| 5552 { MaybeObject* maybe_result = |
| 5553 AllocateRaw(size, OLD_DATA_SPACE, OLD_DATA_SPACE); |
| 5554 if (!maybe_result->ToObject(&result)) return maybe_result; |
| 5555 } |
| 5556 HeapObject::cast(result)->set_map_no_write_barrier(constant_pool_array_map()); |
| 5557 ConstantPoolArray::cast(result)->SetEntryCounts(0, 0, 0); |
| 5558 return result; |
| 5559 } |
| 5560 |
| 5561 |
| 5531 MaybeObject* Heap::AllocateHashTable(int length, PretenureFlag pretenure) { | 5562 MaybeObject* Heap::AllocateHashTable(int length, PretenureFlag pretenure) { |
| 5532 Object* result; | 5563 Object* result; |
| 5533 { MaybeObject* maybe_result = AllocateFixedArray(length, pretenure); | 5564 { MaybeObject* maybe_result = AllocateFixedArray(length, pretenure); |
| 5534 if (!maybe_result->ToObject(&result)) return maybe_result; | 5565 if (!maybe_result->ToObject(&result)) return maybe_result; |
| 5535 } | 5566 } |
| 5536 reinterpret_cast<HeapObject*>(result)->set_map_no_write_barrier( | 5567 reinterpret_cast<HeapObject*>(result)->set_map_no_write_barrier( |
| 5537 hash_table_map()); | 5568 hash_table_map()); |
| 5538 ASSERT(result->IsHashTable()); | 5569 ASSERT(result->IsHashTable()); |
| 5539 return result; | 5570 return result; |
| 5540 } | 5571 } |
| (...skipping 2454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7995 static_cast<int>(object_sizes_last_time_[index])); | 8026 static_cast<int>(object_sizes_last_time_[index])); |
| 7996 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) | 8027 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) |
| 7997 #undef ADJUST_LAST_TIME_OBJECT_COUNT | 8028 #undef ADJUST_LAST_TIME_OBJECT_COUNT |
| 7998 | 8029 |
| 7999 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); | 8030 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); |
| 8000 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); | 8031 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); |
| 8001 ClearObjectStats(); | 8032 ClearObjectStats(); |
| 8002 } | 8033 } |
| 8003 | 8034 |
| 8004 } } // namespace v8::internal | 8035 } } // namespace v8::internal |
| OLD | NEW |