Changeset 425

Show
Ignore:
Timestamp:
04/12/06 16:49:00 (3 years ago)
Author:
sean
Message:

* Added cr_finalize.
* Changed code for new gc_calloc call format.
* Merged in DMD 154 changes.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/dmdrt/memory.d

    r411 r425  
    3535private 
    3636{ 
    37     extern (C) void* gc_malloc( size_t sz ); 
    38     extern (C) void* gc_calloc( size_t nm, size_t sz ); 
    39     extern (C) void* gc_realloc( void* p, size_t sz ); 
     37    extern (C) void* gc_malloc( size_t sz, bool df = false ); 
     38    extern (C) void* gc_calloc( size_t sz, bool df = false ); 
     39    extern (C) void* gc_realloc( void* p, size_t sz, bool df = false ); 
    4040    extern (C) void gc_free( void* p ); 
    4141 
    4242    extern (C) size_t gc_sizeOf( void* p ); 
    4343    extern (C) size_t gc_capacityOf( void* p ); 
    44  
    45     alias void function( void *p, void *dummy ) gc_finalizer; 
    46     extern (C) void gc_setFinalizer( void *p, gc_finalizer fn ); 
    4744 
    4845    extern (C) void onOutOfMemory(); 
     
    6764    else 
    6865    { 
    69     p = gc_malloc(ci.init.length); 
     66    p = gc_malloc(ci.init.length, true); 
    7067    debug printf(" p = %p\n", p); 
    71     gc_setFinalizer(p, &new_finalizer); 
    7268    } 
    7369 
     
    123119        if (c.deallocator) 
    124120        { 
    125             _d_callfinalizer(*p); 
     121            cr_finalize(*p); 
    126122            fp_t fp = cast(fp_t)c.deallocator; 
    127123            (*fp)(*p);          // call deallocator 
     
    238234} 
    239235 
    240 void new_finalizer(void *p, void *dummy) 
    241 
    242     //printf("new_finalizer(p = %p)\n", p); 
    243     _d_callfinalizer(p); 
    244 
    245  
    246 extern (C) 
    247 void _d_callfinalizer(void *p) 
    248 
    249     //printf("_d_callfinalizer(p = %p)\n", p); 
     236 
     237extern (C) void cr_finalize(void* p, bool det = true) 
     238
     239    //printf("cr_finalize(p = %p)\n", p); 
    250240    if (p)  // not necessary if called from gc 
    251241    { 
     
    343333    else 
    344334    { 
    345         newdata = cast(byte *)gc_calloc(newsize + 1, 1); 
     335        newdata = cast(byte *)gc_calloc(newsize + 1); 
    346336    } 
    347337    } 
     
    392382    else 
    393383    { 
    394         newdata = cast(byte *)gc_calloc(newsize + 1, 1); 
     384        newdata = cast(byte *)gc_calloc(newsize + 1); 
    395385    } 
    396386    } 
     
    498488    { 
    499489    /* 
    500      * Better version by davejf
     490     * Better version by Dave Fladebo
    501491     * This uses an inverse logorithmic algorithm to pre-allocate a bit more 
    502492     * space for larger arrays.