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 2717 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2728 global_property_cell_map()); | 2728 global_property_cell_map()); |
2729 PropertyCell* cell = PropertyCell::cast(result); | 2729 PropertyCell* cell = PropertyCell::cast(result); |
2730 cell->set_dependent_code(DependentCode::cast(empty_fixed_array()), | 2730 cell->set_dependent_code(DependentCode::cast(empty_fixed_array()), |
2731 SKIP_WRITE_BARRIER); | 2731 SKIP_WRITE_BARRIER); |
2732 cell->set_value(the_hole_value()); | 2732 cell->set_value(the_hole_value()); |
2733 cell->set_type(HeapType::None()); | 2733 cell->set_type(HeapType::None()); |
2734 return result; | 2734 return result; |
2735 } | 2735 } |
2736 | 2736 |
2737 | 2737 |
2738 MaybeObject* Heap::CreateOddball(Map* map, | |
2739 const char* to_string, | |
2740 Object* to_number, | |
2741 byte kind) { | |
2742 Object* result; | |
2743 { MaybeObject* maybe_result = Allocate(map, OLD_POINTER_SPACE); | |
2744 if (!maybe_result->ToObject(&result)) return maybe_result; | |
2745 } | |
2746 return Oddball::cast(result)->Initialize(this, to_string, to_number, kind); | |
2747 } | |
2748 | |
2749 | |
2750 bool Heap::CreateApiObjects() { | 2738 bool Heap::CreateApiObjects() { |
2751 Object* obj; | 2739 Object* obj; |
2752 | 2740 |
2753 { MaybeObject* maybe_obj = AllocateMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); | 2741 { MaybeObject* maybe_obj = AllocateMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); |
2754 if (!maybe_obj->ToObject(&obj)) return false; | 2742 if (!maybe_obj->ToObject(&obj)) return false; |
2755 } | 2743 } |
2756 // Don't use Smi-only elements optimizations for objects with the neander | 2744 // Don't use Smi-only elements optimizations for objects with the neander |
2757 // map. There are too many cases where element values are set directly with a | 2745 // map. There are too many cases where element values are set directly with a |
2758 // bottleneck to trap the Smi-only -> fast elements transition, and there | 2746 // bottleneck to trap the Smi-only -> fast elements transition, and there |
2759 // appears to be no benefit for optimize this case. | 2747 // appears to be no benefit for optimize this case. |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2812 // { JSConstructEntryStub stub; | 2800 // { JSConstructEntryStub stub; |
2813 // js_construct_entry_code_ = *stub.GetCode(); | 2801 // js_construct_entry_code_ = *stub.GetCode(); |
2814 // } | 2802 // } |
2815 // To workaround the problem, make separate functions without inlining. | 2803 // To workaround the problem, make separate functions without inlining. |
2816 Heap::CreateJSEntryStub(); | 2804 Heap::CreateJSEntryStub(); |
2817 Heap::CreateJSConstructEntryStub(); | 2805 Heap::CreateJSConstructEntryStub(); |
2818 } | 2806 } |
2819 | 2807 |
2820 | 2808 |
2821 bool Heap::CreateInitialObjects() { | 2809 bool Heap::CreateInitialObjects() { |
2822 Object* obj; | 2810 HandleScope scope(isolate()); |
2811 Factory* factory = isolate()->factory(); | |
2823 | 2812 |
2824 // The -0 value must be set before NumberFromDouble works. | 2813 // The -0 value must be set before NumberFromDouble works. |
2825 { MaybeObject* maybe_obj = AllocateHeapNumber(-0.0, TENURED); | 2814 set_minus_zero_value(*factory->NewHeapNumber(-0.0, TENURED)); |
2826 if (!maybe_obj->ToObject(&obj)) return false; | |
2827 } | |
2828 set_minus_zero_value(HeapNumber::cast(obj)); | |
2829 ASSERT(std::signbit(minus_zero_value()->Number()) != 0); | 2815 ASSERT(std::signbit(minus_zero_value()->Number()) != 0); |
2830 | 2816 |
2831 { MaybeObject* maybe_obj = AllocateHeapNumber(OS::nan_value(), TENURED); | 2817 set_nan_value(*factory->NewHeapNumber(OS::nan_value(), TENURED)); |
2832 if (!maybe_obj->ToObject(&obj)) return false; | 2818 set_infinity_value(*factory->NewHeapNumber(V8_INFINITY, TENURED)); |
2833 } | |
2834 set_nan_value(HeapNumber::cast(obj)); | |
2835 | |
2836 { MaybeObject* maybe_obj = AllocateHeapNumber(V8_INFINITY, TENURED); | |
2837 if (!maybe_obj->ToObject(&obj)) return false; | |
2838 } | |
2839 set_infinity_value(HeapNumber::cast(obj)); | |
2840 | 2819 |
2841 // The hole has not been created yet, but we want to put something | 2820 // The hole has not been created yet, but we want to put something |
2842 // predictable in the gaps in the string table, so lets make that Smi zero. | 2821 // predictable in the gaps in the string table, so lets make that Smi zero. |
2843 set_the_hole_value(reinterpret_cast<Oddball*>(Smi::FromInt(0))); | 2822 set_the_hole_value(reinterpret_cast<Oddball*>(Smi::FromInt(0))); |
2844 | 2823 |
2845 // Allocate initial string table. | 2824 // Allocate initial string table. |
2846 { MaybeObject* maybe_obj = | 2825 set_string_table(*StringTable::New(isolate(), kInitialStringTableSize)); |
2847 StringTable::Allocate(this, kInitialStringTableSize); | |
2848 if (!maybe_obj->ToObject(&obj)) return false; | |
2849 } | |
2850 // Don't use set_string_table() due to asserts. | |
2851 roots_[kStringTableRootIndex] = obj; | |
2852 | 2826 |
2853 // Finish initializing oddballs after creating the string table. | 2827 // Finish initializing oddballs after creating the string table. |
2854 { MaybeObject* maybe_obj = | 2828 Oddball::Initialize(isolate(), |
2855 undefined_value()->Initialize(this, | 2829 factory->undefined_value(), |
2856 "undefined", | 2830 "undefined", |
2857 nan_value(), | 2831 factory->nan_value(), |
2858 Oddball::kUndefined); | 2832 Oddball::kUndefined); |
2859 if (!maybe_obj->ToObject(&obj)) return false; | 2833 |
2834 // Initialize the null_value. | |
2835 Oddball::Initialize(isolate(), | |
2836 factory->null_value(), | |
2837 "null", | |
2838 handle(Smi::FromInt(0), isolate()), | |
2839 Oddball::kNull); | |
2840 | |
2841 set_true_value(*factory->NewOddball(factory->boolean_map(), | |
2842 "true", | |
2843 handle(Smi::FromInt(1), isolate()), | |
2844 Oddball::kTrue)); | |
2845 | |
2846 set_false_value(*factory->NewOddball(factory->boolean_map(), | |
2847 "false", | |
2848 handle(Smi::FromInt(0), isolate()), | |
2849 Oddball::kFalse)); | |
2850 | |
2851 set_the_hole_value(*factory->NewOddball(factory->the_hole_map(), | |
2852 "hole", | |
2853 handle(Smi::FromInt(-1), isolate()), | |
2854 Oddball::kTheHole)); | |
2855 | |
2856 set_uninitialized_value( | |
2857 *factory->NewOddball(factory->uninitialized_map(), | |
2858 "uninitialized", | |
2859 handle(Smi::FromInt(-1), isolate()), | |
2860 Oddball::kUninitialized)); | |
2861 | |
2862 set_arguments_marker(*factory->NewOddball(factory->arguments_marker_map(), | |
2863 "arguments_marker", | |
2864 handle(Smi::FromInt(-4), isolate()), | |
2865 Oddball::kArgumentMarker)); | |
2866 | |
2867 set_no_interceptor_result_sentinel( | |
2868 *factory->NewOddball(factory->no_interceptor_result_sentinel_map(), | |
2869 "no_interceptor_result_sentinel", | |
2870 handle(Smi::FromInt(-2), isolate()), | |
2871 Oddball::kOther)); | |
2872 | |
2873 set_termination_exception( | |
2874 *factory->NewOddball(factory->termination_exception_map(), | |
2875 "termination_exception", | |
2876 handle(Smi::FromInt(-3), isolate()), | |
2877 Oddball::kOther)); | |
2878 | |
2879 for (unsigned i = 0; i < ARRAY_SIZE(constant_string_table); i++) { | |
2880 Handle<String> str = | |
2881 factory->InternalizeUtf8String(constant_string_table[i].contents); | |
2882 roots_[constant_string_table[i].index] = *str; | |
2860 } | 2883 } |
2861 | 2884 |
2862 // Initialize the null_value. | 2885 Object* obj; |
2863 { MaybeObject* maybe_obj = null_value()->Initialize( | |
2864 this, "null", Smi::FromInt(0), Oddball::kNull); | |
2865 if (!maybe_obj->ToObject(&obj)) return false; | |
2866 } | |
2867 | |
2868 { MaybeObject* maybe_obj = CreateOddball(boolean_map(), | |
2869 "true", | |
2870 Smi::FromInt(1), | |
2871 Oddball::kTrue); | |
2872 if (!maybe_obj->ToObject(&obj)) return false; | |
2873 } | |
2874 set_true_value(Oddball::cast(obj)); | |
2875 | |
2876 { MaybeObject* maybe_obj = CreateOddball(boolean_map(), | |
2877 "false", | |
2878 Smi::FromInt(0), | |
2879 Oddball::kFalse); | |
2880 if (!maybe_obj->ToObject(&obj)) return false; | |
2881 } | |
2882 set_false_value(Oddball::cast(obj)); | |
2883 | |
2884 { MaybeObject* maybe_obj = CreateOddball(the_hole_map(), | |
2885 "hole", | |
2886 Smi::FromInt(-1), | |
2887 Oddball::kTheHole); | |
2888 if (!maybe_obj->ToObject(&obj)) return false; | |
2889 } | |
2890 set_the_hole_value(Oddball::cast(obj)); | |
2891 | |
2892 { MaybeObject* maybe_obj = CreateOddball(uninitialized_map(), | |
2893 "uninitialized", | |
2894 Smi::FromInt(-1), | |
2895 Oddball::kUninitialized); | |
2896 if (!maybe_obj->ToObject(&obj)) return false; | |
2897 } | |
2898 set_uninitialized_value(Oddball::cast(obj)); | |
2899 | |
2900 { MaybeObject* maybe_obj = CreateOddball(arguments_marker_map(), | |
2901 "arguments_marker", | |
2902 Smi::FromInt(-4), | |
2903 Oddball::kArgumentMarker); | |
2904 if (!maybe_obj->ToObject(&obj)) return false; | |
2905 } | |
2906 set_arguments_marker(Oddball::cast(obj)); | |
2907 | |
2908 { MaybeObject* maybe_obj = CreateOddball(no_interceptor_result_sentinel_map(), | |
2909 "no_interceptor_result_sentinel", | |
2910 Smi::FromInt(-2), | |
2911 Oddball::kOther); | |
2912 if (!maybe_obj->ToObject(&obj)) return false; | |
2913 } | |
2914 set_no_interceptor_result_sentinel(Oddball::cast(obj)); | |
2915 | |
2916 { MaybeObject* maybe_obj = CreateOddball(termination_exception_map(), | |
2917 "termination_exception", | |
2918 Smi::FromInt(-3), | |
2919 Oddball::kOther); | |
2920 if (!maybe_obj->ToObject(&obj)) return false; | |
2921 } | |
2922 set_termination_exception(Oddball::cast(obj)); | |
2923 | |
2924 for (unsigned i = 0; i < ARRAY_SIZE(constant_string_table); i++) { | |
2925 { MaybeObject* maybe_obj = | |
2926 InternalizeUtf8String(constant_string_table[i].contents); | |
2927 if (!maybe_obj->ToObject(&obj)) return false; | |
2928 } | |
2929 roots_[constant_string_table[i].index] = String::cast(obj); | |
2930 } | |
2931 | 2886 |
2932 // Allocate the hidden string which is used to identify the hidden properties | 2887 // Allocate the hidden string which is used to identify the hidden properties |
2933 // in JSObjects. The hash code has a special value so that it will not match | 2888 // in JSObjects. The hash code has a special value so that it will not match |
2934 // the empty string when searching for the property. It cannot be part of the | 2889 // the empty string when searching for the property. It cannot be part of the |
2935 // loop above because it needs to be allocated manually with the special | 2890 // loop above because it needs to be allocated manually with the special |
2936 // hash code in place. The hash code for the hidden_string is zero to ensure | 2891 // hash code in place. The hash code for the hidden_string is zero to ensure |
2937 // that it will always be at the first entry in property descriptors. | 2892 // that it will always be at the first entry in property descriptors. |
2938 { MaybeObject* maybe_obj = AllocateOneByteInternalizedString( | 2893 { MaybeObject* maybe_obj = AllocateOneByteInternalizedString( |
2939 OneByteVector("", 0), String::kEmptyStringHash); | 2894 OneByteVector("", 0), String::kEmptyStringHash); |
2940 if (!maybe_obj->ToObject(&obj)) return false; | 2895 if (!maybe_obj->ToObject(&obj)) return false; |
(...skipping 20 matching lines...) Expand all Loading... | |
2961 } | 2916 } |
2962 set_polymorphic_code_cache(PolymorphicCodeCache::cast(obj)); | 2917 set_polymorphic_code_cache(PolymorphicCodeCache::cast(obj)); |
2963 | 2918 |
2964 set_instanceof_cache_function(Smi::FromInt(0)); | 2919 set_instanceof_cache_function(Smi::FromInt(0)); |
2965 set_instanceof_cache_map(Smi::FromInt(0)); | 2920 set_instanceof_cache_map(Smi::FromInt(0)); |
2966 set_instanceof_cache_answer(Smi::FromInt(0)); | 2921 set_instanceof_cache_answer(Smi::FromInt(0)); |
2967 | 2922 |
2968 CreateFixedStubs(); | 2923 CreateFixedStubs(); |
2969 | 2924 |
2970 // Allocate the dictionary of intrinsic function names. | 2925 // Allocate the dictionary of intrinsic function names. |
2971 { MaybeObject* maybe_obj = | 2926 { |
2972 NameDictionary::Allocate(this, Runtime::kNumFunctions); | 2927 Handle<NameDictionary> function_names = |
2973 if (!maybe_obj->ToObject(&obj)) return false; | 2928 NameDictionary::New(isolate(), Runtime::kNumFunctions); |
Igor Sheludko
2014/04/16 13:45:17
This change caused the problem. I didn't add Dicti
| |
2929 Runtime::InitializeIntrinsicFunctionNames(isolate(), function_names); | |
2930 set_intrinsic_function_names(*function_names); | |
2974 } | 2931 } |
2975 set_intrinsic_function_names(NameDictionary::cast(obj)); | |
2976 | 2932 |
2977 { MaybeObject* maybe_obj = AllocateInitialNumberStringCache(); | 2933 { MaybeObject* maybe_obj = AllocateInitialNumberStringCache(); |
2978 if (!maybe_obj->ToObject(&obj)) return false; | 2934 if (!maybe_obj->ToObject(&obj)) return false; |
2979 } | 2935 } |
2980 set_number_string_cache(FixedArray::cast(obj)); | 2936 set_number_string_cache(FixedArray::cast(obj)); |
2981 | 2937 |
2982 // Allocate cache for single character one byte strings. | 2938 // Allocate cache for single character one byte strings. |
2983 { MaybeObject* maybe_obj = | 2939 { MaybeObject* maybe_obj = |
2984 AllocateFixedArray(String::kMaxOneByteCharCode + 1, TENURED); | 2940 AllocateFixedArray(String::kMaxOneByteCharCode + 1, TENURED); |
2985 if (!maybe_obj->ToObject(&obj)) return false; | 2941 if (!maybe_obj->ToObject(&obj)) return false; |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3164 index = | 3120 index = |
3165 ((index + kArrayEntriesPerCacheEntry) & (kRegExpResultsCacheSize - 1)); | 3121 ((index + kArrayEntriesPerCacheEntry) & (kRegExpResultsCacheSize - 1)); |
3166 if (cache->get(index + kStringOffset) == key_string && | 3122 if (cache->get(index + kStringOffset) == key_string && |
3167 cache->get(index + kPatternOffset) == key_pattern) { | 3123 cache->get(index + kPatternOffset) == key_pattern) { |
3168 return cache->get(index + kArrayOffset); | 3124 return cache->get(index + kArrayOffset); |
3169 } | 3125 } |
3170 return Smi::FromInt(0); | 3126 return Smi::FromInt(0); |
3171 } | 3127 } |
3172 | 3128 |
3173 | 3129 |
3174 void RegExpResultsCache::Enter(Heap* heap, | 3130 void RegExpResultsCache::Enter(Isolate* isolate, |
3175 String* key_string, | 3131 Handle<String> key_string, |
3176 Object* key_pattern, | 3132 Handle<Object> key_pattern, |
3177 FixedArray* value_array, | 3133 Handle<FixedArray> value_array, |
3178 ResultsCacheType type) { | 3134 ResultsCacheType type) { |
3179 FixedArray* cache; | 3135 Factory* factory = isolate->factory(); |
3136 Handle<FixedArray> cache; | |
3180 if (!key_string->IsInternalizedString()) return; | 3137 if (!key_string->IsInternalizedString()) return; |
3181 if (type == STRING_SPLIT_SUBSTRINGS) { | 3138 if (type == STRING_SPLIT_SUBSTRINGS) { |
3182 ASSERT(key_pattern->IsString()); | 3139 ASSERT(key_pattern->IsString()); |
3183 if (!key_pattern->IsInternalizedString()) return; | 3140 if (!key_pattern->IsInternalizedString()) return; |
3184 cache = heap->string_split_cache(); | 3141 cache = factory->string_split_cache(); |
3185 } else { | 3142 } else { |
3186 ASSERT(type == REGEXP_MULTIPLE_INDICES); | 3143 ASSERT(type == REGEXP_MULTIPLE_INDICES); |
3187 ASSERT(key_pattern->IsFixedArray()); | 3144 ASSERT(key_pattern->IsFixedArray()); |
3188 cache = heap->regexp_multiple_cache(); | 3145 cache = factory->regexp_multiple_cache(); |
3189 } | 3146 } |
3190 | 3147 |
3191 uint32_t hash = key_string->Hash(); | 3148 uint32_t hash = key_string->Hash(); |
3192 uint32_t index = ((hash & (kRegExpResultsCacheSize - 1)) & | 3149 uint32_t index = ((hash & (kRegExpResultsCacheSize - 1)) & |
3193 ~(kArrayEntriesPerCacheEntry - 1)); | 3150 ~(kArrayEntriesPerCacheEntry - 1)); |
3194 if (cache->get(index + kStringOffset) == Smi::FromInt(0)) { | 3151 if (cache->get(index + kStringOffset) == Smi::FromInt(0)) { |
3195 cache->set(index + kStringOffset, key_string); | 3152 cache->set(index + kStringOffset, *key_string); |
3196 cache->set(index + kPatternOffset, key_pattern); | 3153 cache->set(index + kPatternOffset, *key_pattern); |
3197 cache->set(index + kArrayOffset, value_array); | 3154 cache->set(index + kArrayOffset, *value_array); |
3198 } else { | 3155 } else { |
3199 uint32_t index2 = | 3156 uint32_t index2 = |
3200 ((index + kArrayEntriesPerCacheEntry) & (kRegExpResultsCacheSize - 1)); | 3157 ((index + kArrayEntriesPerCacheEntry) & (kRegExpResultsCacheSize - 1)); |
3201 if (cache->get(index2 + kStringOffset) == Smi::FromInt(0)) { | 3158 if (cache->get(index2 + kStringOffset) == Smi::FromInt(0)) { |
3202 cache->set(index2 + kStringOffset, key_string); | 3159 cache->set(index2 + kStringOffset, *key_string); |
3203 cache->set(index2 + kPatternOffset, key_pattern); | 3160 cache->set(index2 + kPatternOffset, *key_pattern); |
3204 cache->set(index2 + kArrayOffset, value_array); | 3161 cache->set(index2 + kArrayOffset, *value_array); |
3205 } else { | 3162 } else { |
3206 cache->set(index2 + kStringOffset, Smi::FromInt(0)); | 3163 cache->set(index2 + kStringOffset, Smi::FromInt(0)); |
3207 cache->set(index2 + kPatternOffset, Smi::FromInt(0)); | 3164 cache->set(index2 + kPatternOffset, Smi::FromInt(0)); |
3208 cache->set(index2 + kArrayOffset, Smi::FromInt(0)); | 3165 cache->set(index2 + kArrayOffset, Smi::FromInt(0)); |
3209 cache->set(index + kStringOffset, key_string); | 3166 cache->set(index + kStringOffset, *key_string); |
3210 cache->set(index + kPatternOffset, key_pattern); | 3167 cache->set(index + kPatternOffset, *key_pattern); |
3211 cache->set(index + kArrayOffset, value_array); | 3168 cache->set(index + kArrayOffset, *value_array); |
3212 } | 3169 } |
3213 } | 3170 } |
3214 // If the array is a reasonably short list of substrings, convert it into a | 3171 // If the array is a reasonably short list of substrings, convert it into a |
3215 // list of internalized strings. | 3172 // list of internalized strings. |
3216 if (type == STRING_SPLIT_SUBSTRINGS && value_array->length() < 100) { | 3173 if (type == STRING_SPLIT_SUBSTRINGS && value_array->length() < 100) { |
3217 for (int i = 0; i < value_array->length(); i++) { | 3174 for (int i = 0; i < value_array->length(); i++) { |
3218 String* str = String::cast(value_array->get(i)); | 3175 Handle<String> str(String::cast(value_array->get(i)), isolate); |
3219 Object* internalized_str; | 3176 Handle<String> internalized_str = factory->InternalizeString(str); |
3220 MaybeObject* maybe_string = heap->InternalizeString(str); | 3177 value_array->set(i, *internalized_str); |
3221 if (maybe_string->ToObject(&internalized_str)) { | |
3222 value_array->set(i, internalized_str); | |
3223 } | |
3224 } | 3178 } |
3225 } | 3179 } |
3226 // Convert backing store to a copy-on-write array. | 3180 // Convert backing store to a copy-on-write array. |
3227 value_array->set_map_no_write_barrier(heap->fixed_cow_array_map()); | 3181 value_array->set_map_no_write_barrier(*factory->fixed_cow_array_map()); |
3228 } | 3182 } |
3229 | 3183 |
3230 | 3184 |
3231 void RegExpResultsCache::Clear(FixedArray* cache) { | 3185 void RegExpResultsCache::Clear(FixedArray* cache) { |
3232 for (int i = 0; i < kRegExpResultsCacheSize; i++) { | 3186 for (int i = 0; i < kRegExpResultsCacheSize; i++) { |
3233 cache->set(i, Smi::FromInt(0)); | 3187 cache->set(i, Smi::FromInt(0)); |
3234 } | 3188 } |
3235 } | 3189 } |
3236 | 3190 |
3237 | 3191 |
(...skipping 2633 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5871 } | 5825 } |
5872 | 5826 |
5873 | 5827 |
5874 bool Heap::CreateHeapObjects() { | 5828 bool Heap::CreateHeapObjects() { |
5875 // Create initial maps. | 5829 // Create initial maps. |
5876 if (!CreateInitialMaps()) return false; | 5830 if (!CreateInitialMaps()) return false; |
5877 if (!CreateApiObjects()) return false; | 5831 if (!CreateApiObjects()) return false; |
5878 | 5832 |
5879 // Create initial objects | 5833 // Create initial objects |
5880 if (!CreateInitialObjects()) return false; | 5834 if (!CreateInitialObjects()) return false; |
5835 CHECK_EQ(0, gc_count_); | |
5881 | 5836 |
5882 native_contexts_list_ = undefined_value(); | 5837 native_contexts_list_ = undefined_value(); |
5883 array_buffers_list_ = undefined_value(); | 5838 array_buffers_list_ = undefined_value(); |
5884 allocation_sites_list_ = undefined_value(); | 5839 allocation_sites_list_ = undefined_value(); |
5885 weak_object_to_code_table_ = undefined_value(); | 5840 weak_object_to_code_table_ = undefined_value(); |
5886 | |
5887 HandleScope scope(isolate()); | |
5888 Runtime::InitializeIntrinsicFunctionNames( | |
5889 isolate(), handle(intrinsic_function_names(), isolate())); | |
5890 | |
5891 return true; | 5841 return true; |
5892 } | 5842 } |
5893 | 5843 |
5894 | 5844 |
5895 void Heap::SetStackLimits() { | 5845 void Heap::SetStackLimits() { |
5896 ASSERT(isolate_ != NULL); | 5846 ASSERT(isolate_ != NULL); |
5897 ASSERT(isolate_ == isolate()); | 5847 ASSERT(isolate_ == isolate()); |
5898 // On 64 bit machines, pointers are generally out of range of Smis. We write | 5848 // On 64 bit machines, pointers are generally out of range of Smis. We write |
5899 // something that looks like an out of range Smi to the GC. | 5849 // something that looks like an out of range Smi to the GC. |
5900 | 5850 |
(...skipping 1163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7064 static_cast<int>(object_sizes_last_time_[index])); | 7014 static_cast<int>(object_sizes_last_time_[index])); |
7065 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) | 7015 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) |
7066 #undef ADJUST_LAST_TIME_OBJECT_COUNT | 7016 #undef ADJUST_LAST_TIME_OBJECT_COUNT |
7067 | 7017 |
7068 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); | 7018 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); |
7069 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); | 7019 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); |
7070 ClearObjectStats(); | 7020 ClearObjectStats(); |
7071 } | 7021 } |
7072 | 7022 |
7073 } } // namespace v8::internal | 7023 } } // namespace v8::internal |
OLD | NEW |