示例#1
0
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 );

	}
}
示例#2
0
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 );
}