parseArguments method
({Map<String, Constant?> named, List<Constant?> positional})
parseArguments(
- CallWithArguments call
Implementation
({List<Constant?> positional, Map<String, Constant?> named}) parseArguments(
CallWithArguments call,
) {
final positionalArguments = <Constant?>[];
final namedArguments = <String, Constant?>{};
final names = [
...positionalParameters,
...positionalOptionalParameters,
...namedParameters,
...namedOptionalParameters,
];
if (call.positionalArguments.length + call.namedArguments.length !=
names.length) {
throw FormatException(
'''
Invalid number of arguments - $names vs ${call.positionalArguments} and ${call.namedArguments}''',
);
}
final sortedNames = names.sorted();
final mapping = <String, Constant?>{};
for (var i = 0; i < sortedNames.length; i++) {
final name = sortedNames[i];
mapping[name] = call.namedArguments[name] ?? call.positionalArguments[i];
}
for (var name in names) {
var constant = mapping[name];
if (positionalParameters.contains(name) ||
positionalOptionalParameters.contains(name)) {
positionalArguments.add(constant);
} else if (namedParameters.contains(name) ||
namedOptionalParameters.contains(name)) {
namedArguments[name] = constant;
}
}
return (named: namedArguments, positional: positionalArguments);
}