diff --git a/TODO_StateMachine.md b/TODO_StateMachine.md index 984aa2b2..c8442f77 100644 --- a/TODO_StateMachine.md +++ b/TODO_StateMachine.md @@ -189,14 +189,14 @@ class Calculator [cpp:Private] func Resume(): void { - var currentResult: ::system::CoroutineResult^ = null; + var previousResult: ::system::CoroutineResult^ = null; while (true) { if (coroutine: is null) { - if (Result is not null) + if (previousResult is not null) { - if (Result.Failure is not null) + if (previousResult.Failure is not null) { raise Result.Failure; } @@ -206,18 +206,24 @@ class Calculator            if (coroutine.Status != ::system::CoroutineStatus::Stopped) { var currentCoroutine = coroutine; - currentCoroutine.Status.Resume(true, result); - if (currentCoroutine.Status == ::system::CoroutineStatus::Waiting) + currentCoroutine.Status.Resume(true, previousResult); + if (coroutine == currentCoroutine) { - currentResult = new ::system::CoroutineResult^(); + break; // wait for input + } + else if (currentCoroutine.Status == ::system::CoroutineStatus::Stopped) + { + // leave a state machine + previousResult = new ::system::CoroutineResult^(); if (currentCoroutine.Failure is not null) { - currentResult.Failure = currentCoroutine.Failure; + previousResult.Failure = currentCoroutine.Failure; } } else { - currentResult = null; + // enter a state machine + break; } }        }