1*e4b17023SJohn Marino/* This file contains the definitions and documentation for the 2*e4b17023SJohn Marino additional tree codes used in the GNU C++ compiler (see tree.def 3*e4b17023SJohn Marino for the standard codes). 4*e4b17023SJohn Marino Copyright (C) 1987, 1988, 1990, 1993, 1997, 1998, 2003, 2004, 2005, 5*e4b17023SJohn Marino 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2010, 2011 6*e4b17023SJohn Marino Free Software Foundation, Inc. 7*e4b17023SJohn Marino Hacked by Michael Tiemann (tiemann@cygnus.com) 8*e4b17023SJohn Marino 9*e4b17023SJohn MarinoThis file is part of GCC. 10*e4b17023SJohn Marino 11*e4b17023SJohn MarinoGCC is free software; you can redistribute it and/or modify 12*e4b17023SJohn Marinoit under the terms of the GNU General Public License as published by 13*e4b17023SJohn Marinothe Free Software Foundation; either version 3, or (at your option) 14*e4b17023SJohn Marinoany later version. 15*e4b17023SJohn Marino 16*e4b17023SJohn MarinoGCC is distributed in the hope that it will be useful, 17*e4b17023SJohn Marinobut WITHOUT ANY WARRANTY; without even the implied warranty of 18*e4b17023SJohn MarinoMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19*e4b17023SJohn MarinoGNU General Public License for more details. 20*e4b17023SJohn Marino 21*e4b17023SJohn MarinoYou should have received a copy of the GNU General Public License 22*e4b17023SJohn Marinoalong with GCC; see the file COPYING3. If not see 23*e4b17023SJohn Marino<http://www.gnu.org/licenses/>. */ 24*e4b17023SJohn Marino 25*e4b17023SJohn Marino 26*e4b17023SJohn Marino/* An OFFSET_REF is used in two situations: 27*e4b17023SJohn Marino 28*e4b17023SJohn Marino 1. An expression of the form `A::m' where `A' is a class and `m' is 29*e4b17023SJohn Marino a non-static member. In this case, operand 0 will be a TYPE 30*e4b17023SJohn Marino (corresponding to `A') and operand 1 will be a FIELD_DECL, 31*e4b17023SJohn Marino BASELINK, or TEMPLATE_ID_EXPR (corresponding to `m'). 32*e4b17023SJohn Marino 33*e4b17023SJohn Marino The expression is a pointer-to-member if its address is taken, 34*e4b17023SJohn Marino but simply denotes a member of the object if its address is not 35*e4b17023SJohn Marino taken. 36*e4b17023SJohn Marino 37*e4b17023SJohn Marino This form is only used during the parsing phase; once semantic 38*e4b17023SJohn Marino analysis has taken place they are eliminated. 39*e4b17023SJohn Marino 40*e4b17023SJohn Marino 2. An expression of the form `x.*p'. In this case, operand 0 will 41*e4b17023SJohn Marino be an expression corresponding to `x' and operand 1 will be an 42*e4b17023SJohn Marino expression with pointer-to-member type. */ 43*e4b17023SJohn MarinoDEFTREECODE (OFFSET_REF, "offset_ref", tcc_reference, 2) 44*e4b17023SJohn Marino 45*e4b17023SJohn Marino/* A pointer-to-member constant. For a pointer-to-member constant 46*e4b17023SJohn Marino `X::Y' The PTRMEM_CST_CLASS is the RECORD_TYPE for `X' and the 47*e4b17023SJohn Marino PTRMEM_CST_MEMBER is the _DECL for `Y'. */ 48*e4b17023SJohn MarinoDEFTREECODE (PTRMEM_CST, "ptrmem_cst", tcc_constant, 0) 49*e4b17023SJohn Marino 50*e4b17023SJohn Marino/* For NEW_EXPR, operand 0 is the placement list. 51*e4b17023SJohn Marino Operand 1 is the new-declarator. 52*e4b17023SJohn Marino Operand 2 is the number of elements in the array. 53*e4b17023SJohn Marino Operand 3 is the initializer. */ 54*e4b17023SJohn MarinoDEFTREECODE (NEW_EXPR, "nw_expr", tcc_expression, 4) 55*e4b17023SJohn MarinoDEFTREECODE (VEC_NEW_EXPR, "vec_nw_expr", tcc_expression, 3) 56*e4b17023SJohn Marino 57*e4b17023SJohn Marino/* For DELETE_EXPR, operand 0 is the store to be destroyed. 58*e4b17023SJohn Marino Operand 1 is the value to pass to the destroying function 59*e4b17023SJohn Marino saying whether the store should be deallocated as well. */ 60*e4b17023SJohn MarinoDEFTREECODE (DELETE_EXPR, "dl_expr", tcc_expression, 2) 61*e4b17023SJohn MarinoDEFTREECODE (VEC_DELETE_EXPR, "vec_dl_expr", tcc_expression, 2) 62*e4b17023SJohn Marino 63*e4b17023SJohn Marino/* Value is reference to particular overloaded class method. 64*e4b17023SJohn Marino Operand 0 is the class, operand 1 is the field 65*e4b17023SJohn Marino The COMPLEXITY field holds the class level (usually 0). */ 66*e4b17023SJohn MarinoDEFTREECODE (SCOPE_REF, "scope_ref", tcc_reference, 2) 67*e4b17023SJohn Marino 68*e4b17023SJohn Marino/* When composing an object with a member, this is the result. 69*e4b17023SJohn Marino Operand 0 is the object. Operand 1 is the member (usually 70*e4b17023SJohn Marino a dereferenced pointer to member). */ 71*e4b17023SJohn MarinoDEFTREECODE (MEMBER_REF, "member_ref", tcc_reference, 2) 72*e4b17023SJohn Marino 73*e4b17023SJohn Marino/* Type conversion operator in C++. TREE_TYPE is type that this 74*e4b17023SJohn Marino operator converts to. Operand is expression to be converted. */ 75*e4b17023SJohn MarinoDEFTREECODE (TYPE_EXPR, "type_expr", tcc_expression, 1) 76*e4b17023SJohn Marino 77*e4b17023SJohn Marino/* AGGR_INIT_EXPRs have a variably-sized representation similar to 78*e4b17023SJohn Marino that of CALL_EXPRs. Operand 0 is an INTEGER_CST node containing the 79*e4b17023SJohn Marino operand count, operand 1 is the function which performs initialization, 80*e4b17023SJohn Marino operand 2 is the slot which was allocated for this expression, and 81*e4b17023SJohn Marino the remaining operands are the arguments to the initialization function. */ 82*e4b17023SJohn MarinoDEFTREECODE (AGGR_INIT_EXPR, "aggr_init_expr", tcc_vl_exp, 3) 83*e4b17023SJohn Marino 84*e4b17023SJohn Marino/* Initialization of an array from another array, expressed at a high level 85*e4b17023SJohn Marino so that it works with TARGET_EXPR. Operand 0 is the target, operand 1 86*e4b17023SJohn Marino is the initializer. */ 87*e4b17023SJohn MarinoDEFTREECODE (VEC_INIT_EXPR, "vec_init_expr", tcc_expression, 2) 88*e4b17023SJohn Marino 89*e4b17023SJohn Marino/* A throw expression. operand 0 is the expression, if there was one, 90*e4b17023SJohn Marino else it is NULL_TREE. */ 91*e4b17023SJohn MarinoDEFTREECODE (THROW_EXPR, "throw_expr", tcc_expression, 1) 92*e4b17023SJohn Marino 93*e4b17023SJohn Marino/* An empty class object. The TREE_TYPE gives the class type. We use 94*e4b17023SJohn Marino these to avoid actually creating instances of the empty classes. */ 95*e4b17023SJohn MarinoDEFTREECODE (EMPTY_CLASS_EXPR, "empty_class_expr", tcc_expression, 0) 96*e4b17023SJohn Marino 97*e4b17023SJohn Marino/* A reference to a member function or member functions from a base 98*e4b17023SJohn Marino class. BASELINK_FUNCTIONS gives the FUNCTION_DECL, 99*e4b17023SJohn Marino TEMPLATE_DECL, OVERLOAD, or TEMPLATE_ID_EXPR corresponding to the 100*e4b17023SJohn Marino functions. BASELINK_BINFO gives the base from which the functions 101*e4b17023SJohn Marino come, i.e., the base to which the `this' pointer must be converted 102*e4b17023SJohn Marino before the functions are called. BASELINK_ACCESS_BINFO gives the 103*e4b17023SJohn Marino base used to name the functions. 104*e4b17023SJohn Marino 105*e4b17023SJohn Marino A BASELINK is an expression; the TREE_TYPE of the BASELINK gives 106*e4b17023SJohn Marino the type of the expression. This type is either a FUNCTION_TYPE, 107*e4b17023SJohn Marino METHOD_TYPE, or `unknown_type_node' indicating that the function is 108*e4b17023SJohn Marino overloaded. */ 109*e4b17023SJohn MarinoDEFTREECODE (BASELINK, "baselink", tcc_exceptional, 0) 110*e4b17023SJohn Marino 111*e4b17023SJohn Marino/* Template definition. The following fields have the specified uses, 112*e4b17023SJohn Marino although there are other macros in cp-tree.h that should be used for 113*e4b17023SJohn Marino accessing this data. 114*e4b17023SJohn Marino DECL_ARGUMENTS template parm vector 115*e4b17023SJohn Marino DECL_TEMPLATE_INFO template text &c 116*e4b17023SJohn Marino DECL_VINDEX list of instantiations already produced; 117*e4b17023SJohn Marino only done for functions so far 118*e4b17023SJohn Marino For class template: 119*e4b17023SJohn Marino DECL_INITIAL associated templates (methods &c) 120*e4b17023SJohn Marino DECL_TEMPLATE_RESULT null 121*e4b17023SJohn Marino For non-class templates: 122*e4b17023SJohn Marino TREE_TYPE type of object to be constructed 123*e4b17023SJohn Marino DECL_TEMPLATE_RESULT decl for object to be created 124*e4b17023SJohn Marino (e.g., FUNCTION_DECL with tmpl parms used) 125*e4b17023SJohn Marino */ 126*e4b17023SJohn MarinoDEFTREECODE (TEMPLATE_DECL, "template_decl", tcc_declaration, 0) 127*e4b17023SJohn Marino 128*e4b17023SJohn Marino/* Index into a template parameter list. The TEMPLATE_PARM_IDX gives 129*e4b17023SJohn Marino the index (from 0) of the parameter, while the TEMPLATE_PARM_LEVEL 130*e4b17023SJohn Marino gives the level (from 1) of the parameter. 131*e4b17023SJohn Marino 132*e4b17023SJohn Marino Here's an example: 133*e4b17023SJohn Marino 134*e4b17023SJohn Marino template <class T> // Index 0, Level 1. 135*e4b17023SJohn Marino struct S 136*e4b17023SJohn Marino { 137*e4b17023SJohn Marino template <class U, // Index 0, Level 2. 138*e4b17023SJohn Marino class V> // Index 1, Level 2. 139*e4b17023SJohn Marino void f(); 140*e4b17023SJohn Marino }; 141*e4b17023SJohn Marino 142*e4b17023SJohn Marino The DESCENDANTS will be a chain of TEMPLATE_PARM_INDEXs descended 143*e4b17023SJohn Marino from this one. The first descendant will have the same IDX, but 144*e4b17023SJohn Marino its LEVEL will be one less. The TREE_CHAIN field is used to chain 145*e4b17023SJohn Marino together the descendants. The TEMPLATE_PARM_DECL is the 146*e4b17023SJohn Marino declaration of this parameter, either a TYPE_DECL or CONST_DECL. 147*e4b17023SJohn Marino The TEMPLATE_PARM_ORIG_LEVEL is the LEVEL of the most distant 148*e4b17023SJohn Marino parent, i.e., the LEVEL that the parameter originally had when it 149*e4b17023SJohn Marino was declared. For example, if we instantiate S<int>, we will have: 150*e4b17023SJohn Marino 151*e4b17023SJohn Marino struct S<int> 152*e4b17023SJohn Marino { 153*e4b17023SJohn Marino template <class U, // Index 0, Level 1, Orig Level 2 154*e4b17023SJohn Marino class V> // Index 1, Level 1, Orig Level 2 155*e4b17023SJohn Marino void f(); 156*e4b17023SJohn Marino }; 157*e4b17023SJohn Marino 158*e4b17023SJohn Marino The LEVEL is the level of the parameter when we are worrying about 159*e4b17023SJohn Marino the types of things; the ORIG_LEVEL is the level when we are 160*e4b17023SJohn Marino worrying about instantiating things. */ 161*e4b17023SJohn MarinoDEFTREECODE (TEMPLATE_PARM_INDEX, "template_parm_index", tcc_exceptional, 0) 162*e4b17023SJohn Marino 163*e4b17023SJohn Marino/* Index into a template parameter list for template template parameters. 164*e4b17023SJohn Marino This parameter must be a type. The TYPE_FIELDS value will be a 165*e4b17023SJohn Marino TEMPLATE_PARM_INDEX. 166*e4b17023SJohn Marino 167*e4b17023SJohn Marino It is used without template arguments like TT in C<TT>, 168*e4b17023SJohn Marino TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO is NULL_TREE 169*e4b17023SJohn Marino and TYPE_NAME is a TEMPLATE_DECL. */ 170*e4b17023SJohn MarinoDEFTREECODE (TEMPLATE_TEMPLATE_PARM, "template_template_parm", tcc_type, 0) 171*e4b17023SJohn Marino 172*e4b17023SJohn Marino/* The ordering of the following codes is optimized for the checking 173*e4b17023SJohn Marino macros in tree.h. Changing the order will degrade the speed of the 174*e4b17023SJohn Marino compiler. TEMPLATE_TYPE_PARM, TYPENAME_TYPE, TYPEOF_TYPE, 175*e4b17023SJohn Marino BOUND_TEMPLATE_TEMPLATE_PARM. */ 176*e4b17023SJohn Marino 177*e4b17023SJohn Marino/* Index into a template parameter list. This parameter must be a type. 178*e4b17023SJohn Marino The type.values field will be a TEMPLATE_PARM_INDEX. */ 179*e4b17023SJohn MarinoDEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", tcc_type, 0) 180*e4b17023SJohn Marino 181*e4b17023SJohn Marino/* A type designated by `typename T::t'. TYPE_CONTEXT is `T', 182*e4b17023SJohn Marino TYPE_NAME is an IDENTIFIER_NODE for `t'. If the type was named via 183*e4b17023SJohn Marino template-id, TYPENAME_TYPE_FULLNAME will hold the TEMPLATE_ID_EXPR. 184*e4b17023SJohn Marino TREE_TYPE is always NULL. */ 185*e4b17023SJohn MarinoDEFTREECODE (TYPENAME_TYPE, "typename_type", tcc_type, 0) 186*e4b17023SJohn Marino 187*e4b17023SJohn Marino/* A type designated by `__typeof (expr)'. TYPEOF_TYPE_EXPR is the 188*e4b17023SJohn Marino expression in question. */ 189*e4b17023SJohn MarinoDEFTREECODE (TYPEOF_TYPE, "typeof_type", tcc_type, 0) 190*e4b17023SJohn Marino 191*e4b17023SJohn Marino/* Like TEMPLATE_TEMPLATE_PARM it is used with bound template arguments 192*e4b17023SJohn Marino like TT<int>. 193*e4b17023SJohn Marino In this case, TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO contains the 194*e4b17023SJohn Marino template name and its bound arguments. TYPE_NAME is a TYPE_DECL. */ 195*e4b17023SJohn MarinoDEFTREECODE (BOUND_TEMPLATE_TEMPLATE_PARM, "bound_template_template_parm", 196*e4b17023SJohn Marino tcc_type, 0) 197*e4b17023SJohn Marino 198*e4b17023SJohn Marino/* For template template argument of the form `T::template C'. 199*e4b17023SJohn Marino TYPE_CONTEXT is `T', the template parameter dependent object. 200*e4b17023SJohn Marino TYPE_NAME is an IDENTIFIER_NODE for `C', the member class template. */ 201*e4b17023SJohn MarinoDEFTREECODE (UNBOUND_CLASS_TEMPLATE, "unbound_class_template", tcc_type, 0) 202*e4b17023SJohn Marino 203*e4b17023SJohn Marino/* A using declaration. USING_DECL_SCOPE contains the specified 204*e4b17023SJohn Marino scope. In a member using decl, unless DECL_DEPENDENT_P is true, 205*e4b17023SJohn Marino USING_DECL_DECLS contains the _DECL or OVERLOAD so named. This is 206*e4b17023SJohn Marino not an alias, but is later expanded into multiple aliases. */ 207*e4b17023SJohn MarinoDEFTREECODE (USING_DECL, "using_decl", tcc_declaration, 0) 208*e4b17023SJohn Marino 209*e4b17023SJohn Marino/* A using directive. The operand is USING_STMT_NAMESPACE. */ 210*e4b17023SJohn MarinoDEFTREECODE (USING_STMT, "using_stmt", tcc_statement, 1) 211*e4b17023SJohn Marino 212*e4b17023SJohn Marino/* An un-parsed default argument. Holds a vector of input tokens and 213*e4b17023SJohn Marino a vector of places where the argument was instantiated before 214*e4b17023SJohn Marino parsing had occurred. */ 215*e4b17023SJohn MarinoDEFTREECODE (DEFAULT_ARG, "default_arg", tcc_exceptional, 0) 216*e4b17023SJohn Marino 217*e4b17023SJohn Marino/* An uninstantiated noexcept-specification. DEFERRED_NOEXCEPT_PATTERN is 218*e4b17023SJohn Marino the pattern from the template, and DEFERRED_NOEXCEPT_ARGS are the 219*e4b17023SJohn Marino template arguments to substitute into the pattern when needed. */ 220*e4b17023SJohn MarinoDEFTREECODE (DEFERRED_NOEXCEPT, "deferred_noexcept", tcc_exceptional, 0) 221*e4b17023SJohn Marino 222*e4b17023SJohn Marino/* A template-id, like foo<int>. The first operand is the template. 223*e4b17023SJohn Marino The second is NULL if there are no explicit arguments, or a 224*e4b17023SJohn Marino TREE_VEC of arguments. The template will be a FUNCTION_DECL, 225*e4b17023SJohn Marino TEMPLATE_DECL, or an OVERLOAD. If the template-id refers to a 226*e4b17023SJohn Marino member template, the template may be an IDENTIFIER_NODE. */ 227*e4b17023SJohn MarinoDEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", tcc_expression, 2) 228*e4b17023SJohn Marino 229*e4b17023SJohn Marino/* A list-like node for chaining overloading candidates. TREE_TYPE is 230*e4b17023SJohn Marino the original name, and the parameter is the FUNCTION_DECL. */ 231*e4b17023SJohn MarinoDEFTREECODE (OVERLOAD, "overload", tcc_exceptional, 0) 232*e4b17023SJohn Marino 233*e4b17023SJohn Marino/* A pseudo-destructor, of the form "OBJECT.~DESTRUCTOR" or 234*e4b17023SJohn Marino "OBJECT.SCOPE::~DESTRUCTOR. The first operand is the OBJECT. The 235*e4b17023SJohn Marino second operand (if non-NULL) is the SCOPE. The third operand is 236*e4b17023SJohn Marino the TYPE node corresponding to the DESTRUCTOR. The type of the 237*e4b17023SJohn Marino first operand will always be a scalar type. 238*e4b17023SJohn Marino 239*e4b17023SJohn Marino The type of a PSEUDO_DTOR_EXPR is always "void", even though it can 240*e4b17023SJohn Marino be used as if it were a zero-argument function. We handle the 241*e4b17023SJohn Marino function-call case specially, and giving it "void" type prevents it 242*e4b17023SJohn Marino being used in expressions in ways that are not permitted. */ 243*e4b17023SJohn MarinoDEFTREECODE (PSEUDO_DTOR_EXPR, "pseudo_dtor_expr", tcc_expression, 3) 244*e4b17023SJohn Marino 245*e4b17023SJohn Marino/* A whole bunch of tree codes for the initial, superficial parsing of 246*e4b17023SJohn Marino templates. */ 247*e4b17023SJohn MarinoDEFTREECODE (MODOP_EXPR, "modop_expr", tcc_expression, 3) 248*e4b17023SJohn MarinoDEFTREECODE (CAST_EXPR, "cast_expr", tcc_unary, 1) 249*e4b17023SJohn MarinoDEFTREECODE (REINTERPRET_CAST_EXPR, "reinterpret_cast_expr", tcc_unary, 1) 250*e4b17023SJohn MarinoDEFTREECODE (CONST_CAST_EXPR, "const_cast_expr", tcc_unary, 1) 251*e4b17023SJohn MarinoDEFTREECODE (STATIC_CAST_EXPR, "static_cast_expr", tcc_unary, 1) 252*e4b17023SJohn MarinoDEFTREECODE (DYNAMIC_CAST_EXPR, "dynamic_cast_expr", tcc_unary, 1) 253*e4b17023SJohn MarinoDEFTREECODE (IMPLICIT_CONV_EXPR, "implicit_conv_expr", tcc_unary, 1) 254*e4b17023SJohn MarinoDEFTREECODE (DOTSTAR_EXPR, "dotstar_expr", tcc_expression, 2) 255*e4b17023SJohn MarinoDEFTREECODE (TYPEID_EXPR, "typeid_expr", tcc_expression, 1) 256*e4b17023SJohn MarinoDEFTREECODE (NOEXCEPT_EXPR, "noexcept_expr", tcc_unary, 1) 257*e4b17023SJohn Marino 258*e4b17023SJohn Marino/* A placeholder for an expression that is not type-dependent, but 259*e4b17023SJohn Marino does occur in a template. When an expression that is not 260*e4b17023SJohn Marino type-dependent appears in a larger expression, we must compute the 261*e4b17023SJohn Marino type of that larger expression. That computation would normally 262*e4b17023SJohn Marino modify the original expression, which would change the mangling of 263*e4b17023SJohn Marino that expression if it appeared in a template argument list. In 264*e4b17023SJohn Marino that situation, we create a NON_DEPENDENT_EXPR to take the place of 265*e4b17023SJohn Marino the original expression. The expression is the only operand -- it 266*e4b17023SJohn Marino is only needed for diagnostics. */ 267*e4b17023SJohn MarinoDEFTREECODE (NON_DEPENDENT_EXPR, "non_dependent_expr", tcc_expression, 1) 268*e4b17023SJohn Marino 269*e4b17023SJohn Marino/* CTOR_INITIALIZER is a placeholder in template code for a call to 270*e4b17023SJohn Marino setup_vtbl_pointer (and appears in all functions, not just ctors). */ 271*e4b17023SJohn MarinoDEFTREECODE (CTOR_INITIALIZER, "ctor_initializer", tcc_expression, 1) 272*e4b17023SJohn Marino 273*e4b17023SJohn MarinoDEFTREECODE (TRY_BLOCK, "try_block", tcc_statement, 2) 274*e4b17023SJohn Marino 275*e4b17023SJohn MarinoDEFTREECODE (EH_SPEC_BLOCK, "eh_spec_block", tcc_statement, 2) 276*e4b17023SJohn Marino 277*e4b17023SJohn Marino/* A HANDLER wraps a catch handler for the HANDLER_TYPE. If this is 278*e4b17023SJohn Marino CATCH_ALL_TYPE, then the handler catches all types. The declaration of 279*e4b17023SJohn Marino the catch variable is in HANDLER_PARMS, and the body block in 280*e4b17023SJohn Marino HANDLER_BODY. */ 281*e4b17023SJohn MarinoDEFTREECODE (HANDLER, "handler", tcc_statement, 2) 282*e4b17023SJohn Marino 283*e4b17023SJohn Marino/* A MUST_NOT_THROW_EXPR wraps an expression that may not 284*e4b17023SJohn Marino throw, and must call terminate if it does. The second argument 285*e4b17023SJohn Marino is a condition, used in templates to express noexcept (condition). */ 286*e4b17023SJohn MarinoDEFTREECODE (MUST_NOT_THROW_EXPR, "must_not_throw_expr", tcc_expression, 2) 287*e4b17023SJohn Marino 288*e4b17023SJohn Marino/* A CLEANUP_STMT marks the point at which a declaration is fully 289*e4b17023SJohn Marino constructed. The CLEANUP_EXPR is run on behalf of CLEANUP_DECL 290*e4b17023SJohn Marino when CLEANUP_BODY completes. */ 291*e4b17023SJohn MarinoDEFTREECODE (CLEANUP_STMT, "cleanup_stmt", tcc_statement, 3) 292*e4b17023SJohn Marino 293*e4b17023SJohn Marino/* Represents an 'if' statement. The operands are IF_COND, 294*e4b17023SJohn Marino THEN_CLAUSE, and ELSE_CLAUSE, and the current scope, respectively. */ 295*e4b17023SJohn Marino/* ??? It is currently still necessary to distinguish between IF_STMT 296*e4b17023SJohn Marino and COND_EXPR for the benefit of templates. */ 297*e4b17023SJohn MarinoDEFTREECODE (IF_STMT, "if_stmt", tcc_statement, 4) 298*e4b17023SJohn Marino 299*e4b17023SJohn Marino/* Used to represent a `for' statement. The operands are 300*e4b17023SJohn Marino FOR_INIT_STMT, FOR_COND, FOR_EXPR, and FOR_BODY, respectively. */ 301*e4b17023SJohn MarinoDEFTREECODE (FOR_STMT, "for_stmt", tcc_statement, 5) 302*e4b17023SJohn Marino 303*e4b17023SJohn Marino/* Used to represent a range-based `for' statement. The operands are 304*e4b17023SJohn Marino RANGE_FOR_DECL, RANGE_FOR_EXPR, RANGE_FOR_BODY, and RANGE_FOR_SCOPE, 305*e4b17023SJohn Marino respectively. Only used in templates. */ 306*e4b17023SJohn MarinoDEFTREECODE (RANGE_FOR_STMT, "range_for_stmt", tcc_statement, 4) 307*e4b17023SJohn Marino 308*e4b17023SJohn Marino/* Used to represent a 'while' statement. The operands are WHILE_COND 309*e4b17023SJohn Marino and WHILE_BODY, respectively. */ 310*e4b17023SJohn MarinoDEFTREECODE (WHILE_STMT, "while_stmt", tcc_statement, 2) 311*e4b17023SJohn Marino 312*e4b17023SJohn Marino/* Used to represent a 'do' statement. The operands are DO_BODY and 313*e4b17023SJohn Marino DO_COND, respectively. */ 314*e4b17023SJohn MarinoDEFTREECODE (DO_STMT, "do_stmt", tcc_statement, 2) 315*e4b17023SJohn Marino 316*e4b17023SJohn Marino/* Used to represent a 'break' statement. */ 317*e4b17023SJohn MarinoDEFTREECODE (BREAK_STMT, "break_stmt", tcc_statement, 0) 318*e4b17023SJohn Marino 319*e4b17023SJohn Marino/* Used to represent a 'continue' statement. */ 320*e4b17023SJohn MarinoDEFTREECODE (CONTINUE_STMT, "continue_stmt", tcc_statement, 0) 321*e4b17023SJohn Marino 322*e4b17023SJohn Marino/* Used to represent a 'switch' statement. The operands are 323*e4b17023SJohn Marino SWITCH_STMT_COND, SWITCH_STMT_BODY, SWITCH_STMT_TYPE, and 324*e4b17023SJohn Marino SWITCH_STMT_SCOPE, respectively. */ 325*e4b17023SJohn MarinoDEFTREECODE (SWITCH_STMT, "switch_stmt", tcc_statement, 4) 326*e4b17023SJohn Marino 327*e4b17023SJohn Marino/* Used to represent an expression statement. Use `EXPR_STMT_EXPR' to 328*e4b17023SJohn Marino obtain the expression. */ 329*e4b17023SJohn MarinoDEFTREECODE (EXPR_STMT, "expr_stmt", tcc_expression, 1) 330*e4b17023SJohn Marino 331*e4b17023SJohn MarinoDEFTREECODE (TAG_DEFN, "tag_defn", tcc_expression, 0) 332*e4b17023SJohn Marino 333*e4b17023SJohn Marino/* Represents an 'offsetof' expression during template expansion. */ 334*e4b17023SJohn MarinoDEFTREECODE (OFFSETOF_EXPR, "offsetof_expr", tcc_expression, 1) 335*e4b17023SJohn Marino 336*e4b17023SJohn Marino/* Represents a 'sizeof' expression during template expansion. */ 337*e4b17023SJohn MarinoDEFTREECODE (SIZEOF_EXPR, "sizeof_expr", tcc_expression, 1) 338*e4b17023SJohn Marino 339*e4b17023SJohn Marino/* Represents the -> operator during template expansion. */ 340*e4b17023SJohn MarinoDEFTREECODE (ARROW_EXPR, "arrow_expr", tcc_expression, 1) 341*e4b17023SJohn Marino 342*e4b17023SJohn Marino/* Represents an '__alignof__' expression during template 343*e4b17023SJohn Marino expansion. */ 344*e4b17023SJohn MarinoDEFTREECODE (ALIGNOF_EXPR, "alignof_expr", tcc_expression, 1) 345*e4b17023SJohn Marino 346*e4b17023SJohn Marino/* Represents an Objective-C++ '@encode' expression during template 347*e4b17023SJohn Marino expansion. */ 348*e4b17023SJohn MarinoDEFTREECODE (AT_ENCODE_EXPR, "at_encode_expr", tcc_expression, 1) 349*e4b17023SJohn Marino 350*e4b17023SJohn Marino/* A STMT_EXPR represents a statement-expression during template 351*e4b17023SJohn Marino expansion. This is the GCC extension { ( ... ) }. The 352*e4b17023SJohn Marino STMT_EXPR_STMT is the statement given by the expression. */ 353*e4b17023SJohn MarinoDEFTREECODE (STMT_EXPR, "stmt_expr", tcc_expression, 1) 354*e4b17023SJohn Marino 355*e4b17023SJohn Marino/* Unary plus. Operand 0 is the expression to which the unary plus 356*e4b17023SJohn Marino is applied. */ 357*e4b17023SJohn MarinoDEFTREECODE (UNARY_PLUS_EXPR, "unary_plus_expr", tcc_unary, 1) 358*e4b17023SJohn Marino 359*e4b17023SJohn Marino/** C++0x extensions. */ 360*e4b17023SJohn Marino 361*e4b17023SJohn Marino/* A static assertion. This is a C++0x extension. 362*e4b17023SJohn Marino STATIC_ASSERT_CONDITION contains the condition that is being 363*e4b17023SJohn Marino checked. STATIC_ASSERT_MESSAGE contains the message (a string 364*e4b17023SJohn Marino literal) to be displayed if the condition fails to hold. */ 365*e4b17023SJohn MarinoDEFTREECODE (STATIC_ASSERT, "static_assert", tcc_exceptional, 0) 366*e4b17023SJohn Marino 367*e4b17023SJohn Marino/* Represents an argument pack of types (or templates). An argument 368*e4b17023SJohn Marino pack stores zero or more arguments that will be used to instantiate 369*e4b17023SJohn Marino a parameter pack. 370*e4b17023SJohn Marino 371*e4b17023SJohn Marino ARGUMENT_PACK_ARGS retrieves the arguments stored in the argument 372*e4b17023SJohn Marino pack. 373*e4b17023SJohn Marino 374*e4b17023SJohn Marino Example: 375*e4b17023SJohn Marino template<typename... Values> 376*e4b17023SJohn Marino class tuple { ... }; 377*e4b17023SJohn Marino 378*e4b17023SJohn Marino tuple<int, float, double> t; 379*e4b17023SJohn Marino 380*e4b17023SJohn Marino Values is a (template) parameter pack. When tuple<int, float, 381*e4b17023SJohn Marino double> is instantiated, the Values parameter pack is instantiated 382*e4b17023SJohn Marino with the argument pack <int, float, double>. ARGUMENT_PACK_ARGS will 383*e4b17023SJohn Marino be a TREE_VEC containing int, float, and double. */ 384*e4b17023SJohn MarinoDEFTREECODE (TYPE_ARGUMENT_PACK, "type_argument_pack", tcc_type, 0) 385*e4b17023SJohn Marino 386*e4b17023SJohn Marino/* Represents an argument pack of values, which can be used either for 387*e4b17023SJohn Marino non-type template arguments or function call arguments. 388*e4b17023SJohn Marino 389*e4b17023SJohn Marino NONTYPE_ARGUMENT_PACK plays precisely the same role as 390*e4b17023SJohn Marino TYPE_ARGUMENT_PACK, but will be used for packing non-type template 391*e4b17023SJohn Marino arguments (e.g., "int... Dimensions") or function arguments ("const 392*e4b17023SJohn Marino Args&... args"). */ 393*e4b17023SJohn MarinoDEFTREECODE (NONTYPE_ARGUMENT_PACK, "nontype_argument_pack", tcc_expression, 1) 394*e4b17023SJohn Marino 395*e4b17023SJohn Marino/* Represents a type expression that will be expanded into a list of 396*e4b17023SJohn Marino types when instantiated with one or more argument packs. 397*e4b17023SJohn Marino 398*e4b17023SJohn Marino PACK_EXPANSION_PATTERN retrieves the expansion pattern. This is 399*e4b17023SJohn Marino the type or expression that we will substitute into with each 400*e4b17023SJohn Marino argument in an argument pack. 401*e4b17023SJohn Marino 402*e4b17023SJohn Marino SET_PACK_EXPANSION_PATTERN sets the expansion pattern. 403*e4b17023SJohn Marino 404*e4b17023SJohn Marino PACK_EXPANSION_PARAMETER_PACKS contains a TREE_LIST of the parameter 405*e4b17023SJohn Marino packs that are used in this pack expansion. 406*e4b17023SJohn Marino 407*e4b17023SJohn Marino Example: 408*e4b17023SJohn Marino template<typename... Values> 409*e4b17023SJohn Marino struct tied : tuple<Values&...> { 410*e4b17023SJohn Marino // ... 411*e4b17023SJohn Marino }; 412*e4b17023SJohn Marino 413*e4b17023SJohn Marino The derivation from tuple contains a TYPE_PACK_EXPANSION for the 414*e4b17023SJohn Marino template arguments. Its PACK_EXPANSION_PATTERN is "Values&" and its 415*e4b17023SJohn Marino PACK_EXPANSION_PARAMETER_PACKS will contain "Values". */ 416*e4b17023SJohn MarinoDEFTREECODE (TYPE_PACK_EXPANSION, "type_pack_expansion", tcc_type, 0) 417*e4b17023SJohn Marino 418*e4b17023SJohn Marino/* Represents an expression that will be expanded into a list of 419*e4b17023SJohn Marino expressions when instantiated with one or more argument packs. 420*e4b17023SJohn Marino 421*e4b17023SJohn Marino EXPR_PACK_EXPANSION plays precisely the same role as TYPE_PACK_EXPANSION, 422*e4b17023SJohn Marino but will be used for expressions. */ 423*e4b17023SJohn MarinoDEFTREECODE (EXPR_PACK_EXPANSION, "expr_pack_expansion", tcc_expression, 3) 424*e4b17023SJohn Marino 425*e4b17023SJohn Marino/* Selects the Ith parameter out of an argument pack. This node will 426*e4b17023SJohn Marino be used when instantiating pack expansions; see 427*e4b17023SJohn Marino tsubst_pack_expansion. 428*e4b17023SJohn Marino 429*e4b17023SJohn Marino ARGUMENT_PACK_SELECT_FROM_PACK contains the *_ARGUMENT_PACK node 430*e4b17023SJohn Marino from which the argument will be selected. 431*e4b17023SJohn Marino 432*e4b17023SJohn Marino ARGUMENT_PACK_SELECT_INDEX contains the index into the argument 433*e4b17023SJohn Marino pack that will be returned by this ARGUMENT_PACK_SELECT node. The 434*e4b17023SJohn Marino index is a machine integer. */ 435*e4b17023SJohn MarinoDEFTREECODE (ARGUMENT_PACK_SELECT, "argument_pack_select", tcc_exceptional, 0) 436*e4b17023SJohn Marino 437*e4b17023SJohn Marino/** C++ extensions. */ 438*e4b17023SJohn Marino 439*e4b17023SJohn Marino/* Represents a trait expression during template expansion. */ 440*e4b17023SJohn MarinoDEFTREECODE (TRAIT_EXPR, "trait_expr", tcc_exceptional, 0) 441*e4b17023SJohn Marino 442*e4b17023SJohn Marino/* A lambda expression. This is a C++0x extension. 443*e4b17023SJohn Marino LAMBDA_EXPR_DEFAULT_CAPTURE_MODE is an enum for the default, which may be 444*e4b17023SJohn Marino none. 445*e4b17023SJohn Marino LAMBDA_EXPR_CAPTURE_LIST holds the capture-list, including `this'. 446*e4b17023SJohn Marino LAMBDA_EXPR_THIS_CAPTURE goes straight to the capture of `this', if it exists. 447*e4b17023SJohn Marino LAMBDA_EXPR_PENDING_PROXIES is a vector of capture proxies which need to 448*e4b17023SJohn Marino be pushed once scope returns to the lambda. 449*e4b17023SJohn Marino LAMBDA_EXPR_MUTABLE_P signals whether this lambda was declared mutable. 450*e4b17023SJohn Marino LAMBDA_EXPR_RETURN_TYPE holds the return type, if it was specified. */ 451*e4b17023SJohn MarinoDEFTREECODE (LAMBDA_EXPR, "lambda_expr", tcc_exceptional, 0) 452*e4b17023SJohn Marino 453*e4b17023SJohn Marino/* The declared type of an expression. This is a C++0x extension. 454*e4b17023SJohn Marino DECLTYPE_TYPE_EXPR is the expression whose type we are computing. 455*e4b17023SJohn Marino DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P states whether the 456*e4b17023SJohn Marino expression was parsed as an id-expression or a member access 457*e4b17023SJohn Marino expression. When false, it was parsed as a full expression. 458*e4b17023SJohn Marino DECLTYPE_FOR_LAMBDA_CAPTURE is set if we want lambda capture semantics. 459*e4b17023SJohn Marino DECLTYPE_FOR_LAMBDA_RETURN is set if we want lambda return deduction. */ 460*e4b17023SJohn MarinoDEFTREECODE (DECLTYPE_TYPE, "decltype_type", tcc_type, 0) 461*e4b17023SJohn Marino 462*e4b17023SJohn Marino/* A type designated by `__underlying_type (type)'. 463*e4b17023SJohn Marino UNDERLYING_TYPE_TYPE is the type in question. */ 464*e4b17023SJohn MarinoDEFTREECODE (UNDERLYING_TYPE, "underlying_type", tcc_type, 0) 465*e4b17023SJohn Marino 466*e4b17023SJohn Marino/* A type designated by one of the bases type traits. 467*e4b17023SJohn Marino BASES_TYPE is the type in question. */ 468*e4b17023SJohn MarinoDEFTREECODE (BASES, "bases", tcc_type, 0) 469*e4b17023SJohn Marino 470*e4b17023SJohn Marino/* Used to represent the template information stored by template 471*e4b17023SJohn Marino specializations. 472*e4b17023SJohn Marino The accessors are: 473*e4b17023SJohn Marino TI_TEMPLATE the template declaration associated to the specialization 474*e4b17023SJohn Marino TI_ARGS the arguments of the template specialization 475*e4b17023SJohn Marino TI_TYPEDEFS_NEEDING_ACCESS_CHECKING the vector of typedefs used in 476*e4b17023SJohn Marino the pattern of the template for which access check is needed at template 477*e4b17023SJohn Marino instantiation time. */ 478*e4b17023SJohn MarinoDEFTREECODE (TEMPLATE_INFO, "template_info", tcc_exceptional, 0) 479*e4b17023SJohn Marino 480*e4b17023SJohn Marino/* 481*e4b17023SJohn MarinoLocal variables: 482*e4b17023SJohn Marinomode:c 483*e4b17023SJohn MarinoEnd: 484*e4b17023SJohn Marino*/ 485