| Index: runtime/vm/parser.cc
|
| ===================================================================
|
| --- runtime/vm/parser.cc (revision 14233)
|
| +++ runtime/vm/parser.cc (working copy)
|
| @@ -3592,21 +3592,18 @@
|
| do {
|
| ConsumeToken();
|
| SkipMetadata();
|
| - if (CurrentToken() != Token::kIDENT) {
|
| - ErrorMsg("type parameter name expected");
|
| - }
|
| - String& type_parameter_name = *CurrentLiteral();
|
| const intptr_t type_parameter_pos = TokenPos();
|
| + String& type_parameter_name =
|
| + *ExpectClassIdentifier("type parameter expected");
|
| // Check for duplicate type parameters.
|
| for (intptr_t i = 0; i < index; i++) {
|
| existing_type_parameter ^= type_parameters_array.At(i);
|
| existing_type_parameter_name = existing_type_parameter.name();
|
| if (existing_type_parameter_name.Equals(type_parameter_name)) {
|
| - ErrorMsg("duplicate type parameter '%s'",
|
| + ErrorMsg(type_parameter_pos, "duplicate type parameter '%s'",
|
| type_parameter_name.ToCString());
|
| }
|
| }
|
| - ConsumeToken();
|
| if (CurrentToken() == Token::kEXTENDS) {
|
| ConsumeToken();
|
| // A bound may refer to the owner of the type parameter it applies to,
|
|
|