void deleteSymAttr( union SymAttr *attr, SEMTYPE category ) //void deleteSymAttr( union SymAttr *attr, SEMTYPE category ) { if( attr != 0 ) { //if( attr->constVal != 0 ) { if( category == CONSTANT_t ) { if( attr->constVal->category == STRING_t ) { free( attr->constVal->value.stringVal ); } free( attr->constVal ); } else if( category == FUNCTION_t ) { //else if( attr->formalParam != 0 ) { if( attr->formalParam->params == 0 ) { } else if( attr->formalParam->params->next == 0 ) { deletePType( attr->formalParam->params->value ); } else { struct PTypeList *current, *previous; for( current=(attr->formalParam->params->next), previous=(attr->formalParam->params) ; current!=0 ; current=(current->next), previous=(previous->next) ) { deletePType( previous->value ); free( previous ); } // last object... deletePType( previous->value ); free( previous ); } free( attr->formalParam ); } free( attr ); } }
void deleteSymbol( struct SymNode *symbol ) { // delete name if( symbol->name != 0 ) free( symbol->name ); // delete PType deletePType( symbol->type ); // delete SymAttr, according to category deleteSymAttr( symbol->attribute, symbol->category ); // symbol->next = 0; symbol->prev = 0; free( symbol ); }