+static
+void freeValref (eff_t *valref)
+{
+ VERBOSE_PRINT ((stdout, "free valref node \t0x%08x\n", (int) valref));
+ free(valref);
+ return;
+}
+
+static
+void freeSelect (eff_t *sel)
+{
+ VERBOSE_PRINT ((stdout, "free select node \t0x%08x\n", (int) sel));
+ free(sel);
+ return;
+}
+
+static
+void freeLoad (eff_t *load)
+{
+ VERBOSE_PRINT ((stdout, "free load node \t0x%08x\n", (int) load));
+ free (load);
+ return;
+}
+
+static
+void freeStore (eff_t *store)
+{
+ VERBOSE_PRINT ((stdout, "free store node \t0x%08x\n", (int) store));
+ free (store);
+ return;
+}
+
+static
+void freeAlloc (eff_t *alloc)
+{
+ VERBOSE_PRINT ((stdout, "free alloc node \t0x%08x\n", (int) alloc));
+ free(alloc);
+ return;
+}
+
+static
+void freeCall (eff_t *call)
+{
+ VERBOSE_PRINT ((stdout, "free call node \t0x%08x\n", (int) call));
+ free(call -> effect.call.args);
+ free(call);
+ return;
+}
+
+static
+void freeJoin (eff_t *join)
+{
+ VERBOSE_PRINT ((stdout, "free join node \t0x%08x\n", (int) join));
+ free(join -> effect.join.ins);
+ free(join);
+ return;
+}
+
+static
+void freeUnknown (eff_t *unknown)
+{
+ VERBOSE_PRINT ((stdout, "free unknown node \t0x%08x\n", (int) unknown));
+ free(unknown);
+ return;
+}
+
+static
+void freeReturn (eff_t *ret)
+{
+ VERBOSE_PRINT ((stdout, "free ret node \t0x%08x\n", (int) ret));
+ free(ret);
+ return;
+}
+
+static
+void freeRaise (eff_t *raise)
+{
+ VERBOSE_PRINT ((stdout, "free raise node \t0x%08x\n", (int) raise));
+ free (raise);
+ return;
+}
+
+
+static
+void freeProcEffs(proc_t *proc)
+{
+ int i;
+ int num;
+
+ VERBOSE_PRINT ((stdout, "free effect for method \"%s\"\n",
+ get_id_str(proc -> proc_ident)));
+
+ num = proc -> n_effs;
+ for(i = 0; i < num; i++) {
+ switch(proc -> effs[i] -> kind) {
+ case eff_arg:
+ freeArg(proc -> effs[i]);
+ break;
+ case eff_valref:
+ freeValref(proc -> effs[i]);
+ break;
+ case eff_select:
+ freeSelect(proc -> effs[i]);
+ break;
+ case eff_load:
+ freeLoad(proc -> effs[i]);
+ break;
+ case eff_store:
+ freeStore(proc -> effs[i]);
+ break;
+ case eff_alloc:
+ freeAlloc(proc -> effs[i]);
+ break;
+ case eff_call:
+ freeCall(proc -> effs[i]);
+ break;
+ case eff_unknown:
+ freeUnknown(proc -> effs[i]);
+ break;
+ case eff_join:
+ freeJoin(proc -> effs[i]);
+ break;
+ case eff_raise:
+ freeRaise(proc -> effs[i]);
+ break;
+ case eff_ret:
+ freeReturn(proc -> effs[i]);
+ break;
+ default:
+ assert(0 && "try to free an unknown effect");
+ break;