Esempio n. 1
0
//***** Note: Not called in THREADED mode.
static void bbStringFree( BBObject *o ){
#ifdef BB_GC_RC
	BBString *str=(BBString*)o;
	if( str==&bbEmptyString ){
		//str->refs=BBGC_MANYREFS;
		return;
	}
	bbGCDeallocObject( str,sizeof(BBString)+str->length*sizeof(BBChar) );
#endif
}
Esempio n. 2
0
void bbObjectFree( BBObject *o ){
	BBClass *clas=o->clas;

#ifdef BB_GC_RC

	if( o==&bbNullObject ){
		//o->refs=BBGC_MANYREFS;
		return;
	}

	clas->dtor( o );
	bbGCDeallocObject( o,clas->instance_size );

#else

	clas->dtor( o );

#endif
}
Esempio n. 3
0
//***** Note: Only used by ref counting GC.
static void bbArrayFree( BBObject *o ){
#ifdef BB_GC_RC
	int k;
	BBObject **p;
	BBArray *arr=(BBArray*)o;
	
	if( arr==&bbEmptyArray ){
		arr->refs=BBGC_MANYREFS;
		return;
	}

	switch( arr->type[0] ){
	case ':':case '$':case '[':
		p=(BBObject**)BBARRAYDATA(arr,arr->dims);
		for( k=arr->scales[0];k>0;--k ){
			BBObject *o=*p++;
			BBDECREFS( o );
		}
		break;
	}
	bbGCDeallocObject( arr,BBARRAYSIZE( arr->size,arr->dims ) );
#endif
}