Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 1116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1127 // During GC, the map pointer in HeapObject is used in various ways that | 1127 // During GC, the map pointer in HeapObject is used in various ways that |
| 1128 // prevent us from retrieving Heap from the map. | 1128 // prevent us from retrieving Heap from the map. |
| 1129 // Assert that we are not in GC, implement GC code in a way that it doesn't | 1129 // Assert that we are not in GC, implement GC code in a way that it doesn't |
| 1130 // pull heap from the map. | 1130 // pull heap from the map. |
| 1131 ASSERT(HEAP->is_safe_to_read_maps()); | 1131 ASSERT(HEAP->is_safe_to_read_maps()); |
| 1132 return map()->heap(); | 1132 return map()->heap(); |
| 1133 } | 1133 } |
| 1134 | 1134 |
| 1135 | 1135 |
| 1136 Isolate* HeapObject::GetIsolate() { | 1136 Isolate* HeapObject::GetIsolate() { |
| 1137 Isolate* i = GetHeap()->isolate(); | 1137 return GetHeap()->isolate(); |
| 1138 ASSERT(i == Isolate::Current()); | |
| 1139 return i; | |
| 1140 } | 1138 } |
| 1141 | 1139 |
| 1142 | 1140 |
| 1143 Map* HeapObject::map() { | 1141 Map* HeapObject::map() { |
| 1144 return map_word().ToMap(); | 1142 return map_word().ToMap(); |
| 1145 } | 1143 } |
| 1146 | 1144 |
| 1147 | 1145 |
| 1148 void HeapObject::set_map(Map* value) { | 1146 void HeapObject::set_map(Map* value) { |
| 1149 set_map_word(MapWord::FromMap(value)); | 1147 set_map_word(MapWord::FromMap(value)); |
| (...skipping 1658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2808 HeapObject* code = HeapObject::FromAddress(address - Code::kHeaderSize); | 2806 HeapObject* code = HeapObject::FromAddress(address - Code::kHeaderSize); |
| 2809 // GetCodeFromTargetAddress might be called when marking objects during mark | 2807 // GetCodeFromTargetAddress might be called when marking objects during mark |
| 2810 // sweep. reinterpret_cast is therefore used instead of the more appropriate | 2808 // sweep. reinterpret_cast is therefore used instead of the more appropriate |
| 2811 // Code::cast. Code::cast does not work when the object's map is | 2809 // Code::cast. Code::cast does not work when the object's map is |
| 2812 // marked. | 2810 // marked. |
| 2813 Code* result = reinterpret_cast<Code*>(code); | 2811 Code* result = reinterpret_cast<Code*>(code); |
| 2814 return result; | 2812 return result; |
| 2815 } | 2813 } |
| 2816 | 2814 |
| 2817 | 2815 |
| 2816 Isolate* Map::isolate() { | |
| 2817 return heap()->isolate(); | |
| 2818 } | |
| 2819 | |
| 2820 | |
| 2818 Heap* Map::heap() { | 2821 Heap* Map::heap() { |
| 2819 // NOTE: address() helper is not used to save one instruction. | 2822 // NOTE: address() helper is not used to save one instruction. |
| 2820 Heap* heap = Page::FromAddress(reinterpret_cast<Address>(this))->heap_; | 2823 Heap* heap = Page::FromAddress(reinterpret_cast<Address>(this))->heap_; |
| 2821 ASSERT(heap != NULL); | 2824 ASSERT(heap != NULL); |
| 2822 ASSERT(heap->isolate() == Isolate::Current()); | 2825 ASSERT(heap->isolate() == Isolate::Current()); |
| 2823 return heap; | 2826 return heap; |
| 2824 } | 2827 } |
| 2825 | 2828 |
| 2826 | 2829 |
| 2827 Object* Code::GetObjectFromEntryAddress(Address location_of_address) { | 2830 Object* Code::GetObjectFromEntryAddress(Address location_of_address) { |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 2843 | 2846 |
| 2844 | 2847 |
| 2845 MaybeObject* Map::GetFastElementsMap() { | 2848 MaybeObject* Map::GetFastElementsMap() { |
| 2846 if (has_fast_elements()) return this; | 2849 if (has_fast_elements()) return this; |
| 2847 Object* obj; | 2850 Object* obj; |
| 2848 { MaybeObject* maybe_obj = CopyDropTransitions(); | 2851 { MaybeObject* maybe_obj = CopyDropTransitions(); |
| 2849 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 2852 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
| 2850 } | 2853 } |
| 2851 Map* new_map = Map::cast(obj); | 2854 Map* new_map = Map::cast(obj); |
| 2852 new_map->set_has_fast_elements(true); | 2855 new_map->set_has_fast_elements(true); |
| 2853 COUNTERS->map_slow_to_fast_elements()->Increment(); | 2856 isolate()->counters()->map_slow_to_fast_elements()->Increment(); |
|
Mads Ager (chromium)
2011/03/22 19:05:37
Hey, that's part of my next change! ;-)
| |
| 2854 return new_map; | 2857 return new_map; |
| 2855 } | 2858 } |
| 2856 | 2859 |
| 2857 | 2860 |
| 2858 MaybeObject* Map::GetSlowElementsMap() { | 2861 MaybeObject* Map::GetSlowElementsMap() { |
| 2859 if (!has_fast_elements()) return this; | 2862 if (!has_fast_elements()) return this; |
| 2860 Object* obj; | 2863 Object* obj; |
| 2861 { MaybeObject* maybe_obj = CopyDropTransitions(); | 2864 { MaybeObject* maybe_obj = CopyDropTransitions(); |
| 2862 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 2865 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
| 2863 } | 2866 } |
| 2864 Map* new_map = Map::cast(obj); | 2867 Map* new_map = Map::cast(obj); |
| 2865 new_map->set_has_fast_elements(false); | 2868 new_map->set_has_fast_elements(false); |
| 2866 COUNTERS->map_fast_to_slow_elements()->Increment(); | 2869 isolate()->counters()->map_fast_to_slow_elements()->Increment(); |
| 2867 return new_map; | 2870 return new_map; |
| 2868 } | 2871 } |
| 2869 | 2872 |
| 2870 | 2873 |
| 2871 MaybeObject* Map::NewExternalArrayElementsMap() { | 2874 MaybeObject* Map::NewExternalArrayElementsMap() { |
| 2872 // TODO(danno): Special case empty object map (or most common case) | 2875 // TODO(danno): Special case empty object map (or most common case) |
| 2873 // to return a pre-canned pixel array map. | 2876 // to return a pre-canned pixel array map. |
| 2874 Object* obj; | 2877 Object* obj; |
| 2875 { MaybeObject* maybe_obj = CopyDropTransitions(); | 2878 { MaybeObject* maybe_obj = CopyDropTransitions(); |
| 2876 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 2879 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
| 2877 } | 2880 } |
| 2878 Map* new_map = Map::cast(obj); | 2881 Map* new_map = Map::cast(obj); |
| 2879 new_map->set_has_fast_elements(false); | 2882 new_map->set_has_fast_elements(false); |
| 2880 new_map->set_has_external_array_elements(true); | 2883 new_map->set_has_external_array_elements(true); |
| 2881 COUNTERS->map_to_external_array_elements()->Increment(); | 2884 isolate()->counters()->map_to_external_array_elements()->Increment(); |
| 2882 return new_map; | 2885 return new_map; |
| 2883 } | 2886 } |
| 2884 | 2887 |
| 2885 | 2888 |
| 2886 ACCESSORS(Map, instance_descriptors, DescriptorArray, | 2889 ACCESSORS(Map, instance_descriptors, DescriptorArray, |
| 2887 kInstanceDescriptorsOffset) | 2890 kInstanceDescriptorsOffset) |
| 2888 ACCESSORS(Map, code_cache, Object, kCodeCacheOffset) | 2891 ACCESSORS(Map, code_cache, Object, kCodeCacheOffset) |
| 2889 ACCESSORS(Map, constructor, Object, kConstructorOffset) | 2892 ACCESSORS(Map, constructor, Object, kConstructorOffset) |
| 2890 | 2893 |
| 2891 ACCESSORS(JSFunction, shared, SharedFunctionInfo, kSharedFunctionInfoOffset) | 2894 ACCESSORS(JSFunction, shared, SharedFunctionInfo, kSharedFunctionInfoOffset) |
| (...skipping 1218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4110 #undef WRITE_INT_FIELD | 4113 #undef WRITE_INT_FIELD |
| 4111 #undef READ_SHORT_FIELD | 4114 #undef READ_SHORT_FIELD |
| 4112 #undef WRITE_SHORT_FIELD | 4115 #undef WRITE_SHORT_FIELD |
| 4113 #undef READ_BYTE_FIELD | 4116 #undef READ_BYTE_FIELD |
| 4114 #undef WRITE_BYTE_FIELD | 4117 #undef WRITE_BYTE_FIELD |
| 4115 | 4118 |
| 4116 | 4119 |
| 4117 } } // namespace v8::internal | 4120 } } // namespace v8::internal |
| 4118 | 4121 |
| 4119 #endif // V8_OBJECTS_INL_H_ | 4122 #endif // V8_OBJECTS_INL_H_ |
| OLD | NEW |