1: #ifndef lint 2: static char *sccsid ="@(#)xdefs.c 4.3 (Berkeley) 3/19/85"; 3: #endif lint 4: 5: # include "pass1.h" 6: 7: /* communication between lexical routines */ 8: 9: char ftitle[100] = ""; /* title of the file */ 10: char ititle[100] = ""; /* title of initial file */ 11: int lineno; /* line number of the input file */ 12: 13: CONSZ lastcon; /* the last constant read by the lexical analyzer */ 14: float fcon; /* the last float read by the lexical analyzer */ 15: double dcon; /* the last double read by the lexical analyzer */ 16: 17: 18: /* symbol table maintainence */ 19: 20: struct symtab stab[SYMTSZ+1]; /* one extra slot for scratch */ 21: 22: int curftn; /* "current" function */ 23: int ftnno; /* "current" function number */ 24: 25: int curclass, /* current storage class */ 26: instruct, /* "in structure" flag */ 27: stwart, /* for accessing names which are structure members or names */ 28: blevel, /* block level: 0 for extern, 1 for ftn args, >=2 inside function */ 29: curdim; /* current offset into the dimension table */ 30: 31: int dimtab[ DIMTABSZ ]; 32: 33: int paramstk[ PARAMSZ ]; /* used in the definition of function parameters */ 34: int paramno; /* the number of parameters */ 35: int autooff, /* the next unused automatic offset */ 36: argoff, /* the next unused argument offset */ 37: strucoff; /* the next structure offset position */ 38: int regvar; /* the next free register for register variables */ 39: int minrvar; /* the smallest that regvar gets witing a function */ 40: OFFSZ inoff; /* offset of external element being initialized */ 41: int brkflag = 0; /* complain about break statements not reached */ 42: 43: struct sw swtab[SWITSZ]; /* table for cases within a switch */ 44: struct sw *swp; /* pointer to next free entry in swtab */ 45: int swx; /* index of beginning of cases for current switch */ 46: 47: /* debugging flag */ 48: int xdebug = 0; 49: 50: int strflg; /* if on, strings are to be treated as lists */ 51: 52: int reached; /* true if statement can be reached... */ 53: 54: int idname; /* tunnel to buildtree for name id's */ 55: 56: 57: NODE node[TREESZ]; 58: 59: int cflag = 0; /* do we check for funny casts */ 60: int hflag = 0; /* do we check for various heuristics which may indicate errors */ 61: int pflag = 0; /* do we check for portable constructions */ 62: 63: int brklab; 64: int contlab; 65: int flostat; 66: int retlab = NOLAB; 67: int retstat; 68: 69: /* save array for break, continue labels, and flostat */ 70: 71: int asavbc[BCSZ]; 72: int *psavbc = asavbc ; 73: 74: # ifndef BUG1 75: static char * 76: ccnames[] = { /* names of storage classes */ 77: "SNULL", 78: "AUTO", 79: "EXTERN", 80: "STATIC", 81: "REGISTER", 82: "EXTDEF", 83: "LABEL", 84: "ULABEL", 85: "MOS", 86: "PARAM", 87: "STNAME", 88: "MOU", 89: "UNAME", 90: "TYPEDEF", 91: "FORTRAN", 92: "ENAME", 93: "MOE", 94: "UFORTRAN", 95: "USTATIC", 96: }; 97: 98: char * scnames( c ) register c; { 99: /* return the name for storage class c */ 100: static char buf[12]; 101: if( c&FIELD ){ 102: sprintf( buf, "FIELD[%d]", c&FLDSIZ ); 103: return( buf ); 104: } 105: return( ccnames[c] ); 106: } 107: # endif