AsyncEmbeddedScript2 label tracking

This commit is contained in:
Trent Nelson
2023-08-02 14:36:31 -07:00
parent 3761609b5d
commit e77c64b836

View File

@@ -223,6 +223,9 @@ class AsyncEmbeddedScript2 {
}
}
public var lastLabel(default, null):String = "";
public var onLabel:String->Void;
public function labelRunners(withBreakpoints = true):Map<String,AsyncEmbeddedScript2->Void> {
return [for (label => ip in labels) label => (newScript:AsyncEmbeddedScript2) -> newScript.runFromInstruction(ip, withBreakpoints)];
}
@@ -271,7 +274,13 @@ class AsyncEmbeddedScript2 {
label = '${++labelNum}. '.lpad("0", 5) + label;
labelsList.push(macro labels[$v{label}] = $v{commandList.length});
wholeExp.expBuilder().callSymbol("cc", []);
var b = wholeExp.expBuilder();
b.begin([
b.set(b.symbol("lastLabel"), b.str(label)),
b.callSymbol("when", [b.symbol("onLabel"), b.callSymbol("onLabel", [b.str(label)])]),
b.callSymbol("cc", [])
]);
default:
throw KissError.fromExp(wholeExp, "bad (label) statement");
}