Annotation of researchv10no/cmd/cfront/cfront2.00/del.c, revision 1.1.1.1

1.1       root        1: /*ident        "@(#)ctrans:src/del.c   1.1.3.6" */
                      2: /************************************************************
                      3: 
                      4:        C++ source for cfront, the C++ compiler front-end
                      5:        written in the computer science research center of Bell Labs
                      6: 
                      7:        Copyright (c) 1984 AT&T Technologies, Inc. All rigths Reserved
                      8:        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T, INC.
                      9: 
                     10: del.c:
                     11: 
                     12:        walk the trees to reclaim storage
                     13: 
                     14: **************************************************************/
                     15: 
                     16: #include "cfront.h"
                     17: 
                     18: void name::del()
                     19: {
                     20:        Pexpr i = n_initializer;
                     21: 
                     22: // printf( "\nname::del: %d %s", this, string?string:"no name" );
                     23: //     NFn++;
                     24:        DEL(tp);
                     25:        if(i && i!=(Pexpr)1) DEL(i);
                     26:        n_tbl_list = name_free;
                     27:        name_free = this;
                     28: }
                     29: 
                     30: void type::del()
                     31: {
                     32: //fprintf(stderr,"DEL(type=%d %d)\n",this,base);
                     33:        permanent = 3;  /* do not delete twice */
                     34:        switch (base) {
                     35:        case TNAME:
                     36:        case NAME:
                     37:                error('i',"%d->T::del():N %s %d",this,Pname(this)->string,base);
                     38:        case FCT:
                     39:        {       Pfct f = (Pfct) this;
                     40:                DEL(f->returns);
                     41:                break;
                     42:        }
                     43:        case VEC:
                     44:        {       Pvec v = (Pvec) this;
                     45:                DEL(v->dim);
                     46:                DEL(v->typ);
                     47:                break;
                     48:        }
                     49:        case PTR:
                     50:        case RPTR:
                     51:        {       Pptr p = (Pptr) this;
                     52:                DEL(p->typ);
                     53:                break;
                     54:        }
                     55:        }
                     56: 
                     57:        delete this;
                     58: }
                     59: 
                     60: void expr::del()
                     61: {
                     62: //fprintf(stderr,"DEL(expr=%d: %d %d %d)\n",this,base,e1,e2); fflush(stderr);
                     63:        permanent = 3;
                     64:        switch (base) {
                     65:        case IVAL:
                     66:                if (this == one) return;
                     67:        case FVAL:
                     68:        case THIS:
                     69:        case ICON:
                     70:        case FCON:
                     71:        case CCON:
                     72:        case STRING:
                     73:        case TEXT:
                     74:                goto dd;
                     75:        case DUMMY:
                     76:        case ZERO:
                     77:        case NAME:
                     78:                return;
                     79:        case CAST:
                     80:        case SIZEOF:
                     81:        case NEW:
                     82:        case GNEW:
                     83:        case VALUE:
                     84:                DEL(tp2);
                     85:                break;
                     86:        case REF:
                     87:        case DOT:
                     88:                DEL(e1);
                     89:                if (e2) DEL(e2);
                     90:        case MDOT:
                     91:                if (mem && mem->base!=NAME) DEL(mem);
                     92:                goto dd;
                     93:        case QUEST:
                     94:                DEL(cond);
                     95:                break;
                     96:        case ICALL:
                     97:                delete il->i_args;
                     98:                delete il;
                     99:                goto dd;
                    100:        }
                    101: 
                    102:        DEL(e1);
                    103:        DEL(e2);
                    104: /*     DEL(tp);*/
                    105: dd:
                    106:        e1 = expr_free;
                    107:        expr_free = this;
                    108: //     NFe++;
                    109: }
                    110: 
                    111: void stmt::del()
                    112: {
                    113: //fprintf(stderr,"DEL(stmt %d %s)\n",this,keys[base]); fflush(stderr);
                    114:        permanent = 3;
                    115:        switch (base) {
                    116:        case SM:
                    117:        case WHILE:
                    118:        case DO:
                    119:        case RETURN:
                    120:        case CASE:
                    121:        case SWITCH:
                    122:                DEL(e);
                    123:                break;
                    124:        case PAIR:
                    125:                DEL(s2);
                    126:                break;
                    127:        case BLOCK:
                    128:                DEL(d);
                    129:                DEL(s);
                    130:                if (own_tbl) DEL(memtbl);
                    131:                DEL(s_list);
                    132:                goto dd;
                    133:        case FOR:
                    134:                DEL(e);
                    135:                DEL(e2);
                    136:                DEL(for_init);
                    137:                break;
                    138:        case IF:
                    139:                DEL(e);
                    140:                DEL(else_stmt);
                    141:                break;
                    142:        }
                    143: 
                    144:        DEL(s);
                    145:        DEL(s_list);
                    146: dd:
                    147:        s_list = stmt_free;
                    148:        stmt_free = this;
                    149: //     NFs++;
                    150: }
                    151: 
                    152: void table::del()
                    153: {
                    154:        for (register i=1; i<free_slot; i++) {
                    155:                Pname n = entries[i];
                    156:                if (n==0) error('i',"table.del(0)");
                    157: 
                    158: //printf( "\ntable::del: %s n_scope: %d, n_stclass: %d", n->string, n->n_scope, n->n_stclass );
                    159: 
                    160:                if (n->n_stclass == STATIC) continue;
                    161:                switch (n->n_scope) {
                    162:                case ARG:
                    163:                case ARGT:
                    164:                        break;
                    165:                default:
                    166:                {       char* s = n->string;
                    167:                        if (s && (s[0]!='_' || s[1]!='_' || s[2]!='X')) delete s;
                    168:                        /* delete n; */
                    169:                        n->del();
                    170:                }
                    171:                }
                    172:        }
                    173:        delete entries;
                    174:        delete hashtbl;
                    175:        delete this;
                    176: }
                    177: 
                    178: // local class
                    179: void delete_local() 
                    180: {
                    181: // error( 'd', "delete_local: vlist: %d", vlist );
                    182:     do {
                    183:        for (vl* v = vlist; v; v = v->next) v->cl->really_print(v->vt);
                    184:        vlist = 0;
                    185: 
                    186:        for (Plist l=isf_list; l; l=l->l) {
                    187:                Pname n = l->f;
                    188:                Pfct f = Pfct(n->tp);
                    189: // error('d',"isf %n f %d",n,f);
                    190:                if ( f == 0 ) { error('d', "delete_local: f == 0" );break;} 
                    191:                if (f->base == OVERLOAD) {
                    192:                        n = Pgen(f)->fct_list->f;       // first fct
                    193:                        f = Pfct(n->tp);
                    194:                }
                    195: 
                    196:                if (debug_opt==0 && n->n_addr_taken) {
                    197:                        f->f_inline = 0;
                    198:                        if (n->n_dcl_printed<2) n->dcl_print(0);
                    199:                }
                    200:        }
                    201:        isf_list = 0;
                    202:     } while (vlist);
                    203: 
                    204:     for ( Plist l = local_class; l; l = l->l )
                    205:     {
                    206:           Pname n = l->f;
                    207: // error( 'd' , "delete_local() %d %n %t", n, n, n->tp );
                    208: // printf( "\ndelete_local: %d %s", n, n->string );
                    209:     Pname nn = Pbase(n->tp)->b_name;
                    210:     Pclass cl = Pclass(nn->tp);
                    211:        for (Pname px, p=cl->mem_list; p; p=px) {
                    212:                px = p->n_list;
                    213:                if (p->tp)
                    214:                switch (p->tp->base) {
                    215:                        case FCT:
                    216:                        {       Pfct f = (Pfct)p->tp;
                    217:                                if (f->body) {
                    218:                                    if (f->f_inline==0
                    219:                                    && f->f_imeasure==0) {
                    220:                                        DEL(f->body);
                    221:                                        f->body = 0;
                    222:                                        }
                    223:                                }
                    224:                        }
                    225:                        case COBJ:
                    226:                        case EOBJ:
                    227:                                DEL(p);
                    228:                                break;
                    229:                        case CLASS:
                    230:                        case ENUM:
                    231:                                break;
                    232:                        default:
                    233:                                delete p;
                    234:                        } // end switch
                    235:                else delete p;
                    236:        } // end for mem
                    237:         DEL(cl->memtbl);
                    238:        cl->mem_list = 0;
                    239:        cl->permanent = 3;
                    240:         nn->permanent = 0;
                    241:        DEL(nn);
                    242:        n->permanent = 0;
                    243:        extern void table_delete( char*, TOK, int );
                    244: // error( 'd', "local delete: n_key: %k lex_level: %d", n->n_key, n->lex_level );
                    245:        table_delete( n->string, LOCAL, n->lex_level );
                    246:        DEL(n);
                    247:     }
                    248: }

unix.superglobalmegacorp.com

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