Annotation of 3BSD/cmd/mip/manifest, revision 1.1

1.1     ! root        1: 
        !             2: # include <stdio.h>
        !             3: /*     manifest constant file for the lex/yacc interface */
        !             4: 
        !             5: # define ERROR 1
        !             6: # define NAME 2
        !             7: # define STRING 3
        !             8: # define ICON 4
        !             9: # define FCON 5
        !            10: # define PLUS 6
        !            11: # define MINUS 8
        !            12: # define MUL 11
        !            13: # define AND 14
        !            14: # define OR 17
        !            15: # define ER 19
        !            16: # define QUEST 21
        !            17: # define COLON 22
        !            18: # define ANDAND 23
        !            19: # define OROR 24
        !            20: 
        !            21: /*     special interfaces for yacc alone */
        !            22: /*     These serve as abbreviations of 2 or more ops:
        !            23:        ASOP    =, = ops
        !            24:        RELOP   LE,LT,GE,GT
        !            25:        EQUOP   EQ,NE
        !            26:        DIVOP   DIV,MOD
        !            27:        SHIFTOP LS,RS
        !            28:        ICOP    ICR,DECR
        !            29:        UNOP    NOT,COMPL
        !            30:        STROP   DOT,STREF
        !            31: 
        !            32:        */
        !            33: # define ASOP 25
        !            34: # define RELOP 26
        !            35: # define EQUOP 27
        !            36: # define DIVOP 28
        !            37: # define SHIFTOP 29
        !            38: # define INCOP 30
        !            39: # define UNOP 31
        !            40: # define STROP 32
        !            41: 
        !            42: /*     reserved words, etc */
        !            43: # define TYPE 33
        !            44: # define CLASS 34
        !            45: # define STRUCT 35
        !            46: # define RETURN 36
        !            47: # define GOTO 37
        !            48: # define IF 38
        !            49: # define ELSE 39
        !            50: # define SWITCH 40
        !            51: # define BREAK 41
        !            52: # define CONTINUE 42
        !            53: # define WHILE 43
        !            54: # define DO 44
        !            55: # define FOR 45
        !            56: # define DEFAULT 46
        !            57: # define CASE 47
        !            58: # define SIZEOF 48
        !            59: # define ENUM 49
        !            60: 
        !            61: 
        !            62: /*     little symbols, etc. */
        !            63: /*     namely,
        !            64: 
        !            65:        LP      (
        !            66:        RP      )
        !            67: 
        !            68:        LC      {
        !            69:        RC      }
        !            70: 
        !            71:        LB      [
        !            72:        RB      ]
        !            73: 
        !            74:        CM      ,
        !            75:        SM      ;
        !            76: 
        !            77:        */
        !            78: 
        !            79: # define LP 50
        !            80: # define RP 51
        !            81: # define LC 52
        !            82: # define RC 53
        !            83: # define LB 54
        !            84: # define RB 55
        !            85: # define CM 56
        !            86: # define SM 57
        !            87: # define ASSIGN 58
        !            88: 
        !            89: /*     END OF YACC */
        !            90: 
        !            91: /*     left over tree building operators */
        !            92: # define COMOP 59
        !            93: # define DIV 60
        !            94: # define MOD 62
        !            95: # define LS 64
        !            96: # define RS 66
        !            97: # define DOT 68
        !            98: # define STREF 69
        !            99: # define CALL 70
        !           100: # define FORTCALL 73
        !           101: # define NOT 76
        !           102: # define COMPL 77
        !           103: # define INCR 78
        !           104: # define DECR 79
        !           105: # define EQ 80
        !           106: # define NE 81
        !           107: # define LE 82
        !           108: # define LT 83
        !           109: # define GE 84
        !           110: # define GT 85
        !           111: # define ULE 86
        !           112: # define ULT 87
        !           113: # define UGE 88
        !           114: # define UGT 89
        !           115: # define SETBIT 90
        !           116: # define TESTBIT 91
        !           117: # define RESETBIT 92
        !           118: # define ARS 93
        !           119: # define REG 94
        !           120: # define OREG 95
        !           121: # define CCODES 96
        !           122: # define FREE 97
        !           123: # define STASG 98
        !           124: # define STARG 99
        !           125: # define STCALL 100
        !           126: 
        !           127: /*     some conversion operators */
        !           128: # define FLD 103
        !           129: # define SCONV 104
        !           130: # define PCONV 105
        !           131: # define PMCONV 106
        !           132: # define PVCONV 107
        !           133: 
        !           134: /*     special node operators, used for special contexts */
        !           135: # define FORCE 108
        !           136: # define CBRANCH 109
        !           137: # define INIT 110
        !           138: # define CAST 111
        !           139: 
        !           140: /*     node types */
        !           141: # define LTYPE 02
        !           142: # define UTYPE 04
        !           143: # define BITYPE 010
        !           144: 
        !           145:        /* DSIZE is the size of the dope array */
        !           146: # define DSIZE CAST+1
        !           147: 
        !           148: /*     type names, used in symbol table building */
        !           149: # define TNULL PTR    /* pointer to UNDEF */
        !           150: # define UNDEF 0
        !           151: # define FARG 1
        !           152: # define CHAR 2
        !           153: # define SHORT 3
        !           154: # define INT 4
        !           155: # define LONG 5
        !           156: # define FLOAT 6
        !           157: # define DOUBLE 7
        !           158: # define STRTY 8
        !           159: # define UNIONTY 9
        !           160: # define ENUMTY 10
        !           161: # define MOETY 11
        !           162: # define UCHAR 12
        !           163: # define USHORT 13
        !           164: # define UNSIGNED 14
        !           165: # define ULONG 15
        !           166: 
        !           167: # define ASG 1+
        !           168: # define UNARY 2+
        !           169: # define NOASG (-1)+
        !           170: # define NOUNARY (-2)+
        !           171: 
        !           172: /*     various flags */
        !           173: # define NOLAB (-1)
        !           174: 
        !           175: /* type modifiers */
        !           176: 
        !           177: # define PTR  020
        !           178: # define FTN  040
        !           179: # define ARY  060
        !           180: 
        !           181: /* type packing constants */
        !           182: 
        !           183: # define TMASK 060
        !           184: # define TMASK1 0300
        !           185: # define TMASK2  0360
        !           186: # define BTMASK 017
        !           187: # define BTSHIFT 4
        !           188: # define TSHIFT 2
        !           189: 
        !           190: /*     macros  */
        !           191: 
        !           192: # define MODTYPE(x,y) x = (x&(~BTMASK))|y  /* set basic type of x to y */
        !           193: # define BTYPE(x)  (x&BTMASK)   /* basic type of x */
        !           194: # define ISUNSIGNED(x) ((x)<=ULONG&&(x)>=UCHAR)
        !           195: # define UNSIGNABLE(x) ((x)<=LONG&&(x)>=CHAR)
        !           196: # define ENUNSIGN(x) ((x)+(UNSIGNED-INT))
        !           197: # define DEUNSIGN(x) ((x)+(INT-UNSIGNED))
        !           198: # define ISPTR(x) ((x&TMASK)==PTR)
        !           199: # define ISFTN(x)  ((x&TMASK)==FTN)  /* is x a function type */
        !           200: # define ISARY(x)   ((x&TMASK)==ARY)   /* is x an array type */
        !           201: # define INCREF(x) (((x&~BTMASK)<<TSHIFT)|PTR|(x&BTMASK))
        !           202: # define DECREF(x) (((x>>TSHIFT)&~BTMASK)|(x&BTMASK))
        !           203: # define SETOFF(x,y)   if( x%y != 0 ) x = ( (x/y + 1) * y)
        !           204:                /* advance x to a multiple of y */
        !           205: # define NOFIT(x,y,z)   ( (x%z + y) > z )
        !           206:                /* can y bits be added to x without overflowing z */
        !           207:        /* pack and unpack field descriptors (size and offset) */
        !           208: # define PKFIELD(s,o) ((o<<6)|s)
        !           209: # define UPKFSZ(v)  (v&077)
        !           210: # define UPKFOFF(v) (v>>6)
        !           211: 
        !           212: /*     operator information */
        !           213: 
        !           214: # define TYFLG 016
        !           215: # define ASGFLG 01
        !           216: # define LOGFLG 020
        !           217: 
        !           218: # define SIMPFLG 040
        !           219: # define COMMFLG 0100
        !           220: # define DIVFLG 0200
        !           221: # define FLOFLG 0400
        !           222: # define LTYFLG 01000
        !           223: # define CALLFLG 02000
        !           224: # define MULFLG 04000
        !           225: # define SHFFLG 010000
        !           226: # define ASGOPFLG 020000
        !           227: 
        !           228: # define SPFLG 040000
        !           229: 
        !           230: #define optype(o) (dope[o]&TYFLG)
        !           231: #define asgop(o) (dope[o]&ASGFLG)
        !           232: #define logop(o) (dope[o]&LOGFLG)
        !           233: #define callop(o) (dope[o]&CALLFLG)
        !           234: 
        !           235: /*     table sizes     */
        !           236: 
        !           237: # define BCSZ 200 /* size of the table to save break and continue labels */
        !           238: # define SYMTSZ 1300 /* size of the symbol table(originally 450) */
        !           239: # define DIMTABSZ 1500 /* size of the dimension/size table (was 750) */
        !           240: # define PARAMSZ 200 /* size of the parameter stack */
        !           241: # ifndef FORT
        !           242: # define TREESZ 700 /* space for building parse tree */
        !           243: # else
        !           244: # define TREESZ 1000
        !           245: # endif
        !           246: # define SWITSZ 500 /* size of switch table */
        !           247: 
        !           248: # define NCHNAM 8  /* number of characters in a name */
        !           249: 
        !           250: /*     common defined variables */
        !           251: 
        !           252: extern int nerrors;  /* number of errors seen so far */
        !           253: 
        !           254: typedef union ndu NODE;
        !           255: typedef unsigned int TWORD;
        !           256: extern NODE *NIL;  /* a pointer which will always have 0 in it */
        !           257: extern int dope[];  /* a vector containing operator information */
        !           258: extern char *opst[];  /* a vector containing names for ops */
        !           259: 
        !           260: # ifdef ONEPASS
        !           261:        /* in one-pass operation, define the tree nodes */
        !           262: 
        !           263: union ndu {
        !           264: 
        !           265:        struct {
        !           266:                int op;
        !           267:                int rall;
        !           268:                TWORD type;
        !           269:                int su;
        !           270:                char name[NCHNAM];
        !           271:                NODE *left;
        !           272:                NODE *right;
        !           273:                };
        !           274:        
        !           275:        struct {
        !           276:                int op;
        !           277:                int rall;
        !           278:                TWORD type;
        !           279:                int su;
        !           280:                char name[NCHNAM];
        !           281:                CONSZ lval;
        !           282:                int rval;
        !           283:                };
        !           284:        
        !           285:        struct {
        !           286:                int op, rall;
        !           287:                TWORD type;
        !           288:                int su;
        !           289:                int label;  /* for use with branching */
        !           290:                };
        !           291: 
        !           292:        struct {
        !           293:                int op, rall;
        !           294:                TWORD type;
        !           295:                int su;
        !           296:                int stsize;  /* sizes of structure objects */
        !           297:                int stalign;  /* alignment of structure objects */
        !           298:                };
        !           299: 
        !           300:        struct {
        !           301:                int op;
        !           302:                int cdim;
        !           303:                TWORD type;
        !           304:                int csiz;
        !           305:                };
        !           306:        
        !           307:        struct {
        !           308:                /* this structure is used when a floating point constant
        !           309:                   is being computed */
        !           310:                int op;
        !           311:                int cdim;
        !           312:                TWORD type;
        !           313:                int csiz;
        !           314:                double dval;
        !           315:                };
        !           316: 
        !           317:        };
        !           318: # endif

unix.superglobalmegacorp.com

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