run method
Implementation
@override
FutureOr<ASTValue> run(
VMContext parentContext, ASTRunStatus runStatus) async {
var context = VMContext(parentContext.block, parent: parentContext);
var runStatus = ASTRunStatus();
var prevContext = VMContext.setCurrent(context);
try {
await initStatement.run(context, runStatus);
while (true) {
var cond = await conditionExpression.run(context, runStatus);
if (cond is ASTValueBool) {
if (!cond.value) break;
} else {
var condOK = await cond.getValue(context);
if (condOK is bool) {
if (!condOK) break;
} else {
throw ApolloVMRuntimeError(
'Condition not returning a boolean: $condOK');
}
}
var loopContext = VMContext(parentContext.block, parent: context);
VMContext.setCurrent(loopContext);
await loopBlock.run(loopContext, runStatus);
VMContext.setCurrent(context);
await continueExpression.run(context, runStatus);
}
} finally {
VMContext.setCurrent(prevContext);
}
return ASTValueVoid.instance;
}