// goes well with the stage {} macro (see tok_stages) srecord Stages2(new L stages) is Steppable, Runnable { int iStage; Stage stage; srecord noeq Stage(S name, Runnable body) {} public bool step() { // What is this funny syntax if (iStage >= l(stages)) false; callF(stages.get(iStage++).body); } Stage stage(Stage stage) { stages.add(stage); ret stage; } Stage stage(S name, Runnable body) { ret stage(new Stage(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()) {} } }