Annotation of 42BSD/lib/mip/mfile1, revision 1.1.1.1

1.1       root        1: /*     @(#)mfile1      4.2     (Berkeley)      83/04/04        */
                      2: 
                      3: # include "macdefs"
                      4: # include "manifest"
                      5: 
                      6: /*     storage classes  */
                      7: # define SNULL 0
                      8: # define AUTO 1
                      9: # define EXTERN 2
                     10: # define STATIC 3
                     11: # define REGISTER 4
                     12: # define EXTDEF 5
                     13: # define LABEL 6
                     14: # define ULABEL 7
                     15: # define MOS 8
                     16: # define PARAM 9
                     17: # define STNAME 10
                     18: # define MOU 11
                     19: # define UNAME 12
                     20: # define TYPEDEF 13
                     21: # define FORTRAN 14
                     22: # define ENAME 15
                     23: # define MOE 16
                     24: # define UFORTRAN 17
                     25: # define USTATIC 18
                     26:        /* field size is ORed in */
                     27: # define FIELD 0100
                     28: # define FLDSIZ 077
                     29: # ifndef BUG1
                     30: extern char *scnames();
                     31: # endif
                     32: 
                     33: /*     location counters */
                     34: # define PROG 0
                     35: # define DATA 1
                     36: # define ADATA 2
                     37: # define STRNG 3
                     38: # define ISTRNG 4
                     39: # define STAB 5
                     40: 
                     41: 
                     42: /* symbol table flags */
                     43: # define SMOS 01
                     44: # define SHIDDEN 02
                     45: # define SHIDES 04
                     46: # define SSET 010
                     47: # define SREF 020
                     48: # define SNONUNIQ 040
                     49: # define STAG 0100
                     50: 
                     51: # ifndef FIXDEF
                     52: # define FIXDEF(p)
                     53: #endif
                     54: # ifndef FIXARG
                     55: # define FIXARG(p)
                     56: # endif
                     57: # ifndef FIXSTRUCT
                     58: # define FIXSTRUCT(a,b)
                     59: # endif
                     60: 
                     61:        /* alignment of initialized quantities */
                     62: # ifndef AL_INIT
                     63: #      define  AL_INIT ALINT
                     64: # endif
                     65: 
                     66: struct symtab {
                     67: #ifndef FLEXNAMES
                     68:        char sname[NCHNAM];
                     69: #else
                     70:        char *sname;
                     71: #endif
                     72:        TWORD stype;  /* type word */
                     73: 
                     74:        char sclass;  /* storage class */
                     75:        char slevel;  /* scope level */
                     76:        char sflags;  /* flags for set, use, hidden, mos, etc. */
                     77:        int offset;  /* offset or value */
                     78:        short dimoff; /* offset into the dimension table */
                     79:        short sizoff; /* offset into the size table */
                     80:        short suse;  /* line number of last use of the variable */
                     81:        };
                     82: 
                     83: 
                     84: # ifdef ONEPASS
                     85: /* NOPREF must be defined for use in first pass tree machine */
                     86: # define NOPREF 020000  /* no preference for register assignment */
                     87: #else
                     88: 
                     89: union ndu {
                     90:        struct {
                     91:                int op;
                     92:                TWORD type;
                     93:                int cdim, csiz;
                     94:                }fn; /* front node */
                     95:        struct {
                     96:                int op;
                     97:                TWORD type;
                     98:                int cdim, csiz;
                     99:                NODE *left;
                    100:                NODE * right;
                    101:                }in; /* interior node */
                    102:        
                    103:        struct {
                    104:                /* this structure is the same as above,
                    105:                   but is used when a value, rather than
                    106:                   address, is kept in +left */
                    107:                int op;
                    108:                TWORD type;
                    109:                int cdim, csiz;
                    110:                CONSZ lval;
                    111:                int rval;
                    112:                }tn; /* terminal node */
                    113:        
                    114:        struct {
                    115:                /* this structure is used when a floating point constant
                    116:                   is being computed */
                    117:                int op;
                    118:                TWORD type;
                    119:                int cdim, csiz;
                    120:                double dval;
                    121:                }fpn; /* floating point node */
                    122: 
                    123:        };
                    124: # endif
                    125: 
                    126: struct sw {
                    127:        CONSZ sval;
                    128:        int slab;
                    129:        };
                    130: 
                    131: extern struct sw swtab[];
                    132: extern struct sw *swp;
                    133: extern int swx;
                    134: 
                    135: extern int ftnno;
                    136: extern int blevel;
                    137: extern int instruct, stwart;
                    138: 
                    139: extern int lineno, nerrors;
                    140: typedef union {
                    141:        int intval;
                    142:        NODE * nodep;
                    143:        } YYSTYPE;
                    144: extern YYSTYPE yylval;
                    145: 
                    146: extern CONSZ lastcon;
                    147: extern double dcon;
                    148: 
                    149: extern char ftitle[];
                    150: extern char ititle[];
                    151: extern struct symtab stab[];
                    152: extern int curftn;
                    153: extern int curclass;
                    154: extern int curdim;
                    155: extern int dimtab[];
                    156: extern int paramstk[];
                    157: extern int paramno;
                    158: extern int autooff, argoff, strucoff;
                    159: extern int regvar;
                    160: extern int minrvar;
                    161: extern int brkflag;
                    162: extern char yytext[];
                    163: 
                    164: extern int strflg;
                    165: 
                    166: extern OFFSZ inoff;
                    167: 
                    168: extern int reached;
                    169: 
                    170: /*     tunnel to buildtree for name id's */
                    171: 
                    172: extern int idname;
                    173: 
                    174: extern NODE node[];
                    175: extern NODE *lastfree;
                    176: 
                    177: extern int cflag, hflag, pflag;
                    178: 
                    179: /* various labels */
                    180: extern int brklab;
                    181: extern int contlab;
                    182: extern int flostat;
                    183: extern int retlab;
                    184: extern int retstat;
                    185: extern int asavbc[], *psavbc;
                    186: 
                    187: /*     flags used in structures/unions */
                    188: 
                    189: # define SEENAME 01
                    190: # define INSTRUCT 02
                    191: # define INUNION 04
                    192: # define FUNNYNAME 010
                    193: # define TAGNAME 020
                    194: 
                    195: /*     flags used in the (elementary) flow analysis ... */
                    196: 
                    197: # define FBRK 02
                    198: # define FCONT 04
                    199: # define FDEF 010
                    200: # define FLOOP 020
                    201: 
                    202: /*     flags used for return status */
                    203: 
                    204: # define RETVAL 1
                    205: # define NRETVAL 2
                    206: 
                    207: /*     used to mark a constant with no name field */
                    208: 
                    209: # define NONAME 040000
                    210: 
                    211:        /* mark an offset which is undefined */
                    212: 
                    213: # define NOOFFSET (-10201)
                    214: 
                    215: /*     declarations of various functions */
                    216: 
                    217: extern NODE
                    218:        *buildtree(),
                    219:        *bdty(),
                    220:        *mkty(),
                    221:        *rstruct(),
                    222:        *dclstruct(),
                    223:        *getstr(),
                    224:        *tymerge(),
                    225:        *stref(),
                    226:        *offcon(),
                    227:        *bcon(),
                    228:        *bpsize(),
                    229:        *convert(),
                    230:        *pconvert(),
                    231:        *oconvert(),
                    232:        *ptmatch(),
                    233:        *tymatch(),
                    234:        *makety(),
                    235:        *block(),
                    236:        *doszof(),
                    237:        *talloc(),
                    238:        *optim(),
                    239:        *strargs(),
                    240:        *clocal();
                    241: 
                    242: OFFSZ  tsize(),
                    243:        psize();
                    244: 
                    245: TWORD  types();
                    246: 
                    247: 
                    248: double atof();
                    249: 
                    250: char *exname(), *exdcon();
                    251: 
                    252: # define checkst(x)
                    253: 
                    254: # ifndef CHARCAST
                    255: /* to make character constants into character connstants */
                    256: /* this is a macro to defend against cross-compilers, etc. */
                    257: # define CHARCAST(x) (char)(x)
                    258: # endif
                    259: 
                    260: # define BCSZ 100 /* size of the table to save break and continue labels */
                    261: # define SYMTSZ 3000 /* size of the symbol table (was 500) */
                    262: # define DIMTABSZ 4200 /* size of the dimension/size table (was 800) */
                    263: # define PARAMSZ 300 /* size of the parameter stack */
                    264: # define SWITSZ 500 /* size of switch table */
                    265: /*     special interfaces for yacc alone */
                    266: /*     These serve as abbreviations of 2 or more ops:
                    267:        ASOP    =, = ops
                    268:        RELOP   LE,LT,GE,GT
                    269:        EQUOP   EQ,NE
                    270:        DIVOP   DIV,MOD
                    271:        SHIFTOP LS,RS
                    272:        ICOP    ICR,DECR
                    273:        UNOP    NOT,COMPL
                    274:        STROP   DOT,STREF
                    275: 
                    276:        */
                    277: # define ASOP 25
                    278: # define RELOP 26
                    279: # define EQUOP 27
                    280: # define DIVOP 28
                    281: # define SHIFTOP 29
                    282: # define INCOP 30
                    283: # define UNOP 31
                    284: # define STROP 32
                    285: 
                    286: # define LP 50
                    287: # define RP 51
                    288: # define LC 52
                    289: # define RC 53

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.