OLD | NEW |
---|---|
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
56 #ifdef ENABLE_DISASSEMBLER | 56 #ifdef ENABLE_DISASSEMBLER |
57 #include "disasm.h" | 57 #include "disasm.h" |
58 #include "disassembler.h" | 58 #include "disassembler.h" |
59 #endif | 59 #endif |
60 | 60 |
61 namespace v8 { | 61 namespace v8 { |
62 namespace internal { | 62 namespace internal { |
63 | 63 |
64 Handle<HeapType> Object::OptimalType(Isolate* isolate, | 64 Handle<HeapType> Object::OptimalType(Isolate* isolate, |
65 Representation representation) { | 65 Representation representation) { |
66 if (!FLAG_track_field_types) return HeapType::Any(isolate); | 66 if (FLAG_track_field_types) { |
67 if (representation.IsNone()) return HeapType::None(isolate); | 67 if (representation.IsNone()) return HeapType::None(isolate); |
68 if (representation.IsHeapObject() && IsHeapObject()) { | 68 if (representation.IsHeapObject() && IsHeapObject()) { |
69 // We can track only JavaScript objects with stable maps. | 69 // We can track only JavaScript objects with stable maps. |
70 Handle<Map> map(HeapObject::cast(this)->map(), isolate); | 70 Handle<Map> map(HeapObject::cast(this)->map(), isolate); |
71 if (map->is_stable() && | 71 if (map->is_stable() && |
72 map->instance_type() >= FIRST_NONCALLABLE_SPEC_OBJECT_TYPE && | 72 map->instance_type() >= FIRST_NONCALLABLE_SPEC_OBJECT_TYPE && |
73 map->instance_type() <= LAST_NONCALLABLE_SPEC_OBJECT_TYPE) { | 73 map->instance_type() <= LAST_NONCALLABLE_SPEC_OBJECT_TYPE) { |
74 return HeapType::Class(map, isolate); | 74 return HeapType::Class(map, isolate); |
75 } | |
75 } | 76 } |
76 } | 77 } |
77 return HeapType::Any(isolate); | 78 return HeapType::Any(isolate); |
78 } | 79 } |
79 | 80 |
80 | 81 |
81 MaybeHandle<JSReceiver> Object::ToObject(Isolate* isolate, | 82 MaybeHandle<JSReceiver> Object::ToObject(Isolate* isolate, |
82 Handle<Object> object, | 83 Handle<Object> object, |
83 Handle<Context> native_context) { | 84 Handle<Context> native_context) { |
84 if (object->IsJSReceiver()) return Handle<JSReceiver>::cast(object); | 85 if (object->IsJSReceiver()) return Handle<JSReceiver>::cast(object); |
(...skipping 2439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2524 instance_descriptors()->Replace(descriptor_number, desc);; | 2525 instance_descriptors()->Replace(descriptor_number, desc);; |
2525 } | 2526 } |
2526 | 2527 |
2527 | 2528 |
2528 // static | 2529 // static |
2529 Handle<HeapType> Map::GeneralizeFieldType(Handle<HeapType> old_field_type, | 2530 Handle<HeapType> Map::GeneralizeFieldType(Handle<HeapType> old_field_type, |
2530 Handle<HeapType> new_field_type, | 2531 Handle<HeapType> new_field_type, |
2531 Isolate* isolate) { | 2532 Isolate* isolate) { |
2532 if (new_field_type->NowIs(old_field_type)) return old_field_type; | 2533 if (new_field_type->NowIs(old_field_type)) return old_field_type; |
2533 if (old_field_type->NowIs(new_field_type)) return new_field_type; | 2534 if (old_field_type->NowIs(new_field_type)) return new_field_type; |
2535 int num_old_classes = old_field_type->NumClasses(); | |
2536 int num_new_classes = new_field_type->NumClasses(); | |
2537 if (num_old_classes > 0 && | |
2538 num_new_classes > 0 && | |
2539 num_old_classes + num_new_classes <= 5 && | |
Sven Panne
2014/04/17 06:43:41
Perhaps give the "5" a name...
Benedikt Meurer
2014/04/17 07:26:35
Done.
| |
2540 old_field_type->NowStable() && new_field_type->NowStable()) { | |
2541 return HeapType::Union(new_field_type, old_field_type, isolate); | |
Sven Panne
2014/04/17 06:43:41
As discussed offline: Perhaps calculate the union
Benedikt Meurer
2014/04/17 07:26:35
Done.
| |
2542 } | |
2534 return HeapType::Any(isolate); | 2543 return HeapType::Any(isolate); |
2535 } | 2544 } |
2536 | 2545 |
2537 | 2546 |
2538 // static | 2547 // static |
2539 void Map::GeneralizeFieldType(Handle<Map> map, | 2548 void Map::GeneralizeFieldType(Handle<Map> map, |
2540 int modify_index, | 2549 int modify_index, |
2541 Handle<HeapType> new_field_type) { | 2550 Handle<HeapType> new_field_type) { |
2542 Isolate* isolate = map->GetIsolate(); | 2551 Isolate* isolate = map->GetIsolate(); |
2543 Handle<Map> field_owner(map->FindFieldOwner(modify_index), isolate); | 2552 Handle<Map> field_owner(map->FindFieldOwner(modify_index), isolate); |
(...skipping 14567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
17111 #define ERROR_MESSAGES_TEXTS(C, T) T, | 17120 #define ERROR_MESSAGES_TEXTS(C, T) T, |
17112 static const char* error_messages_[] = { | 17121 static const char* error_messages_[] = { |
17113 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 17122 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
17114 }; | 17123 }; |
17115 #undef ERROR_MESSAGES_TEXTS | 17124 #undef ERROR_MESSAGES_TEXTS |
17116 return error_messages_[reason]; | 17125 return error_messages_[reason]; |
17117 } | 17126 } |
17118 | 17127 |
17119 | 17128 |
17120 } } // namespace v8::internal | 17129 } } // namespace v8::internal |
OLD | NEW |