|
|
BSD 4.3tahoe
/* pass1.h 4.2 85/08/22 */
#ifndef _PASS1_
#define _PASS1_
#include "macdefs.h"
#include "manifest.h"
/*
* Symbol table definition.
*
* Colliding entries are moved down with a standard
* probe (no quadratic rehash here) and moved back when
* entries are cleared.
*/
struct symtab {
#ifndef FLEXNAMES
char sname[NCHNAM];
#else
char *sname;
#endif
struct symtab *snext; /* link to other symbols in the same scope */
TWORD stype; /* type word */
char sclass; /* storage class */
char slevel; /* scope level */
char sflags; /* flags, see below */
int offset; /* offset or value */
short dimoff; /* offset into the dimension table */
short sizoff; /* offset into the size table */
int suse; /* line number of last use of the variable */
};
/*
* Storage classes
*/
#define SNULL 0 /* initial value */
#define AUTO 1 /* automatic (on stack) */
#define EXTERN 2 /* external reference */
#define STATIC 3 /* static scope */
#define REGISTER 4 /* register requested */
#define EXTDEF 5 /* external definition */
#define LABEL 6 /* label definition */
#define ULABEL 7 /* undefined label reference */
#define MOS 8 /* member of structure */
#define PARAM 9 /* parameter */
#define STNAME 10 /* structure name */
#define MOU 11 /* member of union */
#define UNAME 12 /* union name */
#define TYPEDEF 13 /* typedef name */
#define FORTRAN 14 /* fortran function */
#define ENAME 15 /* enumeration name */
#define MOE 16 /* member of enumeration */
#define UFORTRAN 17 /* undefined fortran reference */
#define USTATIC 18 /* undefined static reference */
/* field size is ORed in */
#define FIELD 0100
#define FLDSIZ 077
#ifndef BUG1
extern char *scnames();
#endif
/*
* Symbol table flags
*/
#define SMOS 01 /* member of structure */
#define SHIDDEN 02 /* hidden in current scope */
#define SHIDES 04 /* hides symbol in outer scope */
#define SSET 010 /* symbol assigned to */
#define SREF 020 /* symbol referenced */
#define SNONUNIQ 040 /* non-unique structure member */
#define STAG 0100 /* structure tag name */
/*
* Location counters
*/
#define PROG 0 /* program segment */
#define DATA 1 /* data segment */
#define ADATA 2 /* array data segment */
#define STRNG 3 /* string data segment */
#define ISTRNG 4 /* initialized string segment */
#define STAB 5 /* symbol table segment */
#ifndef ONEPASS
#include "ndu.h"
#endif
#ifndef FIXDEF
#define FIXDEF(p)
#endif
#ifndef FIXARG
#define FIXARG(p)
#endif
#ifndef FIXSTRUCT
#define FIXSTRUCT(a,b)
#endif
/* alignment of initialized quantities */
#ifndef AL_INIT
#define AL_INIT ALINT
#endif
/*
* External definitions
*/
struct sw { /* switch table */
CONSZ sval; /* case value */
int slab; /* associated label */
};
extern struct sw swtab[];
extern struct sw *swp;
extern int swx;
extern int ftnno;
extern int blevel;
extern int instruct, stwart;
extern int lineno, nerrors;
extern CONSZ lastcon;
extern float fcon;
extern double dcon;
extern char ftitle[];
extern char ititle[];
extern struct symtab stab[];
extern int curftn;
extern int curclass;
extern int curdim;
extern int dimtab[];
extern int paramstk[];
extern int paramno;
extern int autooff, argoff, strucoff;
extern int regvar;
extern int minrvar;
extern int brkflag;
typedef union {
int intval;
NODE * nodep;
} YYSTYPE;
extern YYSTYPE yylval;
extern char yytext[];
extern int strflg;
extern OFFSZ inoff;
extern int reached;
/* tunnel to buildtree for name id's */
extern int idname;
extern NODE node[];
extern NODE *lastfree;
extern int cflag, hflag, pflag;
/* various labels */
extern int brklab;
extern int contlab;
extern int flostat;
extern int retlab;
extern int retstat;
extern int asavbc[], *psavbc;
/* declarations of various functions */
extern NODE
*buildtree(),
*bdty(),
*mkty(),
*rstruct(),
*dclstruct(),
*getstr(),
*tymerge(),
*stref(),
*offcon(),
*bcon(),
*bpsize(),
*convert(),
*pconvert(),
*oconvert(),
*ptmatch(),
*tymatch(),
*makety(),
*block(),
*doszof(),
*talloc(),
*optim(),
*fixargs(),
*clocal();
OFFSZ tsize(),
psize();
TWORD types();
double atof();
char *exname(), *exdcon();
#define checkst(x)
#ifndef CHARCAST
/* to make character constants into character connstants */
/* this is a macro to defend against cross-compilers, etc. */
#define CHARCAST(x) (char)(x)
#endif
#endif
/*
* Flags used in structures/unions
*/
#define SEENAME 01
#define INSTRUCT 02
#define INUNION 04
#define FUNNYNAME 010
#define TAGNAME 020
/*
* Flags used in the (elementary) flow analysis ...
*/
#define FBRK 02
#define FCONT 04
#define FDEF 010
#define FLOOP 020
/*
* Flags used for return status
*/
#define RETVAL 1
#define NRETVAL 2
#define NONAME 040000 /* marks constant w/o name field */
#define NOOFFSET (-10201) /* mark an offset which is undefined */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.