Annotation of 43BSD/usr.bin/efl/free.c, revision 1.1

1.1     ! root        1: #include "defs"
        !             2: 
        !             3: 
        !             4: cleanst()
        !             5: {
        !             6: register ptr p, q;
        !             7: ptr pjunk;
        !             8: int i;
        !             9: register struct stentry *s;
        !            10: struct stentry **hp;
        !            11: 
        !            12: TEST fprintf(diagfile, "\n");
        !            13: 
        !            14: clcomm();
        !            15: 
        !            16: for(hp = hashtab ; hp<hashend ; ++hp)
        !            17:     while( s = *hp )
        !            18:        {
        !            19:        if( q = s->varp )
        !            20:                {
        !            21:                if( q->blklevel > 0 )
        !            22:                        {
        !            23:                        TEST fprintf(diagfile, "remove %s from st\n", s->namep);
        !            24:                        switch(q->tag)
        !            25:                                {
        !            26:                                case TNAME:
        !            27:                                        frvar(q);
        !            28:                                        break;
        !            29: 
        !            30:                                case TSTRUCT:
        !            31:                                        frtype(q);
        !            32:                                        break;
        !            33: 
        !            34:                                case TDEFINE:
        !            35:                                        frdef(q);
        !            36:                                        break;
        !            37: 
        !            38:                                case TLABEL:
        !            39:                                        cfree(q);
        !            40:                                        break;
        !            41: 
        !            42:                                default:
        !            43:                                        sprintf(msg, "cleanst: illegal entry tag %d, ptr %o, name %s.",
        !            44:                                                q->tag, q, s->namep);
        !            45:                                        fatal(msg);
        !            46:                                }
        !            47:                        }
        !            48:                else if( q->tag == TNAME )
        !            49:                        {
        !            50:                        q->vdcldone = 0;
        !            51:                        q->vnamedone = 0;
        !            52:                        q->vextbase = 0;
        !            53:                        for(i = 0 ; i<NFTNTYPES ; ++i)
        !            54:                                q->vbase[i] = 0;
        !            55:                        }
        !            56:                }
        !            57:        if(s->blklevel > 0)
        !            58:                name(s->namep,-1);
        !            59:        else    break;
        !            60:        }
        !            61: 
        !            62: for(p = gonelist ; p ; p = p->nextp)
        !            63:        frvar(p->datap);
        !            64: frchain(&gonelist);
        !            65: 
        !            66: if(hidlist) fatal("cleanst: hidlist not empty");
        !            67: for(p = hidlist ; p ; p = p->nextp)
        !            68:        frvar(p->datap);
        !            69: frchain(&hidlist);
        !            70: 
        !            71: for(p = tempvarlist ; p ; p = p->nextp)
        !            72:        frvar(p->datap);
        !            73: frchain(&tempvarlist);
        !            74: 
        !            75: for(p = temptypelist ; p ; p = p->nextp)
        !            76:        if(p->datap->blklevel > 0)
        !            77:                frtype(p->datap);
        !            78: frchain(&temptypelist);
        !            79: 
        !            80: q = &arrays;
        !            81: for(p = arrays ; p ; p = q->nextp)
        !            82:        if(p->datap == 0)
        !            83:                {
        !            84:                q->nextp = p->nextp;
        !            85:                p->nextp = 0;
        !            86:                pjunk = p;
        !            87:                frchain(&pjunk);
        !            88:                }
        !            89:        else    q = p;
        !            90: }
        !            91: 
        !            92: 
        !            93: 
        !            94: frvar(p)
        !            95: register ptr p;
        !            96: {
        !            97: register ptr q, qn;
        !            98: 
        !            99: if(p==0) return;
        !           100: 
        !           101: switch(p->tag)
        !           102:        {
        !           103:        case TSTRUCT:
        !           104:                frtype(p);
        !           105:                return;
        !           106: 
        !           107:        case TDEFINE:
        !           108:                frdef(p);
        !           109:                return;
        !           110: 
        !           111:        case TNAME:
        !           112:        case TTEMP:
        !           113:                if(q = p->vdim)
        !           114:                    for(q = q->datap ; q ; q = qn)
        !           115:                        {
        !           116:                        if(q->lowerb) frexpr(q->lowerb);
        !           117:                        frexpr(q->upperb);
        !           118:                        qn = q->nextp;
        !           119:                        cfree(q);
        !           120:                        }
        !           121:                
        !           122:                if(p->vdim)
        !           123:                        p->vdim->datap = 0;
        !           124:                if(p->vtype == TYCHAR)
        !           125:                        frexpr(p->vtypep);
        !           126:                frexpblock(p);
        !           127:                return;
        !           128: 
        !           129:        default:
        !           130:                badtag("frvar",p->tag);
        !           131:        }
        !           132: }
        !           133: 
        !           134: 
        !           135: frtype(p)
        !           136: register ptr p;
        !           137: {
        !           138: register ptr q;
        !           139: 
        !           140: if(p==0 || p->tag!=TSTRUCT)
        !           141:        fatal("frtype: bad argument");
        !           142: for(q = p->strdesc ; q; q = q->nextp)
        !           143:        frvar(q->datap);
        !           144: frchain( &(p->strdesc) );
        !           145: cfree(p);
        !           146: }
        !           147: 
        !           148: 
        !           149: 
        !           150: frdef(p)
        !           151: ptr p;
        !           152: {
        !           153: cfree(p->valp);
        !           154: cfree(p);
        !           155: }
        !           156: 
        !           157: 
        !           158: 
        !           159: frexpr(p)
        !           160: register ptr p;
        !           161: {
        !           162: register ptr q;
        !           163: 
        !           164: if(p == 0) return;
        !           165: 
        !           166: switch(p->tag)
        !           167:        {
        !           168:        case TAROP:
        !           169:        case TRELOP:
        !           170:        case TLOGOP:
        !           171:        case TASGNOP:
        !           172:        case TREPOP:
        !           173:        case TCALL:
        !           174:                frexpr(p->rightp);
        !           175: 
        !           176: 
        !           177:        case TNOTOP:
        !           178:        case TNEGOP:
        !           179:                frexpr(p->leftp);
        !           180:                break;
        !           181: 
        !           182:        case TCONST:
        !           183:                cfree(p->leftp);
        !           184:                if(p->vtype == TYCHAR)
        !           185:                        frexpr(p->vtypep);
        !           186:                if(p->rightp)
        !           187:                        cfree(p->rightp);
        !           188:                break;
        !           189: 
        !           190:        case TLIST:
        !           191:                for(q = p->leftp ; q ; q = q->nextp)
        !           192:                        frexpr(q->datap);
        !           193:                frchain( &(p->leftp) );
        !           194:                break;
        !           195: 
        !           196:        case TTEMP:
        !           197:        case TNAME:
        !           198:        case TFTNBLOCK:
        !           199:                if(p->vsubs)
        !           200:                        frexpr(p->vsubs);
        !           201:                if(p->voffset)
        !           202:                        frexpr(p->voffset);
        !           203: 
        !           204:        case TERROR:
        !           205: /*debug*/ case TIOSTAT:
        !           206:                break;
        !           207: 
        !           208:        default:
        !           209:                badtag("frexpr", p->tag);
        !           210:        }
        !           211: frexpblock(p);
        !           212: }
        !           213: 
        !           214: 
        !           215: 
        !           216: 
        !           217: clcomm()       /* clean up common lists */
        !           218: {
        !           219: ptr p, oldp, q;
        !           220: 
        !           221: for(oldp = &commonlist ; p = oldp->nextp ;  )
        !           222:        {
        !           223:        q = p->datap;
        !           224: 
        !           225:        if(q->blklevel > 0)
        !           226:                {
        !           227:                frchain( &(q->comchain) );
        !           228:                cfree(q);
        !           229:                oldp->nextp = p->nextp;
        !           230:                cfree(p);
        !           231:                }
        !           232:        else   oldp = p;
        !           233:        }
        !           234: }

unix.superglobalmegacorp.com

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