Annotation of researchv10no/cmd/cfront/xptcfront/alloc.c, revision 1.1

1.1     ! root        1: /*ident        "@(#)ctrans:src/alloc.c 1.4" */
        !             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, Inc. All Rights Reserved
        !             8:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T, INC.
        !             9: 
        !            10: alloc.c:
        !            11: 
        !            12: *****************************************************************************/
        !            13: #include "cfront.h"
        !            14: #include "size.h"
        !            15: #include "sysent.h"
        !            16: #include <memory.h>
        !            17: 
        !            18: const int NBITE = (CHUNK-8)/sizeof(name)-1;
        !            19: const int EBITE = (CHUNK-8)/sizeof(expr)-1;
        !            20: const int SBITE = (CHUNK-8)/sizeof(stmt)-1;
        !            21: const int TBITE = (CHUNK-8)/sizeof(table)-1;
        !            22: const int VBITE = (CHUNK-8)/sizeof(vec)-1;
        !            23: const int FBITE = (CHUNK-8)/sizeof(fct)-1;
        !            24: const int PBITE = (CHUNK-8)/sizeof(ptr)-1;
        !            25: 
        !            26: #define  mzero(p,l)  memset(p,0,l)
        !            27: 
        !            28: void* chunk(int i)     // get memory that is not to be freed
        !            29: {
        !            30:        register char* cp = malloc(i*CHUNK-8);
        !            31:        if (cp == 0) {                  // no space
        !            32:                free((char*)gtbl);      // get space for error message
        !            33:                error('i',"free store exhausted");
        !            34:        }
        !            35:        return cp;
        !            36: }
        !            37: 
        !            38: #ifdef __HAVE_SIZE_T
        !            39: #include <new.h>
        !            40: #define NEW_SIZE size_t
        !            41: #else
        !            42: #define NEW_SIZE long
        !            43: #endif
        !            44: 
        !            45: void* operator new(NEW_SIZE sz)        // get memory that might be freed
        !            46: {
        !            47:        char* p = calloc((unsigned)sz,1);
        !            48: 
        !            49: //fprintf(stderr,"alloc(%d)->%d\n",sz,p);
        !            50: 
        !            51:        if (p == 0) {                   // no space
        !            52:                free((char*)gtbl);      // get space for error message
        !            53:                error('i',"free store exhausted");
        !            54:        }
        !            55:        return p;
        !            56: }
        !            57: 
        !            58: void operator delete (void* p)
        !            59: {
        !            60:        if (p == 0) return;
        !            61: 
        !            62: //fprintf(stderr,"free(%d) %d\n",p,((int*)p)[-1]-(int)p-1+sizeof(int*));
        !            63: 
        !            64:        free((char*)p);
        !            65: }
        !            66: 
        !            67: // class new and delete operators
        !            68: 
        !            69: void*
        !            70: expr::operator new(size_t sz)
        !            71: {
        !            72:        register Pexpr p;
        !            73: 
        !            74:         if ( (p=expr_free) == 0 ) {
        !            75:                 register Pexpr q = (Pexpr) chunk(1);
        !            76:                 for (p=expr_free=&q[EBITE-1]; q<p; p--) {
        !            77:                         p->e1 = p-1;
        !            78:                         DB(p->node::allocated=0);
        !            79:                }
        !            80:                (p+1)->e1 = 0;
        !            81:                DB(p->node::allocated=0);
        !            82:        }
        !            83:        else
        !            84:                expr_free = p->e1;
        !            85: 
        !            86:        mzero(p,sz);
        !            87:        return p;
        !            88: }
        !            89: 
        !            90: void
        !            91: expr::operator delete(void* vp, size_t)
        !            92: {
        !            93:        Pexpr p = (Pexpr)vp;
        !            94: 
        !            95:        DB( if(!p->node::allocated) error('i',"deleting unallocated expr:%k! -- id==%d",p->base,p->node::id);
        !            96:            p->node::allocated = 0;
        !            97:        );
        !            98:        p->e1 = expr_free;
        !            99:        expr_free = p;
        !           100:        vp = 0;
        !           101: }
        !           102: 
        !           103: void*
        !           104: stmt::operator new(size_t sz)
        !           105: {
        !           106:        register Pstmt p;
        !           107:        if ( (p=stmt_free) == 0 ) {
        !           108:                register Pstmt q = (Pstmt) chunk(1);
        !           109:                for (p=stmt_free=&q[SBITE-1]; q<p; p--) {
        !           110:                        p->s_list = p-1;
        !           111:                        DB(p->node::allocated=0);
        !           112:                }
        !           113:                (p+1)->s_list = 0;
        !           114:                DB(p->node::allocated=0);
        !           115:        }
        !           116:        else
        !           117:                stmt_free = p->s_list;
        !           118: 
        !           119:        mzero(p,sz);
        !           120:        return p;
        !           121: }
        !           122: 
        !           123: void
        !           124: stmt::operator delete(void* vp,size_t)
        !           125: {
        !           126:        Pstmt p = (Pstmt)vp;
        !           127:        DB( if(!p->node::allocated) error('i',"deleting unallocated stmt:%k! -- id==%d",p->base,p->node::id);
        !           128:            p->node::allocated = 0;
        !           129:        );
        !           130:        p->s_list = stmt_free;
        !           131:        stmt_free = p;
        !           132:        vp = 0;
        !           133: }
        !           134: 
        !           135: void*
        !           136: name::operator new(size_t sz)
        !           137: {
        !           138:        register Pname p;
        !           139: 
        !           140:        if ( (p=name_free) == 0 ) {
        !           141:                register Pname q = (Pname) chunk(1);
        !           142:                for (p=name_free=&q[NBITE-1]; q<p; p--) {
        !           143:                        p->n_tbl_list = p-1;
        !           144:                        DB(p->node::allocated=0);
        !           145:                }
        !           146:                (p+1)->n_tbl_list = 0;
        !           147:                DB(p->node::allocated=0);
        !           148:        }
        !           149:        else
        !           150:                name_free = p->n_tbl_list;
        !           151: 
        !           152:        mzero(p,sz);
        !           153:        return p;
        !           154: }
        !           155: 
        !           156: void
        !           157: name::operator delete(void* vp,size_t)
        !           158: {
        !           159:        Pname p = (Pname)vp;
        !           160:        DB( if(!p->node::allocated) error('i',"deleting unallocated name %s! -- id==%d",p->string?p->string:"???",p->node::id);
        !           161:            p->node::allocated = 0;
        !           162:        );
        !           163:        p->n_tbl_list = name_free;
        !           164:        name_free = p;
        !           165:        vp = 0;
        !           166: }
        !           167: 
        !           168: void*
        !           169: table::operator new(size_t sz)
        !           170: {
        !           171:        register Ptable p;
        !           172: 
        !           173:        if ( (p=table_free) == 0 ) {
        !           174:                register Ptable q = (Ptable) chunk(1);
        !           175:                for (p=table_free=&q[TBITE-1]; q<p; p--) {
        !           176:                        p->next = p-1;
        !           177:                        DB(p->node::allocated=0);
        !           178:                }
        !           179:                (p+1)->next = 0;
        !           180:                DB(p->node::allocated=0);
        !           181:        }
        !           182:        else
        !           183:                table_free = p->next;
        !           184: 
        !           185:        mzero(p, sz);
        !           186:        return p;
        !           187: }
        !           188: 
        !           189: void
        !           190: table::operator delete(void* vp,size_t)
        !           191: {
        !           192:        Ptable p = (Ptable)vp;
        !           193:        DB( if(!p->node::allocated) error('i',"deleting unallocated table %d! -- id==%d",p->base,p->node::id);
        !           194:            p->node::allocated = 0;
        !           195:        );
        !           196:        p->next = table_free;
        !           197:        table_free = p;
        !           198:        vp = 0;
        !           199: }
        !           200: 
        !           201: void*
        !           202: vec::operator new(size_t sz)
        !           203: {
        !           204:        register Pvec p;
        !           205: 
        !           206:        if ( (p=vec_free) == 0 ) {
        !           207:                register Pvec q = (Pvec) chunk(1);
        !           208:                for (p=vec_free=&q[VBITE-1]; q<p; p--) {
        !           209:                        p->tlist = p-1;
        !           210:                        DB(p->node::allocated=0);
        !           211:                }
        !           212:                (p+1)->tlist = 0;
        !           213:                DB(p->node::allocated=0);
        !           214:        }
        !           215:        else
        !           216:                vec_free = (Pvec) p->tlist;
        !           217: 
        !           218:        mzero(p, sz);
        !           219:        return p;
        !           220: }
        !           221: 
        !           222: void
        !           223: vec::operator delete(void* vp,size_t)
        !           224: {
        !           225:        Pvec p = (Pvec)vp;
        !           226:        DB( if(!p->node::allocated) error('i',"deleting unallocated vec %d! -- id==%d",p->base,p->node::id);
        !           227:            p->node::allocated = 0;
        !           228:        );
        !           229:        p->tlist = vec_free;
        !           230:        vec_free = p;
        !           231:        vp = 0;
        !           232: }
        !           233: 
        !           234: void*
        !           235: fct::operator new(size_t sz)
        !           236: {
        !           237:        register Pfct p;
        !           238: 
        !           239:        if ( (p=fct_free) == 0 ) {
        !           240:                register Pfct q = (Pfct) chunk(1);
        !           241:                for (p=fct_free=&q[FBITE-1]; q<p; p--) {
        !           242:                        p->tlist = p-1;
        !           243:                        DB(p->node::allocated=0);
        !           244:                }
        !           245:                (p+1)->tlist = 0;
        !           246:                DB(p->node::allocated=0);
        !           247:        }
        !           248:        else
        !           249:                fct_free = (Pfct) p->tlist;
        !           250: 
        !           251:        mzero(p, sz);
        !           252:        return p;
        !           253: }
        !           254: 
        !           255: void
        !           256: fct::operator delete(void* vp,size_t)
        !           257: {
        !           258:        Pfct p = (Pfct)vp;
        !           259:        DB( if(!p->node::allocated) error('i',"deleting unallocated fct %d! -- id==%d",p->base,p->node::id);
        !           260:            p->node::allocated = 0;
        !           261:        );
        !           262:        p->tlist = fct_free;
        !           263:        fct_free = p;
        !           264:        vp = 0;
        !           265: }
        !           266: 
        !           267: void*
        !           268: ptr::operator new(size_t sz)
        !           269: {
        !           270:        register Pptr p;
        !           271: 
        !           272: //error('d',"ptr new");
        !           273:        if ( (p=ptr_free) == 0 ) {
        !           274:                register Pptr q = (Pptr) chunk(1);
        !           275:                for (p=ptr_free=&q[PBITE-1]; q<p; p--) {
        !           276:                        p->tlist = p-1;
        !           277:                        DB(p->node::allocated=0);
        !           278:                }
        !           279:                (p+1)->tlist = 0;
        !           280:                DB(p->node::allocated=0);
        !           281:        }
        !           282:        else 
        !           283:                ptr_free = (Pptr) p->tlist;
        !           284: 
        !           285:        mzero(p, sz);
        !           286:        return p;
        !           287: }
        !           288: 
        !           289: void
        !           290: ptr::operator delete(void* vp,size_t)
        !           291: {
        !           292:        Pptr p = (Pptr)vp;
        !           293:        DB( if(!p->node::allocated) error('i',"deleting unallocated ptr %d! -- id==%d",p->base,p->node::id);
        !           294:            p->node::allocated = 0;
        !           295:        );
        !           296:        p->tlist = ptr_free;
        !           297:        ptr_free = p;
        !           298:        vp = 0;
        !           299: }

unix.superglobalmegacorp.com

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