/* This file contains the definitions and documentation for the
   additional tree codes used in the CHILL front end (see tree.def
   for the standard codes).
   Copyright (C) 1992, 1993 Free Software Foundation, Inc.

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, 675 Mass Ave, Cambridge, MA 02139, USA.  */


/* 
 * CHILL types.
 */
DEFTREECODE (GRANT_TYPE, "grant_type", 't', 0)
DEFTREECODE (SEIZE_TYPE, "seize_type", 't', 0)
/* 
 * CHILL decls.
 */
DEFTREECODE (KEYWORD_DECL, "keyword_decl", 'd', 0)
DEFTREECODE (INSTANCE_METHOD_DECL, "instance_method_decl", 'd', 0)
DEFTREECODE (CLASS_METHOD_DECL, "class_method_decl", 'd', 0)

/* A 'SEIZE (OLD->NEW)!POSTFIX' or 'GRANT (OLD->NEW)!POSTFIX' is
   represented as an ALIAS_DECL where DECL_OLD_PREFIX, DECL_NEW_PREFIX,
   and DECL_POSTFIX points to OLD, NEW, and POSTFIX, repectively.
   These are IDENTIFIER_NODEs, or NULL if empty.
   DECL_NAME is NEW!POSTFIX.  After binding, DECL_ABSTRACT_ORIGIN
   (if not an error_mark) points to a decl whose DECL_NAME is OLD!POSTFIX.
   and which this name is linked to.
   For SEIZE, DECL_SEIZEFILE names the most recent use_seize_file directive.
   For GRANT, DECL_SEIZEFILE names the seizefile doing the granting. */
DEFTREECODE (ALIAS_DECL, "alias_decl", 'd', 0)

/* A variable, which is BASED on a pointer variable in DECL_ABSTRACT_ORIGIN. */
DEFTREECODE (BASED_DECL, "based_decl", 'd', 0)

/* A pseudo-variable declared by a DO WITH. */
DEFTREECODE (WITH_DECL, "with_decl", 'd', 0)

/*
 * CHILL exprs.
 */
DEFTREECODE (CONCAT_EXPR, "concat_expr", '2', 2)

/* A slice (sub-array or sub-string) of operand 0, where
   operand 1 is the start of the slice, and operand 2 is its length.
   Currently, only used for bitstring sclices. */
DEFTREECODE (SLICE_EXPR, "slice_expr", 'e', 3)

/* Later, SET_IN_EXPR might be replaced by BIT_FIELD_REF or IN_EXPR. */
DEFTREECODE (SET_IN_EXPR, "set_in_expr", '2', 2)

/* A CASE_EXPR EX implements Chill CASE expression.
   TREE_OPERAND (EX, 0) is a TREE_LIST representing the <case selector list>,
   with one node for each expression.  (Only one is supported by the
   current implementation.)
   TREE_OPERAND (EX, 1) is also a TREE_LIST, with one node for each
   <value case alternative>.   The TREE_VALUE of these node is the
   <sub expression> (case element body); the TREE_PURPOSE contains
   the <case label specification>.  (The TREE_PURPOSE for the
   optional ELSE (default) branch is NULL_TREE.)  Each <case label
   specification> is also represented as a list with one TREE_LIST
   node for each <case label list> (though only length==1 is currently
   supported).  And finally: each <case label list> is again a list
   with one TREE_LIST node for each <case label>. */
DEFTREECODE (CASE_EXPR, "case_expr", 'e', 2)

/* Powerset and static bit array operations.
   Operands have same mode as result.  */
DEFTREECODE (SET_NOT_EXPR,  "set_not_expr",  '1', 1)
DEFTREECODE (SET_IOR_EXPR,  "set_ior_expr",  '2', 2)
DEFTREECODE (SET_XOR_EXPR,  "set_xor_expr",  '2', 2)
DEFTREECODE (SET_AND_EXPR,  "set_and_expr",  '2', 2)
DEFTREECODE (SET_DIFF_EXPR, "set_diff_expr", '2', 2)
DEFTREECODE (PAREN_EXPR,  "paren_expr",  '1', 1)

DEFTREECODE (STRING_EQ_EXPR, "string_eq_expr", '2', 2)
DEFTREECODE (STRING_LT_EXPR, "string_lt_expr", '2', 2)

/* Used to represent a string repetition expression, until
   we have a type for it;  a SET_TYPE replicator needs a
   TYPE_DOMAIN even if it represents the empty set */
DEFTREECODE (REPLICATE_EXPR, "replicate_expr", 'e', 2)

/* An undefined value.  Used for the Chill operator '*',
   and sometimes for padding. */
DEFTREECODE (UNDEFINED_EXPR, "undefined_expr", 'e', 0)

/* Used to represent a process instance */
DEFTREECODE (INSTANCE_TYPE, "instance_type", 't', 0)

/* Used to represent a reference to an array of bitfields. Currently restricted
   to fields which are 1 bit wide.  */
DEFTREECODE (PACKED_ARRAY_REF, "packed_array_ref", 'r', 2)

/* ALSO NOTE:  LANG_TYPE is used for two things during pass 1;
   such a node is converted to some other type node during satisfy.
   If CH_NOVELTY_FLAG is set, then this node is a logical copy of
   its TREE_TYPE, but with a different novelty.
   If TYPE_READONLY is set, then the node stands for 'READ M'
   where M is the TREE_TYPE.  */
