/* This file contains the definitions and documentation for the
   additional tree codes used in the GNU C++ compiler (see tree.def
   for the standard codes).
   Copyright (C) 1987, 1988, 1990, 1993, 1997, 1998 Free Software Foundation, Inc.
   Hacked by Michael Tiemann (tiemann@cygnus.com)

This file is part of GNU CC.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/* A type designated by `typename T::t'.  TYPE_CONTEXT is `T',
   TYPE_NAME is a TYPE_DECL for `t'.  If TREE_TYPE is present, this
   type was generated by the implicit typename extension, and the
   TREE_TYPE is a _TYPE from a baseclass of `T'.  */
DEFTREECODE (TYPENAME_TYPE, "typename_type", 't', 0)

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

/* A thunk is a stub function.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/*
Local variables:
mode:c
End:
*/
