private bool TryReadFlowControl(UpperString text, out ActorFlowControl flowControl)
        {
            flowControl = null;

            if (!TryGetStateBranch(text, out ActorStateBranch branchType))
            {
                return(false);
            }

            switch (branchType)
            {
            case ActorStateBranch.Goto:
                flowControl = ReadGotoLabel();
                break;

            case ActorStateBranch.Loop:
                if (lastSeenLabelOrNull == null)
                {
                    throw MakeException("Cannot loop when no label has been defined yet");
                }
                flowControl = new ActorFlowControl(branchType, lastSeenLabelOrNull);
                break;

            default:
                flowControl = new ActorFlowControl(branchType);
                break;
            }

            return(true);
        }
 private void ApplyStateBranch(ActorFlowControl flowControl)
 {
     if (justSeenLabelOrNull != null)
     {
         HandleLabelOverride(justSeenLabelOrNull, flowControl);
     }
     else
     {
         GetLastFrameOrThrow().FlowControl = flowControl;
     }
 }
        private void HandleLabelOverride(UpperString label, ActorFlowControl flowControl)
        {
            switch (flowControl.FlowType)
            {
            case ActorStateBranch.Goto:
            case ActorStateBranch.Stop:
                currentDefinition.States.flowOverrides[label] = flowControl;
                break;

            default:
                throw MakeException("Flow control override after a label must be either 'Stop' or 'Goto'");
            }
        }