// goes well with the stage {} macro (see tok_stages) srecord Stages(new L stages) is Steppable, Runnable { replace Stage with Runnable. int iStage; Stage stage; public bool step() { // What is this funny syntax ret iStage <= l(stages) && trueBecause(callF(stage = _get(stages, iStage++))); } Stage stage(Stage stage) { stages.add(stage); ret stage; } Stage stage(S name, Stage stage) { ret stage(runnableWithCustomToString(name, stage)); } run { stepAll(this); } int indexOfStage(Stage stage) { ret stages.indexOf(stage); } void stepUntilStage(Stage stage) { int index = indexOfStage(stage); while (iStage <= index && step()) {} } }