Details
-
Bug
-
Resolution: Done
-
P2: Important
-
5.4.1, 5.5.0 Alpha
-
None
-
b2f6406b6f3c6374df2751a4669fbe51f04d09e7
Description
conflicting transitions (transitions having a non null intersection of their exit set (list of states that are exited by the transition)) are not detected, and removed (choosing only one transition) as the scxml standard specifies, only simple nesting (inner transition hiding outer one), is handled.
This can have effects ranging from simply non compliance (the transition non conformly to the standard in case of conflict), to landing the state machine non sensical and invalid states as showed in this example:
<scxml datamodel="ecmascript" xmlns="http://www.w3.org/2005/07/scxml" version="1.0" initial="b"> <parallel id="b"> <state id="c" initial="c1"> <state id="c1"> <transition event="t" target="c2"/> </state> <state id="c2"/> </state> <state id="d" initial="d1"> <state id="d1"> <transition event="t" target="a1"/> </state> </state> </parallel> <state id="a1"/> </scxml>
that lands in the nonsensical c2, a1 state after event t (i.e. in one of the two parallel states, and outside it at the same time).
Tomorrow I will add a pure QStateMachine c++ program having this behaviour to the bug.