annotate gcc/cp/cp-tree.def @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* This file contains the definitions and documentation for the
kono
parents:
diff changeset
2 additional tree codes used in the GNU C++ compiler (see tree.def
kono
parents:
diff changeset
3 for the standard codes).
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
4 Copyright (C) 1987-2018 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
5 Hacked by Michael Tiemann (tiemann@cygnus.com)
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 This file is part of GCC.
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 GCC is free software; you can redistribute it and/or modify
kono
parents:
diff changeset
10 it under the terms of the GNU General Public License as published by
kono
parents:
diff changeset
11 the Free Software Foundation; either version 3, or (at your option)
kono
parents:
diff changeset
12 any later version.
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 GCC is distributed in the hope that it will be useful,
kono
parents:
diff changeset
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
kono
parents:
diff changeset
17 GNU General Public License for more details.
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
20 along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
21 <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 /* An OFFSET_REF is used in two situations:
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 1. An expression of the form `A::m' where `A' is a class and `m' is
kono
parents:
diff changeset
27 a non-static member. In this case, operand 0 will be a TYPE
kono
parents:
diff changeset
28 (corresponding to `A') and operand 1 will be a FIELD_DECL,
kono
parents:
diff changeset
29 BASELINK, or TEMPLATE_ID_EXPR (corresponding to `m').
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 The expression is a pointer-to-member if its address is taken,
kono
parents:
diff changeset
32 but simply denotes a member of the object if its address is not
kono
parents:
diff changeset
33 taken.
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 This form is only used during the parsing phase; once semantic
kono
parents:
diff changeset
36 analysis has taken place they are eliminated.
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 2. An expression of the form `x.*p'. In this case, operand 0 will
kono
parents:
diff changeset
39 be an expression corresponding to `x' and operand 1 will be an
kono
parents:
diff changeset
40 expression with pointer-to-member type. */
kono
parents:
diff changeset
41 DEFTREECODE (OFFSET_REF, "offset_ref", tcc_reference, 2)
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 /* A pointer-to-member constant. For a pointer-to-member constant
kono
parents:
diff changeset
44 `X::Y' The PTRMEM_CST_CLASS is the RECORD_TYPE for `X' and the
kono
parents:
diff changeset
45 PTRMEM_CST_MEMBER is the _DECL for `Y'. */
kono
parents:
diff changeset
46 DEFTREECODE (PTRMEM_CST, "ptrmem_cst", tcc_constant, 0)
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48 /* For NEW_EXPR, operand 0 is the placement list.
kono
parents:
diff changeset
49 Operand 1 is the new-declarator.
kono
parents:
diff changeset
50 Operand 2 is the number of elements in the array.
kono
parents:
diff changeset
51 Operand 3 is the initializer. */
kono
parents:
diff changeset
52 DEFTREECODE (NEW_EXPR, "nw_expr", tcc_expression, 4)
kono
parents:
diff changeset
53 DEFTREECODE (VEC_NEW_EXPR, "vec_nw_expr", tcc_expression, 3)
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 /* For DELETE_EXPR, operand 0 is the store to be destroyed.
kono
parents:
diff changeset
56 Operand 1 is the value to pass to the destroying function
kono
parents:
diff changeset
57 saying whether the store should be deallocated as well. */
kono
parents:
diff changeset
58 DEFTREECODE (DELETE_EXPR, "dl_expr", tcc_expression, 2)
kono
parents:
diff changeset
59 DEFTREECODE (VEC_DELETE_EXPR, "vec_dl_expr", tcc_expression, 2)
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 /* Value is reference to particular overloaded class method.
kono
parents:
diff changeset
62 Operand 0 is the class, operand 1 is the field
kono
parents:
diff changeset
63 The COMPLEXITY field holds the class level (usually 0). */
kono
parents:
diff changeset
64 DEFTREECODE (SCOPE_REF, "scope_ref", tcc_reference, 2)
kono
parents:
diff changeset
65
kono
parents:
diff changeset
66 /* When composing an object with a member, this is the result.
kono
parents:
diff changeset
67 Operand 0 is the object. Operand 1 is the member (usually
kono
parents:
diff changeset
68 a dereferenced pointer to member). */
kono
parents:
diff changeset
69 DEFTREECODE (MEMBER_REF, "member_ref", tcc_reference, 2)
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 /* Type conversion operator in C++. TREE_TYPE is type that this
kono
parents:
diff changeset
72 operator converts to. Operand is expression to be converted. */
kono
parents:
diff changeset
73 DEFTREECODE (TYPE_EXPR, "type_expr", tcc_expression, 1)
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 /* AGGR_INIT_EXPRs have a variably-sized representation similar to
kono
parents:
diff changeset
76 that of CALL_EXPRs. Operand 0 is an INTEGER_CST node containing the
kono
parents:
diff changeset
77 operand count, operand 1 is the function which performs initialization,
kono
parents:
diff changeset
78 operand 2 is the slot which was allocated for this expression, and
kono
parents:
diff changeset
79 the remaining operands are the arguments to the initialization function. */
kono
parents:
diff changeset
80 DEFTREECODE (AGGR_INIT_EXPR, "aggr_init_expr", tcc_vl_exp, 3)
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 /* Initialization of an array from another array, expressed at a high level
kono
parents:
diff changeset
83 so that it works with TARGET_EXPR. Operand 0 is the target, operand 1
kono
parents:
diff changeset
84 is the initializer. */
kono
parents:
diff changeset
85 DEFTREECODE (VEC_INIT_EXPR, "vec_init_expr", tcc_expression, 2)
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87 /* A throw expression. operand 0 is the expression, if there was one,
kono
parents:
diff changeset
88 else it is NULL_TREE. */
kono
parents:
diff changeset
89 DEFTREECODE (THROW_EXPR, "throw_expr", tcc_expression, 1)
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 /* An empty class object. The TREE_TYPE gives the class type. We use
kono
parents:
diff changeset
92 these to avoid actually creating instances of the empty classes. */
kono
parents:
diff changeset
93 DEFTREECODE (EMPTY_CLASS_EXPR, "empty_class_expr", tcc_expression, 0)
kono
parents:
diff changeset
94
kono
parents:
diff changeset
95 /* A reference to a member function or member functions from a base
kono
parents:
diff changeset
96 class. BASELINK_FUNCTIONS gives the FUNCTION_DECL,
kono
parents:
diff changeset
97 TEMPLATE_DECL, OVERLOAD, or TEMPLATE_ID_EXPR corresponding to the
kono
parents:
diff changeset
98 functions. BASELINK_BINFO gives the base from which the functions
kono
parents:
diff changeset
99 come, i.e., the base to which the `this' pointer must be converted
kono
parents:
diff changeset
100 before the functions are called. BASELINK_ACCESS_BINFO gives the
kono
parents:
diff changeset
101 base used to name the functions.
kono
parents:
diff changeset
102
kono
parents:
diff changeset
103 A BASELINK is an expression; the TREE_TYPE of the BASELINK gives
kono
parents:
diff changeset
104 the type of the expression. This type is either a FUNCTION_TYPE,
kono
parents:
diff changeset
105 METHOD_TYPE, or `unknown_type_node' indicating that the function is
kono
parents:
diff changeset
106 overloaded. */
kono
parents:
diff changeset
107 DEFTREECODE (BASELINK, "baselink", tcc_exceptional, 0)
kono
parents:
diff changeset
108
kono
parents:
diff changeset
109 /* Template definition. The following fields have the specified uses,
kono
parents:
diff changeset
110 although there are other macros in cp-tree.h that should be used for
kono
parents:
diff changeset
111 accessing this data.
kono
parents:
diff changeset
112 DECL_ARGUMENTS template parm vector
kono
parents:
diff changeset
113 DECL_TEMPLATE_INFO template text &c
kono
parents:
diff changeset
114 DECL_VINDEX list of instantiations already produced;
kono
parents:
diff changeset
115 only done for functions so far
kono
parents:
diff changeset
116 For class template:
kono
parents:
diff changeset
117 DECL_INITIAL associated templates (methods &c)
kono
parents:
diff changeset
118 DECL_TEMPLATE_RESULT null
kono
parents:
diff changeset
119 For non-class templates:
kono
parents:
diff changeset
120 TREE_TYPE type of object to be constructed
kono
parents:
diff changeset
121 DECL_TEMPLATE_RESULT decl for object to be created
kono
parents:
diff changeset
122 (e.g., FUNCTION_DECL with tmpl parms used)
kono
parents:
diff changeset
123 */
kono
parents:
diff changeset
124 DEFTREECODE (TEMPLATE_DECL, "template_decl", tcc_declaration, 0)
kono
parents:
diff changeset
125
kono
parents:
diff changeset
126 /* Index into a template parameter list. The TEMPLATE_PARM_IDX gives
kono
parents:
diff changeset
127 the index (from 0) of the parameter, while the TEMPLATE_PARM_LEVEL
kono
parents:
diff changeset
128 gives the level (from 1) of the parameter.
kono
parents:
diff changeset
129
kono
parents:
diff changeset
130 Here's an example:
kono
parents:
diff changeset
131
kono
parents:
diff changeset
132 template <class T> // Index 0, Level 1.
kono
parents:
diff changeset
133 struct S
kono
parents:
diff changeset
134 {
kono
parents:
diff changeset
135 template <class U, // Index 0, Level 2.
kono
parents:
diff changeset
136 class V> // Index 1, Level 2.
kono
parents:
diff changeset
137 void f();
kono
parents:
diff changeset
138 };
kono
parents:
diff changeset
139
kono
parents:
diff changeset
140 The DESCENDANTS will be a chain of TEMPLATE_PARM_INDEXs descended
kono
parents:
diff changeset
141 from this one. The first descendant will have the same IDX, but
kono
parents:
diff changeset
142 its LEVEL will be one less. The TREE_CHAIN field is used to chain
kono
parents:
diff changeset
143 together the descendants. The TEMPLATE_PARM_DECL is the
kono
parents:
diff changeset
144 declaration of this parameter, either a TYPE_DECL or CONST_DECL.
kono
parents:
diff changeset
145 The TEMPLATE_PARM_ORIG_LEVEL is the LEVEL of the most distant
kono
parents:
diff changeset
146 parent, i.e., the LEVEL that the parameter originally had when it
kono
parents:
diff changeset
147 was declared. For example, if we instantiate S<int>, we will have:
kono
parents:
diff changeset
148
kono
parents:
diff changeset
149 struct S<int>
kono
parents:
diff changeset
150 {
kono
parents:
diff changeset
151 template <class U, // Index 0, Level 1, Orig Level 2
kono
parents:
diff changeset
152 class V> // Index 1, Level 1, Orig Level 2
kono
parents:
diff changeset
153 void f();
kono
parents:
diff changeset
154 };
kono
parents:
diff changeset
155
kono
parents:
diff changeset
156 The LEVEL is the level of the parameter when we are worrying about
kono
parents:
diff changeset
157 the types of things; the ORIG_LEVEL is the level when we are
kono
parents:
diff changeset
158 worrying about instantiating things. */
kono
parents:
diff changeset
159 DEFTREECODE (TEMPLATE_PARM_INDEX, "template_parm_index", tcc_exceptional, 0)
kono
parents:
diff changeset
160
kono
parents:
diff changeset
161 /* Index into a template parameter list for template template parameters.
kono
parents:
diff changeset
162 This parameter must be a type. The TYPE_FIELDS value will be a
kono
parents:
diff changeset
163 TEMPLATE_PARM_INDEX.
kono
parents:
diff changeset
164
kono
parents:
diff changeset
165 It is used without template arguments like TT in C<TT>,
kono
parents:
diff changeset
166 TYPE_NAME is a TEMPLATE_DECL. */
kono
parents:
diff changeset
167 DEFTREECODE (TEMPLATE_TEMPLATE_PARM, "template_template_parm", tcc_type, 0)
kono
parents:
diff changeset
168
kono
parents:
diff changeset
169 /* The ordering of the following codes is optimized for the checking
kono
parents:
diff changeset
170 macros in tree.h. Changing the order will degrade the speed of the
kono
parents:
diff changeset
171 compiler. TEMPLATE_TYPE_PARM, TYPENAME_TYPE, TYPEOF_TYPE,
kono
parents:
diff changeset
172 BOUND_TEMPLATE_TEMPLATE_PARM. */
kono
parents:
diff changeset
173
kono
parents:
diff changeset
174 /* Index into a template parameter list. This parameter must be a type.
kono
parents:
diff changeset
175 The type.values field will be a TEMPLATE_PARM_INDEX. */
kono
parents:
diff changeset
176 DEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", tcc_type, 0)
kono
parents:
diff changeset
177
kono
parents:
diff changeset
178 /* A type designated by `typename T::t'. TYPE_CONTEXT is `T',
kono
parents:
diff changeset
179 TYPE_NAME is an IDENTIFIER_NODE for `t'. If the type was named via
kono
parents:
diff changeset
180 template-id, TYPENAME_TYPE_FULLNAME will hold the TEMPLATE_ID_EXPR.
kono
parents:
diff changeset
181 TREE_TYPE is always NULL. */
kono
parents:
diff changeset
182 DEFTREECODE (TYPENAME_TYPE, "typename_type", tcc_type, 0)
kono
parents:
diff changeset
183
kono
parents:
diff changeset
184 /* A type designated by `__typeof (expr)'. TYPEOF_TYPE_EXPR is the
kono
parents:
diff changeset
185 expression in question. */
kono
parents:
diff changeset
186 DEFTREECODE (TYPEOF_TYPE, "typeof_type", tcc_type, 0)
kono
parents:
diff changeset
187
kono
parents:
diff changeset
188 /* Like TEMPLATE_TEMPLATE_PARM it is used with bound template arguments
kono
parents:
diff changeset
189 like TT<int>.
kono
parents:
diff changeset
190 In this case, TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO contains the
kono
parents:
diff changeset
191 template name and its bound arguments. TYPE_NAME is a TYPE_DECL. */
kono
parents:
diff changeset
192 DEFTREECODE (BOUND_TEMPLATE_TEMPLATE_PARM, "bound_template_template_parm",
kono
parents:
diff changeset
193 tcc_type, 0)
kono
parents:
diff changeset
194
kono
parents:
diff changeset
195 /* For template template argument of the form `T::template C'.
kono
parents:
diff changeset
196 TYPE_CONTEXT is `T', the template parameter dependent object.
kono
parents:
diff changeset
197 TYPE_NAME is an IDENTIFIER_NODE for `C', the member class template. */
kono
parents:
diff changeset
198 DEFTREECODE (UNBOUND_CLASS_TEMPLATE, "unbound_class_template", tcc_type, 0)
kono
parents:
diff changeset
199
kono
parents:
diff changeset
200 /* A using declaration. USING_DECL_SCOPE contains the specified
kono
parents:
diff changeset
201 scope. In a variadic using-declaration, this is a TYPE_PACK_EXPANSION.
kono
parents:
diff changeset
202 In a member using decl, unless DECL_DEPENDENT_P is true,
kono
parents:
diff changeset
203 USING_DECL_DECLS contains the _DECL or OVERLOAD so named. This is
kono
parents:
diff changeset
204 not an alias, but is later expanded into multiple aliases. */
kono
parents:
diff changeset
205 DEFTREECODE (USING_DECL, "using_decl", tcc_declaration, 0)
kono
parents:
diff changeset
206
kono
parents:
diff changeset
207 /* A using directive. The operand is USING_STMT_NAMESPACE. */
kono
parents:
diff changeset
208 DEFTREECODE (USING_STMT, "using_stmt", tcc_statement, 1)
kono
parents:
diff changeset
209
kono
parents:
diff changeset
210 /* An un-parsed default argument. Holds a vector of input tokens and
kono
parents:
diff changeset
211 a vector of places where the argument was instantiated before
kono
parents:
diff changeset
212 parsing had occurred. */
kono
parents:
diff changeset
213 DEFTREECODE (DEFAULT_ARG, "default_arg", tcc_exceptional, 0)
kono
parents:
diff changeset
214
kono
parents:
diff changeset
215 /* An uninstantiated/unevaluated noexcept-specification. For the
kono
parents:
diff changeset
216 uninstantiated case, DEFERRED_NOEXCEPT_PATTERN is the pattern from the
kono
parents:
diff changeset
217 template, and DEFERRED_NOEXCEPT_ARGS are the template arguments to
kono
parents:
diff changeset
218 substitute into the pattern when needed. For the unevaluated case,
kono
parents:
diff changeset
219 those slots are NULL_TREE and we use get_defaulted_eh_spec to find
kono
parents:
diff changeset
220 the exception-specification. */
kono
parents:
diff changeset
221 DEFTREECODE (DEFERRED_NOEXCEPT, "deferred_noexcept", tcc_exceptional, 0)
kono
parents:
diff changeset
222
kono
parents:
diff changeset
223 /* A template-id, like foo<int>. The first operand is the template.
kono
parents:
diff changeset
224 The second is NULL if there are no explicit arguments, or a
kono
parents:
diff changeset
225 TREE_VEC of arguments. The template will be a FUNCTION_DECL,
kono
parents:
diff changeset
226 TEMPLATE_DECL, or an OVERLOAD. If the template-id refers to a
kono
parents:
diff changeset
227 member template, the template may be an IDENTIFIER_NODE. */
kono
parents:
diff changeset
228 DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", tcc_expression, 2)
kono
parents:
diff changeset
229
kono
parents:
diff changeset
230 /* One of a set of overloaded functions. */
kono
parents:
diff changeset
231 DEFTREECODE (OVERLOAD, "overload", tcc_exceptional, 0)
kono
parents:
diff changeset
232
kono
parents:
diff changeset
233 /* A pseudo-destructor, of the form "OBJECT.~DESTRUCTOR" or
kono
parents:
diff changeset
234 "OBJECT.SCOPE::~DESTRUCTOR. The first operand is the OBJECT. The
kono
parents:
diff changeset
235 second operand (if non-NULL) is the SCOPE. The third operand is
kono
parents:
diff changeset
236 the TYPE node corresponding to the DESTRUCTOR. The type of the
kono
parents:
diff changeset
237 first operand will always be a scalar type.
kono
parents:
diff changeset
238
kono
parents:
diff changeset
239 The type of a PSEUDO_DTOR_EXPR is always "void", even though it can
kono
parents:
diff changeset
240 be used as if it were a zero-argument function. We handle the
kono
parents:
diff changeset
241 function-call case specially, and giving it "void" type prevents it
kono
parents:
diff changeset
242 being used in expressions in ways that are not permitted. */
kono
parents:
diff changeset
243 DEFTREECODE (PSEUDO_DTOR_EXPR, "pseudo_dtor_expr", tcc_expression, 3)
kono
parents:
diff changeset
244
kono
parents:
diff changeset
245 /* A whole bunch of tree codes for the initial, superficial parsing of
kono
parents:
diff changeset
246 templates. */
kono
parents:
diff changeset
247 DEFTREECODE (MODOP_EXPR, "modop_expr", tcc_expression, 3)
kono
parents:
diff changeset
248 DEFTREECODE (CAST_EXPR, "cast_expr", tcc_unary, 1)
kono
parents:
diff changeset
249 DEFTREECODE (REINTERPRET_CAST_EXPR, "reinterpret_cast_expr", tcc_unary, 1)
kono
parents:
diff changeset
250 DEFTREECODE (CONST_CAST_EXPR, "const_cast_expr", tcc_unary, 1)
kono
parents:
diff changeset
251 DEFTREECODE (STATIC_CAST_EXPR, "static_cast_expr", tcc_unary, 1)
kono
parents:
diff changeset
252 DEFTREECODE (DYNAMIC_CAST_EXPR, "dynamic_cast_expr", tcc_unary, 1)
kono
parents:
diff changeset
253 DEFTREECODE (IMPLICIT_CONV_EXPR, "implicit_conv_expr", tcc_unary, 1)
kono
parents:
diff changeset
254 DEFTREECODE (DOTSTAR_EXPR, "dotstar_expr", tcc_expression, 2)
kono
parents:
diff changeset
255 DEFTREECODE (TYPEID_EXPR, "typeid_expr", tcc_expression, 1)
kono
parents:
diff changeset
256 DEFTREECODE (NOEXCEPT_EXPR, "noexcept_expr", tcc_unary, 1)
kono
parents:
diff changeset
257
kono
parents:
diff changeset
258 /* A placeholder for an expression that is not type-dependent, but
kono
parents:
diff changeset
259 does occur in a template. When an expression that is not
kono
parents:
diff changeset
260 type-dependent appears in a larger expression, we must compute the
kono
parents:
diff changeset
261 type of that larger expression. That computation would normally
kono
parents:
diff changeset
262 modify the original expression, which would change the mangling of
kono
parents:
diff changeset
263 that expression if it appeared in a template argument list. In
kono
parents:
diff changeset
264 that situation, we create a NON_DEPENDENT_EXPR to take the place of
kono
parents:
diff changeset
265 the original expression. The expression is the only operand -- it
kono
parents:
diff changeset
266 is only needed for diagnostics. */
kono
parents:
diff changeset
267 DEFTREECODE (NON_DEPENDENT_EXPR, "non_dependent_expr", tcc_expression, 1)
kono
parents:
diff changeset
268
kono
parents:
diff changeset
269 /* CTOR_INITIALIZER is a placeholder in template code for a call to
kono
parents:
diff changeset
270 setup_vtbl_pointer (and appears in all functions, not just ctors). */
kono
parents:
diff changeset
271 DEFTREECODE (CTOR_INITIALIZER, "ctor_initializer", tcc_expression, 1)
kono
parents:
diff changeset
272
kono
parents:
diff changeset
273 DEFTREECODE (TRY_BLOCK, "try_block", tcc_statement, 2)
kono
parents:
diff changeset
274
kono
parents:
diff changeset
275 DEFTREECODE (EH_SPEC_BLOCK, "eh_spec_block", tcc_statement, 2)
kono
parents:
diff changeset
276
kono
parents:
diff changeset
277 /* A HANDLER wraps a catch handler for the HANDLER_TYPE. If this is
kono
parents:
diff changeset
278 CATCH_ALL_TYPE, then the handler catches all types. The declaration of
kono
parents:
diff changeset
279 the catch variable is in HANDLER_PARMS, and the body block in
kono
parents:
diff changeset
280 HANDLER_BODY. */
kono
parents:
diff changeset
281 DEFTREECODE (HANDLER, "handler", tcc_statement, 2)
kono
parents:
diff changeset
282
kono
parents:
diff changeset
283 /* A MUST_NOT_THROW_EXPR wraps an expression that may not
kono
parents:
diff changeset
284 throw, and must call terminate if it does. The second argument
kono
parents:
diff changeset
285 is a condition, used in templates to express noexcept (condition). */
kono
parents:
diff changeset
286 DEFTREECODE (MUST_NOT_THROW_EXPR, "must_not_throw_expr", tcc_expression, 2)
kono
parents:
diff changeset
287
kono
parents:
diff changeset
288 /* A CLEANUP_STMT marks the point at which a declaration is fully
kono
parents:
diff changeset
289 constructed. The CLEANUP_EXPR is run on behalf of CLEANUP_DECL
kono
parents:
diff changeset
290 when CLEANUP_BODY completes. */
kono
parents:
diff changeset
291 DEFTREECODE (CLEANUP_STMT, "cleanup_stmt", tcc_statement, 3)
kono
parents:
diff changeset
292
kono
parents:
diff changeset
293 /* Represents an 'if' statement. The operands are IF_COND,
kono
parents:
diff changeset
294 THEN_CLAUSE, and ELSE_CLAUSE, and the current scope, respectively. */
kono
parents:
diff changeset
295 /* ??? It is currently still necessary to distinguish between IF_STMT
kono
parents:
diff changeset
296 and COND_EXPR for the benefit of templates. */
kono
parents:
diff changeset
297 DEFTREECODE (IF_STMT, "if_stmt", tcc_statement, 4)
kono
parents:
diff changeset
298
kono
parents:
diff changeset
299 /* Used to represent a `for' statement. The operands are
kono
parents:
diff changeset
300 FOR_INIT_STMT, FOR_COND, FOR_EXPR, and FOR_BODY, respectively. */
kono
parents:
diff changeset
301 DEFTREECODE (FOR_STMT, "for_stmt", tcc_statement, 5)
kono
parents:
diff changeset
302
kono
parents:
diff changeset
303 /* Used to represent a range-based `for' statement. The operands are
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
304 RANGE_FOR_DECL, RANGE_FOR_EXPR, RANGE_FOR_BODY, RANGE_FOR_SCOPE,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
305 RANGE_FOR_UNROLL, and RANGE_FOR_INIT_STMT, respectively. Only used in
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
306 templates. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
307 DEFTREECODE (RANGE_FOR_STMT, "range_for_stmt", tcc_statement, 6)
111
kono
parents:
diff changeset
308
kono
parents:
diff changeset
309 /* Used to represent a 'while' statement. The operands are WHILE_COND
kono
parents:
diff changeset
310 and WHILE_BODY, respectively. */
kono
parents:
diff changeset
311 DEFTREECODE (WHILE_STMT, "while_stmt", tcc_statement, 2)
kono
parents:
diff changeset
312
kono
parents:
diff changeset
313 /* Used to represent a 'do' statement. The operands are DO_BODY and
kono
parents:
diff changeset
314 DO_COND, respectively. */
kono
parents:
diff changeset
315 DEFTREECODE (DO_STMT, "do_stmt", tcc_statement, 2)
kono
parents:
diff changeset
316
kono
parents:
diff changeset
317 /* Used to represent a 'break' statement. */
kono
parents:
diff changeset
318 DEFTREECODE (BREAK_STMT, "break_stmt", tcc_statement, 0)
kono
parents:
diff changeset
319
kono
parents:
diff changeset
320 /* Used to represent a 'continue' statement. */
kono
parents:
diff changeset
321 DEFTREECODE (CONTINUE_STMT, "continue_stmt", tcc_statement, 0)
kono
parents:
diff changeset
322
kono
parents:
diff changeset
323 /* Used to represent a 'switch' statement. The operands are
kono
parents:
diff changeset
324 SWITCH_STMT_COND, SWITCH_STMT_BODY, SWITCH_STMT_TYPE, and
kono
parents:
diff changeset
325 SWITCH_STMT_SCOPE, respectively. */
kono
parents:
diff changeset
326 DEFTREECODE (SWITCH_STMT, "switch_stmt", tcc_statement, 4)
kono
parents:
diff changeset
327
kono
parents:
diff changeset
328 /* Used to represent an expression statement. Use `EXPR_STMT_EXPR' to
kono
parents:
diff changeset
329 obtain the expression. */
kono
parents:
diff changeset
330 DEFTREECODE (EXPR_STMT, "expr_stmt", tcc_expression, 1)
kono
parents:
diff changeset
331
kono
parents:
diff changeset
332 DEFTREECODE (TAG_DEFN, "tag_defn", tcc_expression, 0)
kono
parents:
diff changeset
333
kono
parents:
diff changeset
334 /* Represents an 'offsetof' expression during template expansion. */
kono
parents:
diff changeset
335 DEFTREECODE (OFFSETOF_EXPR, "offsetof_expr", tcc_expression, 2)
kono
parents:
diff changeset
336
kono
parents:
diff changeset
337 /* Represents an '__builtin_addressof' expression during template
kono
parents:
diff changeset
338 expansion. This is similar to ADDR_EXPR, but it doesn't invoke
kono
parents:
diff changeset
339 overloaded & operators. */
kono
parents:
diff changeset
340 DEFTREECODE (ADDRESSOF_EXPR, "addressof_expr", tcc_expression, 1)
kono
parents:
diff changeset
341
kono
parents:
diff changeset
342 /* Represents the -> operator during template expansion. */
kono
parents:
diff changeset
343 DEFTREECODE (ARROW_EXPR, "arrow_expr", tcc_expression, 1)
kono
parents:
diff changeset
344
kono
parents:
diff changeset
345 /* Represents an '__alignof__' expression during template
kono
parents:
diff changeset
346 expansion. */
kono
parents:
diff changeset
347 DEFTREECODE (ALIGNOF_EXPR, "alignof_expr", tcc_expression, 1)
kono
parents:
diff changeset
348
kono
parents:
diff changeset
349 /* Represents an Objective-C++ '@encode' expression during template
kono
parents:
diff changeset
350 expansion. */
kono
parents:
diff changeset
351 DEFTREECODE (AT_ENCODE_EXPR, "at_encode_expr", tcc_expression, 1)
kono
parents:
diff changeset
352
kono
parents:
diff changeset
353 /* A STMT_EXPR represents a statement-expression during template
kono
parents:
diff changeset
354 expansion. This is the GCC extension { ( ... ) }. The
kono
parents:
diff changeset
355 STMT_EXPR_STMT is the statement given by the expression. */
kono
parents:
diff changeset
356 DEFTREECODE (STMT_EXPR, "stmt_expr", tcc_expression, 1)
kono
parents:
diff changeset
357
kono
parents:
diff changeset
358 /* Unary plus. Operand 0 is the expression to which the unary plus
kono
parents:
diff changeset
359 is applied. */
kono
parents:
diff changeset
360 DEFTREECODE (UNARY_PLUS_EXPR, "unary_plus_expr", tcc_unary, 1)
kono
parents:
diff changeset
361
kono
parents:
diff changeset
362 /** C++11 extensions. */
kono
parents:
diff changeset
363
kono
parents:
diff changeset
364 /* A static assertion. This is a C++11 extension.
kono
parents:
diff changeset
365 STATIC_ASSERT_CONDITION contains the condition that is being
kono
parents:
diff changeset
366 checked. STATIC_ASSERT_MESSAGE contains the message (a string
kono
parents:
diff changeset
367 literal) to be displayed if the condition fails to hold. */
kono
parents:
diff changeset
368 DEFTREECODE (STATIC_ASSERT, "static_assert", tcc_exceptional, 0)
kono
parents:
diff changeset
369
kono
parents:
diff changeset
370 /* Represents an argument pack of types (or templates). An argument
kono
parents:
diff changeset
371 pack stores zero or more arguments that will be used to instantiate
kono
parents:
diff changeset
372 a parameter pack.
kono
parents:
diff changeset
373
kono
parents:
diff changeset
374 ARGUMENT_PACK_ARGS retrieves the arguments stored in the argument
kono
parents:
diff changeset
375 pack.
kono
parents:
diff changeset
376
kono
parents:
diff changeset
377 Example:
kono
parents:
diff changeset
378 template<typename... Values>
kono
parents:
diff changeset
379 class tuple { ... };
kono
parents:
diff changeset
380
kono
parents:
diff changeset
381 tuple<int, float, double> t;
kono
parents:
diff changeset
382
kono
parents:
diff changeset
383 Values is a (template) parameter pack. When tuple<int, float,
kono
parents:
diff changeset
384 double> is instantiated, the Values parameter pack is instantiated
kono
parents:
diff changeset
385 with the argument pack <int, float, double>. ARGUMENT_PACK_ARGS will
kono
parents:
diff changeset
386 be a TREE_VEC containing int, float, and double. */
kono
parents:
diff changeset
387 DEFTREECODE (TYPE_ARGUMENT_PACK, "type_argument_pack", tcc_type, 0)
kono
parents:
diff changeset
388
kono
parents:
diff changeset
389 /* Represents an argument pack of values, which can be used either for
kono
parents:
diff changeset
390 non-type template arguments or function call arguments.
kono
parents:
diff changeset
391
kono
parents:
diff changeset
392 NONTYPE_ARGUMENT_PACK plays precisely the same role as
kono
parents:
diff changeset
393 TYPE_ARGUMENT_PACK, but will be used for packing non-type template
kono
parents:
diff changeset
394 arguments (e.g., "int... Dimensions") or function arguments ("const
kono
parents:
diff changeset
395 Args&... args"). */
kono
parents:
diff changeset
396 DEFTREECODE (NONTYPE_ARGUMENT_PACK, "nontype_argument_pack", tcc_expression, 1)
kono
parents:
diff changeset
397
kono
parents:
diff changeset
398 /* Represents a type expression that will be expanded into a list of
kono
parents:
diff changeset
399 types when instantiated with one or more argument packs.
kono
parents:
diff changeset
400
kono
parents:
diff changeset
401 PACK_EXPANSION_PATTERN retrieves the expansion pattern. This is
kono
parents:
diff changeset
402 the type or expression that we will substitute into with each
kono
parents:
diff changeset
403 argument in an argument pack.
kono
parents:
diff changeset
404
kono
parents:
diff changeset
405 SET_PACK_EXPANSION_PATTERN sets the expansion pattern.
kono
parents:
diff changeset
406
kono
parents:
diff changeset
407 PACK_EXPANSION_PARAMETER_PACKS contains a TREE_LIST of the parameter
kono
parents:
diff changeset
408 packs that are used in this pack expansion.
kono
parents:
diff changeset
409
kono
parents:
diff changeset
410 Example:
kono
parents:
diff changeset
411 template<typename... Values>
kono
parents:
diff changeset
412 struct tied : tuple<Values&...> {
kono
parents:
diff changeset
413 // ...
kono
parents:
diff changeset
414 };
kono
parents:
diff changeset
415
kono
parents:
diff changeset
416 The derivation from tuple contains a TYPE_PACK_EXPANSION for the
kono
parents:
diff changeset
417 template arguments. Its PACK_EXPANSION_PATTERN is "Values&" and its
kono
parents:
diff changeset
418 PACK_EXPANSION_PARAMETER_PACKS will contain "Values". */
kono
parents:
diff changeset
419 DEFTREECODE (TYPE_PACK_EXPANSION, "type_pack_expansion", tcc_type, 0)
kono
parents:
diff changeset
420
kono
parents:
diff changeset
421 /* Represents an expression that will be expanded into a list of
kono
parents:
diff changeset
422 expressions when instantiated with one or more argument packs.
kono
parents:
diff changeset
423
kono
parents:
diff changeset
424 EXPR_PACK_EXPANSION plays precisely the same role as TYPE_PACK_EXPANSION,
kono
parents:
diff changeset
425 but will be used for expressions. */
kono
parents:
diff changeset
426 DEFTREECODE (EXPR_PACK_EXPANSION, "expr_pack_expansion", tcc_expression, 3)
kono
parents:
diff changeset
427
kono
parents:
diff changeset
428 /* Selects the Ith parameter out of an argument pack. This node will
kono
parents:
diff changeset
429 be used when instantiating pack expansions; see
kono
parents:
diff changeset
430 tsubst_pack_expansion.
kono
parents:
diff changeset
431
kono
parents:
diff changeset
432 ARGUMENT_PACK_SELECT_FROM_PACK contains the *_ARGUMENT_PACK node
kono
parents:
diff changeset
433 from which the argument will be selected.
kono
parents:
diff changeset
434
kono
parents:
diff changeset
435 ARGUMENT_PACK_SELECT_INDEX contains the index into the argument
kono
parents:
diff changeset
436 pack that will be returned by this ARGUMENT_PACK_SELECT node. The
kono
parents:
diff changeset
437 index is a machine integer. */
kono
parents:
diff changeset
438 DEFTREECODE (ARGUMENT_PACK_SELECT, "argument_pack_select", tcc_exceptional, 0)
kono
parents:
diff changeset
439
kono
parents:
diff changeset
440 /* Fold expressions allow the expansion of a template argument pack
kono
parents:
diff changeset
441 over a binary operator.
kono
parents:
diff changeset
442
kono
parents:
diff changeset
443 FOLD_EXPR_MOD_P is true when the fold operation is a compound assignment
kono
parents:
diff changeset
444 operator.
kono
parents:
diff changeset
445
kono
parents:
diff changeset
446 FOLD_EXPR_OP is an INTEGER_CST storing the tree code for the folded
kono
parents:
diff changeset
447 expression. Note that when FOLDEXPR_MOD_P is true, the operator is
kono
parents:
diff changeset
448 a compound assignment operator for that kind of expression.
kono
parents:
diff changeset
449
kono
parents:
diff changeset
450 FOLD_EXPR_PACK is an expression containing an unexpanded parameter pack;
kono
parents:
diff changeset
451 when expanded, each term becomes an argument of the folded expression.
kono
parents:
diff changeset
452
kono
parents:
diff changeset
453 In a BINARY_FOLD_EXPRESSION, FOLD_EXPR_INIT is the non-pack argument. */
kono
parents:
diff changeset
454 DEFTREECODE (UNARY_LEFT_FOLD_EXPR, "unary_left_fold_expr", tcc_expression, 2)
kono
parents:
diff changeset
455 DEFTREECODE (UNARY_RIGHT_FOLD_EXPR, "unary_right_fold_expr", tcc_expression, 2)
kono
parents:
diff changeset
456 DEFTREECODE (BINARY_LEFT_FOLD_EXPR, "binary_left_fold_expr", tcc_expression, 3)
kono
parents:
diff changeset
457 DEFTREECODE (BINARY_RIGHT_FOLD_EXPR, "binary_right_fold_expr", tcc_expression, 3)
kono
parents:
diff changeset
458
kono
parents:
diff changeset
459
kono
parents:
diff changeset
460 /** C++ extensions. */
kono
parents:
diff changeset
461
kono
parents:
diff changeset
462 /* Represents a trait expression during template expansion. */
kono
parents:
diff changeset
463 DEFTREECODE (TRAIT_EXPR, "trait_expr", tcc_exceptional, 0)
kono
parents:
diff changeset
464
kono
parents:
diff changeset
465 /* A lambda expression. This is a C++0x extension.
kono
parents:
diff changeset
466 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE is an enum for the default, which may be
kono
parents:
diff changeset
467 none.
kono
parents:
diff changeset
468 LAMBDA_EXPR_CAPTURE_LIST holds the capture-list, including `this'.
kono
parents:
diff changeset
469 LAMBDA_EXPR_THIS_CAPTURE goes straight to the capture of `this', if it exists.
kono
parents:
diff changeset
470 LAMBDA_EXPR_PENDING_PROXIES is a vector of capture proxies which need to
kono
parents:
diff changeset
471 be pushed once scope returns to the lambda.
kono
parents:
diff changeset
472 LAMBDA_EXPR_MUTABLE_P signals whether this lambda was declared mutable. */
kono
parents:
diff changeset
473 DEFTREECODE (LAMBDA_EXPR, "lambda_expr", tcc_exceptional, 0)
kono
parents:
diff changeset
474
kono
parents:
diff changeset
475 /* The declared type of an expression. This is a C++0x extension.
kono
parents:
diff changeset
476 DECLTYPE_TYPE_EXPR is the expression whose type we are computing.
kono
parents:
diff changeset
477 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P states whether the
kono
parents:
diff changeset
478 expression was parsed as an id-expression or a member access
kono
parents:
diff changeset
479 expression. When false, it was parsed as a full expression.
kono
parents:
diff changeset
480 DECLTYPE_FOR_LAMBDA_CAPTURE is set if we want lambda capture semantics.
kono
parents:
diff changeset
481 DECLTYPE_FOR_LAMBDA_RETURN is set if we want lambda return deduction. */
kono
parents:
diff changeset
482 DEFTREECODE (DECLTYPE_TYPE, "decltype_type", tcc_type, 0)
kono
parents:
diff changeset
483
kono
parents:
diff changeset
484 /* A type designated by `__underlying_type (type)'.
kono
parents:
diff changeset
485 UNDERLYING_TYPE_TYPE is the type in question. */
kono
parents:
diff changeset
486 DEFTREECODE (UNDERLYING_TYPE, "underlying_type", tcc_type, 0)
kono
parents:
diff changeset
487
kono
parents:
diff changeset
488 /* A type designated by one of the bases type traits.
kono
parents:
diff changeset
489 BASES_TYPE is the type in question. */
kono
parents:
diff changeset
490 DEFTREECODE (BASES, "bases", tcc_type, 0)
kono
parents:
diff changeset
491
kono
parents:
diff changeset
492 /* Used to represent the template information stored by template
kono
parents:
diff changeset
493 specializations.
kono
parents:
diff changeset
494 The accessors are:
kono
parents:
diff changeset
495 TI_TEMPLATE the template declaration associated to the specialization
kono
parents:
diff changeset
496 TI_ARGS the arguments of the template specialization
kono
parents:
diff changeset
497 TI_TYPEDEFS_NEEDING_ACCESS_CHECKING the vector of typedefs used in
kono
parents:
diff changeset
498 the pattern of the template for which access check is needed at template
kono
parents:
diff changeset
499 instantiation time. */
kono
parents:
diff changeset
500 DEFTREECODE (TEMPLATE_INFO, "template_info", tcc_exceptional, 0)
kono
parents:
diff changeset
501
kono
parents:
diff changeset
502 /* Extensions for Concepts. */
kono
parents:
diff changeset
503
kono
parents:
diff changeset
504 /* Used to represent information associated with constrained declarations. */
kono
parents:
diff changeset
505 DEFTREECODE (CONSTRAINT_INFO, "constraint_info", tcc_exceptional, 0)
kono
parents:
diff changeset
506
kono
parents:
diff changeset
507 /* A wildcard declaration is a placeholder for a template parameter
kono
parents:
diff changeset
508 used to resolve constrained-type-names in concepts. During
kono
parents:
diff changeset
509 resolution, the matching argument is saved as the TREE_TYPE
kono
parents:
diff changeset
510 of the wildcard. */
kono
parents:
diff changeset
511 DEFTREECODE (WILDCARD_DECL, "wildcard_decl", tcc_declaration, 0)
kono
parents:
diff changeset
512
kono
parents:
diff changeset
513 /* A requires-expr is a binary expression. The first operand is
kono
parents:
diff changeset
514 its parameter list (possibly NULL). The second is a list of
kono
parents:
diff changeset
515 requirements, which are denoted by the _REQ* tree codes
kono
parents:
diff changeset
516 below. */
kono
parents:
diff changeset
517 DEFTREECODE (REQUIRES_EXPR, "requires_expr", tcc_expression, 2)
kono
parents:
diff changeset
518
kono
parents:
diff changeset
519 /* A requirement for an expression. */
kono
parents:
diff changeset
520 DEFTREECODE (SIMPLE_REQ, "simple_req", tcc_expression, 1)
kono
parents:
diff changeset
521
kono
parents:
diff changeset
522 /* A requirement for a type. */
kono
parents:
diff changeset
523 DEFTREECODE (TYPE_REQ, "type_req", tcc_expression, 1)
kono
parents:
diff changeset
524
kono
parents:
diff changeset
525 /* A requirement for an expression and its properties. The
kono
parents:
diff changeset
526 first operand is the expression, and the 2nd is its type.
kono
parents:
diff changeset
527 The accessor COMPOUND_REQ_NOEXCEPT determines whether
kono
parents:
diff changeset
528 the noexcept keyword was present. */
kono
parents:
diff changeset
529 DEFTREECODE (COMPOUND_REQ, "compound_req", tcc_expression, 2)
kono
parents:
diff changeset
530
kono
parents:
diff changeset
531 /* A requires clause within a requires expression. */
kono
parents:
diff changeset
532 DEFTREECODE (NESTED_REQ, "nested_req", tcc_expression, 1)
kono
parents:
diff changeset
533
kono
parents:
diff changeset
534 /* Constraints are modeled as kinds of expressions.
kono
parents:
diff changeset
535 The operands of a constraint can be either types or expressions.
kono
parents:
diff changeset
536 Unlike expressions, constraints do not have a type. */
kono
parents:
diff changeset
537
kono
parents:
diff changeset
538 /* A predicate constraint evaluates an expression E.
kono
parents:
diff changeset
539
kono
parents:
diff changeset
540 PRED_CONSTR_EXPR has the expression to be evaluated. */
kono
parents:
diff changeset
541 DEFTREECODE (PRED_CONSTR, "pred_constr", tcc_expression, 1)
kono
parents:
diff changeset
542
kono
parents:
diff changeset
543 /* A check constraint represents the checking of a concept
kono
parents:
diff changeset
544 C. It has two operands: the template defining the concept
kono
parents:
diff changeset
545 and a sequence of template arguments.
kono
parents:
diff changeset
546
kono
parents:
diff changeset
547 CHECK_CONSTR_CONCEPT has the concept definition
kono
parents:
diff changeset
548 CHECK_CONSTR_ARGUMENTS are the template arguments */
kono
parents:
diff changeset
549 DEFTREECODE (CHECK_CONSTR, "check_constr", tcc_expression, 2)
kono
parents:
diff changeset
550
kono
parents:
diff changeset
551 /* An expression constraint determines the validity of a expression E.
kono
parents:
diff changeset
552
kono
parents:
diff changeset
553 EXPR_CONST_EXPR has the expression being validated. */
kono
parents:
diff changeset
554 DEFTREECODE (EXPR_CONSTR, "expr_constr", tcc_expression, 1)
kono
parents:
diff changeset
555
kono
parents:
diff changeset
556 /* A type constraint determines the validity of a type T. Note that
kono
parents:
diff changeset
557
kono
parents:
diff changeset
558 TYPE_CONST_TYPE has the type being validated */
kono
parents:
diff changeset
559 DEFTREECODE (TYPE_CONSTR, "type_constr", tcc_expression, 1)
kono
parents:
diff changeset
560
kono
parents:
diff changeset
561 /* An implicit conversion constraint determines if an expression
kono
parents:
diff changeset
562 E is implicitly convertible to a type T. Note that T may
kono
parents:
diff changeset
563 be dependent but does not contain any placeholders.
kono
parents:
diff changeset
564
kono
parents:
diff changeset
565 ICONV_CONSTR_EXPR has the expression E.
kono
parents:
diff changeset
566 ICONV_CONSTR_TYPE has the type T.
kono
parents:
diff changeset
567 */
kono
parents:
diff changeset
568 DEFTREECODE (ICONV_CONSTR, "iconv_constr", tcc_expression, 2)
kono
parents:
diff changeset
569
kono
parents:
diff changeset
570 /* An argument deduction constraint determines if the type of an
kono
parents:
diff changeset
571 expression E can be deduced from a type pattern T. Note that
kono
parents:
diff changeset
572 T must contain at least one place holder.
kono
parents:
diff changeset
573
kono
parents:
diff changeset
574 DEDUCT_CONSTR_EXPR has the expression E
kono
parents:
diff changeset
575 DEDUCT_CONSTR_PATTERN has the type pattern T.
kono
parents:
diff changeset
576 DEDUCT_CONSTR_PLACEHOLDERS has the list of placeholder nodes in T. */
kono
parents:
diff changeset
577 DEFTREECODE (DEDUCT_CONSTR, "deduct_constr", tcc_expression, 3)
kono
parents:
diff changeset
578
kono
parents:
diff changeset
579 /* An exception constraint determines if, for an expression E,
kono
parents:
diff changeset
580 noexcept(E) is true.
kono
parents:
diff changeset
581
kono
parents:
diff changeset
582 EXCEPT_CONSTR_EXPR has the expression E. */
kono
parents:
diff changeset
583 DEFTREECODE (EXCEPT_CONSTR, "except_constr", tcc_expression, 1)
kono
parents:
diff changeset
584
kono
parents:
diff changeset
585 /* A parameterized constraint declares constraint variables, which
kono
parents:
diff changeset
586 are used in expression, type, and exception constraints.
kono
parents:
diff changeset
587
kono
parents:
diff changeset
588 PARM_CONSTR_PARMS has a TREE_LIST of parameter declarations.
kono
parents:
diff changeset
589 PARM_CONSTR_OPERAND has the nested constraint. */
kono
parents:
diff changeset
590 DEFTREECODE (PARM_CONSTR, "parm_constr", tcc_expression, 2)
kono
parents:
diff changeset
591
kono
parents:
diff changeset
592 /* The conjunction and disjunction of two constraints, respectively.
kono
parents:
diff changeset
593 Operands are accessed using TREE_OPERAND. */
kono
parents:
diff changeset
594 DEFTREECODE (CONJ_CONSTR, "conj_constr", tcc_expression, 2)
kono
parents:
diff changeset
595 DEFTREECODE (DISJ_CONSTR, "disj_constr", tcc_expression, 2)
kono
parents:
diff changeset
596
kono
parents:
diff changeset
597
kono
parents:
diff changeset
598 /*
kono
parents:
diff changeset
599 Local variables:
kono
parents:
diff changeset
600 mode:c
kono
parents:
diff changeset
601 End:
kono
parents:
diff changeset
602 */