multiAssignExpr method
Implementation
MathExpr multiAssignExpr({required MathExpr first}) {
final bool ok = canMultAssignWith(first);
if (!ok) {
final linePos = peek().pos;
throw '$linePos Leading term in mutli-assignment was not a variable.';
}
final lhs = [first];
int i = 2;
while (peek().type == TokenType.kComma) {
advance();
final next = memoryExpr();
if (canMultAssignWith(next)) {
lhs.add(next);
} else {
final linePos = peek().pos;
throw '$linePos Term #$i in mutli-assignment was not a variable.';
}
i++;
}
final assign = peek();
final linePos = assign.pos;
if (assign.type != TokenType.kAssign) {
throw '$linePos Expected "=" in multi-variable assignment expression.';
}
advance();
final List<MathExpr> rhs = [math()];
while (peek().type == TokenType.kComma) {
advance();
rhs.add(math());
}
if (lhs.length != rhs.length) {
final int lhsLen = lhs.length;
final int rhsLen = rhs.length;
addWarning(
'$linePos lhs of assignment has $lhsLen var(s) but rhs has $rhsLen val(s).',
);
}
return AssignMultiExpr.resize(assign, lhs: lhs, rhs: rhs);
}