summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/heap-write-barrier.h
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2020-10-15 20:17:08 +0200
committerMichaël Zasso <targos@protonmail.com>2020-10-18 20:16:47 +0200
commita1d639ba5de4ff34e34fb575fbb6cc1d41ec3cce (patch)
treeabc7d41c12f1495b1208fa4449cb2508c92c5e85 /deps/v8/src/heap/heap-write-barrier.h
parent089d654dd85f8e548597329f60a41d6029260caa (diff)
downloadnode-new-a1d639ba5de4ff34e34fb575fbb6cc1d41ec3cce.tar.gz
deps: update V8 to 8.6.395
PR-URL: https://github.com/nodejs/node/pull/35415 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Myles Borins <myles.borins@gmail.com>
Diffstat (limited to 'deps/v8/src/heap/heap-write-barrier.h')
-rw-r--r--deps/v8/src/heap/heap-write-barrier.h42
1 files changed, 29 insertions, 13 deletions
diff --git a/deps/v8/src/heap/heap-write-barrier.h b/deps/v8/src/heap/heap-write-barrier.h
index 14cd51a0bb..d56757b538 100644
--- a/deps/v8/src/heap/heap-write-barrier.h
+++ b/deps/v8/src/heap/heap-write-barrier.h
@@ -6,6 +6,7 @@
#define V8_HEAP_HEAP_WRITE_BARRIER_H_
#include "include/v8-internal.h"
+#include "src/base/optional.h"
#include "src/common/globals.h"
namespace v8 {
@@ -13,10 +14,14 @@ namespace internal {
class ArrayBufferExtension;
class Code;
+class DescriptorArray;
+class EphemeronHashTable;
class FixedArray;
class Heap;
+class JSArrayBuffer;
+class Map;
+class MarkCompactCollector;
class RelocInfo;
-class EphemeronHashTable;
// Note: In general it is preferred to use the macros defined in
// object-macros.h.
@@ -35,20 +40,31 @@ void GenerationalEphemeronKeyBarrier(EphemeronHashTable table, ObjectSlot slot,
Object value);
void GenerationalBarrierForCode(Code host, RelocInfo* rinfo, HeapObject object);
-// Marking write barrier.
-void MarkingBarrier(HeapObject object, ObjectSlot slot, Object value);
-void MarkingBarrier(HeapObject object, ObjectSlot slot, HeapObject value);
-void MarkingBarrier(HeapObject object, MaybeObjectSlot slot, MaybeObject value);
-void MarkingBarrierForCode(Code host, RelocInfo* rinfo, HeapObject object);
-
-void MarkingBarrierForArrayBufferExtension(HeapObject object,
- ArrayBufferExtension* extension);
+inline bool IsReadOnlyHeapObject(HeapObject object);
-void MarkingBarrierForDescriptorArray(Heap* heap, HeapObject host,
- HeapObject descriptor_array,
- int number_of_own_descriptors);
+class V8_EXPORT_PRIVATE WriteBarrier {
+ public:
+ static inline void Marking(HeapObject host, ObjectSlot, Object value);
+ static inline void Marking(HeapObject host, HeapObjectSlot, HeapObject value);
+ static inline void Marking(HeapObject host, MaybeObjectSlot,
+ MaybeObject value);
+ static inline void Marking(Code host, RelocInfo*, HeapObject value);
+ static inline void Marking(JSArrayBuffer host, ArrayBufferExtension*);
+ static inline void Marking(Map host, DescriptorArray,
+ int number_of_own_descriptors);
+ // It is invoked from generated code and has to take raw addresses.
+ static int MarkingFromCode(Address raw_host, Address raw_slot);
-inline bool IsReadOnlyHeapObject(HeapObject object);
+ private:
+ static void MarkingSlow(Heap* heap, HeapObject host, HeapObjectSlot,
+ HeapObject value);
+ static void MarkingSlow(Heap* heap, Code host, RelocInfo*, HeapObject value);
+ static void MarkingSlow(Heap* heap, JSArrayBuffer host,
+ ArrayBufferExtension*);
+ static void MarkingSlow(Heap* heap, Map host, DescriptorArray,
+ int number_of_own_descriptors);
+ static inline base::Optional<Heap*> GetHeapIfMarking(HeapObject object);
+};
} // namespace internal
} // namespace v8