Bell 32V development
[unix-history] / usr / src / cmd / mip / manifest
# include <stdio.h>
/* manifest constant file for the lex/yacc interface */
# define ERROR 1
# define NAME 2
# define STRING 3
# define ICON 4
# define FCON 5
# define PLUS 6
# define MINUS 8
# define MUL 11
# define AND 14
# define OR 17
# define ER 19
# define QUEST 21
# define COLON 22
# define ANDAND 23
# define OROR 24
/* special interfaces for yacc alone */
/* These serve as abbreviations of 2 or more ops:
ASOP =, = ops
RELOP LE,LT,GE,GT
EQUOP EQ,NE
DIVOP DIV,MOD
SHIFTOP LS,RS
ICOP ICR,DECR
UNOP NOT,COMPL
STROP DOT,STREF
*/
# define ASOP 25
# define RELOP 26
# define EQUOP 27
# define DIVOP 28
# define SHIFTOP 29
# define INCOP 30
# define UNOP 31
# define STROP 32
/* reserved words, etc */
# define TYPE 33
# define CLASS 34
# define STRUCT 35
# define RETURN 36
# define GOTO 37
# define IF 38
# define ELSE 39
# define SWITCH 40
# define BREAK 41
# define CONTINUE 42
# define WHILE 43
# define DO 44
# define FOR 45
# define DEFAULT 46
# define CASE 47
# define SIZEOF 48
# define ENUM 49
/* little symbols, etc. */
/* namely,
LP (
RP )
LC {
RC }
LB [
RB ]
CM ,
SM ;
*/
# define LP 50
# define RP 51
# define LC 52
# define RC 53
# define LB 54
# define RB 55
# define CM 56
# define SM 57
# define ASSIGN 58
/* END OF YACC */
/* left over tree building operators */
# define COMOP 59
# define DIV 60
# define MOD 62
# define LS 64
# define RS 66
# define DOT 68
# define STREF 69
# define CALL 70
# define FORTCALL 73
# define NOT 76
# define COMPL 77
# define INCR 78
# define DECR 79
# define EQ 80
# define NE 81
# define LE 82
# define LT 83
# define GE 84
# define GT 85
# define ULE 86
# define ULT 87
# define UGE 88
# define UGT 89
# define SETBIT 90
# define TESTBIT 91
# define RESETBIT 92
# define ARS 93
# define REG 94
# define OREG 95
# define CCODES 96
# define FREE 97
# define STASG 98
# define STARG 99
# define STCALL 100
/* some conversion operators */
# define FLD 103
# define SCONV 104
# define PCONV 105
# define PMCONV 106
# define PVCONV 107
/* special node operators, used for special contexts */
# define FORCE 108
# define CBRANCH 109
# define INIT 110
# define CAST 111
/* node types */
# define LTYPE 02
# define UTYPE 04
# define BITYPE 010
/* DSIZE is the size of the dope array */
# define DSIZE CAST+1
/* type names, used in symbol table building */
# define TNULL PTR /* pointer to UNDEF */
# define UNDEF 0
# define FARG 1
# define CHAR 2
# define SHORT 3
# define INT 4
# define LONG 5
# define FLOAT 6
# define DOUBLE 7
# define STRTY 8
# define UNIONTY 9
# define ENUMTY 10
# define MOETY 11
# define UCHAR 12
# define USHORT 13
# define UNSIGNED 14
# define ULONG 15
# define ASG 1+
# define UNARY 2+
# define NOASG (-1)+
# define NOUNARY (-2)+
/* various flags */
# define NOLAB (-1)
/* type modifiers */
# define PTR 020
# define FTN 040
# define ARY 060
/* type packing constants */
# define TMASK 060
# define TMASK1 0300
# define TMASK2 0360
# define BTMASK 017
# define BTSHIFT 4
# define TSHIFT 2
/* macros */
# define MODTYPE(x,y) x = (x&(~BTMASK))|y /* set basic type of x to y */
# define BTYPE(x) (x&BTMASK) /* basic type of x */
# define ISUNSIGNED(x) ((x)<=ULONG&&(x)>=UCHAR)
# define UNSIGNABLE(x) ((x)<=LONG&&(x)>=CHAR)
# define ENUNSIGN(x) ((x)+(UNSIGNED-INT))
# define DEUNSIGN(x) ((x)+(INT-UNSIGNED))
# define ISPTR(x) ((x&TMASK)==PTR)
# define ISFTN(x) ((x&TMASK)==FTN) /* is x a function type */
# define ISARY(x) ((x&TMASK)==ARY) /* is x an array type */
# define INCREF(x) (((x&~BTMASK)<<TSHIFT)|PTR|(x&BTMASK))
# define DECREF(x) (((x>>TSHIFT)&~BTMASK)|(x&BTMASK))
# define SETOFF(x,y) if( x%y != 0 ) x = ( (x/y + 1) * y)
/* advance x to a multiple of y */
# define NOFIT(x,y,z) ( (x%z + y) > z )
/* can y bits be added to x without overflowing z */
/* pack and unpack field descriptors (size and offset) */
# define PKFIELD(s,o) ((o<<6)|s)
# define UPKFSZ(v) (v&077)
# define UPKFOFF(v) (v>>6)
/* operator information */
# define TYFLG 016
# define ASGFLG 01
# define LOGFLG 020
# define SIMPFLG 040
# define COMMFLG 0100
# define DIVFLG 0200
# define FLOFLG 0400
# define LTYFLG 01000
# define CALLFLG 02000
# define MULFLG 04000
# define SHFFLG 010000
# define ASGOPFLG 020000
# define SPFLG 040000
#define optype(o) (dope[o]&TYFLG)
#define asgop(o) (dope[o]&ASGFLG)
#define logop(o) (dope[o]&LOGFLG)
#define callop(o) (dope[o]&CALLFLG)
/* table sizes */
# define BCSZ 100 /* size of the table to save break and continue labels */
# define SYMTSZ 450 /* size of the symbol table */
# define DIMTABSZ 750 /* size of the dimension/size table */
# define PARAMSZ 100 /* size of the parameter stack */
# ifndef FORT
# define TREESZ 350 /* space for building parse tree */
# else
# define TREESZ 1000
# endif
# define SWITSZ 250 /* size of switch table */
# define NCHNAM 8 /* number of characters in a name */
/* common defined variables */
extern int nerrors; /* number of errors seen so far */
typedef union ndu NODE;
typedef unsigned int TWORD;
extern NODE *NIL; /* a pointer which will always have 0 in it */
extern int dope[]; /* a vector containing operator information */
extern char *opst[]; /* a vector containing names for ops */
# ifdef ONEPASS
/* in one-pass operation, define the tree nodes */
union ndu {
struct {
int op;
int rall;
TWORD type;
int su;
char name[NCHNAM];
NODE *left;
NODE *right;
};
struct {
int op;
int rall;
TWORD type;
int su;
char name[NCHNAM];
CONSZ lval;
int rval;
};
struct {
int op, rall;
TWORD type;
int su;
int label; /* for use with branching */
};
struct {
int op, rall;
TWORD type;
int su;
int stsize; /* sizes of structure objects */
int stalign; /* alignment of structure objects */
};
struct {
int op;
int cdim;
TWORD type;
int csiz;
};
struct {
/* this structure is used when a floating point constant
is being computed */
int op;
int cdim;
TWORD type;
int csiz;
double dval;
};
};
# endif