exit procedure may be called improperly
In this SDL example (attached), a continuous signal is used in nested state:
In this situation, exit
procedure gets called in continuous signal processing:
--
when 4 =>
-- val := true (55,33)
ctxt.s1_0_val := true;
-- writeln('continuous signal!') (57,33)
Put ("continuous signal!");
New_Line;
-- NEXT_STATE - (59,38) at 554, 306
trId := -1;
goto Continuous_Signals;
-- ...
<<Continuous_Signals>>
-- Process continuous signals
if ctxt.Init_Done then
Check_Queue (msgPending);
end if;
if msgPending or trId /= -1 then
goto Next_Transition;
end if;
if ctxt.State = asn1Sccs1_0_s11 then
-- Priority 1
-- DECISION not val (53,33)
-- ANSWER true (None,None)
if ((not val)) = true then
p_0_s1_0_exit; -- <=== exit called here
trId := 4;
end if;
end if;
I am not sure about SDL semantics on this point (CS in composite states), but the implementation may be not correct. I am attaching the .pr file and the corresponding generated .adb code.