declMultiVarStmt method
Stmt
declMultiVarStmt(
{ - required bool local,
})
Implementation
Stmt declMultiVarStmt({required bool local}) {
final token = consume(
TokenType.kRaw,
'Expected variable name.',
);
attr() {
// Build an attribute from these tokens.
Token? a;
if(peek().type == TokenType.kLT) {
advance();
a = consume(TokenType.kRaw, 'Expected attribute name.');
consume(TokenType.kGT, 'Expected closing ">" after attribute.');
}
return a;
}
final vars = [token];
final attrs = local ? [attr()] : const <Token>[];
while (peek().type == TokenType.kComma) {
advance();
vars.add(
consume(
TokenType.kRaw,
'Expected variable name in multi-variable initializer.',
),
);
if(local) {
attrs.add(attr());
}
}
final assign = peek();
if (assign.type != TokenType.kAssign) {
return DeclMultiVar.initNils(vars, attrs, local);
}
consume(
TokenType.kAssign,
'Expected assignment operator for multi-variable initilaizer.',
);
final List<MathExpr> vals = [math()];
while (peek().type == TokenType.kComma) {
advance();
vals.add(math());
}
return DeclMultiVar.initVals(vars, attrs, vals, local);
}