X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=predicate.cc;h=2d7777783dac99e1f28553b416c969a0b34e4591;hb=656b0a3c7d65500c7eba70dbcb6c5b54c358f370;hp=9ba69d387841683b478699469f8d64050ce120a6;hpb=f8a45d8d10f16533c926096c7538b4d9be73240b;p=c11tester.git diff --git a/predicate.cc b/predicate.cc index 9ba69d38..2d777778 100644 --- a/predicate.cc +++ b/predicate.cc @@ -3,12 +3,20 @@ Predicate::Predicate(FuncInst * func_inst, bool is_entry) : func_inst(func_inst), entry_predicate(is_entry), - pred_expressions(), + pred_expressions(16), children(), parent(NULL), - backedge(NULL) + backedges(16) {} +Predicate::~Predicate() +{ + // parent and func_inst should not be deleted + pred_expressions.reset(); + backedges.reset(); + children.clear(); +} + unsigned int pred_expr_hash(struct pred_expr * expr) { return (unsigned int)((uintptr_t)expr); @@ -62,12 +70,14 @@ void Predicate::print_predicate() PredExprSetIter * it = pred_expressions.iterator(); if (pred_expressions.getSize() == 0) - model_print("no predicate\n"); + model_print("predicate unset\n"); while (it->hasNext()) { struct pred_expr * expr = it->next(); FuncInst * inst = expr->func_inst; switch (expr->token) { + case NOPREDICATE: + break; case EQUALITY: model_print("predicate token: equality, position: %s, value: %d\n", inst->get_position(), expr->value); break; @@ -91,6 +101,9 @@ void Predicate::print_pred_subtree() model_print("\"%p\" -> \"%p\"\n", this, child); } - if (backedge != NULL) + PredSetIter * it = backedges.iterator(); + while (it->hasNext()) { + Predicate * backedge = it->next(); model_print("\"%p\" -> \"%p\"[style=dashed, color=grey]\n", this, backedge); + } }