|
|
1.1 root 1: /*ident "@(#)ctrans:src/alloc.c 1.1.1.8" */
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:
16: //int Nchunk;
17:
18: //void print_free()
19: //{
20: // fprintf(stderr,"free store: %d bytes alloc()=%d free()=%d\n",Nfree_store,Nal//loc, Nfree);
21: // fprintf(stderr,"%d chunks: %d (%d)\n",Nchunk,CHUNK,Nchunk*CHUNK);
22: //}
23:
24:
25: void* chunk(int i) // get memory that is not to be freed
26: {
27: register char* cp = malloc(i*CHUNK-8);
28: if (cp == 0) { // no space
29: free((char*)gtbl); // get space for error message
30: // if (Nspy) print_free();
31: error('i',"free store exhausted");
32: }
33: // Nchunk += i;
34: // Nfree_store += i*CHUNK;
35: return cp;
36: }
37:
38: /*
39: #ifdef __cplusplus
40: #include <new.h>
41: #define NEW_SIZE size_t
42: #else
43: #define NEW_SIZE long
44: #endif
45: */
46:
47: // now __HAVE_SIZE_T defined in 2.0 malloc.h c++ header file
48: #ifdef __HAVE_SIZE_T
49: #include <new.h>
50: #define NEW_SIZE size_t
51: #else
52: #define NEW_SIZE long
53: #endif
54:
55: void* operator new(NEW_SIZE sz) // get memory that might be freed
56: {
57: char* p = calloc((unsigned)sz,1);
58:
59: //fprintf(stderr,"alloc(%d)->%d\n",sz,p);
60: if (p == 0) { // no space
61: free((char*)gtbl); // get space for error message
62: // if (Nspy) print_free();
63: error('i',"free store exhausted");
64: }
65: // Nalloc++;
66: // Nfree_store += sz+sizeof(int*);
67: return p;
68: }
69: //int NFn, NFtn, NFbt, NFpv, NFf, NFe, NFs, NFc;
70:
71: void operator delete (void* p)
72: {
73: if (p == 0) return;
74:
75: //fprintf(stderr,"free(%d) %d\n",p,((int*)p)[-1]-(int)p-1+sizeof(int*));
76:
77: //if (Nspy) {
78: // Pname pp = (Pname) p;
79: // TOK t = pp->base;
80: // Nfree++;
81: // Nfree_store -= ((int*)p)[-1]-(int)p-1+sizeof(int*);
82: // switch (t) { // can be fooled by character strings
83: // case INT: case CHAR: case TYPE: case VOID: case SHORT: case LONG:
84: // case FLOAT: case DOUBLE: case LDOUBLE: case COBJ: case EOBJ: case FIELD:
85: // NFbt++; break;
86: //
87: // case PTR: case VEC:
88: // NFpv++; break;
89: //
90: // case FCT: NFf++; break;
91: //
92: // case ICON: case CCON: case STRING: case FCON: case THIS:
93: // NFc++; break;
94: // }
95: //}
96: free((char*)p);
97: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.