| Index: pkg/front_end/lib/src/fasta/parser/parser.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
|
| index f7e2e1f90c1ca2e2ecc07d131512ef7aaa3a7661..365b7979d7573c7375bccbbc8cb521435273c237 100644
|
| --- a/pkg/front_end/lib/src/fasta/parser/parser.dart
|
| +++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
|
| @@ -857,9 +857,14 @@ class Parser {
|
| ++interfacesCount;
|
| } while (optional(',', token));
|
| }
|
| + Token nativeToken;
|
| + if (optional('native', token)) {
|
| + nativeToken = token;
|
| + token = parseNativeClause(nativeToken);
|
| + }
|
| token = parseClassBody(token);
|
| listener.endClassDeclaration(interfacesCount, begin, classKeyword,
|
| - extendsKeyword, implementsKeyword, token);
|
| + extendsKeyword, implementsKeyword, nativeToken, token);
|
| return token.next;
|
| }
|
|
|
| @@ -2105,6 +2110,19 @@ class Parser {
|
| return token;
|
| }
|
|
|
| + Token parseNativeClause(Token nativeToken) {
|
| + Token token = nativeToken.next;
|
| + bool hasName = false;
|
| + if (token.kind == STRING_TOKEN) {
|
| + hasName = true;
|
| + token = parseLiteralString(token);
|
| + }
|
| + listener.handleNativeClause(nativeToken, hasName);
|
| + reportRecoverableError(
|
| + nativeToken, fasta.messageNativeClauseShouldBeAnnotation);
|
| + return token;
|
| + }
|
| +
|
| Token skipClassBody(Token token) {
|
| if (!optional('{', token)) {
|
| return reportUnrecoverableErrorWithToken(
|
|
|