Closed sstiller closed 5 years ago
If all children of P1
have transitions for the event, everything is fine:
<?xml version="1.0" encoding="UTF-8"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" binding="early" name="parallelevent">
<parallel id="P1">
<state id="P1S1">
<state id="P1S1S1">
<transition type="external" event="ev1" target="P1S1S2"/>
</state>
<state id="P1S1S2">
</state>
</state>
<state id="P1S2">
<state id="P1S2S1">
<transition type="external" event="ev1" target="P1S2S2"/>
</state>
<state id="P1S2S2">
</state>
</state>
<transition type="external" event="ev1" target="Final_1"/>
</parallel>
<final id="Final_1">
</final>
</scxml>
Thanks. Yes the wrong transition is taken. I will look into this.
Just a minor update. I have been quite busy lately, but I think I will get some time in week 28 to solve this
Work in progress...
fixed in #105
If a parallel state and one of its descendants have a transition with the same event, the wrong transition is executed.
At least I understand the algorithm in this way:
selectTransitions(event)
selects both transitions and callsremoveConflictingTransitions
removeConflictingTransitions
removes the transition with the sourceP1
becauseP1S1S1
is a descendant ofP1
P1S1S1
) is executed.Behavior of the state machine generated by scxmlcc:
P1
) is executed.The SCXML code:
Test program:
scxmlcc command line:
scxmlcc -d clog --cpp14 --stringevents -o parallelevent.h parallelevent.scxml
log: