Changeset 117 for trunk/thune/gc.c

Show
Ignore:
Timestamp:
04/18/06 13:22:12 (3 years ago)
Author:
krobillard
Message:

Thune - Added code! datatype, ULanguage, and UCollector.

GC now marks word.wordBlk.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/thune/gc.c

    r116 r117  
    145145 
    146146 
    147 static UBinary bsBlk; 
    148 static UBinary bsStr; 
    149 static UBinary blkChecked; 
     147static UCollector _gc; 
     148 
     149#define bsBlk       _gc.bsBlock 
     150#define bsStr       _gc.bsBin 
    150151 
    151152#ifdef OR_CONFIG_NUMBER_ARRAYS 
     
    180181 
    181182#endif 
     183 
     184 
     185void ur_gcMarkBin( UCollector* gc, UIndex idx ) 
     186{ 
     187    ur_setBit( gc->bsBin.ptr.b, idx ); 
     188} 
     189 
     190 
     191void ur_gcMarkBlock( UCollector* gc, UIndex idx ) 
     192{ 
     193    ur_setBit( gc->bsBlock.ptr.b, idx ); 
     194} 
    182195 
    183196 
     
    204217            case UT_SETWORD: 
    205218            //case UT_LITWORD:      // Only atom is used in lit-words? 
     219                SET_BIT_BLOCK( it->word.wordBlk ); 
    206220                SET_BIT_BLOCK( it->word.valBlk ); 
    207221                break; 
     
    245259                    int bitm = 1 << (idx & 7); 
    246260                    bsBlk.ptr.b[ ai ] |= bitm; 
    247                     blkChecked.ptr.b[ ai ] |= bitm; 
     261                    _gc.blkChecked.ptr.b[ ai ] |= bitm; 
    248262                } 
    249263 
     
    277291                    int bitm = 1 << (idx & 7); 
    278292                    bsBlk.ptr.b[ ai ] |= bitm; 
    279                     if( ! (blkChecked.ptr.b[ ai ] & bitm) ) 
     293                    if( ! (_gc.blkChecked.ptr.b[ ai ] & bitm) ) 
    280294                    { 
    281                         blkChecked.ptr.b[ ai ] |= bitm; 
     295                        _gc.blkChecked.ptr.b[ ai ] |= bitm; 
    282296                        _checkBlock( ur_block( it ) ); 
    283297                    } 
     
    299313                if( idx ) 
    300314                    ur_setBit( bsBlk.ptr.b, idx ); 
     315                break; 
     316 
     317            case UT_CODE: 
     318            { 
     319                ur_language( it )->codeGC( &_gc, it ); 
     320            } 
    301321                break; 
    302322        } 
     
    467487#endif 
    468488 
    469     GC_BITSET( blkChecked, ur_env->blocks, SWEEP_START_BLOCK ); 
     489    GC_BITSET( _gc.blkChecked, ur_env->blocks, SWEEP_START_BLOCK ); 
    470490 
    471491    GC_BITSET( bsBlk, ur_env->blocks,      SWEEP_START_BLOCK ); 
     
    491511    _checkBlock( blk + GLOBAL_VAL_BLKN ); 
    492512 
    493     doneset = blkChecked.ptr.b; 
     513    doneset = _gc.blkChecked.ptr.b; 
    494514    ur_setBit( doneset, GLOBAL_VAL_BLKN ); 
    495515    ur_setBit( doneset, GLOBAL_WORD_BLKN ); 
     
    528548        i = 0; 
    529549        markset = bsBlk.ptr.b; 
    530         doneset = blkChecked.ptr.b; 
     550        doneset = _gc.blkChecked.ptr.b; 
    531551 
    532552        bit  = blk + SWEEP_START_BLOCK; 
     
    570590#endif 
    571591 
    572     ur_arrayFree( &blkChecked ); 
     592    ur_arrayFree( &_gc.blkChecked ); 
    573593 
    574594    ur_arrayFree( &bsBlk );