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