summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/incremental-marking-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/incremental-marking-inl.h')
-rw-r--r--deps/v8/src/heap/incremental-marking-inl.h21
1 files changed, 20 insertions, 1 deletions
diff --git a/deps/v8/src/heap/incremental-marking-inl.h b/deps/v8/src/heap/incremental-marking-inl.h
index 19d6b22e4d..e19d62f4d4 100644
--- a/deps/v8/src/heap/incremental-marking-inl.h
+++ b/deps/v8/src/heap/incremental-marking-inl.h
@@ -6,6 +6,8 @@
#define V8_HEAP_INCREMENTAL_MARKING_INL_H_
#include "src/heap/incremental-marking.h"
+
+#include "src/heap/mark-compact-inl.h"
#include "src/isolate.h"
#include "src/objects-inl.h"
#include "src/objects/maybe-object.h"
@@ -13,6 +15,23 @@
namespace v8 {
namespace internal {
+void IncrementalMarking::TransferColor(HeapObject* from, HeapObject* to) {
+ if (atomic_marking_state()->IsBlack(to)) {
+ DCHECK(black_allocation());
+ return;
+ }
+
+ DCHECK(atomic_marking_state()->IsWhite(to));
+ if (atomic_marking_state()->IsGrey(from)) {
+ bool success = atomic_marking_state()->WhiteToGrey(to);
+ DCHECK(success);
+ USE(success);
+ } else if (atomic_marking_state()->IsBlack(from)) {
+ bool success = atomic_marking_state()->WhiteToBlack(to);
+ DCHECK(success);
+ USE(success);
+ }
+}
void IncrementalMarking::RecordWrite(HeapObject* obj, Object** slot,
Object* value) {
@@ -30,7 +49,7 @@ void IncrementalMarking::RecordMaybeWeakWrite(HeapObject* obj,
// When writing a weak reference, treat it as strong for the purposes of the
// marking barrier.
HeapObject* heap_object;
- if (IsMarking() && value->ToStrongOrWeakHeapObject(&heap_object)) {
+ if (IsMarking() && value->GetHeapObject(&heap_object)) {
RecordWriteSlow(obj, reinterpret_cast<HeapObjectReference**>(slot),
heap_object);
}