tldm-universe/Ardent/UV/gcidir/include/tree.h

348 lines
5.8 KiB
C
Raw Normal View History

2024-09-09 21:51:08 +00:00
#ifndef h_tree
#define h_tree
/******************************************************************************
*
* Definition of a compiler TREE
*
* Module %M% Version %I% Date %H%
*
* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved
* This is unpublished proprietary source code of Ardent Software Inc.
* The copyright notice above does not evidence any actual or intented
* publication of such source code.
*
*******************************************************************************
*
* Maintenence log - insert most recent change descriptions at top
*
* Date.... GTAR# WHO Description.........................................
* 10/14/98 23801 SAP Change copyrights.
* 05/11/94 13836 RM Add iso to TRop
* 03/08/94 12297 JSW Add TRonerror
* 12/23/93 12408 SHK Additional change for 7.3.2 port to DEC AXP
* 10/20/93 12408 SHK Port 7.3.2 to DEC AXP
* 08/02/93 10978 SHK Port to DEC AXP
* 08/18/92 7571 JWT Wide 0 support for boolean tests
* 08/04/92 9630 JWT fix evalmove case where matrix element was both a
* source operand and the destination of an operator. The
* evaluation of the Omatrix_load operation is forced to
* be the last operand evaluated, to avoid a possible
* conflict with another operand overwritting the expected
* destination address register. New node type TRdelaymat
* is used to mark the node for delayed evaluation.
* 10/25/91 8806 RM Support for transaction management
* 08/22/90 7385 JWT NBASIC CONTINUE statement
* 08/14/90 7258 JWT merge INPUT syntaxes
* 10/06/89 4820 JWT add missing declaration
* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10.
*
*****************************************************************************/
#ifndef TREE
#define resolve( x ) fix_address( x )
#define fix_goto( x ) fix_address( x )
#define T_OP struct t_op
#define T_REF struct t_ref
#define T_REGR struct t_regr
#define T_INFO struct t_info
#define T_MOVE struct t_move
#define T_MOVE2 struct t_move2
#define T_MOVE3 struct t_move3
#define T_COND struct t_cond
#define T_TEST struct t_test
#define T_TEXP struct t_texp
#define T_JUMP struct t_jump
#define T_LOOP struct t_loop
#define T_FOR struct t_for
#define T_CALL struct t_call
#define T_ARR struct t_arr
#define T_TRAP struct t_trap
#define T_INAT struct t_inat
#define T_INFM struct t_infm
#define TREEDAT union treedat
#define TREE struct tree
#define TRop 1
#define TRref 2
#define TRlabel 3
#define TRlist 4
#define TRif 5
#define TRnum 6
#define TRint 7
#define TRstr 8
#define TRcond 9
#define TRstmt 10
#define TRclist 11
#define TRlock 12
#define TRifexp 13
#define TRmove 14
#define TRjump 15
#define TRloop 16
#define TRfor 17
#define TRkstr 18
#define TRcall 19
#define TRrw 20
#define TRmove2 21
#define TRmove3 22
#define TRarr 23
#define TRtrap 24
#define TRreg 26
#define TRinfo 27
#define TRmat 28
#define TRexit 29
#define TRinat 30
#define TRinfm 31
#define TRcont 32
#define TRtrans 33
#define TRdelaymat 34
#define TRonerror 35
#define CONDwhile 1
#define CONDuntil 2
#define CONDcase 3
#define CONDxwhl 4
#define CONDxntl 5
#define CONDtrans 6
struct t_ref
{
int symnum;
int offset;
};
struct t_regr
{
int regnum;
};
struct t_info
{
short flags;
};
struct t_op
{
short opcode;
short count;
TREE *child;
TREE *last;
short iso;
};
struct t_move
{
TREE *srce;
TREE *dest;
};
struct t_move2
{
TREE *srce;
TREE *dest1;
TREE *dest2;
};
struct t_move3
{
TREE *srce;
TREE *dest1;
TREE *dest2;
TREE *dest3;
};
struct t_cond
{
int type;
TREE *expr;
TREE *stmt;
int widez;
};
struct t_test
{
TREE *expr;
TREE *lstmt;
TREE *tstmt;
TREE *estmt;
int widez;
};
struct t_texp
{
TREE *cexpr;
TREE *texpr;
TREE *eexpr;
int widez;
};
struct t_jump
{
int opcode;
TREE *expr;
TREE *list;
};
struct t_loop
{
TREE *ctrl;
TREE *stmt;
TREE *cstmt;
int widez;
};
struct t_for
{
TREE *var;
TREE *init;
TREE *lim;
TREE *step;
short opcode;
};
struct t_call
{
short opcode;
TREE *name;
TREE *args;
};
struct t_arr
{
TREE *var;
TREE *x;
TREE *y;
};
struct t_trap
{
int opcode;
TREE *arg;
TREE *stmt;
};
struct t_inat
{ TREE *xpos;
TREE *ypos;
int flag;
};
struct t_infm
{ TREE *len;
TREE *fmt;
short cflag;
short uflag;
};
union treedat
{
T_REF ref;
T_REGR regr;
T_INFO info;
T_OP op;
UVADDR symbol;
T_OP list;
double number;
int integer;
STRING string;
T_MOVE move;
T_MOVE2 move2;
T_MOVE3 move3;
T_COND cond;
T_TEST test;
T_TEXP texp;
T_JUMP jump;
T_LOOP loop;
T_FOR four;
T_CALL call;
T_ARR arr;
T_TRAP trap;
T_INAT inat;
T_INFM infm;
};
struct tree
{
int type;
TREEDAT data;
TREE *link;
int line;
};
/***********************************************************************/
typedef union
{
int none;
int count;
int symbol;
int pc;
int flag;
int integer;
TREE *tree;
double number;
STRING string;
} YYSTYPE;
EXTERN int pc;
EXTERN void TR_free(),
pTR_free(),
fix_address();
EXTERN TREE *exitnode(),
*LtoS(),
*Ltrim(),
*arrnode(),
*callnode(),
*trapnode(),
*concatnode(),
*cond(),
*ifexpr(),
*ifnode(),
*inatnode(),
*infmnode(),
*intnode(),
*labelnode(),
*listadd(),
*listnode(),
*locknode(),
*move(),
*move2(),
*move3(),
*numnode(),
*opnode(),
*refnode(),
*regnode(),
*infonode(),
*stmt(),
*fornode(),
*loopnode(),
*jmpnode(),
*kstrnode(),
*vgcode(),
*ccode(),
*rwnode(),
*strnode(),
*trblock(),
*onnode();
EXTERN int code(),
forward(),
gcode(),
get_num(),
jcode(),
l_ref(),
leval(),
new_register(),
pcode(),
vcode();
#endif
#endif /* end of tree.h */