BSD 4_3_Net_2 release
[unix-history] / usr / src / usr.bin / pascal / src / tree_ty.h
/*-
* Copyright (c) 1980 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)tree_ty.h 5.2 (Berkeley) 4/16/91
*/
typedef struct /* T_FORU, T_FORD */
{
int line_no; /* line number of for */
struct tnode *init_asg; /* initialization */
struct tnode *term_expr; /* termination expresssion */
struct tnode *for_stmnt; /* for statement */
} FOR_NODE;
typedef struct /* T_ASGN */
{
int line_no; /* line number of := */
struct tnode *lhs_var;
struct tnode *rhs_expr;
} ASG_NODE;
#ifndef PTREE
typedef struct /* T_VAR */
{
int line_no;
char *cptr;
struct tnode *qual; /* list node */
} VAR_NODE;
typedef struct /* T_FIELD */
{
char *id_ptr;
struct tnode *other;
} FIELD_NODE;
#else
typedef struct /* T_VAR */
{
int line_no;
char *cptr;
struct tnode *qual;
struct nl *nl_entry;
} VAR_NODE;
typedef struct /* T_FIELD */
{
char *id_ptr;
struct tnode *other;
struct nl *nl_entry;
} FIELD_NODE;
#endif
typedef struct /* T_MOD, T_MULT, T_DIVD, T_DIV,
T_AND, T_ADD, T_SUB, T_OR,
T_EQ, T_LT, T_GT, T_NE, T_LE
T_GE, T_IN */
{
int const_tag;
struct tnode *lhs;
struct tnode *rhs;
} EXPR_NODE;
typedef struct /* T_LISTPP */
{
struct tnode *list; /* check the types on these,
this is used in pclvalue and lvalue */
struct tnode *next;
} LIST_NODE;
typedef struct /* T_IF, T_IFEL, T_IFX */
{
int line_no;
struct tnode *cond_expr;
struct tnode *then_stmnt;
struct tnode *else_stmnt;
} IF_NODE;
typedef struct /* T_MINUS, T_PLUS, T_NOT */
{
int const_tag;
struct tnode *expr;
} UN_EXPR;
typedef struct /* T_PDEC, T_FDEC, T_PROG */
{
int line_no;
char *id_ptr;
struct tnode *param_list;
struct tnode *type;
} P_DEC;
typedef struct /* T_PVAL, T_PVAR */
{
struct tnode *id_list;
struct tnode *type;
} PARAM;
typedef struct /* T_PFUNC, T_PPROC */
{
struct tnode *id_list,
*type,
*param_list;
int line_no;
} PFUNC_NODE;
typedef struct /* T_NIL */
{
int const_tag;
} NIL_NODE;
typedef struct /* T_STRNG, T_INT, T_FINT, T_BINT */
{
int const_tag;
char *cptr;
} CONST_NODE;
typedef struct /* T_CSTRNG, T_ID, T_CFINT, T_CINT, T_CBINT */
{
char *cptr;
} CHAR_CONST;
typedef struct /* T_PLUSC, T_MINUSC */
{
struct tnode *number;
} SIGN_CONST;
#ifdef PTREE
typedef struct
{
int line_no
struct tnode *type;
struct nl *nl_entry;
} COMP_TY;
#else
typedef struct /* T_TYPACK, T_TYSCAL, T_TYFILE, T_TYSET, T_TYREC */
{
int line_no;
struct tnode *type;
} COMP_TY;
#endif
typedef struct /* T_TYPTR */
{
int line_no;
struct tnode *id_node;
} PTR_TY;
typedef struct /* T_TYRANG */
{
int line_no;
struct tnode *const1;
struct tnode *const2;
} RANG_TY;
typedef struct /* T_TYCRANG */
{
int line_no;
struct tnode *lwb_var;
struct tnode *upb_var;
struct tnode *type;
} CRANG_TY;
typedef struct /* T_TYARY, T_TYCARY */
{
int line_no;
struct tnode *type_list;
struct tnode *type;
} ARY_TY;
typedef struct /* T_TYVARNT */
{
int line_no;
struct tnode *const_list;
struct tnode *fld_list;
} TYVARNT;
typedef struct /* T_TYVARPT */
{
int line_no;
char *cptr;
struct tnode *type_id;
struct tnode *var_list;
} VARPT;
typedef struct /* T_CSTAT */
{
int line_no;
struct tnode *const_list;
struct tnode *stmnt;
} C_STMNT;
typedef struct /* T_BSTL, T_BLOCK */
{
int line_no;
struct tnode *stmnt_list;
} STMNT_BLCK;
typedef struct /* T_FLDLST */
{
int line_no;
struct tnode *fix_list;
struct tnode *variant;
} FLDLST;
typedef struct /* T_RFIELD */
{
int line_no;
struct tnode *id_list;
struct tnode *type;
} RFIELD;
typedef struct /* T_LABEL */
{
int line_no;
char *lbl_ptr;
struct tnode *stmnt;
} LABEL_NODE;
typedef struct /* T_GOTO */
{
int line_no;
char *lbl_ptr;
} GOTO_NODE;
typedef struct /* T_PCALL, T_FCALL */
{
int line_no;
char *proc_id;
struct tnode *arg;
} PCALL_NODE;
typedef struct /* T_CASE, T_WHILE */
{
int line_no;
struct tnode *expr;
struct tnode *stmnt_list;
} WHI_CAS;
typedef struct /* T_WITH */
{
int line_no;
struct tnode *var_list;
struct tnode *stmnt;
} WITH_NODE;
typedef struct /* T_REPEAT */
{
int line_no;
struct tnode *stmnt_list;
struct tnode *term_expr;
} REPEAT;
typedef struct /* T_RANG */
{
struct tnode *expr1;
struct tnode *expr2;
} RANG;
typedef struct /* T_CSET */
{
int const_tag;
struct tnode *el_list;
} CSET_NODE;
typedef struct /* T_ARY */
{
struct tnode *expr_list;
} ARY_NODE;
typedef struct /* T_WEXPR */
{
struct tnode *expr1;
struct tnode *expr2;
struct tnode *expr3;
} WEXPR_NODE;
typedef struct /* T_TYID */
{
int line_no;
char *idptr;
} TYID_NODE;
typedef struct /* anything with linenumber in first field */
{
int line_no;
} LINED;
struct tnode
{
int tag;
union
{
FOR_NODE t_for_node;
ASG_NODE t_asg_node;
VAR_NODE t_var_node;
EXPR_NODE t_expr_node;
LIST_NODE t_list_node;
IF_NODE t_if_node;
UN_EXPR t_un_expr;
P_DEC t_p_dec;
PARAM t_param;
PFUNC_NODE t_pfunc_node;
NIL_NODE t_nil_node;
CONST_NODE t_const_node;
CHAR_CONST t_char_const;
SIGN_CONST t_sign_const;
COMP_TY t_comp_ty;
PTR_TY t_ptr_ty;
RANG_TY t_rang_ty;
CRANG_TY t_crang_ty;
ARY_TY t_ary_ty;
VARPT t_varpt;
TYVARNT t_tyvarnt;
C_STMNT t_c_stmnt;
STMNT_BLCK t_stmnt_blck;
FLDLST t_fldlst;
RFIELD t_rfield;
LABEL_NODE t_label_node;
PCALL_NODE t_pcall_node;
WHI_CAS t_whi_cas;
WITH_NODE t_with_node;
REPEAT t_repeat;
RANG t_rang;
CSET_NODE t_cset_node;
ARY_NODE t_ary_node;
WEXPR_NODE t_wexpr_node;
FIELD_NODE t_field_node;
TYID_NODE t_tyid_node;
LINED t_lined;
GOTO_NODE t_goto_node;
} tree_ele;
};
#define for_node tree_ele.t_for_node
#define asg_node tree_ele.t_asg_node
#define var_node tree_ele.t_var_node
#define expr_node tree_ele.t_expr_node
#define list_node tree_ele.t_list_node
#define if_node tree_ele.t_if_node
#define un_expr tree_ele.t_un_expr
#define p_dec tree_ele.t_p_dec
#define param tree_ele.t_param
#define pfunc_node tree_ele.t_pfunc_node
#define nil_node tree_ele.t_nil_node
#define const_node tree_ele.t_const_node
#define char_const tree_ele.t_char_const
#define sign_const tree_ele.t_sign_const
#define comp_ty tree_ele.t_comp_ty
#define ptr_ty tree_ele.t_ptr_ty
#define rang_ty tree_ele.t_rang_ty
#define crang_ty tree_ele.t_crang_ty
#define ary_ty tree_ele.t_ary_ty
#define varpt tree_ele.t_varpt
#define tyvarnt tree_ele.t_tyvarnt
#define c_stmnt tree_ele.t_c_stmnt
#define stmnt_blck tree_ele.t_stmnt_blck
#define fldlst tree_ele.t_fldlst
#define rfield tree_ele.t_rfield
#define label_node tree_ele.t_label_node
#define pcall_node tree_ele.t_pcall_node
#define whi_cas tree_ele.t_whi_cas
#define with_node tree_ele.t_with_node
#define repeat tree_ele.t_repeat
#define rang tree_ele.t_rang
#define cset_node tree_ele.t_cset_node
#define ary_node tree_ele.t_ary_node
#define wexpr_node tree_ele.t_wexpr_node
#define field_node tree_ele.t_field_node
#define tyid_node tree_ele.t_tyid_node
#define lined tree_ele.t_lined
#define goto_node tree_ele.t_goto_node