private static State FindStartState(Machine machine, ITranslationErrorHandler handler) { bool foundStartState = false; foreach (State state in machine.AllStates()) { if (state == machine.StartState || state.IsStart) { if (!foundStartState) { foundStartState = true; } else { throw handler.TwoStartStates(machine, state); } } } Debug.Assert(!(foundStartState && machine.StartState == null), "machine has unregistered start state"); if (!foundStartState || machine.StartState == null) { throw handler.MissingStartState(machine); } return(machine.StartState); }
private static State FindStartState(Machine machine, ITranslationErrorHandler handler) { var foundStartState = false; foreach (State state in machine.AllStates()) { if (state == machine.StartState || state.IsStart) { if (!foundStartState) { foundStartState = true; } else { throw handler.InternalError(state.SourceLocation, $"Two start states {state.Name} occurs twice in all states list"); } } } if (foundStartState && machine.StartState == null) { throw handler.InternalError(machine.SourceLocation, "machine has unregistered start state"); } if (!foundStartState || machine.StartState == null) { // Allow machines with no start state so long as there are no other states. throw handler.MissingStartState(machine); } return(machine.StartState); }