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 10326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10337 } | 10337 } |
10338 | 10338 |
10339 | 10339 |
10340 void Code::InvalidateRelocation() { | 10340 void Code::InvalidateRelocation() { |
10341 set_relocation_info(GetHeap()->empty_byte_array()); | 10341 set_relocation_info(GetHeap()->empty_byte_array()); |
10342 } | 10342 } |
10343 | 10343 |
10344 | 10344 |
10345 void Code::InvalidateEmbeddedObjects() { | 10345 void Code::InvalidateEmbeddedObjects() { |
10346 Object* undefined = GetHeap()->undefined_value(); | 10346 Object* undefined = GetHeap()->undefined_value(); |
10347 int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT); | 10347 Cell* undefined_cell = GetHeap()->undefined_cell(); |
| 10348 int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT) | |
| 10349 RelocInfo::ModeMask(RelocInfo::CELL); |
10348 for (RelocIterator it(this, mode_mask); !it.done(); it.next()) { | 10350 for (RelocIterator it(this, mode_mask); !it.done(); it.next()) { |
10349 RelocInfo::Mode mode = it.rinfo()->rmode(); | 10351 RelocInfo::Mode mode = it.rinfo()->rmode(); |
10350 if (mode == RelocInfo::EMBEDDED_OBJECT) { | 10352 if (mode == RelocInfo::EMBEDDED_OBJECT) { |
10351 it.rinfo()->set_target_object(undefined, SKIP_WRITE_BARRIER); | 10353 it.rinfo()->set_target_object(undefined, SKIP_WRITE_BARRIER); |
| 10354 } else if (mode == RelocInfo::CELL) { |
| 10355 it.rinfo()->set_target_cell(undefined_cell, SKIP_WRITE_BARRIER); |
10352 } | 10356 } |
10353 } | 10357 } |
10354 } | 10358 } |
10355 | 10359 |
10356 | 10360 |
10357 void Code::Relocate(intptr_t delta) { | 10361 void Code::Relocate(intptr_t delta) { |
10358 for (RelocIterator it(this, RelocInfo::kApplyMask); !it.done(); it.next()) { | 10362 for (RelocIterator it(this, RelocInfo::kApplyMask); !it.done(); it.next()) { |
10359 it.rinfo()->apply(delta); | 10363 it.rinfo()->apply(delta); |
10360 } | 10364 } |
10361 CPU::FlushICache(instruction_start(), instruction_size()); | 10365 CPU::FlushICache(instruction_start(), instruction_size()); |
(...skipping 941 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11303 | 11307 |
11304 bool Code::IsWeakEmbeddedObject(Kind kind, Object* object) { | 11308 bool Code::IsWeakEmbeddedObject(Kind kind, Object* object) { |
11305 if (kind != Code::OPTIMIZED_FUNCTION) return false; | 11309 if (kind != Code::OPTIMIZED_FUNCTION) return false; |
11306 | 11310 |
11307 if (object->IsMap()) { | 11311 if (object->IsMap()) { |
11308 return Map::cast(object)->CanTransition() && | 11312 return Map::cast(object)->CanTransition() && |
11309 FLAG_collect_maps && | 11313 FLAG_collect_maps && |
11310 FLAG_weak_embedded_maps_in_optimized_code; | 11314 FLAG_weak_embedded_maps_in_optimized_code; |
11311 } | 11315 } |
11312 | 11316 |
11313 if (object->IsJSObject()) { | 11317 if (object->IsJSObject() || |
| 11318 (object->IsCell() && Cell::cast(object)->value()->IsJSObject())) { |
11314 return FLAG_weak_embedded_objects_in_optimized_code; | 11319 return FLAG_weak_embedded_objects_in_optimized_code; |
11315 } | 11320 } |
11316 | 11321 |
11317 return false; | 11322 return false; |
11318 } | 11323 } |
11319 | 11324 |
11320 | 11325 |
11321 void JSObject::SetFastDoubleElementsCapacityAndLength(Handle<JSObject> object, | 11326 void JSObject::SetFastDoubleElementsCapacityAndLength(Handle<JSObject> object, |
11322 int capacity, | 11327 int capacity, |
11323 int length) { | 11328 int length) { |
(...skipping 5351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16675 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16680 #define ERROR_MESSAGES_TEXTS(C, T) T, |
16676 static const char* error_messages_[] = { | 16681 static const char* error_messages_[] = { |
16677 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16682 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
16678 }; | 16683 }; |
16679 #undef ERROR_MESSAGES_TEXTS | 16684 #undef ERROR_MESSAGES_TEXTS |
16680 return error_messages_[reason]; | 16685 return error_messages_[reason]; |
16681 } | 16686 } |
16682 | 16687 |
16683 | 16688 |
16684 } } // namespace v8::internal | 16689 } } // namespace v8::internal |
OLD | NEW |