| Index: pkg/front_end/lib/src/fasta/source/outline_builder.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
|
| index b9a8476986aead2d6f5c362720fab9149201face..e61f01551cd31c15bfc34b27e25c61dcd73420e6 100644
|
| --- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
|
| +++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
|
| @@ -49,6 +49,9 @@ import '../operator.dart' show
|
| operatorFromString,
|
| operatorToString;
|
|
|
| +import '../quote.dart' show
|
| + unescapeString;
|
| +
|
| enum MethodBody {
|
| Abstract,
|
| Regular,
|
| @@ -80,6 +83,8 @@ class OutlineBuilder extends UnhandledListener {
|
|
|
| final bool isDartLibrary;
|
|
|
| + String nativeMethodName;
|
| +
|
| OutlineBuilder(SourceLibraryBuilder library)
|
| : library = library,
|
| isDartLibrary = library.uri.scheme == "dart";
|
| @@ -240,7 +245,8 @@ class OutlineBuilder extends UnhandledListener {
|
| checkEmpty();
|
| library.addProcedure(metadata, modifiers, returnType, name,
|
| typeVariables, formals, asyncModifier, computeProcedureKind(getOrSet),
|
| - beginToken.charOffset, isTopLevel: true);
|
| + beginToken.charOffset, nativeMethodName, isTopLevel: true);
|
| + nativeMethodName = null;
|
| }
|
|
|
| @override
|
| @@ -289,7 +295,9 @@ class OutlineBuilder extends UnhandledListener {
|
| isAbstract: bodyKind == MethodBody.Abstract);
|
| List<MetadataBuilder> metadata = pop();
|
| library.addProcedure(metadata, modifiers, returnType, name, typeVariables,
|
| - formals, asyncModifier, kind, beginToken.charOffset, isTopLevel: false);
|
| + formals, asyncModifier, kind, beginToken.charOffset, nativeMethodName,
|
| + isTopLevel: false);
|
| + nativeMethodName = null;
|
| }
|
|
|
| @override
|
| @@ -517,7 +525,8 @@ class OutlineBuilder extends UnhandledListener {
|
| var name = pop();
|
| List<MetadataBuilder> metadata = pop();
|
| library.addFactoryMethod(metadata, name, formals, asyncModifier,
|
| - redirectionTarget, beginToken.charOffset);
|
| + redirectionTarget, beginToken.charOffset, nativeMethodName);
|
| + nativeMethodName = null;
|
| }
|
|
|
| @override
|
| @@ -552,6 +561,7 @@ class OutlineBuilder extends UnhandledListener {
|
| @override
|
| void endMember() {
|
| debugEvent("Member");
|
| + assert(nativeMethodName == null);
|
| }
|
|
|
| @override
|
| @@ -581,7 +591,10 @@ class OutlineBuilder extends UnhandledListener {
|
| Token handleUnrecoverableError(Token token, ErrorKind kind, Map arguments) {
|
| if (isDartLibrary && kind == ErrorKind.ExpectedBlockToSkip) {
|
| Token recover = skipNativeClause(token);
|
| - if (recover != null) return recover;
|
| + if (recover != null) {
|
| + nativeMethodName = unescapeString(token.next.value);
|
| + return recover;
|
| + }
|
| }
|
| return super.handleUnrecoverableError(token, kind, arguments);
|
| }
|
|
|