home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / mip / mfile1 < prev    next >
Encoding:
Text File  |  1979-01-10  |  3.9 KB  |  238 lines

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