X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=predicate.cc;h=9726fb3a18aaa0ae0e06cee15ed3ce809adb5872;hp=00eaaa0259642aa0b590b67e999638107dd2f0f8;hb=332eb3dfeb0f0272f4dbe3a3b10a8ff4bf3bb188;hpb=e9e6aaed0177ca95f216a59a284464262c835c3c diff --git a/predicate.cc b/predicate.cc index 00eaaa02..9726fb3a 100644 --- a/predicate.cc +++ b/predicate.cc @@ -1,11 +1,15 @@ #include "predicate.h" Predicate::Predicate(FuncInst * func_inst) : - func_inst(func_inst) + func_inst(func_inst), + entry_predicate(false), + pred_expressions(), + children() {} -unsigned int pred_expr_hash(struct pred_expr * expr) { - return (unsigned int)((uintptr_t)hash); +unsigned int pred_expr_hash(struct pred_expr * expr) +{ + return (unsigned int)((uintptr_t)expr); } bool pred_expr_equal(struct pred_expr * p1, struct pred_expr * p2) @@ -21,6 +25,38 @@ bool pred_expr_equal(struct pred_expr * p1, struct pred_expr * p2) void Predicate::add_predicate(token_t token, void * location, bool value) { - struct pred_expr = {token, location, value}; - predicates.add(&predicate); + struct pred_expr *ptr = new pred_expr(token, location, value); + pred_expressions.add(ptr); +} + +void Predicate::add_child(Predicate * child) +{ + /* check duplication? */ + children.push_back(child); +} + +void Predicate::print_predicate() +{ + model_print("\"%p\" [shape=box, label=\"\n", this); + func_inst->print(); + PredExprSetIter * it = pred_expressions.iterator(); + + if (pred_expressions.getSize() == 0) + model_print("no predicate\n"); + + while (it->hasNext()) { + struct pred_expr * expr = it->next(); + model_print("predicate: token: %d, location: %p, value: %d\n", expr->token, expr->location, expr->value); + } + model_print("\"];\n"); +} + +void Predicate::print_pred_subtree() +{ + print_predicate(); + for (uint i = 0; i < children.size(); i++) { + Predicate * child = children[i]; + child->print_pred_subtree(); + model_print("\"%p\" -> \"%p\"\n", this, child); + } }