asCObjectType::~asCObjectType() { // Release the object type held by the templateSubType if( templateSubType.GetObjectType() ) templateSubType.GetObjectType()->Release(); if( derivedFrom ) derivedFrom->Release(); asUINT n; ReleaseAllProperties(); ReleaseAllFunctions(); for( n = 0; n < enumValues.GetLength(); n++ ) { if( enumValues[n] ) asDELETE(enumValues[n],asSEnumValue); } enumValues.SetLength(0); // Clean the user data for( n = 0; n < userData.GetLength(); n += 2 ) { if( userData[n+1] ) { for( asUINT c = 0; c < engine->cleanObjectTypeFuncs.GetLength(); c++ ) if( engine->cleanObjectTypeFuncs[c].type == userData[n] ) engine->cleanObjectTypeFuncs[c].cleanFunc(this); } } }
void asCObjectType::DestroyInternal() { if( engine == 0 ) return; // Skip this for list patterns as they do not increase the references if( flags & asOBJ_LIST_PATTERN ) { // Clear the engine pointer to mark the object type as invalid engine = 0; return; } // Release the object types held by the templateSubTypes for( asUINT subtypeIndex = 0; subtypeIndex < templateSubTypes.GetLength(); subtypeIndex++ ) { if( templateSubTypes[subtypeIndex].GetObjectType() ) templateSubTypes[subtypeIndex].GetObjectType()->ReleaseInternal(); } templateSubTypes.SetLength(0); if( derivedFrom ) derivedFrom->ReleaseInternal(); derivedFrom = 0; ReleaseAllProperties(); ReleaseAllFunctions(); asUINT n; for( n = 0; n < enumValues.GetLength(); n++ ) { if( enumValues[n] ) asDELETE(enumValues[n],asSEnumValue); } enumValues.SetLength(0); // Clean the user data for( n = 0; n < userData.GetLength(); n += 2 ) { if( userData[n+1] ) { for( asUINT c = 0; c < engine->cleanObjectTypeFuncs.GetLength(); c++ ) if( engine->cleanObjectTypeFuncs[c].type == userData[n] ) engine->cleanObjectTypeFuncs[c].cleanFunc(this); } } userData.SetLength(0); // Remove the type from the engine engine->RemoveFromTypeIdMap(this); // Clear the engine pointer to mark the object type as invalid engine = 0; }
// internal void asCObjectType::ReleaseAllHandles(asIScriptEngine *) { ReleaseAllFunctions(); ReleaseAllProperties(); }