/*************************************************** NAME : ReturnModule DESCRIPTION : Removes a deffunction module and all associated deffunctions INPUTS : The deffunction module RETURNS : Nothing useful SIDE EFFECTS : Module and deffunctions deleted NOTES : None ***************************************************/ static void ReturnModule( void *theEnv, void *theItem) { FreeConstructHeaderModule(theEnv,(struct defmoduleItemHeader *) theItem,DefclassData(theEnv)->DefclassConstruct); DeleteSlotName(theEnv,FindIDSlotNameHash(theEnv,ISA_ID)); DeleteSlotName(theEnv,FindIDSlotNameHash(theEnv,NAME_ID)); rtn_struct(theEnv,defclassModule,theItem); }
/*************************************************** NAME : DeleteSlots DESCRIPTION : Deallocates a list of slots and their values INPUTS : The address of the slot list RETURNS : Nothing useful SIDE EFFECTS : The slot list is destroyed NOTES : None ***************************************************/ globle void DeleteSlots( void *theEnv, EXEC_STATUS, TEMP_SLOT_LINK *slots) { TEMP_SLOT_LINK *stmp; while (slots != NULL) { stmp = slots; slots = slots->nxt; DeleteSlotName(theEnv,execStatus,stmp->desc->slotName); DecrementSymbolCount(theEnv,execStatus,stmp->desc->overrideMessage); RemoveConstraint(theEnv,execStatus,stmp->desc->constraint); if (stmp->desc->dynamicDefault == 1) { ExpressionDeinstall(theEnv,execStatus,(EXPRESSION *) stmp->desc->defaultValue); ReturnPackedExpression(theEnv,execStatus,(EXPRESSION *) stmp->desc->defaultValue); } else if (stmp->desc->defaultValue != NULL) { ValueDeinstall(theEnv,execStatus,(DATA_OBJECT *) stmp->desc->defaultValue); rtn_struct(theEnv,execStatus,dataObject,stmp->desc->defaultValue); } rtn_struct(theEnv,execStatus,slotDescriptor,stmp->desc); rtn_struct(theEnv,execStatus,tempSlotLink,stmp); } }
/*************************************************** NAME : DeleteSlots DESCRIPTION : Deallocates a list of slots and their values INPUTS : The address of the slot list RETURNS : Nothing useful SIDE EFFECTS : The slot list is destroyed NOTES : None ***************************************************/ void DeleteSlots( Environment *theEnv, TEMP_SLOT_LINK *slots) { TEMP_SLOT_LINK *stmp; while (slots != NULL) { stmp = slots; slots = slots->nxt; DeleteSlotName(theEnv,stmp->desc->slotName); ReleaseLexeme(theEnv,stmp->desc->overrideMessage); RemoveConstraint(theEnv,stmp->desc->constraint); if (stmp->desc->dynamicDefault == 1) { ExpressionDeinstall(theEnv,(Expression *) stmp->desc->defaultValue); ReturnPackedExpression(theEnv,(Expression *) stmp->desc->defaultValue); } else if (stmp->desc->defaultValue != NULL) { ReleaseUDFV(theEnv,(UDFValue *) stmp->desc->defaultValue); rtn_struct(theEnv,udfValue,stmp->desc->defaultValue); } rtn_struct(theEnv,slotDescriptor,stmp->desc); rtn_struct(theEnv,tempSlotLink,stmp); } }