URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [gcc/] [cp/] [cp-tree.def] - Rev 826
Compare with Previous | Blame | View Log
/* This file contains the definitions and documentation for theadditional tree codes used in the GNU C++ compiler (see tree.deffor the standard codes).Copyright (C) 1987, 1988, 1990, 1993, 1997, 1998, 2003, 2004, 2005,1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007Free Software Foundation, Inc.Hacked by Michael Tiemann (tiemann@cygnus.com)This file is part of GCC.GCC is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 3, or (at your option)any later version.GCC is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GCC; see the file COPYING3. If not see<http://www.gnu.org/licenses/>. *//* An OFFSET_REF is used in two situations:1. An expression of the form `A::m' where `A' is a class and `m' isa non-static member. In this case, operand 0 will be a TYPE(corresponding to `A') and operand 1 will be a FIELD_DECL,BASELINK, or TEMPLATE_ID_EXPR (corresponding to `m').The expression is a pointer-to-member if its address is taken,but simply denotes a member of the object if its address is nottaken.This form is only used during the parsing phase; once semanticanalysis has taken place they are eliminated.2. An expression of the form `x.*p'. In this case, operand 0 willbe an expression corresponding to `x' and operand 1 will be anexpression with pointer-to-member type. */DEFTREECODE (OFFSET_REF, "offset_ref", tcc_reference, 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 thePTRMEM_CST_MEMBER is the _DECL for `Y'. */DEFTREECODE (PTRMEM_CST, "ptrmem_cst", tcc_constant, 0)/* For NEW_EXPR, operand 0 is the placement list.Operand 1 is the new-declarator.Operand 2 is the number of elements in the array.Operand 3 is the initializer. */DEFTREECODE (NEW_EXPR, "nw_expr", tcc_expression, 4)DEFTREECODE (VEC_NEW_EXPR, "vec_nw_expr", tcc_expression, 3)/* For DELETE_EXPR, operand 0 is the store to be destroyed.Operand 1 is the value to pass to the destroying functionsaying whether the store should be deallocated as well. */DEFTREECODE (DELETE_EXPR, "dl_expr", tcc_expression, 2)DEFTREECODE (VEC_DELETE_EXPR, "vec_dl_expr", tcc_expression, 2)/* Value is reference to particular overloaded class method.Operand 0 is the class, operand 1 is the fieldThe COMPLEXITY field holds the class level (usually 0). */DEFTREECODE (SCOPE_REF, "scope_ref", tcc_reference, 2)/* When composing an object with a member, this is the result.Operand 0 is the object. Operand 1 is the member (usuallya dereferenced pointer to member). */DEFTREECODE (MEMBER_REF, "member_ref", tcc_reference, 2)/* Type conversion operator in C++. TREE_TYPE is type that thisoperator converts to. Operand is expression to be converted. */DEFTREECODE (TYPE_EXPR, "type_expr", tcc_expression, 1)/* AGGR_INIT_EXPRs have a variably-sized representation similar tothat of CALL_EXPRs. Operand 0 is an INTEGER_CST node containing theoperand count, operand 1 is the function which performs initialization,operand 2 is the slot which was allocated for this expression, andthe remaining operands are the arguments to the initialization function. */DEFTREECODE (AGGR_INIT_EXPR, "aggr_init_expr", tcc_vl_exp, 3)/* Initialization of an array from another array, expressed at a high levelso that it works with TARGET_EXPR. Operand 0 is the target, operand 1is the initializer. */DEFTREECODE (VEC_INIT_EXPR, "vec_init_expr", tcc_expression, 2)/* A throw expression. operand 0 is the expression, if there was one,else it is NULL_TREE. */DEFTREECODE (THROW_EXPR, "throw_expr", tcc_expression, 1)/* An empty class object. The TREE_TYPE gives the class type. We usethese to avoid actually creating instances of the empty classes. */DEFTREECODE (EMPTY_CLASS_EXPR, "empty_class_expr", tcc_expression, 0)/* A reference to a member function or member functions from a baseclass. BASELINK_FUNCTIONS gives the FUNCTION_DECL,TEMPLATE_DECL, OVERLOAD, or TEMPLATE_ID_EXPR corresponding to thefunctions. BASELINK_BINFO gives the base from which the functionscome, i.e., the base to which the `this' pointer must be convertedbefore the functions are called. BASELINK_ACCESS_BINFO gives thebase used to name the functions.A BASELINK is an expression; the TREE_TYPE of the BASELINK givesthe type of the expression. This type is either a FUNCTION_TYPE,METHOD_TYPE, or `unknown_type_node' indicating that the function isoverloaded. */DEFTREECODE (BASELINK, "baselink", tcc_exceptional, 0)/* Template definition. The following fields have the specified uses,although there are other macros in cp-tree.h that should be used foraccessing this data.DECL_ARGUMENTS template parm vectorDECL_TEMPLATE_INFO template text &cDECL_VINDEX list of instantiations already produced;only done for functions so farFor class template:DECL_INITIAL associated templates (methods &c)DECL_TEMPLATE_RESULT nullFor non-class templates:TREE_TYPE type of object to be constructedDECL_TEMPLATE_RESULT decl for object to be created(e.g., FUNCTION_DECL with tmpl parms used)*/DEFTREECODE (TEMPLATE_DECL, "template_decl", tcc_declaration, 0)/* Index into a template parameter list. The TEMPLATE_PARM_IDX givesthe index (from 0) of the parameter, while the TEMPLATE_PARM_LEVELgives 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 descendedfrom this one. The first descendant will have the same IDX, butits LEVEL will be one less. The TREE_CHAIN field is used to chaintogether the descendants. The TEMPLATE_PARM_DECL is thedeclaration of this parameter, either a TYPE_DECL or CONST_DECL.The TEMPLATE_PARM_ORIG_LEVEL is the LEVEL of the most distantparent, i.e., the LEVEL that the parameter originally had when itwas declared. For example, if we instantiate S<int>, we will have:struct S<int>{template <class U, // Index 0, Level 1, Orig Level 2class V> // Index 1, Level 1, Orig Level 2void f();};The LEVEL is the level of the parameter when we are worrying aboutthe types of things; the ORIG_LEVEL is the level when we areworrying about instantiating things. */DEFTREECODE (TEMPLATE_PARM_INDEX, "template_parm_index", tcc_exceptional, 0)/* Index into a template parameter list for template template parameters.This parameter must be a type. The TYPE_FIELDS value will be aTEMPLATE_PARM_INDEX.It is used without template arguments like TT in C<TT>,TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO is NULL_TREEand TYPE_NAME is a TEMPLATE_DECL. */DEFTREECODE (TEMPLATE_TEMPLATE_PARM, "template_template_parm", tcc_type, 0)/* The ordering of the following codes is optimized for the checkingmacros in tree.h. Changing the order will degrade the speed of thecompiler. TEMPLATE_TYPE_PARM, TYPENAME_TYPE, TYPEOF_TYPE,BOUND_TEMPLATE_TEMPLATE_PARM. *//* Index into a template parameter list. This parameter must be a type.The type.values field will be a TEMPLATE_PARM_INDEX. */DEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", tcc_type, 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 viatemplate-id, TYPENAME_TYPE_FULLNAME will hold the TEMPLATE_ID_EXPR.TREE_TYPE is always NULL. */DEFTREECODE (TYPENAME_TYPE, "typename_type", tcc_type, 0)/* A type designated by `__typeof (expr)'. TYPEOF_TYPE_EXPR is theexpression in question. */DEFTREECODE (TYPEOF_TYPE, "typeof_type", tcc_type, 0)/* Like TEMPLATE_TEMPLATE_PARM it is used with bound template argumentslike TT<int>.In this case, TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO contains thetemplate name and its bound arguments. TYPE_NAME is a TYPE_DECL. */DEFTREECODE (BOUND_TEMPLATE_TEMPLATE_PARM, "bound_template_template_parm",tcc_type, 0)/* For template template argument of the form `T::template C'.TYPE_CONTEXT is `T', the template parameter dependent object.TYPE_NAME is an IDENTIFIER_NODE for `C', the member class template. */DEFTREECODE (UNBOUND_CLASS_TEMPLATE, "unbound_class_template", tcc_type, 0)/* A using declaration. USING_DECL_SCOPE contains the specifiedscope. In a member using decl, unless DECL_DEPENDENT_P is true,USING_DECL_DECLS contains the _DECL or OVERLOAD so named. This isnot an alias, but is later expanded into multiple aliases. */DEFTREECODE (USING_DECL, "using_decl", tcc_declaration, 0)/* A using directive. The operand is USING_STMT_NAMESPACE. */DEFTREECODE (USING_STMT, "using_directive", tcc_statement, 1)/* An un-parsed default argument. Holds a vector of input tokens anda vector of places where the argument was instantiated beforeparsing had occurred. */DEFTREECODE (DEFAULT_ARG, "default_arg", tcc_exceptional, 0)/* A template-id, like foo<int>. The first operand is the template.The second is NULL if there are no explicit arguments, or aTREE_VEC of arguments. The template will be a FUNCTION_DECL,TEMPLATE_DECL, or an OVERLOAD. If the template-id refers to amember template, the template may be an IDENTIFIER_NODE. */DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", tcc_expression, 2)/* A list-like node for chaining overloading candidates. TREE_TYPE isthe original name, and the parameter is the FUNCTION_DECL. */DEFTREECODE (OVERLOAD, "overload", tcc_exceptional, 0)/* A pseudo-destructor, of the form "OBJECT.~DESTRUCTOR" or"OBJECT.SCOPE::~DESTRUCTOR. The first operand is the OBJECT. Thesecond operand (if non-NULL) is the SCOPE. The third operand isthe TYPE node corresponding to the DESTRUCTOR. The type of thefirst operand will always be a scalar type.The type of a PSEUDO_DTOR_EXPR is always "void", even though it canbe used as if it were a zero-argument function. We handle thefunction-call case specially, and giving it "void" type prevents itbeing used in expressions in ways that are not permitted. */DEFTREECODE (PSEUDO_DTOR_EXPR, "pseudo_dtor_expr", tcc_expression, 3)/* A whole bunch of tree codes for the initial, superficial parsing oftemplates. */DEFTREECODE (MODOP_EXPR, "modop_expr", tcc_expression, 3)DEFTREECODE (CAST_EXPR, "cast_expr", tcc_unary, 1)DEFTREECODE (REINTERPRET_CAST_EXPR, "reinterpret_cast_expr", tcc_unary, 1)DEFTREECODE (CONST_CAST_EXPR, "const_cast_expr", tcc_unary, 1)DEFTREECODE (STATIC_CAST_EXPR, "static_cast_expr", tcc_unary, 1)DEFTREECODE (DYNAMIC_CAST_EXPR, "dynamic_cast_expr", tcc_unary, 1)DEFTREECODE (DOTSTAR_EXPR, "dotstar_expr", tcc_expression, 2)DEFTREECODE (TYPEID_EXPR, "typeid_expr", tcc_expression, 1)/* A placeholder for an expression that is not type-dependent, butdoes occur in a template. When an expression that is nottype-dependent appears in a larger expression, we must compute thetype of that larger expression. That computation would normallymodify the original expression, which would change the mangling ofthat expression if it appeared in a template argument list. Inthat situation, we create a NON_DEPENDENT_EXPR to take the place ofthe original expression. The expression is the only operand -- itis only needed for diagnostics. */DEFTREECODE (NON_DEPENDENT_EXPR, "non_dependent_expr", tcc_expression, 1)/* CTOR_INITIALIZER is a placeholder in template code for a call tosetup_vtbl_pointer (and appears in all functions, not just ctors). */DEFTREECODE (CTOR_INITIALIZER, "ctor_initializer", tcc_expression, 1)DEFTREECODE (TRY_BLOCK, "try_block", tcc_statement, 2)DEFTREECODE (EH_SPEC_BLOCK, "eh_spec_block", tcc_statement, 2)/* A HANDLER wraps a catch handler for the HANDLER_TYPE. If this isCATCH_ALL_TYPE, then the handler catches all types. The declaration ofthe catch variable is in HANDLER_PARMS, and the body block inHANDLER_BODY. */DEFTREECODE (HANDLER, "handler", tcc_statement, 2)/* A MUST_NOT_THROW_EXPR wraps an expression that may notthrow, and must call terminate if it does. */DEFTREECODE (MUST_NOT_THROW_EXPR, "must_not_throw_expr", tcc_expression, 1)/* A CLEANUP_STMT marks the point at which a declaration is fullyconstructed. The CLEANUP_EXPR is run on behalf of CLEANUP_DECLwhen CLEANUP_BODY completes. */DEFTREECODE (CLEANUP_STMT, "cleanup_stmt", tcc_statement, 3)/* Represents an 'if' statement. The operands are IF_COND,THEN_CLAUSE, and ELSE_CLAUSE, respectively. *//* ??? It is currently still necessary to distinguish between IF_STMTand COND_EXPR for the benefit of templates. */DEFTREECODE (IF_STMT, "if_stmt", tcc_statement, 3)/* Used to represent a `for' statement. The operands areFOR_INIT_STMT, FOR_COND, FOR_EXPR, and FOR_BODY, respectively. */DEFTREECODE (FOR_STMT, "for_stmt", tcc_statement, 4)/* Used to represent a 'while' statement. The operands are WHILE_CONDand WHILE_BODY, respectively. */DEFTREECODE (WHILE_STMT, "while_stmt", tcc_statement, 2)/* Used to represent a 'do' statement. The operands are DO_BODY andDO_COND, respectively. */DEFTREECODE (DO_STMT, "do_stmt", tcc_statement, 2)/* Used to represent a 'break' statement. */DEFTREECODE (BREAK_STMT, "break_stmt", tcc_statement, 0)/* Used to represent a 'continue' statement. */DEFTREECODE (CONTINUE_STMT, "continue_stmt", tcc_statement, 0)/* Used to represent a 'switch' statement. The operands areSWITCH_STMT_COND, SWITCH_STMT_BODY and SWITCH_STMT_TYPE, respectively. */DEFTREECODE (SWITCH_STMT, "switch_stmt", tcc_statement, 3)/* Used to represent an expression statement. Use `EXPR_STMT_EXPR' toobtain the expression. */DEFTREECODE (EXPR_STMT, "expr_stmt", tcc_expression, 1)DEFTREECODE (TAG_DEFN, "tag_defn", tcc_expression, 0)/* Represents an 'offsetof' expression during template expansion. */DEFTREECODE (OFFSETOF_EXPR, "offsetof_expr", tcc_expression, 1)/* Represents a 'sizeof' expression during template expansion. */DEFTREECODE (SIZEOF_EXPR, "sizeof_expr", tcc_expression, 1)/* Represents the -> operator during template expansion. */DEFTREECODE (ARROW_EXPR, "arrow_expr", tcc_expression, 1)/* Represents an '__alignof__' expression during templateexpansion. */DEFTREECODE (ALIGNOF_EXPR, "alignof_expr", tcc_expression, 1)/* A STMT_EXPR represents a statement-expression during templateexpansion. This is the GCC extension { ( ... ) }. TheSTMT_EXPR_STMT is the statement given by the expression. */DEFTREECODE (STMT_EXPR, "stmt_expr", tcc_expression, 1)/* Unary plus. Operand 0 is the expression to which the unary plusis applied. */DEFTREECODE (UNARY_PLUS_EXPR, "unary_plus_expr", tcc_unary, 1)/** C++0x extensions. *//* A static assertion. This is a C++0x extension.STATIC_ASSERT_CONDITION contains the condition that is beingchecked. STATIC_ASSERT_MESSAGE contains the message (a stringliteral) to be displayed if the condition fails to hold. */DEFTREECODE (STATIC_ASSERT, "static_assert", tcc_exceptional, 0)/* Represents an argument pack of types (or templates). An argumentpack stores zero or more arguments that will be used to instantiatea parameter pack.ARGUMENT_PACK_ARGS retrieves the arguments stored in the argumentpack.Example:template<typename... Values>class tuple { ... };tuple<int, float, double> t;Values is a (template) parameter pack. When tuple<int, float,double> is instantiated, the Values parameter pack is instantiatedwith the argument pack <int, float, double>. ARGUMENT_PACK_ARGS willbe a TREE_VEC containing int, float, and double. */DEFTREECODE (TYPE_ARGUMENT_PACK, "type_argument_pack", tcc_type, 0)/* Represents an argument pack of values, which can be used either fornon-type template arguments or function call arguments.NONTYPE_ARGUMENT_PACK plays precisely the same role asTYPE_ARGUMENT_PACK, but will be used for packing non-type templatearguments (e.g., "int... Dimensions") or function arguments ("constArgs&... args"). */DEFTREECODE (NONTYPE_ARGUMENT_PACK, "nontype_argument_pack", tcc_expression, 1)/* Represents a type expression that will be expanded into a list oftypes when instantiated with one or more argument packs.PACK_EXPANSION_PATTERN retrieves the expansion pattern. This isthe type or expression that we will substitute into with eachargument in an argument pack.SET_PACK_EXPANSION_PATTERN sets the expansion pattern.PACK_EXPANSION_PARAMETER_PACKS contains a TREE_LIST of the parameterpacks that are used in this pack expansion.Example:template<typename... Values>struct tied : tuple<Values&...> {// ...};The derivation from tuple contains a TYPE_PACK_EXPANSION for thetemplate arguments. Its PACK_EXPANSION_PATTERN is "Values&" and itsPACK_EXPANSION_PARAMETER_PACKS will contain "Values". */DEFTREECODE (TYPE_PACK_EXPANSION, "type_pack_expansion", tcc_type, 0)/* Represents an expression that will be expanded into a list ofexpressions when instantiated with one or more argument packs.EXPR_PACK_EXPANSION plays precisely the same role as TYPE_PACK_EXPANSION,but will be used for expressions. */DEFTREECODE (EXPR_PACK_EXPANSION, "expr_pack_expansion", tcc_expression, 1)/* Selects the Ith parameter out of an argument pack. This node willbe used when instantiating pack expansions; seetsubst_pack_expansion.ARGUMENT_PACK_SELECT_FROM_PACK contains the *_ARGUMENT_PACK nodefrom which the argument will be selected.ARGUMENT_PACK_SELECT_INDEX contains the index into the argumentpack that will be returned by this ARGUMENT_PACK_SELECT node. Theindex is a machine integer. */DEFTREECODE (ARGUMENT_PACK_SELECT, "argument_pack_select", tcc_exceptional, 0)/** C++ extensions. *//* Represents a trait expression during template expansion. */DEFTREECODE (TRAIT_EXPR, "trait_expr", tcc_exceptional, 0)/* A lambda expression. This is a C++0x extension.LAMBDA_EXPR_DEFAULT_CAPTURE_MODE is an enum for the default, which may benone.LAMBDA_EXPR_CAPTURE_LIST holds the capture-list, including `this'.LAMBDA_EXPR_THIS_CAPTURE goes straight to the capture of `this', if it exists.LAMBDA_EXPR_MUTABLE_P signals whether this lambda was declared mutable.LAMBDA_EXPR_RETURN_TYPE holds the return type, if it was specified. */DEFTREECODE (LAMBDA_EXPR, "lambda_expr", tcc_exceptional, 0)/* The declared type of an expression. This is a C++0x extension.DECLTYPE_TYPE_EXPR is the expression whose type we are computing.DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P states whether theexpression was parsed as an id-expression or a member accessexpression. When false, it was parsed as a full expression.DECLTYPE_FOR_LAMBDA_CAPTURE is set if we want lambda capture semantics.DECLTYPE_FOR_LAMBDA_RETURN is set if we want lambda return deduction. */DEFTREECODE (DECLTYPE_TYPE, "decltype_type", tcc_type, 0)/* Used to represent the template information stored by templatespecializations.The accessors are:TI_TEMPLATE the template declaration associated to the specializationTI_ARGS the arguments of the template specializationTI_TYPEDEFS_NEEDING_ACCESS_CHECKING the vector of typedefs used inthe pattern of the template for which access check is needed at templateinstantiation time. */DEFTREECODE (TEMPLATE_INFO, "template_info", tcc_exceptional, 0)/*Local variables:mode:cEnd:*/
