BSD 4_3_Reno development
[unix-history] / usr / src / libexec / pcc / mip / manifest.h
/* manifest.h 4.2 87/12/09 */
#ifndef _MANIFEST_
#define _MANIFEST_
#include <stdio.h>
#include "pcclocal.h"
#include "config.h"
#define DSIZE (MAXOP+1) /* DSIZE is the size of the dope array */
#define NOLAB (-1) /* no label with constant */
/*
* Node types
*/
#define LTYPE 02 /* leaf */
#define UTYPE 04 /* unary */
#define BITYPE 010 /* binary */
/*
* Bogus type values
*/
#define TNULL INCREF(MOETY) /* pointer to MOETY -- impossible type */
#define TVOID FTN /* function returning UNDEF (for void) */
/*
* Type packing constants
*/
#define TMASK 060 /* mask for 1st component of compound type */
#define TMASK1 0300 /* mask for 2nd component of compound type */
#define TMASK2 0360 /* mask for 3rd component of compound type */
#define BTMASK 017 /* basic type mask */
#define BTSHIFT 4 /* basic type shift */
#define TSHIFT 2 /* shift count to get next type component */
/*
* Type manipulation 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))
/* advance x to a multiple of y */
#define SETOFF(x,y) if ((x)%(y) != 0) (x) = (((x)/(y) + 1) * (y))
/* can y bits be added to x without overflowing z */
#define NOFIT(x,y,z) (((x)%(z) + (y)) > (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)
/*
* External declarations, typedefs and the like
*/
#ifdef FLEXNAMES
char *hash();
char *savestr();
char *tstr();
extern int tstrused;
extern char *tstrbuf[];
extern char **curtstr;
#define freetstr() curtstr = tstrbuf, tstrused = 0
#endif
extern int nerrors; /* number of errors seen so far */
extern int dope[]; /* a vector containing operator information */
extern char *opst[]; /* a vector containing names for ops */
typedef union ndu NODE;
typedef unsigned int TWORD;
#define NIL (NODE *)0
#ifndef ONEPASS
#ifndef EXPR
#define EXPR '.'
#endif
#ifndef BBEG
#define BBEG '['
#endif
#ifndef BEND
#define BEND ']'
#endif
#else
#include "onepass.h"
#endif
#endif