visitForStatement method
Object?
visitForStatement(
- ForStatement node
)
override
Implementation
@override
Object? visitForStatement(ForStatement node) {
final loopParts = node.forLoopParts;
if (loopParts is ForPartsWithDeclarations) {
// Classic for loop: for (var i = 0; ... ; ...)
_executeClassicFor(loopParts.variables, loopParts.condition,
loopParts.updaters, node.body);
} else if (loopParts is ForPartsWithExpression) {
// Classic for loop: for (i = 0; ... ; ...)
_executeClassicFor(loopParts.initialization, loopParts.condition,
loopParts.updaters, node.body);
} else if (loopParts is ForEachPartsWithDeclaration) {
// For-in loop: for (var item in list) or await for (var item in stream)
if (node.awaitKeyword != null) {
// await for loop - expect Stream
return _executeAwaitForIn(
loopParts.loopVariable, loopParts.iterable, node.body);
} else {
// Regular for-in loop - expect Iterable
_executeForIn(loopParts.loopVariable, loopParts.iterable, node.body);
}
} else if (loopParts is ForEachPartsWithIdentifier) {
// For-in loop: for (item in list) or await for (item in stream)
if (node.awaitKeyword != null) {
// await for loop - expect Stream
return _executeAwaitForIn(
loopParts.identifier, loopParts.iterable, node.body);
} else {
// Regular for-in loop - expect Iterable
_executeForIn(loopParts.identifier, loopParts.iterable, node.body);
}
} else {
// Should not happen with valid Dart code
throw StateD4rtException(
'Unknown ForLoopParts type: ${loopParts.runtimeType}');
}
return null; // For loops don't produce a value
}