visitForStmt method
void
visitForStmt(
- ForExpr node
)
override
Implementation
@override
void visitForStmt(ForExpr node) {
final userDecl = node.init;
VarDecl? initializer;
BlockStmt loop = node.loop;
final markedSymbols = <String, String>{};
if (userDecl != null) {
final markedVariable = _context.optimization.loopBindings[node]!.first;
final markedId = '${_lexicon.internalPrefix}${userDecl.id.id}';
markedSymbols[userDecl.id.id] = markedId;
initializer = _record(
VarDecl(
_context.declarationIdentifier(markedId, markedVariable, userDecl.id),
initializer: userDecl.initializer,
isMutable: userDecl.isMutable,
source: userDecl.source,
line: userDecl.line,
column: userDecl.column,
offset: userDecl.offset,
length: userDecl.length,
),
userDecl,
);
final capturedInit =
_context.referenceIdentifier(markedId, markedVariable, userDecl.id);
final capturedDecl = _record(
VarDecl(
userDecl.id,
initializer: capturedInit,
source: userDecl.source,
line: userDecl.line,
column: userDecl.column,
offset: userDecl.offset,
length: userDecl.length,
),
userDecl,
);
loop = _loopBlock(node.loop, capturedDecl);
}
final condition = node.condition ??
_record(
ASTLiteralBoolean(
true,
source: node.source,
line: node.line,
column: node.column,
offset: node.offset,
length: node.length,
),
node,
);
_context.recordForLoop(
node,
HTForLowering(
initializer: initializer,
condition: condition,
increment: node.increment,
loop: loop,
markedSymbols: markedSymbols,
),
);
node.subAccept(this);
}