generateSequence method
Implementation
ExpressionGenerator generateSequence(
SequenceExpression node, int startIndex) {
final g = ExpressionGenerator(node);
g.generate = (block) {
g.declareVariable(block);
final expressions = node.expressions;
final localVariables = <String?>[];
final semanticVariables = <String?>[];
final types = <String>[];
final generators = <ExpressionGenerator>[];
final active = expressions.where((e) => e.variable != null);
var activeIndex = -1;
if (node.actionSource == null) {
if (active.isEmpty) {
activeIndex = 0;
} else if (active.length == 1) {
activeIndex = active.first.index!;
}
}
var succesBlock = block;
for (var i = 0; i < expressions.length; i++) {
final child = expressions[i];
final g1 = acceptChild(child, g);
generators.add(g1);
if (i == 0) {
g1.addVariables(g);
}
if (i == activeIndex) {
if (child.resultUsed) {
g1.variable = g.variable;
g1.isVariableDeclared = g.isVariableDeclared;
}
}
if (i > 0 && !expressions[i - 1].isOptional) {
succesBlock.if$(ref(Members.ok), (block) {
succesBlock = block;
g1.generate(block);
});
} else {
g1.generate(succesBlock);
}
localVariables.add(g1.variable);
semanticVariables.add(child.variable);
types.add(child.resultType);
}
generateSequenceAction(node, succesBlock, g,
localVariables: localVariables,
semanticVariables: semanticVariables,
types: types);
};
return g;
}