summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/cp/cp-tree.def
blob: 70801fc9563c083ab811f836a171fbb1f35e1dd1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
/* This file contains the definitions and documentation for the
   additional tree codes used in the GNU C++ compiler (see tree.def
   for the standard codes).
   Copyright (C) 1987, 1988, 1990, 1993, 1997, 1998 Free Software Foundation, Inc.
   Hacked by Michael Tiemann (tiemann@cygnus.com)

This file is part of GNU CC.

GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING.  If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.  */

 
/* Reference to the contents of an offset
   (a value whose type is an OFFSET_TYPE).
   Operand 0 is the object within which the offset is taken.
   Operand 1 is the offset.  The language independent OFFSET_REF
   just won't work for us.  */
DEFTREECODE (OFFSET_REF, "offset_ref", 'r', 2)

/* A pointer-to-member constant.  For a pointer-to-member constant
   `X::Y' The PTRMEM_CST_CLASS is the RECORD_TYPE for `X' and the
   PTRMEM_CST_MEMBER is the _DECL for `Y'.  */
DEFTREECODE (PTRMEM_CST, "ptrmem_cst", 'c', 1)

/* For NEW_EXPR, operand 0 is the placement list.
   Operand 1 is the new-declarator.
   Operand 2 is the initializer.  */
DEFTREECODE (NEW_EXPR, "nw_expr", 'e', 3)
DEFTREECODE (VEC_NEW_EXPR, "vec_nw_expr", 'e', 3)

/* For DELETE_EXPR, operand 0 is the store to be destroyed.
   Operand 1 is the value to pass to the destroying function
   saying whether the store should be deallocated as well.  */
DEFTREECODE (DELETE_EXPR, "dl_expr", 'e', 2)
DEFTREECODE (VEC_DELETE_EXPR, "vec_dl_expr", 'e', 2)

/* Value is reference to particular overloaded class method.
   Operand 0 is the class name (an IDENTIFIER_NODE);
   operand 1 is the field (also an IDENTIFIER_NODE).
   The COMPLEXITY field holds the class level (usually 0).  */
DEFTREECODE (SCOPE_REF, "scope_ref", 'r', 2)

/* When composing an object with a member, this is the result.
   Operand 0 is the object.  Operand 1 is the member (usually
   a dereferenced pointer to member).  */
DEFTREECODE (MEMBER_REF, "member_ref", 'r', 2)

/* Type conversion operator in C++.  TREE_TYPE is type that this
   operator converts to.  Operand is expression to be converted.  */
DEFTREECODE (TYPE_EXPR, "type_expr", 'e', 1)

/* For AGGR_INIT_EXPR, operand 0 is function which performs initialization,
   operand 1 is argument list to initialization function,
   and operand 2 is the slot which was allocated for this expression.  */
DEFTREECODE (AGGR_INIT_EXPR, "aggr_init_expr", 'e', 3)

/* A throw expression.  operand 0 is the expression, if there was one,
   else it is NULL_TREE.  */
DEFTREECODE (THROW_EXPR, "throw_expr", 'e', 1)

/* Initialization of a vector, used in build_new.  Operand 0 is the target
   of the initialization, operand 1 is the initializer, and operand 2 is
   the number of elements.  */
DEFTREECODE (VEC_INIT_EXPR, "vec_init_expr", 'e', 3)

/* Template definition.  The following fields have the specified uses,
   although there are other macros in cp-tree.h that should be used for
   accessing this data.
        DECL_ARGUMENTS          template parm vector
        DECL_TEMPLATE_INFO      template text &c
	DECL_VINDEX		list of instantiations already produced;
				only done for functions so far
   For class template:
        DECL_INITIAL            associated templates (methods &c)
        DECL_RESULT             null
   For non-class templates:
	TREE_TYPE		type of object to be constructed
        DECL_RESULT             decl for object to be created
                                (e.g., FUNCTION_DECL with tmpl parms used)
 */
DEFTREECODE (TEMPLATE_DECL, "template_decl", 'd', 0)

/* Index into a template parameter list.  The TEMPLATE_PARM_IDX gives
   the index (from 0) of the parameter, while the TEMPLATE_PARM_LEVEL
   gives the level (from 1) of the parameter.

   Here's an example:
   
   template <class T> // Index 0, Level 1.
   struct S
   {
      template <class U, // Index 0, Level 2.
                class V> // Index 1, Level 2.
      void f();
   };  

   The DESCENDANTS will be a chain of TEMPLATE_PARM_INDEXs descended
   from this one.  The first descendant will have the same IDX, but
   its LEVEL will be one less.  The TREE_CHAIN field is used to chain
   together the descendants.  The TEMPLATE_PARM_DECL is the
   declaration of this parameter, either a TYPE_DECL or CONST_DECL.
   The TEMPLATE_PARM_ORIG_LEVEL is the LEVEL of the most distant
   parent, i.e., the LEVEL that the parameter originally had when it
   was declared.  For example, if we instantiate S<int>, we will have:

   struct S<int>
   {
     template <class U, // Index 0, Level 1, Orig Level 2
               class V> // Index 1, Level 1, Orig Level 2
     void f();
   };
  
   The LEVEL is the level of the parameter when we are worrying about
   the types of things; the ORIG_LEVEL is the level when we are
   worrying about instantiating things.  */
DEFTREECODE (TEMPLATE_PARM_INDEX, "template_parm_index", 'x', 
	     /* The addition of (sizeof(char*) - 1) in the next
		expression is to ensure against the case where
		sizeof(char*) does not evenly divide
		sizeof(HOST_WIDE_INT).  */
	     2 + ((3 * sizeof (HOST_WIDE_INT) + sizeof(char*) - 1)
		  / sizeof (char*)))

/* Index into a template parameter list.  This parameter must be a type.
   The TYPE_FIELDS value will be a TEMPLATE_PARM_INDEX.  */
DEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", 't', 0)

/* Index into a template parameter list.  This parameter must be a type.
   If it is used in signature of a template, TEMPLATE_INFO is NULL_TREE.
   Otherwise it is used to declare a type like TT<int>.
   The TYPE_FIELDS value will be a TEMPLATE_PARM_INDEX.  */
DEFTREECODE (TEMPLATE_TEMPLATE_PARM, "template_template_parm", 't', 0)

/* A type designated by `typename T::t'.  TYPE_CONTEXT is `T',
   TYPE_NAME is an IDENTIFIER_NODE for `t'.  If the type was named via
   template-id, TYPENAME_TYPE_FULLNAME will hold the TEMPLATE_ID_EXPR.
   If TREE_TYPE is present, this type was generated by the implicit
   typename extension, and the TREE_TYPE is a _TYPE from a baseclass
   of `T'.  */
DEFTREECODE (TYPENAME_TYPE, "typename_type", 't', 0)

/* A type designated by `__typeof (expr)'.  TYPE_FIELDS is the
   expression in question.  */
DEFTREECODE (TYPEOF_TYPE, "typeof_type", 't', 0)

/* A thunk is a stub function.

   Thunks are used to implement multiple inheritance:
   At run-time, such a thunk subtracts THUNK_DELTA (an int, not a tree)
   from the this pointer, and then jumps to DECL_INITIAL
   (which is an ADDR_EXPR whose operand is a FUNCTION_DECL).

   Other kinds of thunks may be defined later. */
DEFTREECODE (THUNK_DECL, "thunk_decl", 'd', 0)

/* A using declaration.  DECL_INITIAL contains the specified scope.  
   This is not an alias, but is later expanded into multiple aliases.  */
DEFTREECODE (USING_DECL, "using_decl", 'd', 0)

/* An un-parsed default argument.  Looks like an IDENTIFIER_NODE.  */
DEFTREECODE (DEFAULT_ARG, "default_arg", 'c', 2)

/* A template-id, like foo<int>.  The first operand is the template.
   The second is the TREE_LIST or TREE_VEC of explicitly specified
   arguments.  The template will be a FUNCTION_DECL, TEMPLATE_DECL, or
   an OVERLOAD.  If the template-id refers to a member template, the
   template may be an IDENTIFIER_NODE.  */
DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", 'e', 2)

/* An association between name and entity. Parameters are the scope
   and the (non-type) value.  TREE_TYPE indicates the type bound to
   the name. */
DEFTREECODE (CPLUS_BINDING, "binding", 'x', 2)

/* A list-like node for chaining overloading candidates. TREE_TYPE is 
   the original name, and the parameter is the FUNCTION_DECL.  */
DEFTREECODE (OVERLOAD, "overload", 'x', 1)

/* A generic wrapper for something not tree that we want to include in
   tree structure.  */
DEFTREECODE (WRAPPER, "wrapper", 'x', 1)

/* A node to remember a source position.  */
DEFTREECODE (SRCLOC, "srcloc", 'x', 2)

/* Used to represent deferred name lookup for dependent names while
   parsing a template declaration.  The first argument is an
   IDENTIFIER_NODE for the name in question.  The TREE_TYPE is
   unused.  */
DEFTREECODE (LOOKUP_EXPR, "lookup_expr", 'e', 1)

/* A whole bunch of tree codes for the initial, superficial parsing of
   templates.  */
DEFTREECODE (MODOP_EXPR, "modop_expr", 'e', 3)
DEFTREECODE (CAST_EXPR, "cast_expr", '1', 1)
DEFTREECODE (REINTERPRET_CAST_EXPR, "reinterpret_cast_expr", '1', 1)
DEFTREECODE (CONST_CAST_EXPR, "const_cast_expr", '1', 1)
DEFTREECODE (STATIC_CAST_EXPR, "static_cast_expr", '1', 1)
DEFTREECODE (DYNAMIC_CAST_EXPR, "dynamic_cast_expr", '1', 1)
DEFTREECODE (SIZEOF_EXPR, "sizeof_expr", '1', 1)
DEFTREECODE (ALIGNOF_EXPR, "alignof_expr", '1', 1)
DEFTREECODE (ARROW_EXPR, "arrow_expr", 'e', 1)
DEFTREECODE (DOTSTAR_EXPR, "dotstar_expr", 'e', 2)
DEFTREECODE (TYPEID_EXPR, "typeid_expr", 'e', 1)

DEFTREECODE (EXPR_STMT, "expr_stmt", 'e', 1)
DEFTREECODE (COMPOUND_STMT, "compound_stmt", 'e', 1)
DEFTREECODE (DECL_STMT, "decl_stmt", 'e', 3)
DEFTREECODE (IF_STMT, "if_stmt", 'e', 3)
DEFTREECODE (FOR_STMT, "for_stmt", 'e', 4)
DEFTREECODE (WHILE_STMT, "while_stmt", 'e', 2)
DEFTREECODE (DO_STMT, "do_stmt", 'e', 2)
DEFTREECODE (RETURN_STMT, "return_stmt", 'e', 1)
DEFTREECODE (BREAK_STMT, "break_stmt", 'e', 0)
DEFTREECODE (CONTINUE_STMT, "continue_stmt", 'e', 0)
DEFTREECODE (SWITCH_STMT, "switch_stmt", 'e', 2)
DEFTREECODE (GOTO_STMT, "goto_stmt", 'e', 1)
DEFTREECODE (ASM_STMT, "asm_stmt", 'e', 5)

DEFTREECODE (CTOR_INITIALIZER, "ctor_initializer", 'e', 2)
DEFTREECODE (CASE_LABEL, "case_label", 'e', 2)
DEFTREECODE (RETURN_INIT, "return_init", 'e', 2)
DEFTREECODE (TRY_BLOCK, "try_stmt", 'e', 2)
DEFTREECODE (HANDLER, "catch_stmt", 'e', 2)

DEFTREECODE (TAG_DEFN, "tag_defn", 'e', 0)

/* And some codes for expressing conversions for overload resolution.  */

DEFTREECODE (IDENTITY_CONV, "identity_conv", 'e', 1)
DEFTREECODE (LVALUE_CONV, "lvalue_conv", 'e', 1)
DEFTREECODE (QUAL_CONV, "qual_conv", 'e', 1)
DEFTREECODE (STD_CONV, "std_conv", 'e', 1)
DEFTREECODE (PTR_CONV, "ptr_conv", 'e', 1)
DEFTREECODE (PMEM_CONV, "pmem_conv", 'e', 1)
DEFTREECODE (BASE_CONV, "base_conv", 'e', 1)
DEFTREECODE (REF_BIND, "ref_bind", 'e', 1)
DEFTREECODE (USER_CONV, "user_conv", 'e', 2)
DEFTREECODE (AMBIG_CONV, "ambig_conv", 'e', 1)
DEFTREECODE (RVALUE_CONV, "rvalue_conv", 'e', 1)

/*
Local variables:
mode:c
End:
*/
OpenPOWER on IntegriCloud