// persist holds a copy of ASTNodes so that the reference count of
// objects we have pointers to doesn't hit zero.
vector<BEEV::ASTNode*> persist;
-bool cinterface_exprdelete_on_flag = false;
+bool cinterface_exprdelete_on_flag = true;
// GLOBAL FUNCTION: parser
extern int cvcparse(void*);
}
}
+void vc_setInterfaceFlags(VC vc, enum ifaceflag_t f, int param_value) {
+ switch (f) {
+ case EXPRDELETE:
+ cinterface_exprdelete_on_flag = param_value != 0;
+ break;
+ default:
+ BEEV::FatalError("C_interface: vc_setInterfaceFlags: Unrecognized flag\n");
+ break;
+ }
+}
+
//Create a validity Checker. This is the global STPMgr
VC vc_createValidityChecker(void) {
CONSTANTBV::ErrCode c = CONSTANTBV::BitVector_Boot();
nodestar persistNode(node n)
{
- persist.push_back(new node(n));
- return persist.back();
+ nodestar np = new node(n);
+ if (cinterface_exprdelete_on_flag)
+ persist.push_back(np);
+ return np;
}
// delete aaa;
// }
- for (vector<nodestar>::iterator it = persist.begin(); it!= persist.end();it++)
- delete *it;
- persist.clear();
+ if (cinterface_exprdelete_on_flag) {
+ for (vector<nodestar>::iterator it = persist.begin(); it!= persist.end();it++)
+ delete *it;
+ persist.clear();
+ }
delete decls;
delete (stpstar)vc;
// v : print nodes
void vc_setFlags(VC vc, char c, int num_absrefine _CVCL_DEFAULT_ARG(0));
+ //! Interface-only flags.
+ enum ifaceflag_t {
+ /*! EXPRDELETE: boolean, default true. For objects created by
+ vc_arrayType, vc_bvType, vc_bv32Type, vc_bvConstExprFromInt, if
+ this flag is set both at the time the objects are created and at
+ the time that vc_Destroy is called, vc_Destroy will automatically
+ delete them. */
+ EXPRDELETE
+ };
+ void vc_setInterfaceFlags(VC vc, enum ifaceflag_t f, int param_value);
+
//! Flags can be NULL
VC vc_createValidityChecker(void);