void trans(Node *p) { if (!p || tl_errs) return; if (tl_verbose || tl_terse) { fprintf(tl_out, "\t/* Normlzd: "); dump(p); fprintf(tl_out, " */\n"); } if (tl_terse) return; // Buddy might have been initialized by a third-party library. if (!bdd_isrunning()) { bdd_init(100000, 10000); // Disable the default GC handler. bdd_gbc_hook(0); } mk_alternating(p); if (!tl_hoaf || tl_hoaf > 1) { mk_generalized(); if ((!tl_spot_out || tl_spot_out > 2) && (!tl_hoaf || tl_hoaf > 2)) mk_buchi(); } releasenode(1, p); bdd_done(); }
CAMLprim value wrapper_bdd_setvarnum(value num) { CAMLparam1(num); if (bdd_isrunning()) { bdd_setvarnum(Int_val(num)); } else { caml_failwith("Buddy not initialized"); }; CAMLreturn(Val_unit); }
CAMLprim value wrapper_bdd_isrunning() { CAMLparam0(); CAMLlocal1(r); r = bdd_isrunning(); CAMLreturn(Val_bool(r)); }
/* ML type: unit -> bool */ EXTERNML value mlbdd_bdd_isrunning(value nill) /* ML */ { return bdd_isrunning() ? Val_true : Val_false; }