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 2084 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2095 map->set_visitor_id( | 2095 map->set_visitor_id( |
2096 StaticVisitorBase::GetVisitorId(instance_type, instance_size)); | 2096 StaticVisitorBase::GetVisitorId(instance_type, instance_size)); |
2097 map->set_prototype(null_value(), SKIP_WRITE_BARRIER); | 2097 map->set_prototype(null_value(), SKIP_WRITE_BARRIER); |
2098 map->set_constructor(null_value(), SKIP_WRITE_BARRIER); | 2098 map->set_constructor(null_value(), SKIP_WRITE_BARRIER); |
2099 map->set_instance_size(instance_size); | 2099 map->set_instance_size(instance_size); |
2100 map->set_inobject_properties(0); | 2100 map->set_inobject_properties(0); |
2101 map->set_pre_allocated_property_fields(0); | 2101 map->set_pre_allocated_property_fields(0); |
2102 map->set_code_cache(empty_fixed_array(), SKIP_WRITE_BARRIER); | 2102 map->set_code_cache(empty_fixed_array(), SKIP_WRITE_BARRIER); |
2103 map->init_back_pointer(undefined_value()); | 2103 map->init_back_pointer(undefined_value()); |
2104 map->set_unused_property_fields(0); | 2104 map->set_unused_property_fields(0); |
| 2105 map->set_instance_descriptors(empty_descriptor_array()); |
2105 map->set_bit_field(0); | 2106 map->set_bit_field(0); |
2106 map->set_bit_field2(1 << Map::kIsExtensible); | 2107 map->set_bit_field2(1 << Map::kIsExtensible); |
2107 int bit_field3 = Map::EnumLengthBits::encode(Map::kInvalidEnumCache) | | 2108 int bit_field3 = Map::EnumLengthBits::encode(Map::kInvalidEnumCache) | |
2108 Map::OwnsDescriptors::encode(true); | 2109 Map::OwnsDescriptors::encode(true); |
2109 map->set_bit_field3(bit_field3); | 2110 map->set_bit_field3(bit_field3); |
2110 map->set_elements_kind(elements_kind); | 2111 map->set_elements_kind(elements_kind); |
2111 | 2112 |
2112 // If the map object is aligned fill the padding area with Smi 0 objects. | |
2113 if (Map::kPadStart < Map::kSize) { | |
2114 memset(reinterpret_cast<byte*>(map) + Map::kPadStart - kHeapObjectTag, | |
2115 0, | |
2116 Map::kSize - Map::kPadStart); | |
2117 } | |
2118 return map; | 2113 return map; |
2119 } | 2114 } |
2120 | 2115 |
2121 | 2116 |
2122 MaybeObject* Heap::AllocateCodeCache() { | 2117 MaybeObject* Heap::AllocateCodeCache() { |
2123 CodeCache* code_cache; | 2118 CodeCache* code_cache; |
2124 { MaybeObject* maybe_code_cache = AllocateStruct(CODE_CACHE_TYPE); | 2119 { MaybeObject* maybe_code_cache = AllocateStruct(CODE_CACHE_TYPE); |
2125 if (!maybe_code_cache->To(&code_cache)) return maybe_code_cache; | 2120 if (!maybe_code_cache->To(&code_cache)) return maybe_code_cache; |
2126 } | 2121 } |
2127 code_cache->set_default_cache(empty_fixed_array(), SKIP_WRITE_BARRIER); | 2122 code_cache->set_default_cache(empty_fixed_array(), SKIP_WRITE_BARRIER); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2234 | 2229 |
2235 // Allocate the empty descriptor array. | 2230 // Allocate the empty descriptor array. |
2236 { MaybeObject* maybe_obj = AllocateEmptyFixedArray(); | 2231 { MaybeObject* maybe_obj = AllocateEmptyFixedArray(); |
2237 if (!maybe_obj->ToObject(&obj)) return false; | 2232 if (!maybe_obj->ToObject(&obj)) return false; |
2238 } | 2233 } |
2239 set_empty_descriptor_array(DescriptorArray::cast(obj)); | 2234 set_empty_descriptor_array(DescriptorArray::cast(obj)); |
2240 | 2235 |
2241 // Fix the instance_descriptors for the existing maps. | 2236 // Fix the instance_descriptors for the existing maps. |
2242 meta_map()->set_code_cache(empty_fixed_array()); | 2237 meta_map()->set_code_cache(empty_fixed_array()); |
2243 meta_map()->init_back_pointer(undefined_value()); | 2238 meta_map()->init_back_pointer(undefined_value()); |
| 2239 meta_map()->set_instance_descriptors(empty_descriptor_array()); |
2244 | 2240 |
2245 fixed_array_map()->set_code_cache(empty_fixed_array()); | 2241 fixed_array_map()->set_code_cache(empty_fixed_array()); |
2246 fixed_array_map()->init_back_pointer(undefined_value()); | 2242 fixed_array_map()->init_back_pointer(undefined_value()); |
| 2243 fixed_array_map()->set_instance_descriptors(empty_descriptor_array()); |
2247 | 2244 |
2248 oddball_map()->set_code_cache(empty_fixed_array()); | 2245 oddball_map()->set_code_cache(empty_fixed_array()); |
2249 oddball_map()->init_back_pointer(undefined_value()); | 2246 oddball_map()->init_back_pointer(undefined_value()); |
| 2247 oddball_map()->set_instance_descriptors(empty_descriptor_array()); |
2250 | 2248 |
2251 // Fix prototype object for existing maps. | 2249 // Fix prototype object for existing maps. |
2252 meta_map()->set_prototype(null_value()); | 2250 meta_map()->set_prototype(null_value()); |
2253 meta_map()->set_constructor(null_value()); | 2251 meta_map()->set_constructor(null_value()); |
2254 | 2252 |
2255 fixed_array_map()->set_prototype(null_value()); | 2253 fixed_array_map()->set_prototype(null_value()); |
2256 fixed_array_map()->set_constructor(null_value()); | 2254 fixed_array_map()->set_constructor(null_value()); |
2257 | 2255 |
2258 oddball_map()->set_prototype(null_value()); | 2256 oddball_map()->set_prototype(null_value()); |
2259 oddball_map()->set_constructor(null_value()); | 2257 oddball_map()->set_constructor(null_value()); |
(...skipping 1689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3949 } | 3947 } |
3950 descriptors->Sort(); | 3948 descriptors->Sort(); |
3951 | 3949 |
3952 // The descriptors may contain duplicates because the compiler does not | 3950 // The descriptors may contain duplicates because the compiler does not |
3953 // guarantee the uniqueness of property names (it would have required | 3951 // guarantee the uniqueness of property names (it would have required |
3954 // quadratic time). Once the descriptors are sorted we can check for | 3952 // quadratic time). Once the descriptors are sorted we can check for |
3955 // duplicates in linear time. | 3953 // duplicates in linear time. |
3956 if (HasDuplicates(descriptors)) { | 3954 if (HasDuplicates(descriptors)) { |
3957 fun->shared()->ForbidInlineConstructor(); | 3955 fun->shared()->ForbidInlineConstructor(); |
3958 } else { | 3956 } else { |
3959 MaybeObject* maybe_failure = map->InitializeDescriptors(descriptors); | 3957 map->InitializeDescriptors(descriptors); |
3960 if (maybe_failure->IsFailure()) return maybe_failure; | |
3961 map->set_pre_allocated_property_fields(count); | 3958 map->set_pre_allocated_property_fields(count); |
3962 map->set_unused_property_fields(in_object_properties - count); | 3959 map->set_unused_property_fields(in_object_properties - count); |
3963 } | 3960 } |
3964 } | 3961 } |
3965 } | 3962 } |
3966 | 3963 |
3967 fun->shared()->StartInobjectSlackTracking(map); | 3964 fun->shared()->StartInobjectSlackTracking(map); |
3968 | 3965 |
3969 return map; | 3966 return map; |
3970 } | 3967 } |
(...skipping 3369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7340 static_cast<int>(object_sizes_last_time_[index])); | 7337 static_cast<int>(object_sizes_last_time_[index])); |
7341 FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(ADJUST_LAST_TIME_OBJECT_COUNT) | 7338 FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(ADJUST_LAST_TIME_OBJECT_COUNT) |
7342 #undef ADJUST_LAST_TIME_OBJECT_COUNT | 7339 #undef ADJUST_LAST_TIME_OBJECT_COUNT |
7343 | 7340 |
7344 memcpy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); | 7341 memcpy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); |
7345 memcpy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); | 7342 memcpy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); |
7346 ClearObjectStats(); | 7343 ClearObjectStats(); |
7347 } | 7344 } |
7348 | 7345 |
7349 } } // namespace v8::internal | 7346 } } // namespace v8::internal |
OLD | NEW |