OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 573 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
584 holder); | 584 holder); |
585 case HANDLER: { | 585 case HANDLER: { |
586 JSProxy* proxy = JSProxy::cast(this); | 586 JSProxy* proxy = JSProxy::cast(this); |
587 return GetPropertyWithHandler(receiver, name, proxy->handler()); | 587 return GetPropertyWithHandler(receiver, name, proxy->handler()); |
588 } | 588 } |
589 case INTERCEPTOR: { | 589 case INTERCEPTOR: { |
590 JSObject* recvr = JSObject::cast(receiver); | 590 JSObject* recvr = JSObject::cast(receiver); |
591 return holder->GetPropertyWithInterceptor(recvr, name, attributes); | 591 return holder->GetPropertyWithInterceptor(recvr, name, attributes); |
592 } | 592 } |
593 case MAP_TRANSITION: | 593 case MAP_TRANSITION: |
594 case EXTERNAL_ARRAY_TRANSITION: | 594 case ELEMENTS_TRANSITION: |
595 case CONSTANT_TRANSITION: | 595 case CONSTANT_TRANSITION: |
596 case NULL_DESCRIPTOR: | 596 case NULL_DESCRIPTOR: |
597 break; | 597 break; |
598 } | 598 } |
599 UNREACHABLE(); | 599 UNREACHABLE(); |
600 return NULL; | 600 return NULL; |
601 } | 601 } |
602 | 602 |
603 | 603 |
604 MaybeObject* Object::GetElementWithReceiver(Object* receiver, uint32_t index) { | 604 MaybeObject* Object::GetElementWithReceiver(Object* receiver, uint32_t index) { |
(...skipping 823 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1428 if (!maybe_new_descriptors->ToObject(&new_descriptors)) { | 1428 if (!maybe_new_descriptors->ToObject(&new_descriptors)) { |
1429 return maybe_new_descriptors; | 1429 return maybe_new_descriptors; |
1430 } | 1430 } |
1431 } | 1431 } |
1432 | 1432 |
1433 // Only allow map transition if the object isn't the global object and there | 1433 // Only allow map transition if the object isn't the global object and there |
1434 // is not a transition for the name, or there's a transition for the name but | 1434 // is not a transition for the name, or there's a transition for the name but |
1435 // it's unrelated to properties. | 1435 // it's unrelated to properties. |
1436 int descriptor_index = old_descriptors->Search(name); | 1436 int descriptor_index = old_descriptors->Search(name); |
1437 | 1437 |
1438 // External array transitions are stored in the descriptor for property "", | 1438 // Element transitions are stored in the descriptor for property "", which is |
1439 // which is not a identifier and should have forced a switch to slow | 1439 // not a identifier and should have forced a switch to slow properties above. |
1440 // properties above. | |
1441 ASSERT(descriptor_index == DescriptorArray::kNotFound || | 1440 ASSERT(descriptor_index == DescriptorArray::kNotFound || |
1442 old_descriptors->GetType(descriptor_index) != EXTERNAL_ARRAY_TRANSITION); | 1441 old_descriptors->GetType(descriptor_index) != ELEMENTS_TRANSITION); |
1443 bool can_insert_transition = descriptor_index == DescriptorArray::kNotFound || | 1442 bool can_insert_transition = descriptor_index == DescriptorArray::kNotFound || |
1444 old_descriptors->GetType(descriptor_index) == EXTERNAL_ARRAY_TRANSITION; | 1443 old_descriptors->GetType(descriptor_index) == ELEMENTS_TRANSITION; |
1445 bool allow_map_transition = | 1444 bool allow_map_transition = |
1446 can_insert_transition && | 1445 can_insert_transition && |
1447 (isolate->context()->global_context()->object_function()->map() != map()); | 1446 (isolate->context()->global_context()->object_function()->map() != map()); |
1448 | 1447 |
1449 ASSERT(index < map()->inobject_properties() || | 1448 ASSERT(index < map()->inobject_properties() || |
1450 (index - map()->inobject_properties()) < properties()->length() || | 1449 (index - map()->inobject_properties()) < properties()->length() || |
1451 map()->unused_property_fields() == 0); | 1450 map()->unused_property_fields() == 0); |
1452 // Allocate a new map for the object. | 1451 // Allocate a new map for the object. |
1453 Object* r; | 1452 Object* r; |
1454 { MaybeObject* maybe_r = map()->CopyDropDescriptors(); | 1453 { MaybeObject* maybe_r = map()->CopyDropDescriptors(); |
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1982 cache->Update(descriptors, name, number); | 1981 cache->Update(descriptors, name, number); |
1983 } | 1982 } |
1984 if (number != DescriptorArray::kNotFound) { | 1983 if (number != DescriptorArray::kNotFound) { |
1985 result->DescriptorResult(holder, descriptors->GetDetails(number), number); | 1984 result->DescriptorResult(holder, descriptors->GetDetails(number), number); |
1986 } else { | 1985 } else { |
1987 result->NotFound(); | 1986 result->NotFound(); |
1988 } | 1987 } |
1989 } | 1988 } |
1990 | 1989 |
1991 | 1990 |
1992 static ElementsKind GetElementsKindFromExternalArrayType( | 1991 MaybeObject* Map::GetElementsTransitionMap(ElementsKind elements_kind, |
1993 ExternalArrayType array_type) { | 1992 bool safe_to_add_transition) { |
1994 switch (array_type) { | |
1995 case kExternalByteArray: | |
1996 return EXTERNAL_BYTE_ELEMENTS; | |
1997 break; | |
1998 case kExternalUnsignedByteArray: | |
1999 return EXTERNAL_UNSIGNED_BYTE_ELEMENTS; | |
2000 break; | |
2001 case kExternalShortArray: | |
2002 return EXTERNAL_SHORT_ELEMENTS; | |
2003 break; | |
2004 case kExternalUnsignedShortArray: | |
2005 return EXTERNAL_UNSIGNED_SHORT_ELEMENTS; | |
2006 break; | |
2007 case kExternalIntArray: | |
2008 return EXTERNAL_INT_ELEMENTS; | |
2009 break; | |
2010 case kExternalUnsignedIntArray: | |
2011 return EXTERNAL_UNSIGNED_INT_ELEMENTS; | |
2012 break; | |
2013 case kExternalFloatArray: | |
2014 return EXTERNAL_FLOAT_ELEMENTS; | |
2015 break; | |
2016 case kExternalDoubleArray: | |
2017 return EXTERNAL_DOUBLE_ELEMENTS; | |
2018 break; | |
2019 case kExternalPixelArray: | |
2020 return EXTERNAL_PIXEL_ELEMENTS; | |
2021 break; | |
2022 } | |
2023 UNREACHABLE(); | |
2024 return DICTIONARY_ELEMENTS; | |
2025 } | |
2026 | |
2027 | |
2028 MaybeObject* Map::GetExternalArrayElementsMap(ExternalArrayType array_type, | |
2029 bool safe_to_add_transition) { | |
2030 Heap* current_heap = heap(); | 1993 Heap* current_heap = heap(); |
2031 DescriptorArray* descriptors = instance_descriptors(); | 1994 DescriptorArray* descriptors = instance_descriptors(); |
2032 String* external_array_sentinel_name = current_heap->empty_symbol(); | 1995 String* elements_transition_sentinel_name = current_heap->empty_symbol(); |
2033 | 1996 |
2034 if (safe_to_add_transition) { | 1997 if (safe_to_add_transition) { |
2035 // It's only safe to manipulate the descriptor array if it would be | 1998 // It's only safe to manipulate the descriptor array if it would be |
2036 // safe to add a transition. | 1999 // safe to add a transition. |
2037 | 2000 |
2038 ASSERT(!is_shared()); // no transitions can be added to shared maps. | 2001 ASSERT(!is_shared()); // no transitions can be added to shared maps. |
2039 // Check if the external array transition already exists. | 2002 // Check if the elements transition already exists. |
2040 DescriptorLookupCache* cache = | 2003 DescriptorLookupCache* cache = |
2041 current_heap->isolate()->descriptor_lookup_cache(); | 2004 current_heap->isolate()->descriptor_lookup_cache(); |
2042 int index = cache->Lookup(descriptors, external_array_sentinel_name); | 2005 int index = cache->Lookup(descriptors, elements_transition_sentinel_name); |
2043 if (index == DescriptorLookupCache::kAbsent) { | 2006 if (index == DescriptorLookupCache::kAbsent) { |
2044 index = descriptors->Search(external_array_sentinel_name); | 2007 index = descriptors->Search(elements_transition_sentinel_name); |
2045 cache->Update(descriptors, | 2008 cache->Update(descriptors, |
2046 external_array_sentinel_name, | 2009 elements_transition_sentinel_name, |
2047 index); | 2010 index); |
2048 } | 2011 } |
2049 | 2012 |
2050 // If the transition already exists, check the type. If there is a match, | 2013 // If the transition already exists, check the type. If there is a match, |
2051 // return it. | 2014 // return it. |
2052 if (index != DescriptorArray::kNotFound) { | 2015 if (index != DescriptorArray::kNotFound) { |
2053 PropertyDetails details(PropertyDetails(descriptors->GetDetails(index))); | 2016 PropertyDetails details(PropertyDetails(descriptors->GetDetails(index))); |
2054 if (details.type() == EXTERNAL_ARRAY_TRANSITION && | 2017 if (details.type() == ELEMENTS_TRANSITION && |
2055 details.array_type() == array_type) { | 2018 details.elements_kind() == elements_kind) { |
2056 return descriptors->GetValue(index); | 2019 return descriptors->GetValue(index); |
2057 } else { | 2020 } else { |
2058 safe_to_add_transition = false; | 2021 safe_to_add_transition = false; |
2059 } | 2022 } |
2060 } | 2023 } |
2061 } | 2024 } |
2062 | 2025 |
2063 // No transition to an existing external array map. Make a new one. | 2026 // No transition to an existing map for the given ElementsKind. Make a new |
| 2027 // one. |
2064 Object* obj; | 2028 Object* obj; |
2065 { MaybeObject* maybe_map = CopyDropTransitions(); | 2029 { MaybeObject* maybe_map = CopyDropTransitions(); |
2066 if (!maybe_map->ToObject(&obj)) return maybe_map; | 2030 if (!maybe_map->ToObject(&obj)) return maybe_map; |
2067 } | 2031 } |
2068 Map* new_map = Map::cast(obj); | 2032 Map* new_map = Map::cast(obj); |
2069 | 2033 |
2070 new_map->set_elements_kind(GetElementsKindFromExternalArrayType(array_type)); | 2034 new_map->set_elements_kind(elements_kind); |
2071 GetIsolate()->counters()->map_to_external_array_elements()->Increment(); | 2035 GetIsolate()->counters()->map_to_external_array_elements()->Increment(); |
2072 | 2036 |
2073 // Only remember the map transition if the object's map is NOT equal to the | 2037 // Only remember the map transition if the object's map is NOT equal to the |
2074 // global object_function's map and there is not an already existing | 2038 // global object_function's map and there is not an already existing |
2075 // non-matching external array transition. | 2039 // non-matching element transition. |
2076 bool allow_map_transition = | 2040 bool allow_map_transition = |
2077 safe_to_add_transition && | 2041 safe_to_add_transition && |
2078 (GetIsolate()->context()->global_context()->object_function()->map() != | 2042 (GetIsolate()->context()->global_context()->object_function()->map() != |
2079 map()); | 2043 map()); |
2080 if (allow_map_transition) { | 2044 if (allow_map_transition) { |
2081 // Allocate new instance descriptors for the old map with map transition. | 2045 // Allocate new instance descriptors for the old map with map transition. |
2082 ExternalArrayTransitionDescriptor desc(external_array_sentinel_name, | 2046 ElementsTransitionDescriptor desc(elements_transition_sentinel_name, |
2083 Map::cast(new_map), | 2047 Map::cast(new_map), |
2084 array_type); | 2048 elements_kind); |
2085 Object* new_descriptors; | 2049 Object* new_descriptors; |
2086 MaybeObject* maybe_new_descriptors = descriptors->CopyInsert( | 2050 MaybeObject* maybe_new_descriptors = descriptors->CopyInsert( |
2087 &desc, | 2051 &desc, |
2088 KEEP_TRANSITIONS); | 2052 KEEP_TRANSITIONS); |
2089 if (!maybe_new_descriptors->ToObject(&new_descriptors)) { | 2053 if (!maybe_new_descriptors->ToObject(&new_descriptors)) { |
2090 return maybe_new_descriptors; | 2054 return maybe_new_descriptors; |
2091 } | 2055 } |
2092 descriptors = DescriptorArray::cast(new_descriptors); | 2056 descriptors = DescriptorArray::cast(new_descriptors); |
2093 set_instance_descriptors(descriptors); | 2057 set_instance_descriptors(descriptors); |
2094 } | 2058 } |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2491 ASSERT(!HEAP->InNewSpace(function)); | 2455 ASSERT(!HEAP->InNewSpace(function)); |
2492 if (value == function) { | 2456 if (value == function) { |
2493 set_map(target_map); | 2457 set_map(target_map); |
2494 return value; | 2458 return value; |
2495 } | 2459 } |
2496 // Otherwise, replace with a MAP_TRANSITION to a new map with a | 2460 // Otherwise, replace with a MAP_TRANSITION to a new map with a |
2497 // FIELD, even if the value is a constant function. | 2461 // FIELD, even if the value is a constant function. |
2498 return ConvertDescriptorToFieldAndMapTransition(name, value, attributes); | 2462 return ConvertDescriptorToFieldAndMapTransition(name, value, attributes); |
2499 } | 2463 } |
2500 case NULL_DESCRIPTOR: | 2464 case NULL_DESCRIPTOR: |
2501 case EXTERNAL_ARRAY_TRANSITION: | 2465 case ELEMENTS_TRANSITION: |
2502 return ConvertDescriptorToFieldAndMapTransition(name, value, attributes); | 2466 return ConvertDescriptorToFieldAndMapTransition(name, value, attributes); |
2503 default: | 2467 default: |
2504 UNREACHABLE(); | 2468 UNREACHABLE(); |
2505 } | 2469 } |
2506 UNREACHABLE(); | 2470 UNREACHABLE(); |
2507 return value; | 2471 return value; |
2508 } | 2472 } |
2509 | 2473 |
2510 | 2474 |
2511 // Set a real local property, even if it is READ_ONLY. If the property is not | 2475 // Set a real local property, even if it is READ_ONLY. If the property is not |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2579 return ConvertDescriptorToField(name, value, attributes); | 2543 return ConvertDescriptorToField(name, value, attributes); |
2580 case CALLBACKS: | 2544 case CALLBACKS: |
2581 case INTERCEPTOR: | 2545 case INTERCEPTOR: |
2582 // Override callback in clone | 2546 // Override callback in clone |
2583 return ConvertDescriptorToField(name, value, attributes); | 2547 return ConvertDescriptorToField(name, value, attributes); |
2584 case CONSTANT_TRANSITION: | 2548 case CONSTANT_TRANSITION: |
2585 // Replace with a MAP_TRANSITION to a new map with a FIELD, even | 2549 // Replace with a MAP_TRANSITION to a new map with a FIELD, even |
2586 // if the value is a function. | 2550 // if the value is a function. |
2587 return ConvertDescriptorToFieldAndMapTransition(name, value, attributes); | 2551 return ConvertDescriptorToFieldAndMapTransition(name, value, attributes); |
2588 case NULL_DESCRIPTOR: | 2552 case NULL_DESCRIPTOR: |
2589 case EXTERNAL_ARRAY_TRANSITION: | 2553 case ELEMENTS_TRANSITION: |
2590 return ConvertDescriptorToFieldAndMapTransition(name, value, attributes); | 2554 return ConvertDescriptorToFieldAndMapTransition(name, value, attributes); |
2591 default: | 2555 default: |
2592 UNREACHABLE(); | 2556 UNREACHABLE(); |
2593 } | 2557 } |
2594 UNREACHABLE(); | 2558 UNREACHABLE(); |
2595 return value; | 2559 return value; |
2596 } | 2560 } |
2597 | 2561 |
2598 | 2562 |
2599 PropertyAttributes JSObject::GetPropertyAttributePostInterceptor( | 2563 PropertyAttributes JSObject::GetPropertyAttributePostInterceptor( |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2860 dictionary->Add(descs->GetKey(i), value, d); | 2824 dictionary->Add(descs->GetKey(i), value, d); |
2861 if (!maybe_result->ToObject(&result)) return maybe_result; | 2825 if (!maybe_result->ToObject(&result)) return maybe_result; |
2862 } | 2826 } |
2863 dictionary = StringDictionary::cast(result); | 2827 dictionary = StringDictionary::cast(result); |
2864 break; | 2828 break; |
2865 } | 2829 } |
2866 case MAP_TRANSITION: | 2830 case MAP_TRANSITION: |
2867 case CONSTANT_TRANSITION: | 2831 case CONSTANT_TRANSITION: |
2868 case NULL_DESCRIPTOR: | 2832 case NULL_DESCRIPTOR: |
2869 case INTERCEPTOR: | 2833 case INTERCEPTOR: |
2870 case EXTERNAL_ARRAY_TRANSITION: | 2834 case ELEMENTS_TRANSITION: |
2871 break; | 2835 break; |
2872 default: | 2836 default: |
2873 UNREACHABLE(); | 2837 UNREACHABLE(); |
2874 } | 2838 } |
2875 } | 2839 } |
2876 | 2840 |
2877 Heap* current_heap = map_of_this->heap(); | 2841 Heap* current_heap = map_of_this->heap(); |
2878 | 2842 |
2879 // Copy the next enumeration index from instance descriptor. | 2843 // Copy the next enumeration index from instance descriptor. |
2880 int index = map_of_this->instance_descriptors()->NextEnumerationIndex(); | 2844 int index = map_of_this->instance_descriptors()->NextEnumerationIndex(); |
(...skipping 3324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6205 for (int i = 0; i < length; i++) { | 6169 for (int i = 0; i < length; i++) { |
6206 fprintf(file, "%c", Get(i)); | 6170 fprintf(file, "%c", Get(i)); |
6207 } | 6171 } |
6208 } | 6172 } |
6209 | 6173 |
6210 | 6174 |
6211 void Map::CreateBackPointers() { | 6175 void Map::CreateBackPointers() { |
6212 DescriptorArray* descriptors = instance_descriptors(); | 6176 DescriptorArray* descriptors = instance_descriptors(); |
6213 for (int i = 0; i < descriptors->number_of_descriptors(); i++) { | 6177 for (int i = 0; i < descriptors->number_of_descriptors(); i++) { |
6214 if (descriptors->GetType(i) == MAP_TRANSITION || | 6178 if (descriptors->GetType(i) == MAP_TRANSITION || |
6215 descriptors->GetType(i) == EXTERNAL_ARRAY_TRANSITION || | 6179 descriptors->GetType(i) == ELEMENTS_TRANSITION || |
6216 descriptors->GetType(i) == CONSTANT_TRANSITION) { | 6180 descriptors->GetType(i) == CONSTANT_TRANSITION) { |
6217 // Get target. | 6181 // Get target. |
6218 Map* target = Map::cast(descriptors->GetValue(i)); | 6182 Map* target = Map::cast(descriptors->GetValue(i)); |
6219 #ifdef DEBUG | 6183 #ifdef DEBUG |
6220 // Verify target. | 6184 // Verify target. |
6221 Object* source_prototype = prototype(); | 6185 Object* source_prototype = prototype(); |
6222 Object* target_prototype = target->prototype(); | 6186 Object* target_prototype = target->prototype(); |
6223 ASSERT(source_prototype->IsJSObject() || | 6187 ASSERT(source_prototype->IsJSObject() || |
6224 source_prototype->IsMap() || | 6188 source_prototype->IsMap() || |
6225 source_prototype->IsNull()); | 6189 source_prototype->IsNull()); |
(...skipping 22 matching lines...) Expand all Loading... |
6248 d->get(DescriptorArray::kContentArrayIndex)); | 6212 d->get(DescriptorArray::kContentArrayIndex)); |
6249 ASSERT(contents->length() >= 2); | 6213 ASSERT(contents->length() >= 2); |
6250 for (int i = 0; i < contents->length(); i += 2) { | 6214 for (int i = 0; i < contents->length(); i += 2) { |
6251 // If the pair (value, details) is a map transition, | 6215 // If the pair (value, details) is a map transition, |
6252 // check if the target is live. If not, null the descriptor. | 6216 // check if the target is live. If not, null the descriptor. |
6253 // Also drop the back pointer for that map transition, so that this | 6217 // Also drop the back pointer for that map transition, so that this |
6254 // map is not reached again by following a back pointer from a | 6218 // map is not reached again by following a back pointer from a |
6255 // non-live object. | 6219 // non-live object. |
6256 PropertyDetails details(Smi::cast(contents->get(i + 1))); | 6220 PropertyDetails details(Smi::cast(contents->get(i + 1))); |
6257 if (details.type() == MAP_TRANSITION || | 6221 if (details.type() == MAP_TRANSITION || |
6258 details.type() == EXTERNAL_ARRAY_TRANSITION || | 6222 details.type() == ELEMENTS_TRANSITION || |
6259 details.type() == CONSTANT_TRANSITION) { | 6223 details.type() == CONSTANT_TRANSITION) { |
6260 Map* target = reinterpret_cast<Map*>(contents->get(i)); | 6224 Map* target = reinterpret_cast<Map*>(contents->get(i)); |
6261 ASSERT(target->IsHeapObject()); | 6225 ASSERT(target->IsHeapObject()); |
6262 if (!target->IsMarked()) { | 6226 if (!target->IsMarked()) { |
6263 ASSERT(target->IsMap()); | 6227 ASSERT(target->IsMap()); |
6264 contents->set_unchecked(i + 1, NullDescriptorDetails); | 6228 contents->set_unchecked(i + 1, NullDescriptorDetails); |
6265 contents->set_null_unchecked(heap, i); | 6229 contents->set_null_unchecked(heap, i); |
6266 ASSERT(target->prototype() == this || | 6230 ASSERT(target->prototype() == this || |
6267 target->prototype() == real_prototype); | 6231 target->prototype() == real_prototype); |
6268 // Getter prototype() is read-only, set_prototype() has side effects. | 6232 // Getter prototype() is read-only, set_prototype() has side effects. |
(...skipping 868 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7137 | 7101 |
7138 const char* Code::PropertyType2String(PropertyType type) { | 7102 const char* Code::PropertyType2String(PropertyType type) { |
7139 switch (type) { | 7103 switch (type) { |
7140 case NORMAL: return "NORMAL"; | 7104 case NORMAL: return "NORMAL"; |
7141 case FIELD: return "FIELD"; | 7105 case FIELD: return "FIELD"; |
7142 case CONSTANT_FUNCTION: return "CONSTANT_FUNCTION"; | 7106 case CONSTANT_FUNCTION: return "CONSTANT_FUNCTION"; |
7143 case CALLBACKS: return "CALLBACKS"; | 7107 case CALLBACKS: return "CALLBACKS"; |
7144 case HANDLER: return "HANDLER"; | 7108 case HANDLER: return "HANDLER"; |
7145 case INTERCEPTOR: return "INTERCEPTOR"; | 7109 case INTERCEPTOR: return "INTERCEPTOR"; |
7146 case MAP_TRANSITION: return "MAP_TRANSITION"; | 7110 case MAP_TRANSITION: return "MAP_TRANSITION"; |
7147 case EXTERNAL_ARRAY_TRANSITION: return "EXTERNAL_ARRAY_TRANSITION"; | 7111 case ELEMENTS_TRANSITION: return "ELEMENTS_TRANSITION"; |
7148 case CONSTANT_TRANSITION: return "CONSTANT_TRANSITION"; | 7112 case CONSTANT_TRANSITION: return "CONSTANT_TRANSITION"; |
7149 case NULL_DESCRIPTOR: return "NULL_DESCRIPTOR"; | 7113 case NULL_DESCRIPTOR: return "NULL_DESCRIPTOR"; |
7150 } | 7114 } |
7151 UNREACHABLE(); | 7115 UNREACHABLE(); |
7152 return NULL; | 7116 return NULL; |
7153 } | 7117 } |
7154 | 7118 |
7155 | 7119 |
7156 void Code::PrintExtraICState(FILE* out, Kind kind, ExtraICState extra) { | 7120 void Code::PrintExtraICState(FILE* out, Kind kind, ExtraICState extra) { |
7157 const char* name = NULL; | 7121 const char* name = NULL; |
(...skipping 4451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11609 if (break_point_objects()->IsUndefined()) return 0; | 11573 if (break_point_objects()->IsUndefined()) return 0; |
11610 // Single break point. | 11574 // Single break point. |
11611 if (!break_point_objects()->IsFixedArray()) return 1; | 11575 if (!break_point_objects()->IsFixedArray()) return 1; |
11612 // Multiple break points. | 11576 // Multiple break points. |
11613 return FixedArray::cast(break_point_objects())->length(); | 11577 return FixedArray::cast(break_point_objects())->length(); |
11614 } | 11578 } |
11615 #endif | 11579 #endif |
11616 | 11580 |
11617 | 11581 |
11618 } } // namespace v8::internal | 11582 } } // namespace v8::internal |
OLD | NEW |