void lambda_free(struct lambda *t)
{
if(t != NULL){
- if(t->refcount == 1){
- switch(t->which){
- case lambda_ident:
- free(t->data.identifier.ident);
- break;
- case lambda_abs:
- free(t->data.abstraction.ident);
- lambda_free(t->data.abstraction.expr);
- break;
- case lambda_app:
- lambda_free(t->data.application.expr1);
- lambda_free(t->data.application.expr2);
- break;
- }
- free(t);
- } else {
- t->refcount--;
+ switch(t->which){
+ case lambda_ident:
+ free(t->data.identifier.ident);
+ break;
+ case lambda_abs:
+ free(t->data.abstraction.ident);
+ lambda_free(t->data.abstraction.expr);
+ break;
+ case lambda_app:
+ lambda_free(t->data.application.expr1);
+ lambda_free(t->data.application.expr2);
+ break;
}
+ free(t);
}
}