/* 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_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 and SWITCH_BODY, respectively. */
DEFTREECODE (SWITCH_STMT, "switch_stmt", 'e', 2)

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

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