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

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

unix.superglobalmegacorp.com

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