/* 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.  */

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:
*/
