V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
heap-write-barrier.h
1 // Copyright 2018 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_HEAP_HEAP_WRITE_BARRIER_H_
6 #define V8_HEAP_HEAP_WRITE_BARRIER_H_
7 
8 #include "include/v8-internal.h"
9 
10 namespace v8 {
11 namespace internal {
12 
13 class Code;
14 class FixedArray;
15 class Heap;
16 class HeapObject;
17 class HeapObjectPtr;
18 class MaybeObject;
19 class MaybeObjectSlot;
20 class Object;
21 class ObjectSlot;
22 class RelocInfo;
23 
24 // Note: In general it is preferred to use the macros defined in
25 // object-macros.h.
26 
27 // Write barrier for FixedArray elements.
28 #define FIXED_ARRAY_ELEMENTS_WRITE_BARRIER(heap, array, start, length) \
29  do { \
30  GenerationalBarrierForElements(heap, array, start, length); \
31  MarkingBarrierForElements(heap, array); \
32  } while (false)
33 
34 // Combined write barriers.
35 void WriteBarrierForCode(Code host, RelocInfo* rinfo, Object* value);
36 void WriteBarrierForCode(Code host);
37 
38 // Generational write barrier.
39 void GenerationalBarrier(HeapObject* object, ObjectSlot slot, Object* value);
40 void GenerationalBarrier(HeapObject* object, MaybeObjectSlot slot,
41  MaybeObject value);
42 // This takes a HeapObjectPtr* (as opposed to a plain HeapObjectPtr)
43 // to keep the WRITE_BARRIER macro syntax-compatible to the HeapObject*
44 // version above.
45 // TODO(3770): This should probably take a HeapObjectPtr eventually.
46 void GenerationalBarrier(HeapObjectPtr* object, ObjectSlot slot, Object* value);
47 void GenerationalBarrier(HeapObjectPtr* object, MaybeObjectSlot slot,
48  MaybeObject value);
49 void GenerationalBarrierForElements(Heap* heap, FixedArray array, int offset,
50  int length);
51 void GenerationalBarrierForCode(Code host, RelocInfo* rinfo,
52  HeapObject* object);
53 
54 // Marking write barrier.
55 void MarkingBarrier(HeapObject* object, ObjectSlot slot, Object* value);
56 void MarkingBarrier(HeapObject* object, MaybeObjectSlot slot,
57  MaybeObject value);
58 // This takes a HeapObjectPtr* (as opposed to a plain HeapObjectPtr)
59 // to keep the WRITE_BARRIER macro syntax-compatible to the HeapObject*
60 // version above.
61 // TODO(3770): This should probably take a HeapObjectPtr eventually.
62 void MarkingBarrier(HeapObjectPtr* object, ObjectSlot slot, Object* value);
63 void MarkingBarrier(HeapObjectPtr* object, MaybeObjectSlot slot,
64  MaybeObject value);
65 void MarkingBarrierForElements(Heap* heap, HeapObject* object);
66 void MarkingBarrierForCode(Code host, RelocInfo* rinfo, HeapObject* object);
67 
68 } // namespace internal
69 } // namespace v8
70 
71 #endif // V8_HEAP_HEAP_WRITE_BARRIER_H_
Definition: libplatform.h:13