/* 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,
   1999, 2000, 2001 Free Software Foundation, Inc.
   Written by Benjamin Chelf <chelf@codesourcery.com>

This file is part of GCC.

GCC 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.

GCC 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 GCC; see the file COPYING.  If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.  */

/* Tree nodes relevant to both C and C++. These were originally in
cp-tree.def in the cp subdir.  */

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

DEFTREECODE (SIZEOF_EXPR, "sizeof_expr", '1', 1)
DEFTREECODE (ARROW_EXPR, "arrow_expr", 'e', 1)
DEFTREECODE (ALIGNOF_EXPR, "alignof_expr", '1', 1)

/* Used to represent an expression statement.  Use `EXPR_STMT_EXPR' to
   obtain the expression.  */
DEFTREECODE (EXPR_STMT, "expr_stmt", 'e', 1)

/* Used to represent a brace-enclosed block.  The operand is
   COMPOUND_BODY.  */
DEFTREECODE (COMPOUND_STMT, "compound_stmt", 'e', 1)

/* Used to represent a local declaration. The operand is
   DECL_STMT_DECL.  */
DEFTREECODE (DECL_STMT, "decl_stmt", 'e', 1)

/* Represents an 'if' statement. The operands are IF_COND,
   THEN_CLAUSE, and ELSE_CLAUSE, respectively.  */
DEFTREECODE (IF_STMT, "if_stmt", 'e', 3)

/* Used to represent a `for' statement. The operands are
   FOR_INIT_STMT, FOR_COND, FOR_EXPR, and FOR_BODY, respectively.  */
DEFTREECODE (FOR_STMT, "for_stmt", 'e', 4)

/* Used to represent a 'while' statement. The operands are WHILE_COND
   and WHILE_BODY, respectively.  */
DEFTREECODE (WHILE_STMT, "while_stmt", 'e', 2)

/* Used to represent a 'do' statement. The operands are DO_BODY and
   DO_COND, respectively.  */
DEFTREECODE (DO_STMT, "do_stmt", 'e', 2)

/* Used to represent a 'return' statement. The operand is
   RETURN_STMT_EXPR.  */
DEFTREECODE (RETURN_STMT, "return_stmt", 'e', 1)

/* Used to represent a 'break' statement.  */
DEFTREECODE (BREAK_STMT, "break_stmt", 'e', 0)

/* Used to represent a 'continue' statement.  */
DEFTREECODE (CONTINUE_STMT, "continue_stmt", 'e', 0)

/* Used to represent a 'switch' statement. The operands are
   SWITCH_COND, SWITCH_BODY and SWITCH_TYPE, respectively.  */
DEFTREECODE (SWITCH_STMT, "switch_stmt", 'e', 3)

/* Used to represent a 'goto' statement. The operand is GOTO_DESTINATION.  */
DEFTREECODE (GOTO_STMT, "goto_stmt", 'e', 1)

/* Used to represent a 'label' statement. The operand is a LABEL_DECL
   and can be obtained through the macro LABEL_STMT_LABEL.  */
DEFTREECODE (LABEL_STMT, "label_stmt", 'e', 1)

/* Used to represent an inline assembly statement.  */
DEFTREECODE (ASM_STMT, "asm_stmt", 'e', 5)

/* A SCOPE_STMT marks the beginning or end of a scope.  If
   SCOPE_BEGIN_P holds, then this is the start of a scope.  If
   SCOPE_END_P holds, then this is the end of a scope.  If
   SCOPE_NULLIFIED_P holds then there turned out to be no variables in
   this scope.  The SCOPE_STMT_BLOCK is the BLOCK containing the
   variables declared in this scope.  */
DEFTREECODE (SCOPE_STMT, "scope_stmt", 'e', 1)

/* A FILE_STMT marks the spot where a function changes files.  It has no
   other semantics.  FILE_STMT_FILENAME gives the name.  */
DEFTREECODE (FILE_STMT, "file_stmt", 'e', 1)

/* Used to represent a CASE_LABEL. The operands are CASE_LOW and
   CASE_HIGH, respectively. If CASE_LOW is NULL_TREE, the label is a
   'default' label. If CASE_HIGH is NULL_TREE, the label is a normal case
   label.  The CASE_LABEL_DECL is a LABEL_DECL for this node.  */
DEFTREECODE (CASE_LABEL, "case_label", 'e', 3)

/* A STMT_EXPR represents a statement-expression.  The
   STMT_EXPR_STMT is the statement given by the expression.  */
DEFTREECODE (STMT_EXPR, "stmt_expr", 'e', 1)

/* A COMPOUND_LITERAL_EXPR represents a C99 compound literal.  The
   COMPOUND_LITERAL_EXPR_DECL_STMT is the a DECL_STMT containing the decl
   for the anonymous object represented by the COMPOUND_LITERAL;
   the DECL_INITIAL of that decl is the CONSTRUCTOR that initializes
   the compound literal.  */
DEFTREECODE (COMPOUND_LITERAL_EXPR, "compound_literal_expr", 'e', 1)

/* A CLEANUP_STMT marks the point at which a declaration is fully
   constructed.  If, after this point, the CLEANUP_DECL goes out of
   scope, the CLEANUP_EXPR must be run.  */
DEFTREECODE (CLEANUP_STMT, "cleanup_stmt", 'e', 2)

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