From: weiyu Date: Sat, 3 Aug 2019 01:10:22 +0000 (-0700) Subject: add print X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=9807d4fb3a539caff50f125402bd0bddb7478cc6;p=c11tester.git add print --- diff --git a/predicate.cc b/predicate.cc index c4724ef9..4458e8b9 100644 --- a/predicate.cc +++ b/predicate.cc @@ -1,10 +1,13 @@ #include "predicate.h" Predicate::Predicate(FuncInst * func_inst) : - func_inst(func_inst) + func_inst(func_inst), + predicates(), + children() {} -unsigned int pred_expr_hash(struct pred_expr * expr) { +unsigned int pred_expr_hash(struct pred_expr * expr) +{ return (unsigned int)((uintptr_t)expr); } @@ -21,6 +24,37 @@ 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 predicate = {token, location, value}; - predicates.add(&predicate); + struct pred_expr *ptr = new pred_expr(token, location, value); + predicates.add(ptr); +} + +void Predicate::add_child(Predicate * child) +{ + /* check duplication? */ + children.push_back(child); +} + +void Predicate::print_predicate() +{ + //model_print("self: %p ", this); + func_inst->print(); + PredSetIter * it = predicates.iterator(); + + if (predicates.getSize() == 0) + model_print("no predicate\n"); + + while (it->hasNext()) { + struct pred_expr * expr = it->next(); + model_print("token: %d, location: %p, value: %d\n", expr->token, expr->location, expr->value); + } +} + +void Predicate::print_pred_subtree() +{ + print_predicate(); + for (uint i = 0; i < children.size(); i++) { + Predicate * child = children[i]; +// model_print("parent: %p - ", this); + child->print_pred_subtree(); + } } diff --git a/predicate.h b/predicate.h index 6cdce912..6d0dbc4b 100644 --- a/predicate.h +++ b/predicate.h @@ -6,7 +6,8 @@ unsigned int pred_expr_hash (struct pred_expr *); bool pred_expr_equal(struct pred_expr *, struct pred_expr *); -typedef HashSet PredicateSet; +typedef HashSet PredSet; +typedef HSIterator PredSetIter; typedef enum predicate_token { EQUALITY, NULLITY @@ -17,9 +18,17 @@ typedef enum predicate_token { * read at memory location specified in predicate_expr. */ struct pred_expr { + pred_expr(token_t token, void * location, bool value) : + token(token), + location(location), + value(value) + {} + token_t token; void * location; bool value; + + MEMALLOC }; @@ -29,14 +38,18 @@ public: ~Predicate(); FuncInst * get_func_inst() { return func_inst; } - PredicateSet * get_predicates() { return &predicates; } + PredSet * get_predicates() { return &predicates; } void add_predicate(token_t token, void * location, bool value); + void add_child(Predicate * child); + + void print_predicate(); + void print_pred_subtree(); MEMALLOC private: FuncInst * func_inst; /* may have multiple precicates */ - PredicateSet predicates; + PredSet predicates; ModelVector children; };