fix interpreter bug
This commit is contained in:
parent
9fd1c3a9a7
commit
3f6b2ba950
1 changed files with 4 additions and 1 deletions
|
|
@ -326,6 +326,7 @@ function attemptSrcState(simtime: number, sourceState: AbstractState, event: RT_
|
||||||
|
|
||||||
// A fair step is a response to one (input|internal) event, where possibly multiple transitions are made as long as their arenas do not overlap. A reasonably accurate and more intuitive explanation is that every orthogonal region is allowed to fire at most one transition.
|
// A fair step is a response to one (input|internal) event, where possibly multiple transitions are made as long as their arenas do not overlap. A reasonably accurate and more intuitive explanation is that every orthogonal region is allowed to fire at most one transition.
|
||||||
export function fairStep(simtime: number, event: RT_Event, statechart: Statechart, activeParent: StableState, {arenasFired, environment, ...config}: RT_Statechart & RaisedEvents): RT_Statechart & RaisedEvents {
|
export function fairStep(simtime: number, event: RT_Event, statechart: Statechart, activeParent: StableState, {arenasFired, environment, ...config}: RT_Statechart & RaisedEvents): RT_Statechart & RaisedEvents {
|
||||||
|
console.log('fair step', event, activeParent);
|
||||||
environment = environment.enterScope(activeParent.uid);
|
environment = environment.enterScope(activeParent.uid);
|
||||||
// console.log('fairStep', arenasFired);
|
// console.log('fairStep', arenasFired);
|
||||||
for (const state of activeParent.children) {
|
for (const state of activeParent.children) {
|
||||||
|
|
@ -346,6 +347,7 @@ export function fairStep(simtime: number, event: RT_Event, statechart: Statechar
|
||||||
}
|
}
|
||||||
|
|
||||||
export function handleInputEvent(simtime: number, event: RT_Event, statechart: Statechart, {mode, environment, history}: {mode: Mode, environment: Environment, history: RT_History}): BigStep {
|
export function handleInputEvent(simtime: number, event: RT_Event, statechart: Statechart, {mode, environment, history}: {mode: Mode, environment: Environment, history: RT_History}): BigStep {
|
||||||
|
console.log('handleInputEvent', event);
|
||||||
let raised = initialRaised;
|
let raised = initialRaised;
|
||||||
|
|
||||||
({mode, environment, ...raised} = fairStep(simtime, event, statechart, statechart.root, {mode, environment, history, arenasFired: [], ...raised}));
|
({mode, environment, ...raised} = fairStep(simtime, event, statechart, statechart.root, {mode, environment, history, arenasFired: [], ...raised}));
|
||||||
|
|
@ -354,11 +356,12 @@ export function handleInputEvent(simtime: number, event: RT_Event, statechart: S
|
||||||
}
|
}
|
||||||
|
|
||||||
export function handleInternalEvents(simtime: number, statechart: Statechart, {internalEvents, ...rest}: RT_Statechart & RaisedEvents) {
|
export function handleInternalEvents(simtime: number, statechart: Statechart, {internalEvents, ...rest}: RT_Statechart & RaisedEvents) {
|
||||||
|
console.log('handleInternalEvents');
|
||||||
while (internalEvents.length > 0) {
|
while (internalEvents.length > 0) {
|
||||||
const [nextEvent, ...remainingEvents] = internalEvents;
|
const [nextEvent, ...remainingEvents] = internalEvents;
|
||||||
({internalEvents, ...rest} = fairStep(simtime,
|
({internalEvents, ...rest} = fairStep(simtime,
|
||||||
{kind: "input", ...nextEvent}, // internal event becomes input event
|
{kind: "input", ...nextEvent}, // internal event becomes input event
|
||||||
statechart, statechart.root, { arenasFired: [], internalEvents: remainingEvents, ...rest}));
|
statechart, statechart.root, { ...rest, arenasFired: [], internalEvents: remainingEvents, }));
|
||||||
}
|
}
|
||||||
return rest;
|
return rest;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue