// 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); } void stepUntilStage(Stage stage) { while (iStage() < indexOfStage(stage)) } }