v8
10.1.124 (node 18.2.0)
V8 is Google's open source JavaScript engine
Main Page
Namespaces
Namespace List
Namespace Members
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
Functions
a
c
d
e
f
g
i
j
m
n
o
p
r
s
t
u
v
Variables
d
f
g
i
k
m
t
Typedefs
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
r
s
t
u
v
w
Enumerations
a
c
e
g
i
j
k
l
m
n
p
r
s
t
w
Enumerator
a
b
c
d
e
g
i
j
k
n
o
p
r
s
Data Structures
Data Structures
Data Structure Index
Class Hierarchy
Data Fields
All
:
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
~
Functions
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
~
Variables
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
Typedefs
a
b
c
d
e
f
g
i
m
n
p
r
s
t
u
w
Enumerations
a
b
c
d
e
f
g
m
n
o
p
s
t
u
v
w
Enumerator
b
c
d
e
h
j
k
n
o
p
r
s
t
u
w
Related Functions
:
b
c
d
e
f
g
h
i
j
l
m
n
o
p
r
s
t
u
v
w
Files
File List
Globals
All
a
c
d
m
p
s
t
v
Macros
a
c
d
m
p
s
t
v
Examples
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
prefinalizer.h
Go to the documentation of this file.
1
// Copyright 2020 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
INCLUDE_CPPGC_PREFINALIZER_H_
6
#
define
INCLUDE_CPPGC_PREFINALIZER_H_
7
8
#
include
"cppgc/internal/compiler-specific.h"
9
#
include
"cppgc/liveness-broker.h"
10
11
namespace
cppgc
{
12
13
namespace
internal
{
14
15
class
V8_EXPORT
PrefinalizerRegistration
final
{
16
public
:
17
using
Callback =
void
(*)(
void
*);
18
19
PrefinalizerRegistration
(
void
*,
const
void
*, Callback);
20
21
void
*
operator
new
(size_t,
void
* location) =
delete
;
22
void
*
operator
new
(size_t) =
delete
;
23
};
24
25
}
// namespace internal
26
27
/**
28
* Macro must be used in the private section of `Class` and registers a
29
* prefinalization callback `void Class::PreFinalizer()`. The callback is
30
* invoked on garbage collection after the collector has found an object to be
31
* dead.
32
*
33
* Callback properties:
34
* - The callback is invoked before a possible destructor for the corresponding
35
* object.
36
* - The callback may access the whole object graph, irrespective of whether
37
* objects are considered dead or alive.
38
* - The callback is invoked on the same thread as the object was created on.
39
*
40
* Example:
41
* \code
42
* class WithPrefinalizer : public GarbageCollected<WithPrefinalizer> {
43
* CPPGC_USING_PRE_FINALIZER(WithPrefinalizer, Dispose);
44
*
45
* public:
46
* void Trace(Visitor*) const {}
47
* void Dispose() { prefinalizer_called = true; }
48
* ~WithPrefinalizer() {
49
* // prefinalizer_called == true
50
* }
51
* private:
52
* bool prefinalizer_called = false;
53
* };
54
* \endcode
55
*/
56
#
define
CPPGC_USING_PRE_FINALIZER
(
Class
,
PreFinalizer
)
57
public
:
58
static
void
InvokePreFinalizer
(
void
*
object
)
{
59
static_assert
(
cppgc
::
IsGarbageCollectedOrMixinTypeV
<
Class
>
,
60
"Only garbage collected objects can have prefinalizers"
)
;
61
Class
*
self
=
static_cast
<
Class
*
>
(
object
)
;
62
self
->
PreFinalizer
(
)
;
63
}
64
65
private
:
66
CPPGC_NO_UNIQUE_ADDRESS
cppgc
::
internal
::
PrefinalizerRegistration
67
prefinalizer_dummy_
{
this
,
68
cppgc
::
TraceTrait
<
Class
>
::
GetTraceDescriptor
(
this
)
69
.
base_object_payload
,
70
Class
::
InvokePreFinalizer
}
;
71
static_assert
(
true
,
"Force semicolon."
)
72
73
}
// namespace cppgc
74
75
#
endif
// INCLUDE_CPPGC_PREFINALIZER_H_
include
cppgc
prefinalizer.h
Generated on Tue May 24 2022 19:28:55 for v8 by
1.9.1