/** @brief Constructor */
ModelHistory::ModelHistory() :
func_counter(1), /* function id starts with 1 */
+ last_seq_number(INIT_SEQ_NUMBER),
func_map(),
func_map_rev(),
- func_nodes(),
- last_action(NULL)
+ func_nodes()
{
/* The following are snapshot data structures */
write_history = new HashTable<void *, value_set_t *, uintptr_t, 0>();
FuncNode * func_node = func_nodes[func_id];
func_node->add_inst(act);
- if (act->is_read()) {
- // Do nothing
- } else if (act->is_write()) {
- /*
- Predicate * curr_pred = func_node->get_predicate_tree_position(tid);
- FuncInst * curr_inst = func_node->get_inst(act);
-
- if (curr_pred) {
- // Follow child
- curr_pred = curr_pred->follow_write_child(curr_inst);
- }
- func_node->set_predicate_tree_position(tid, curr_pred);
- */
- }
-
func_node->update_tree(act);
- last_action = act;
+ last_seq_number = act->get_seq_number();
}
/* Return the FuncNode given its func_id */
return true;
/* Skip actions with the same sequence number */
- if (last_action != NULL) {
- if (last_action->get_seq_number() == curr_seq_number)
- return true;
- }
+ if (last_seq_number != INIT_SEQ_NUMBER && last_seq_number == curr_seq_number)
+ return true;
/* Skip actions that are paused by fuzzer (sequence number is 0) */
if (curr_seq_number == 0)
func_node->print_predicate_tree();
/*
- func_inst_list_mt * entry_insts = func_node->get_entry_insts();
- model_print("function %s has entry actions\n", func_node->get_func_name());
-
- mllnode<FuncInst*>* it;
- for (it = entry_insts->begin();it != NULL;it=it->getNext()) {
- FuncInst *inst = it->getVal();
- model_print("type: %d, at: %s\n", inst->get_type(), inst->get_position());
- }
-*/
+ func_inst_list_mt * entry_insts = func_node->get_entry_insts();
+ model_print("function %s has entry actions\n", func_node->get_func_name());
+
+ mllnode<FuncInst*>* it;
+ for (it = entry_insts->begin();it != NULL;it=it->getNext()) {
+ FuncInst *inst = it->getVal();
+ model_print("type: %d, at: %s\n", inst->get_type(), inst->get_position());
+ }
+ */
}
}