/****************************************************************************
 *                                                                          *
 *                         GNAT COMPILER COMPONENTS                         *
 *                                                                          *
 *                       GNAT-SPECIFIC GCC TREE CODES                       *
 *                                                                          *
 *                              Specification                               *
 *                                                                          *
 *          Copyright (C) 1992-2004 Free Software Foundation, Inc.          *
 *                                                                          *
 * GNAT is free software;  you can  redistribute it  and/or modify it under *
 * terms of the  GNU General Public License as published  by the Free Soft- *
 * ware  Foundation;  either version 2,  or (at your option) any later ver- *
 * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
 * OUT 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  distributed with GNAT;  see file COPYING.  If not, write *
 * to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, *
 * Boston, MA 02110-1301, USA.                                              *
 *                                                                          *
 * GNAT was originally developed  by the GNAT team at  New York University. *
 * Extensive contributions were provided by Ada Core Technologies Inc.      *
 *                                                                          *
 ****************************************************************************/

/* A type that is an unconstrained array itself.  This node is never passed
   to GCC. TREE_TYPE is the type of the fat pointer and TYPE_OBJECT_RECORD_TYPE
   is the type of a record containing the template and data.  */

DEFTREECODE (UNCONSTRAINED_ARRAY_TYPE, "unconstrained_array_type", tcc_type, 0)

/* A reference to an unconstrained array.  This node only exists as an
   intermediate node during the translation of a GNAT tree to a GCC tree;
   it is never passed to GCC.  The only field used is operand 0, which
   is the fat pointer object.  */

DEFTREECODE (UNCONSTRAINED_ARRAY_REF, "unconstrained_array_ref",
	    tcc_reference, 1)

/* An expression that returns an RTL suitable for its type.  Operand 0
   is an expression to be evaluated for side effects only.  */
DEFTREECODE (NULL_EXPR, "null_expr", tcc_expression, 1)

/* Same as ADDR_EXPR, except that if the operand represents a bit field,
   return the address of the byte containing the bit.  This is used
   for the 'Address attribute and never shows up in the tree.  */
DEFTREECODE (ATTR_ADDR_EXPR, "attr_addr_expr", tcc_reference, 1)

/* Here are the tree codes for the statement types known to Ada.  These
   must be at the end of this file to allow IS_ADA_STMT to work.  */

/* This is how record_code_position and insert_code_for work.  The former
   makes this tree node, whose operand is a statement.  The latter inserts
   the actual statements into this node.  Gimplification consists of
   just returning the inner statement.  */
DEFTREECODE (STMT_STMT, "stmt_stmt", tcc_statement, 1)

/* A loop.  LOOP_STMT_TOP_COND and LOOP_STMT_BOT_COND are the tests to exit a
   loop at the top and bottom, respectively.  LOOP_STMT_UPDATE is the statement
   to update the loop iterator at the continue point.  LOOP_STMT_BODY are the
   statements in the body of the loop.  LOOP_STMT_LABEL points to the LABEL_DECL
   of the end label of the loop.  */
DEFTREECODE (LOOP_STMT, "loop_stmt", tcc_statement, 5)

/* Conditionally exit a loop.  EXIT_STMT_COND is the condition, which, if
   true, will cause the loop to be exited.  If no condition is specified,
   the loop is unconditionally exited.  EXIT_STMT_LABEL is the end label
   corresponding to the loop to exit.  */
DEFTREECODE (EXIT_STMT, "exit_stmt", tcc_statement, 2)

/* A exception region.  REGION_STMT_BODY is the statement to be executed
   inside the region.  REGION_STMT_HANDLE is a statement that represents
   the exception handlers (usually a BLOCK_STMT of HANDLE_STMTs).
   REGION_STMT_BLOCK is the BLOCK node for the declarative region, if any.  */
DEFTREECODE (REGION_STMT, "region_stmt", tcc_statement, 3)

/* An exception handler.  HANDLER_STMT_ARG is the value to pass to 
   expand_start_catch, HANDLER_STMT_LIST is the list of statements for the
   handler itself, and HANDLER_STMT_BLOCK is the BLOCK node for this
   binding. */
DEFTREECODE (HANDLER_STMT, "handler_stmt", tcc_statement, 3)

/* A statement that emits a USE for its single operand.  */
DEFTREECODE (USE_STMT, "use_expr", tcc_statement, 1)
