void decl_delete( struct decl *d ) { if (!d) return; free( d-> name ); type_delete( d->type ); expr_delete( d->value ); stmt_delete( d->code ); decl_delete( d->next ); free( d ); }
//deletes a statement and all of its pointers void stmt_delete(struct stmt *s){ if(!s) return; decl_delete(s->decl); expr_delete(s->init_expr); expr_delete(s->expr); expr_delete(s->next_expr); stmt_delete(s->body); stmt_delete(s->else_body); free(s); }