Annotation of 43BSD/usr.bin/f77/src/f77pass1/defs.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1980 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  *
                      6:  *     @(#)defs.h      5.3 (Berkeley) 1/10/86
                      7:  */
                      8: 
                      9: /*
                     10:  * defs.h
                     11:  *
                     12:  * Definitions for f77pass1
                     13:  *
                     14:  * University of Utah CS Dept modification history:
                     15:  *
                     16:  * $Log:       defs.h,v $
                     17:  * Revision 5.5  86/01/10  17:11:11  donn
                     18:  * Add a vparamval field to Nameblock struct -- fix up klugy sharing between
                     19:  * Paramblock and Nameblock structs.
                     20:  * 
                     21:  * Revision 5.4  85/11/25  00:23:47  donn
                     22:  * 4.3 beta
                     23:  * 
                     24:  * Revision 5.3  85/08/10  06:31:09  donn
                     25:  * Added missing definition for intrconv().
                     26:  * 
                     27:  * Revision 5.2  85/08/10  04:01:53  donn
                     28:  * Jerry Berkman's change to add a definition for 'dblflag' and to ifdef
                     29:  * the Fortran 66 compatibility flags.
                     30:  * 
                     31:  * Revision 5.1  85/08/10  03:44:01  donn
                     32:  * 4.3 alpha
                     33:  * 
                     34:  * Revision 2.3  85/06/07  21:06:48  root
                     35:  * Add copyright
                     36:  * 
                     37:  * Revision 2.2  85/01/11  21:02:58  donn
                     38:  * Added 'issaved' bit to addrblocks to help implement SAVE statements.
                     39:  * 
                     40:  * Revision 2.1  84/07/19  12:02:46  donn
                     41:  * Changed comment headers for UofU.
                     42:  * 
                     43:  * Revision 1.2  84/02/27  00:49:40  donn
                     44:  * Added external references to lists of argument temporaries, used in the
                     45:  * Berkeley changes to reduce offsets of data.
                     46:  * 
                     47:  */
                     48: 
                     49: #include <stdio.h>
                     50: 
                     51: #ifdef unix
                     52: #      include <ctype.h>
                     53: #endif
                     54: 
                     55: #include "ftypes.h"
                     56: #include "defines.h"
                     57: #include "machdefs.h"
                     58: 
                     59: #define VL 16
                     60: 
                     61: #define MAXDIM 20
                     62: #define MAXINCLUDES 10
                     63: #define MAXLITERALS 30
                     64: #define MAXCTL 20
                     65: #define MAXHASH 1009
                     66: #define MAXSTNO 401
                     67: #define MAXEXT 200
                     68: #define MAXEQUIV 150
                     69: #define MAXLABLIST 256
                     70: #define MAXDEBUGFLAG 20
                     71: 
                     72: typedef union Expression *expptr;
                     73: typedef union Taggedblock *tagptr;
                     74: typedef struct Chain *chainp;
                     75: typedef struct Addrblock *Addrp;
                     76: typedef struct Tempblock *Tempp;
                     77: typedef struct Constblock *Constp;
                     78: typedef struct Exprblock *Exprp;
                     79: typedef struct Nameblock *Namep;
                     80: 
                     81: extern FILEP infile;
                     82: extern FILEP diagfile;
                     83: extern FILEP textfile;
                     84: extern FILEP asmfile;
                     85: extern FILEP initfile;
                     86: extern long int headoffset;
                     87: 
                     88: extern char token [ ];
                     89: extern int toklen;
                     90: extern int lineno;
                     91: extern char *infname;
                     92: extern int needkwd;
                     93: extern struct Labelblock *thislabel;
                     94: 
                     95: extern int maxctl;
                     96: extern int maxequiv;
                     97: extern int maxstno;
                     98: extern int maxhash;
                     99: extern int maxext;
                    100: 
                    101: extern flag profileflag;
                    102: extern flag dblflag;
                    103: extern flag optimflag;
                    104: extern flag nowarnflag;
                    105: extern flag ftn66flag;
                    106: #ifdef ONLY66
                    107: extern flag no66flag;
                    108: extern flag noextflag;
                    109: #endif
                    110: extern flag shiftcase;
                    111: extern flag undeftype;
                    112: extern flag shortsubs;
                    113: extern flag onetripflag;
                    114: extern flag checksubs;
                    115: extern flag debugflag[];
                    116: extern flag equivdcl;
                    117: extern int nerr;
                    118: extern int nwarn;
                    119: extern int ndata;
                    120: 
                    121: extern int parstate;
                    122: extern flag headerdone;
                    123: extern int blklevel;
                    124: extern flag saveall;
                    125: extern flag substars;
                    126: extern int impltype[ ];
                    127: extern int implleng[ ];
                    128: extern int implstg[ ];
                    129: 
                    130: extern int tyint;
                    131: extern int tylogical;
                    132: extern ftnint typesize[];
                    133: extern int typealign[];
                    134: extern int procno;
                    135: extern int proctype;
                    136: extern char * procname;
                    137: extern int rtvlabel[ ];
                    138: extern int fudgelabel; /* to confuse the pdp11 optimizer */
                    139: extern Addrp typeaddr;
                    140: extern Addrp retslot;
                    141: extern int cxslot;
                    142: extern int chslot;
                    143: extern int chlgslot;
                    144: extern int procclass;
                    145: extern ftnint procleng;
                    146: extern int nentry;
                    147: extern flag multitype;
                    148: extern int blklevel;
                    149: extern int lastlabno;
                    150: extern int lastvarno;
                    151: extern int lastargslot;
                    152: extern int argloc;
                    153: extern ftnint autoleng;
                    154: extern ftnint bssleng;
                    155: extern int retlabel;
                    156: extern int ret0label;
                    157: extern int dorange;
                    158: extern int regnum[ ];
                    159: extern Namep regnamep[ ];
                    160: extern int maxregvar;
                    161: extern int highregvar;
                    162: extern int nregvar;
                    163: extern ftnint lowbss;
                    164: extern ftnint highbss;
                    165: extern int bsslabel;
                    166: extern flag anyinits;
                    167: extern flag anylocals;
                    168: 
                    169: extern chainp templist;
                    170: extern chainp argtemplist;
                    171: extern chainp activearglist;
                    172: extern int maxdim;
                    173: extern chainp holdtemps;
                    174: extern struct Entrypoint *entries;
                    175: extern struct Rplblock *rpllist;
                    176: extern struct Chain *curdtp;
                    177: extern ftnint curdtelt;
                    178: extern flag toomanyinit;
                    179: 
                    180: extern flag inioctl;
                    181: extern int iostmt;
                    182: extern Addrp ioblkp;
                    183: extern int nioctl;
                    184: extern int nequiv;
                    185: extern int eqvstart;   /* offset to eqv number to guarantee uniqueness */
                    186: extern int nintnames;
                    187: 
                    188: #ifdef SDB
                    189: extern int dbglabel;
                    190: extern flag sdbflag;
                    191: #endif
                    192: 
                    193: extern int cdatafile;
                    194: extern int cchkfile;
                    195: extern int vdatafile;
                    196: extern int vchkfile;
                    197: 
                    198: extern char cdatafname[];
                    199: extern char cchkfname[];
                    200: extern char vdatafname[];
                    201: extern char vchkfname[];
                    202: 
                    203: extern long cdatahwm;
                    204: extern long vdatahwm;
                    205: 
                    206: 
                    207: struct Chain
                    208:        {
                    209:        chainp nextp;
                    210:        tagptr datap;
                    211:        };
                    212: 
                    213: extern chainp chains;
                    214: 
                    215: struct Headblock
                    216:        {
                    217:        field tag;
                    218:        field vtype;
                    219:        field vclass;
                    220:        field vstg;
                    221:        expptr vleng;
                    222:        } ;
                    223: 
                    224: struct Ctlframe
                    225:        {
                    226:        unsigned ctltype:8;
                    227:        unsigned dostepsign:8;
                    228:        int ctlabels[4];
                    229:        int dolabel;
                    230:        Namep donamep;
                    231:        expptr domax;
                    232:        expptr dostep;
                    233:        };
                    234: #define endlabel ctlabels[0]
                    235: #define elselabel ctlabels[1]
                    236: #define dobodylabel ctlabels[1]
                    237: #define doposlabel ctlabels[2]
                    238: #define doneglabel ctlabels[3]
                    239: extern struct Ctlframe *ctls;
                    240: extern struct Ctlframe *ctlstack;
                    241: extern struct Ctlframe *lastctl;
                    242: 
                    243: struct Extsym
                    244:        {
                    245:        char extname[XL+1];
                    246:        field extstg;
                    247:        unsigned extsave:1;
                    248:        unsigned extinit:1;
                    249:        chainp extp;
                    250:        ftnint extleng;
                    251:        ftnint maxleng;
                    252:        char init;
                    253:        long initoffset;
                    254:        };
                    255: 
                    256: extern struct Extsym *extsymtab;
                    257: extern struct Extsym *nextext;
                    258: extern struct Extsym *lastext;
                    259: 
                    260: struct Labelblock
                    261:        {
                    262:        int labelno;
                    263:        unsigned blklevel:8;
                    264:        unsigned labused:1;
                    265:        unsigned labinacc:1;
                    266:        unsigned labdefined:1;
                    267:        unsigned labtype:2;
                    268:        ftnint stateno;
                    269:        };
                    270: 
                    271: extern struct Labelblock *labeltab;
                    272: extern struct Labelblock *labtabend;
                    273: extern struct Labelblock *highlabtab;
                    274: 
                    275: struct Entrypoint
                    276:        {
                    277:        struct Entrypoint *entnextp;
                    278:        struct Extsym *entryname;
                    279:        chainp arglist;
                    280:        int entrylabel;
                    281:        int typelabel;
                    282:        Namep enamep;
                    283:        };
                    284: 
                    285: struct Primblock
                    286:        {
                    287:        field tag;
                    288:        field vtype;
                    289:        Namep namep;
                    290:        struct Listblock *argsp;
                    291:        expptr fcharp;
                    292:        expptr lcharp;
                    293:        };
                    294: 
                    295: 
                    296: struct Hashentry
                    297:        {
                    298:        int hashval;
                    299:        Namep varp;
                    300:        };
                    301: extern struct Hashentry *hashtab;
                    302: extern struct Hashentry *lasthash;
                    303: 
                    304: struct Intrpacked      /* bits for intrinsic function description */
                    305:        {
                    306:        unsigned f1:3;
                    307:        unsigned f2:4;
                    308:        unsigned f3:7;
                    309:        };
                    310: 
                    311: struct Nameblock
                    312:        {
                    313:        field tag;
                    314:        field vtype;
                    315:        field vclass;
                    316:        field vstg;
                    317:        expptr vleng;
                    318:        char varname[VL];
                    319:        expptr vparamval;
                    320:        unsigned vdovar:1;
                    321:        unsigned vdcldone:1;
                    322:        unsigned vadjdim:1;
                    323:        unsigned vsave:1;
                    324:        unsigned vprocclass:3;
                    325:        unsigned vregno:4;
                    326:        union   {
                    327:                int varno;
                    328:                struct Intrpacked intrdesc;     /* bits for intrinsic function*/
                    329:                } vardesc;
                    330:        struct Dimblock *vdim;
                    331:        ftnint voffset;
                    332:        union   {
                    333:                chainp namelist;        /* points to chain of names in */
                    334:                chainp vstfdesc;        /* points to (formals, expr) pair */
                    335:                } varxptr;
                    336:        char inlcomm;
                    337:        char init;
                    338:        long initoffset;
                    339:        ftnint varsize;
                    340:        };
                    341: 
                    342: 
                    343: struct Paramblock
                    344:        {
                    345:        field tag;
                    346:        field vtype;
                    347:        field vclass;
                    348:        field vstg;
                    349:        expptr vleng;
                    350:        char varname[VL];
                    351:        expptr paramval;
                    352:        } ;
                    353: 
                    354: 
                    355: struct Exprblock
                    356:        {
                    357:        field tag;
                    358:        field vtype;
                    359:        field vclass;
                    360:        field vstg;
                    361:        expptr vleng;
                    362:        unsigned opcode:6;
                    363:        expptr leftp;
                    364:        expptr rightp;
                    365:        };
                    366: 
                    367: 
                    368: union Constant
                    369:        {
                    370:        char *ccp;
                    371:        ftnint ci;
                    372:        double cd[2];
                    373:        };
                    374: 
                    375: struct Constblock
                    376:        {
                    377:        field tag;
                    378:        field vtype;
                    379:        field vclass;
                    380:        field vstg;
                    381:        expptr vleng;
                    382:        union Constant const;
                    383:        };
                    384: 
                    385: 
                    386: struct Listblock
                    387:        {
                    388:        field tag;
                    389:        field vtype;
                    390:        chainp listp;
                    391:        };
                    392: 
                    393: 
                    394: 
                    395: struct Addrblock
                    396:        {
                    397:        field tag;
                    398:        field vtype;
                    399:        field vclass;
                    400:        field vstg;
                    401:        expptr vleng;
                    402:        int memno;
                    403:        expptr memoffset;
                    404:        unsigned istemp:1;
                    405:         unsigned isarray:1;
                    406:        unsigned issaved:1;
                    407:        unsigned ntempelt:10;
                    408:        ftnint varleng;
                    409:        ftnint varsize;
                    410:        };
                    411: 
                    412: 
                    413: 
                    414: struct Tempblock
                    415:        {
                    416:        field tag;
                    417:        field vtype;
                    418:        field vclass;
                    419:        expptr vleng;
                    420:        Addrp memalloc;
                    421:        unsigned istemp:1;
                    422:        unsigned ntempelt:10;
                    423:        ftnint varleng;
                    424:        };
                    425: 
                    426: 
                    427: 
                    428: struct Errorblock
                    429:        {
                    430:        field tag;
                    431:        field vtype;
                    432:        };
                    433: 
                    434: 
                    435: union Expression
                    436:        {
                    437:        field tag;
                    438:        struct Headblock headblock;
                    439:        struct Exprblock exprblock;
                    440:        struct Addrblock addrblock;
                    441:        struct Tempblock tempblock;
                    442:        struct Constblock constblock;
                    443:        struct Errorblock errorblock;
                    444:        struct Listblock listblock;
                    445:        struct Primblock primblock;
                    446:        } ;
                    447: 
                    448: 
                    449: 
                    450: struct Dimblock
                    451:        {
                    452:        int ndim;
                    453:        expptr nelt;
                    454:        expptr baseoffset;
                    455:        expptr basexpr;
                    456:        struct
                    457:                {
                    458:                expptr dimsize;
                    459:                expptr dimexpr;
                    460:                expptr lb;
                    461:                expptr lbaddr;
                    462:                expptr ub;
                    463:                expptr ubaddr;
                    464:                } dims[1];
                    465:        };
                    466: 
                    467: 
                    468: struct Impldoblock
                    469:        {
                    470:        field tag;
                    471:        unsigned isactive:1;
                    472:        unsigned isbusy:1;
                    473:        Namep varnp;
                    474:        Constp varvp;
                    475:        chainp impdospec;
                    476:        expptr implb;
                    477:        expptr impub;
                    478:        expptr impstep;
                    479:        ftnint impdiff;
                    480:        ftnint implim;
                    481:        struct Chain *datalist;
                    482:        };
                    483: 
                    484: 
                    485: struct Rplblock        /* name replacement block */
                    486:        {
                    487:        struct Rplblock *rplnextp;
                    488:        Namep rplnp;
                    489:        expptr rplvp;
                    490:        expptr rplxp;
                    491:        int rpltag;
                    492:        };
                    493: 
                    494: 
                    495: 
                    496: struct Equivblock
                    497:        {
                    498:        struct Eqvchain *equivs;
                    499:        flag eqvinit;
                    500:        long int eqvtop;
                    501:        long int eqvbottom;
                    502:        char inlcomm;
                    503:        char init;
                    504:        long initoffset;
                    505:        } ;
                    506: #define eqvleng eqvtop
                    507: 
                    508: extern struct Equivblock *eqvclass;
                    509: 
                    510: 
                    511: struct Eqvchain
                    512:        {
                    513:        struct Eqvchain *eqvnextp;
                    514:        union
                    515:                {
                    516:                struct Primblock *eqvlhs;
                    517:                Namep eqvname;
                    518:                } eqvitem;
                    519:        long int eqvoffset;
                    520:        } ;
                    521: 
                    522: 
                    523: union Taggedblock
                    524:        {
                    525:        field tag;
                    526:        struct Headblock headblock;
                    527:        struct Nameblock nameblock;
                    528:        struct Paramblock paramblock;
                    529:        struct Exprblock exprblock;
                    530:        struct Constblock constblock;
                    531:        struct Listblock listblock;
                    532:        struct Addrblock addrblock;
                    533:        struct Tempblock tempblock;
                    534:        struct Errorblock errorblock;
                    535:        struct Primblock primblock;
                    536:        struct Impldoblock impldoblock;
                    537:        } ;
                    538: 
                    539: 
                    540: 
                    541: 
                    542: struct Literal
                    543:        {
                    544:        short littype;
                    545:        short litnum;
                    546:        union   {
                    547:                ftnint litival;
                    548:                double litdval;
                    549:                struct  {
                    550:                        char litclen;   /* small integer */
                    551:                        char litcstr[XL];
                    552:                        } litcval;
                    553:                } litval;
                    554:        };
                    555: 
                    556: extern struct Literal litpool[ ];
                    557: extern int nliterals;
                    558: 
                    559: 
                    560: 
                    561: /* popular functions with non integer return values */
                    562: 
                    563: 
                    564: int *ckalloc();
                    565: char *varstr(), *nounder(), *varunder();
                    566: char *copyn(), *copys();
                    567: chainp hookup(), mkchain();
                    568: ftnint convci();
                    569: char *convic();
                    570: char *setdoto();
                    571: double convcd();
                    572: Namep mkname();
                    573: struct Labelblock *mklabel(), *execlab();
                    574: struct Extsym *mkext(), *newentry();
                    575: expptr addrof(), call1(), call2(), call3(), call4();
                    576: Tempp mktmpn();
                    577: Addrp builtin(), mktemp(), altmpn(), mkaltemp(), mkaltmpn(), autovar();
                    578: Addrp mkplace(), mkaddr(), putconst(), memversion();
                    579: expptr mkprim(), mklhs(), mkexpr(), mkconv(), intrconv(), mkfunct();
                    580: expptr fixexpr(), fixtype();
                    581: expptr errnode(), mkintcon();
                    582: tagptr cpexpr();
                    583: ftnint lmin(), lmax(), iarrlen();

unix.superglobalmegacorp.com

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