| Index: sdk/lib/_internal/compiler/implementation/resolution/members.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
|
| index d30753dff35e6085cc95390c894ce77d827477dd..39c3cd901eea0253817e9b22ac988bca5ba46da0 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
|
| @@ -1771,13 +1771,19 @@ class ResolverVisitor extends CommonResolverVisitor<Element> {
|
|
|
| void resolveArguments(NodeList list) {
|
| if (list == null) return;
|
| - bool seenNamedArgument = false;
|
| + List<SourceString> seenNamedArguments = <SourceString>[];
|
| for (Link<Node> link = list.nodes; !link.isEmpty; link = link.tail) {
|
| Expression argument = link.head;
|
| visit(argument);
|
| - if (argument.asNamedArgument() != null) {
|
| - seenNamedArgument = true;
|
| - } else if (seenNamedArgument) {
|
| + NamedArgument namedArgument = argument.asNamedArgument();
|
| + if (namedArgument != null) {
|
| + SourceString source = namedArgument.name.source;
|
| + if (seenNamedArguments.contains(source)) {
|
| + error(argument, MessageKind.DUPLICATE_DEFINITION,
|
| + [source.slowToString()]);
|
| + }
|
| + seenNamedArguments.add(source);
|
| + } else if (!seenNamedArguments.isEmpty) {
|
| error(argument, MessageKind.INVALID_ARGUMENT_AFTER_NAMED);
|
| }
|
| }
|
|
|