]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/streamer-hooks.h
c++: Handle multiple aggregate overloads [PR95319].
[thirdparty/gcc.git] / gcc / streamer-hooks.h
CommitLineData
f0efc7aa
DN
1/* Streamer hooks. Support for adding streamer-specific callbacks to
2 generic streaming routines.
3
8d9254fc 4 Copyright (C) 2011-2020 Free Software Foundation, Inc.
f0efc7aa
DN
5 Contributed by Diego Novillo <dnovillo@google.com>
6
7This file is part of GCC.
8
9GCC is free software; you can redistribute it and/or modify it under
10the terms of the GNU General Public License as published by the Free
11Software Foundation; either version 3, or (at your option) any later
12version.
13
14GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15WARRANTY; without even the implied warranty of MERCHANTABILITY or
16FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17for more details.
18
19You should have received a copy of the GNU General Public License
20along with GCC; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
22
23#ifndef GCC_STREAMER_HOOKS_H
24#define GCC_STREAMER_HOOKS_H
25
f0efc7aa
DN
26/* Forward declarations to avoid including unnecessary headers. */
27struct output_block;
99b1c316
MS
28class lto_input_block;
29class data_in;
f0efc7aa
DN
30
31/* Streamer hooks. These functions do additional processing as
32 needed by the module. There are two types of callbacks, those that
33 replace the default behavior and those that supplement it.
34
35 Hooks marked [REQ] are required to be set. Those marked [OPT] may
36 be NULL, if the streamer does not need to implement them. */
37struct streamer_hooks {
b9393656
DN
38 /* [REQ] Called by every tree streaming routine that needs to write
39 a tree node. The arguments are: output_block where to write the
40 node, the tree node to write and a boolean flag that should be true
41 if the caller wants to write a reference to the tree, instead of the
7e54c608
RG
42 tree itself. The second boolean parameter specifies this for
43 the tree itself, the first for all siblings that are streamed.
44 The referencing mechanism is up to each streamer to implement. */
45 void (*write_tree) (struct output_block *, tree, bool, bool);
f0efc7aa 46
b9393656
DN
47 /* [REQ] Called by every tree streaming routine that needs to read
48 a tree node. It takes two arguments: an lto_input_block pointing
49 to the buffer where to read from and a data_in instance with tables
50 and descriptors needed by the unpickling routines. It returns the
51 tree instantiated from the stream. */
99b1c316 52 tree (*read_tree) (class lto_input_block *, class data_in *);
a22286c3 53
7cb7d208 54 /* [REQ] Called by every streaming routine that needs to read a location. */
99b1c316 55 void (*input_location) (location_t *, struct bitpack_d *, class data_in *);
7cb7d208
RB
56
57 /* [REQ] Called by every streaming routine that needs to write a location. */
58 void (*output_location) (struct output_block *, struct bitpack_d *, location_t);
f0efc7aa
DN
59};
60
b9393656 61#define stream_write_tree(OB, EXPR, REF_P) \
c3284718 62 streamer_hooks.write_tree (OB, EXPR, REF_P, REF_P)
7e54c608
RG
63
64#define stream_write_tree_shallow_non_ref(OB, EXPR, REF_P) \
c3284718 65 streamer_hooks.write_tree (OB, EXPR, REF_P, false)
b9393656
DN
66
67#define stream_read_tree(IB, DATA_IN) \
c3284718 68 streamer_hooks.read_tree (IB, DATA_IN)
b9393656 69
eaeec5ec
JH
70#define stream_input_location(LOCPTR, BP, DATA_IN) \
71 streamer_hooks.input_location (LOCPTR, BP, DATA_IN)
7cb7d208
RB
72
73#define stream_output_location(OB, BP, LOC) \
c3284718 74 streamer_hooks.output_location (OB, BP, LOC)
7cb7d208 75
f0efc7aa
DN
76/* Streamer hooks. */
77extern struct streamer_hooks streamer_hooks;
78
79/* In streamer-hooks.c. */
80void streamer_hooks_init (void);
81
82#endif /* GCC_STREAMER_HOOKS_H */