translate_aa: fix sere copy
When adapting the code to handle transition-based acceptance, a bug was introduced so that only accepting edges were copied to the result automaton. The self-loop labeled as false edge-case is here as prevention, I am not sure it happens in practice. * spot/twaalgos/translate_aa.cc: Here.
This commit is contained in:
parent
bb33c5120f
commit
c63412ab94
1 changed files with 13 additions and 13 deletions
|
|
@ -124,19 +124,16 @@ namespace spot
|
|||
bool edge_is_acc = ((trans_based && e.acc)
|
||||
|| (!trans_based && sere_aut->state_is_accepting(e.dst)));
|
||||
|
||||
if (edge_is_acc)
|
||||
{
|
||||
// point to accepting sink instead of original dst if asked
|
||||
if (use_accepting_sink)
|
||||
aut_->new_edge(new_st, accepting_sink_, e.cond);
|
||||
else
|
||||
{
|
||||
unsigned new_e = aut_->new_edge(new_st, register_state(e.dst), e.cond);
|
||||
// remember if old edges were accepting
|
||||
if (acc_edges != nullptr)
|
||||
acc_edges->push_back(new_e);
|
||||
}
|
||||
}
|
||||
unsigned new_edge;
|
||||
// point to accepting sink instead of original dst if asked
|
||||
if(use_accepting_sink && edge_is_acc)
|
||||
new_edge = aut_->new_edge(new_st, accepting_sink_, e.cond);
|
||||
else
|
||||
new_edge = aut_->new_edge(new_st, register_state(e.dst), e.cond);
|
||||
|
||||
// remember if old edges were accepting
|
||||
if (acc_edges != nullptr && edge_is_acc)
|
||||
acc_edges->push_back(new_edge);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -340,6 +337,9 @@ namespace spot
|
|||
for (unsigned i : acc_edges)
|
||||
{
|
||||
auto& e1 = aut_->edge_storage(i);
|
||||
// self loop used to mark accepting state, skip it!
|
||||
if (e1.cond == bddfalse)
|
||||
continue;
|
||||
for (const auto& e2 : aut_->out(rhs_init))
|
||||
aut_->new_edge(e1.src, e2.dst, e1.cond & e2.cond);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue