Annotation of 42BSD/usr.bin/efl/print.c, revision 1.1

1.1     ! root        1: #include "defs"
        !             2: 
        !             3: char *ops[ ] =         { "", "+", "-", "*", "/", "**",
        !             4:        ".not. ", " .and. ", ".andand.", ".oror.", " .or. ",
        !             5:        " .eq. ", " .lt. ", " .gt. ", " .le. ", " .ge. ", " .ne. ",
        !             6:        "(", ")", " = ", ", " };
        !             7: 
        !             8: int opprecs[ ] = { 0, 7, 7, 8, 8, 9, 5, 4, 4, 3, 3,
        !             9:                6, 6, 6, 6, 6, 6, 10, 10, 1, 0 };
        !            10: 
        !            11: char *qualops[ ]       = { "", "->", ".", " of ", " sub " };
        !            12: 
        !            13: 
        !            14: char *classes[ ]       = { "", "arg ", "valarg ", "static ", "auto ",
        !            15:                        "common ", "mos ", "external ", "statement function " };
        !            16: 
        !            17: char *precs[ ] = { "", "long " };
        !            18: 
        !            19: char *types[ ] = { "", "integer ", "real ", "double precision ", "logical ",
        !            20:                        "complex ", "char ", "type " };
        !            21: 
        !            22: char *ftntypes[]       = { "integer ", "real ", "logical ", "complex ",
        !            23:                        "double precision ", 0, 0 };
        !            24: 
        !            25: 
        !            26: char *langs[]  = { "pfort", "ratfor", "efl"};
        !            27: 
        !            28: 
        !            29: propts()
        !            30: {
        !            31: fprintf(diagfile, "Options: ");
        !            32: fprintf(diagfile, "%s ", langs[langopt]);
        !            33: fprintf(diagfile, "%s ", (dbgopt ? "debug" : "ndebug") );
        !            34: fprintf(diagfile, "%s ", (dotsopt? "dotson" : "dotsoff") );
        !            35: fprintf(diagfile, "\n");
        !            36: }
        !            37: 
        !            38: 
        !            39: 
        !            40: 
        !            41: prexpr(e)
        !            42: ptr e;
        !            43: {
        !            44: if(e)  prexp1(e, 0,0,0);
        !            45: }
        !            46: 
        !            47: 
        !            48: 
        !            49: 
        !            50: 
        !            51: prexp1(e, prec, subt, leftside)
        !            52: register ptr e;
        !            53: int prec, subt, leftside;
        !            54: {
        !            55: ptr p, q;
        !            56: int prec1, needpar;
        !            57: 
        !            58: needpar = 0;
        !            59: 
        !            60: switch(e->tag)
        !            61:        {
        !            62: case TERROR:
        !            63:        break;
        !            64: 
        !            65: case TCONST:
        !            66:        TEST fprintf(diagfile, "%s", e->leftp);
        !            67:        if(e->rightp)
        !            68:                putzcon(e);
        !            69:        else
        !            70:                putconst(e->vtype, e->leftp);
        !            71:        break;
        !            72: 
        !            73: case TFTNBLOCK:
        !            74:        putname(e);
        !            75:        break;
        !            76: 
        !            77: case TNAME:
        !            78:        if(e->sthead == 0) fatal("name without entry");
        !            79:        TEST fprintf(diagfile, "%s", e->sthead->namep);
        !            80:        putname(e);
        !            81:        if(e->vsubs)
        !            82:                prexp1(e->vsubs, 0,0,0);
        !            83:        break;
        !            84: 
        !            85: case TTEMP:
        !            86:        TEST fprintf(diagfile, "(fakename %o)", e);
        !            87:        putname(e);
        !            88:        break;
        !            89: 
        !            90: case TLIST:
        !            91:        if(e->leftp == 0) break;
        !            92:        TEST fprintf(diagfile, "( ");
        !            93:        putic(ICOP, OPLPAR);
        !            94:        for(p=e->leftp ; p!=0 ; p = p->nextp)
        !            95:                {
        !            96:                prexp1(p->datap, 0,0,0);
        !            97:                if(p->nextp)
        !            98:                        {
        !            99:                        TEST fprintf(diagfile, " , ");
        !           100:                        putic(ICOP, OPCOMMA);
        !           101:                        }
        !           102:                }
        !           103:        TEST fprintf(diagfile, " )");
        !           104:        putic(ICOP, OPRPAR);
        !           105:        break;
        !           106: 
        !           107: case TSTFUNCT:
        !           108:        fprintf(diagfile, "statement function ");
        !           109:        prexp1(e->leftp, 0,0,0);
        !           110:        TEST fprintf(diagfile, " = ");
        !           111:        putic(ICOP, OPEQUALS);
        !           112:        prexp1(e->rightp, 0,0,0);
        !           113:        break;
        !           114: 
        !           115: case TAROP:
        !           116:        if(e->subtype==OPSTAR && e->leftp->tag!=TCONST && e->rightp->tag==TCONST)
        !           117:                {
        !           118:                q = e->leftp;
        !           119:                e->leftp = e->rightp;
        !           120:                e->rightp = q;
        !           121:                }
        !           122: case TLOGOP:
        !           123:        prec1 = opprecs[e->subtype];
        !           124:        goto print;
        !           125: case TNOTOP:
        !           126:        prec1 = 5;
        !           127:        if(prec > 1)    /* force parens */
        !           128:                needpar = 1;
        !           129:        goto print;
        !           130: case TNEGOP:
        !           131:        if(prec > 1)    /* force parens */
        !           132:                needpar = 1;
        !           133:        prec1 = 8;
        !           134:        goto print;
        !           135: case TASGNOP:
        !           136:        prec1 = 1;
        !           137:        goto print;
        !           138: case TRELOP:
        !           139:        prec1 = 6;
        !           140:        goto print;
        !           141: case TCALL:
        !           142:        prec1 = 10;
        !           143:        goto print;
        !           144: case TREPOP:
        !           145:        prec1 = 2;
        !           146:        goto print;
        !           147: 
        !           148: print:
        !           149:        if(prec1 < prec )
        !           150:                needpar = 1;
        !           151:        else if(prec1 == prec)
        !           152:                if(e->needpar)
        !           153:                        needpar = 1;
        !           154:                else if(subt == e->subtype)
        !           155:                        needpar |= ! (e->tag==TLOGOP || leftside || subt==0
        !           156:                                        || subt==OPPLUS || subt==OPSTAR);
        !           157:                else    needpar |=  ! (leftside || subt==OPPLUS || subt==OPSTAR);
        !           158: 
        !           159:        if(needpar)
        !           160:                {
        !           161:                putic(ICOP,OPLPAR);
        !           162:                TEST fprintf(diagfile, "(");
        !           163:                }
        !           164: 
        !           165:        if(e->rightp != 0)
        !           166:                {
        !           167:                prexp1(e->leftp, prec1, e->subtype, 1);
        !           168:                switch(e->tag) {
        !           169:                case TASGNOP:
        !           170:                        TEST fprintf(diagfile, "=");
        !           171:                        putic(ICOP, OPEQUALS);
        !           172:                        if(e->subtype != 0)
        !           173:                                prexp1(e->leftp, prec1, 0, 1);
        !           174:        
        !           175:                case TAROP:
        !           176:                case TNEGOP:
        !           177:                case TLOGOP:
        !           178:                case TNOTOP:
        !           179:                case TRELOP:
        !           180:                        if(e->subtype)
        !           181:                                {
        !           182:                                TEST fprintf(diagfile, " %s ", ops[e->subtype]);
        !           183:                                putic(ICOP, e->subtype);
        !           184:                                }
        !           185:                        break;
        !           186:        
        !           187:                case TCALL:
        !           188:                        TEST fprintf(diagfile, " %s ", qualops[e->subtype]);
        !           189:                        break;
        !           190:        
        !           191:                case TREPOP:
        !           192:                        TEST fprintf(diagfile, "$");
        !           193:                        break;
        !           194:                        }
        !           195: 
        !           196:                prexp1(e->rightp, prec1,e->subtype, 0);
        !           197:                }
        !           198:        else    { /* e->rightp == 0 */
        !           199:                TEST fprintf(diagfile, " %s  ", ops[e->subtype]);
        !           200:                putic(ICOP, e->subtype);
        !           201:                prexp1(e->leftp, prec1,e->subtype, 0);
        !           202:                }
        !           203:        if(needpar)
        !           204:                {
        !           205:                putic(ICOP, OPRPAR);
        !           206:                TEST fprintf(diagfile, ")");
        !           207:                }
        !           208:        break;
        !           209: 
        !           210: default:
        !           211:        badtag("prexp1", e->tag);
        !           212:        break;
        !           213:        }
        !           214: }

unix.superglobalmegacorp.com

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