DaoCinType* DaoCinType_New( DaoInterface *inter, DaoType *target ) { DaoCinType *self = (DaoCinType*) dao_calloc( 1, sizeof(DaoCinType) ); DaoValue_Init( self, DAO_CINTYPE ); self->trait |= DAO_VALUE_DELAYGC; self->derived = 0; self->supers = DList_New( DAO_DATA_VALUE ); self->methods = DHash_New( DAO_DATA_STRING, DAO_DATA_VALUE ); self->citype = DaoType_New( "interface<", DAO_CINTYPE, (DaoValue*)self, NULL ); self->vatype = DaoType_New( inter->abtype->name->chars, DAO_CINVALUE, (DaoValue*)self, NULL ); self->abstract = inter; self->target = target; GC_IncRC( self->citype ); GC_IncRC( self->vatype ); GC_IncRC( self->abstract ); GC_IncRC( self->target ); self->citype->nested = DList_New( DAO_DATA_VALUE ); self->vatype->nested = DList_New( DAO_DATA_VALUE ); DList_Append( self->citype->nested, target ); DList_Append( self->vatype->nested, target ); DString_AppendChar( self->vatype->name, '<' ); DString_Append( self->vatype->name, target->name ); DString_AppendChar( self->vatype->name, '>' ); DString_Append( self->citype->name, self->vatype->name ); DString_AppendChar( self->citype->name, '>' ); #ifdef DAO_USE_GC_LOGGER DaoObjectLogger_LogNew( (DaoValue*) self ); #endif return self; }
DaoConstant* DaoConstant_New( DaoValue *value ) { DaoConstant *self = (DaoConstant*) dao_calloc( 1, sizeof(DaoConstant) ); DaoValue_Init( self, DAO_CONSTANT ); DaoValue_Copy( value, & self->value ); return self; }
DaoClass* DaoClass_New() { DaoClass *self = (DaoClass*) dao_calloc( 1, sizeof(DaoClass) ); DaoValue_Init( self, DAO_CLASS ); self->trait |= DAO_VALUE_DELAYGC; self->className = DString_New(1); self->lookupTable = DHash_New(D_STRING,0); self->ovldRoutMap = DHash_New(D_STRING,0); self->abstypes = DMap_New(D_STRING,D_VALUE); self->constants = DArray_New(D_VALUE); self->variables = DArray_New(D_VALUE); self->instvars = DArray_New(D_VALUE); self->objDataName = DArray_New(D_STRING); self->cstDataName = DArray_New(D_STRING); self->glbDataName = DArray_New(D_STRING); self->parent = NULL; self->mixinBases = DArray_New(0); /* refcount handled in ::allBases; */ self->allBases = DArray_New(D_VALUE); self->mixins = DArray_New(0); self->ranges = DVector_New(sizeof(ushort_t)); self->offsets = DVector_New(sizeof(ushort_t)); self->references = DArray_New(D_VALUE); self->inter = NULL; self->cstMixinStart = self->cstMixinEnd = self->cstMixinEnd2 = 0; self->glbMixinStart = self->glbMixinEnd = self->glbMixinEnd2 = 0; self->objMixinStart = self->objMixinEnd = self->objMixinEnd2 = 0; self->cstParentStart = self->cstParentEnd = 0; self->glbParentStart = self->glbParentEnd = 0; return self; }
DaoVariable* DaoVariable_New( DaoValue *value, DaoType *type ) { DaoVariable *self = (DaoVariable*) dao_calloc( 1, sizeof(DaoVariable) ); DaoValue_Init( self, DAO_VARIABLE ); DaoValue_Move( value, & self->value, type ); self->dtype = type; GC_IncRC( type ); return self; }
DaoCinValue* DaoCinValue_New( DaoCinType *cintype, DaoValue *value ) { DaoCinValue *self = (DaoCinValue*)dao_calloc( 1, sizeof(DaoCinValue) ); DaoValue_Init( self, DAO_CINVALUE ); GC_Assign( & self->cintype, cintype ); DaoValue_Move( value, & self->value, cintype->target ); #ifdef DAO_USE_GC_LOGGER DaoObjectLogger_LogNew( (DaoValue*) self ); #endif return self; }
DaoMacro* DaoMacro_New() { DaoMacro *self = (DaoMacro*) dao_malloc( sizeof(DaoMacro) ); DaoValue_Init( self, DAO_MACRO ); self->keyListApply = DArray_New(D_STRING); self->macroList = DArray_New(0); self->firstMacro = self; self->macroMatch = DMacroGroup_New(); self->macroApply = DMacroGroup_New(); DArray_Append( self->macroList, self ); return self; }
DaoInterface* DaoInterface_New( const char *name ) { DaoInterface *self = (DaoInterface*) dao_calloc( 1, sizeof(DaoInterface) ); DaoValue_Init( self, DAO_INTERFACE ); self->trait |= DAO_VALUE_DELAYGC; self->derived = 0; self->supers = DList_New( DAO_DATA_VALUE ); self->methods = DHash_New( DAO_DATA_STRING, DAO_DATA_VALUE ); self->abtype = DaoType_New( name, DAO_INTERFACE, (DaoValue*)self, NULL ); GC_IncRC( self->abtype ); #ifdef DAO_USE_GC_LOGGER DaoObjectLogger_LogNew( (DaoValue*) self ); #endif return self; }
DaoObject* DaoObject_Allocate( DaoClass *klass, int value_count ) { int extra = value_count * sizeof(DaoValue*); DaoObject *self = (DaoObject*) dao_calloc( 1, sizeof(DaoObject) + extra ); DaoValue_Init( self, DAO_OBJECT ); GC_IncRC( klass ); self->defClass = klass; self->isRoot = 1; self->valueCount = value_count; self->objValues = (DaoValue**) (self + 1); memset( self->objValues, 0, value_count*sizeof(DaoValue*) ); #ifdef DAO_USE_GC_LOGGER DaoObjectLogger_LogNew( (DaoValue*) self ); #endif return self; }
DaoCinType* DaoCinType_New( DaoInterface *inter, DaoType *target ) { DaoCinType *self = (DaoCinType*) dao_calloc( 1, sizeof(DaoCinType) ); DaoNamespace *ns = inter->nameSpace; DString *name = inter->abtype->name; DaoValue_Init( self, DAO_CINTYPE ); self->trait |= DAO_VALUE_DELAYGC; self->derived = 0; self->bases = DList_New( DAO_DATA_VALUE ); self->methods = DHash_New( DAO_DATA_STRING, DAO_DATA_VALUE ); self->citype = DaoType_New( ns, "interface<", DAO_CINTYPE, (DaoValue*)self, NULL ); self->vatype = DaoType_New( ns, name->chars, DAO_CINVALUE, (DaoValue*)self, NULL ); self->abstract = inter; self->target = target; self->citype->core = & daoCinTypeCore; self->vatype->core = & daoCinValueCore; GC_IncRC( self->citype ); GC_IncRC( self->vatype ); GC_IncRC( self->abstract ); GC_IncRC( self->target ); self->vatype->kernel = DaoTypeKernel_New( NULL ); self->vatype->kernel->abtype = self->vatype; GC_IncRC( self->vatype->kernel ); GC_IncRC( self->vatype ); self->citype->args = DList_New( DAO_DATA_VALUE ); self->vatype->args = DList_New( DAO_DATA_VALUE ); DList_Append( self->citype->args, target ); DList_Append( self->vatype->args, target ); DString_AppendChar( self->vatype->name, '<' ); DString_Append( self->vatype->name, target->name ); DString_AppendChar( self->vatype->name, '>' ); DString_Append( self->citype->name, self->vatype->name ); DString_AppendChar( self->citype->name, '>' ); #ifdef DAO_USE_GC_LOGGER DaoObjectLogger_LogNew( (DaoValue*) self ); #endif return self; }
DaoClass* DaoClass_New() { DaoClass *self = (DaoClass*) dao_calloc( 1, sizeof(DaoClass) ); DaoValue_Init( self, DAO_CLASS ); self->trait |= DAO_VALUE_DELAYGC; self->className = DString_New(1); self->lookupTable = DHash_New(D_STRING,0); self->ovldRoutMap = DHash_New(D_STRING,0); self->abstypes = DMap_New(D_STRING,D_VALUE); self->constants = DArray_New(D_VALUE); self->variables = DArray_New(D_VALUE); self->instvars = DArray_New(D_VALUE); self->objDataName = DArray_New(D_STRING); self->cstDataName = DArray_New(D_STRING); self->glbDataName = DArray_New(D_STRING); self->superClass = DArray_New(D_VALUE); self->references = DArray_New(D_VALUE); return self; }