OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/api.h" | 8 #include "src/api.h" |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/base/once.h" | 10 #include "src/base/once.h" |
(...skipping 1341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1352 | 1352 |
1353 FlushNumberStringCache(); | 1353 FlushNumberStringCache(); |
1354 if (FLAG_cleanup_code_caches_at_gc) { | 1354 if (FLAG_cleanup_code_caches_at_gc) { |
1355 polymorphic_code_cache()->set_cache(undefined_value()); | 1355 polymorphic_code_cache()->set_cache(undefined_value()); |
1356 } | 1356 } |
1357 | 1357 |
1358 ClearNormalizedMapCaches(); | 1358 ClearNormalizedMapCaches(); |
1359 } | 1359 } |
1360 | 1360 |
1361 | 1361 |
| 1362 void Heap::MigrateMixedObjectInNewSpaceEpilog(HeapObject* dst) { |
| 1363 DCHECK(dst->MayContainMixedValues()); |
| 1364 } |
| 1365 |
| 1366 |
1362 // Helper class for copying HeapObjects | 1367 // Helper class for copying HeapObjects |
1363 class ScavengeVisitor : public ObjectVisitor { | 1368 class ScavengeVisitor : public ObjectVisitor { |
1364 public: | 1369 public: |
1365 explicit ScavengeVisitor(Heap* heap) : heap_(heap) {} | 1370 explicit ScavengeVisitor(Heap* heap) : heap_(heap) {} |
1366 | 1371 |
1367 void VisitPointer(Object** p) { ScavengePointer(p); } | 1372 void VisitPointer(Object** p) { ScavengePointer(p); } |
1368 | 1373 |
1369 void VisitPointers(Object** start, Object** end) { | 1374 void VisitPointers(Object** start, Object** end) { |
1370 // Copy all HeapObject pointers in [start, end) | 1375 // Copy all HeapObject pointers in [start, end) |
1371 for (Object** p = start; p < end; p++) ScavengePointer(p); | 1376 for (Object** p = start; p < end; p++) ScavengePointer(p); |
(...skipping 745 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2117 | 2122 |
2118 // Make sure that we do not overwrite the promotion queue which is at | 2123 // Make sure that we do not overwrite the promotion queue which is at |
2119 // the end of to-space. | 2124 // the end of to-space. |
2120 DCHECK(!heap->InToSpace(target) || | 2125 DCHECK(!heap->InToSpace(target) || |
2121 heap->promotion_queue()->IsBelowPromotionQueue( | 2126 heap->promotion_queue()->IsBelowPromotionQueue( |
2122 heap->new_space()->top())); | 2127 heap->new_space()->top())); |
2123 | 2128 |
2124 // Copy the content of source to target. | 2129 // Copy the content of source to target. |
2125 heap->CopyBlock(target->address(), source->address(), size); | 2130 heap->CopyBlock(target->address(), source->address(), size); |
2126 | 2131 |
| 2132 if (target->MayContainMixedValues()) { |
| 2133 heap->MigrateMixedObjectInNewSpaceEpilog(target); |
| 2134 } |
| 2135 |
2127 // Set the forwarding address. | 2136 // Set the forwarding address. |
2128 source->set_map_word(MapWord::FromForwardingAddress(target)); | 2137 source->set_map_word(MapWord::FromForwardingAddress(target)); |
2129 | 2138 |
2130 if (logging_and_profiling_mode == LOGGING_AND_PROFILING_ENABLED) { | 2139 if (logging_and_profiling_mode == LOGGING_AND_PROFILING_ENABLED) { |
2131 // Update NewSpace stats if necessary. | 2140 // Update NewSpace stats if necessary. |
2132 RecordCopiedObject(heap, target); | 2141 RecordCopiedObject(heap, target); |
2133 heap->OnMoveEvent(target, source, size); | 2142 heap->OnMoveEvent(target, source, size); |
2134 } | 2143 } |
2135 | 2144 |
2136 if (marks_handling == TRANSFER_MARKS) { | 2145 if (marks_handling == TRANSFER_MARKS) { |
(...skipping 4392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6529 } | 6538 } |
6530 delete list; | 6539 delete list; |
6531 } else { | 6540 } else { |
6532 prev = list; | 6541 prev = list; |
6533 } | 6542 } |
6534 list = next; | 6543 list = next; |
6535 } | 6544 } |
6536 } | 6545 } |
6537 } | 6546 } |
6538 } // namespace v8::internal | 6547 } // namespace v8::internal |
OLD | NEW |