|
|
1.1 root 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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.