| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library fasta.outline_builder; | 5 library fasta.outline_builder; |
| 6 | 6 |
| 7 import 'package:kernel/ast.dart' show ProcedureKind; | 7 import 'package:kernel/ast.dart' show ProcedureKind; |
| 8 | 8 |
| 9 import '../fasta_codes.dart' show FastaMessage, codeExpectedBlockToSkip; | 9 import '../fasta_codes.dart' show FastaMessage, codeExpectedBlockToSkip; |
| 10 | 10 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 import '../errors.dart' show internalError; | 21 import '../errors.dart' show internalError; |
| 22 | 22 |
| 23 import '../builder/builder.dart'; | 23 import '../builder/builder.dart'; |
| 24 | 24 |
| 25 import '../modifier.dart' show abstractMask, externalMask, Modifier; | 25 import '../modifier.dart' show abstractMask, externalMask, Modifier; |
| 26 | 26 |
| 27 import 'source_library_builder.dart' show SourceLibraryBuilder; | 27 import 'source_library_builder.dart' show SourceLibraryBuilder; |
| 28 | 28 |
| 29 import 'unhandled_listener.dart' show NullValue, Unhandled, UnhandledListener; | 29 import 'unhandled_listener.dart' show NullValue, Unhandled, UnhandledListener; |
| 30 | 30 |
| 31 import '../parser/native_support.dart' | 31 import '../parser/dart_vm_native.dart' show removeNativeClause; |
| 32 show extractNativeMethodName, removeNativeClause, skipNativeClause; | |
| 33 | 32 |
| 34 import '../operator.dart' | 33 import '../operator.dart' |
| 35 show | 34 show |
| 36 Operator, | 35 Operator, |
| 37 operatorFromString, | 36 operatorFromString, |
| 38 operatorToString, | 37 operatorToString, |
| 39 operatorRequiredArgumentCount; | 38 operatorRequiredArgumentCount; |
| 40 | 39 |
| 41 import '../quote.dart' show unescapeString; | 40 import '../quote.dart' show unescapeString; |
| 42 | 41 |
| 43 enum MethodBody { | 42 enum MethodBody { |
| 44 Abstract, | 43 Abstract, |
| 45 Regular, | 44 Regular, |
| 46 RedirectingFactoryBody, | 45 RedirectingFactoryBody, |
| 47 } | 46 } |
| 48 | 47 |
| 49 class OutlineBuilder extends UnhandledListener { | 48 class OutlineBuilder extends UnhandledListener { |
| 50 final SourceLibraryBuilder library; | 49 final SourceLibraryBuilder library; |
| 51 | 50 |
| 52 final bool enableNative; | 51 final bool enableNative; |
| 53 final bool stringExpectedAfterNative; | |
| 54 | 52 |
| 55 /// When true, recoverable parser errors are silently ignored. This is | 53 /// When true, recoverable parser errors are silently ignored. This is |
| 56 /// because they will be reported by the BodyBuilder later. However, typedefs | 54 /// because they will be reported by the BodyBuilder later. However, typedefs |
| 57 /// are fully compiled by the outline builder, so parser errors are turned on | 55 /// are fully compiled by the outline builder, so parser errors are turned on |
| 58 /// when parsing typedefs. | 56 /// when parsing typedefs. |
| 59 bool silenceParserErrors = true; | 57 bool silenceParserErrors = true; |
| 60 | 58 |
| 61 String nativeMethodName; | 59 String nativeMethodName; |
| 62 | 60 |
| 63 OutlineBuilder(SourceLibraryBuilder library) | 61 OutlineBuilder(SourceLibraryBuilder library) |
| 64 : library = library, | 62 : library = library, |
| 65 enableNative = | 63 enableNative = library.loader.target.enableNative(library); |
| 66 library.loader.target.backendTarget.enableNative(library.uri), | |
| 67 stringExpectedAfterNative = | |
| 68 library.loader.target.backendTarget.nativeExtensionExpectsString; | |
| 69 | 64 |
| 70 @override | 65 @override |
| 71 Uri get uri => library.fileUri; | 66 Uri get uri => library.fileUri; |
| 72 | 67 |
| 73 @override | 68 @override |
| 74 int popCharOffset() => pop(); | 69 int popCharOffset() => pop(); |
| 75 | 70 |
| 76 List<String> popIdentifierList(int count) { | 71 List<String> popIdentifierList(int count) { |
| 77 if (count == 0) return null; | 72 if (count == 0) return null; |
| 78 List<String> list = new List<String>.filled(count, null, growable: true); | 73 List<String> list = new List<String>.filled(count, null, growable: true); |
| (...skipping 768 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 847 if (silenceParserErrors) { | 842 if (silenceParserErrors) { |
| 848 debugEvent("RecoverableError"); | 843 debugEvent("RecoverableError"); |
| 849 } else { | 844 } else { |
| 850 super.handleRecoverableError(token, message); | 845 super.handleRecoverableError(token, message); |
| 851 } | 846 } |
| 852 } | 847 } |
| 853 | 848 |
| 854 @override | 849 @override |
| 855 Token handleUnrecoverableError(Token token, FastaMessage message) { | 850 Token handleUnrecoverableError(Token token, FastaMessage message) { |
| 856 if (enableNative && message.code == codeExpectedBlockToSkip) { | 851 if (enableNative && message.code == codeExpectedBlockToSkip) { |
| 857 Token recover = skipNativeClause(token, stringExpectedAfterNative); | 852 var target = library.loader.target; |
| 853 Token recover = target.skipNativeClause(token); |
| 858 if (recover != null) { | 854 if (recover != null) { |
| 859 nativeMethodName = | 855 nativeMethodName = target.extractNativeMethodName(token); |
| 860 stringExpectedAfterNative ? extractNativeMethodName(token) : ""; | |
| 861 return recover; | 856 return recover; |
| 862 } | 857 } |
| 863 } | 858 } |
| 864 return super.handleUnrecoverableError(token, message); | 859 return super.handleUnrecoverableError(token, message); |
| 865 } | 860 } |
| 866 | 861 |
| 867 @override | 862 @override |
| 868 void addCompileTimeErrorFromMessage(FastaMessage message) { | 863 void addCompileTimeErrorFromMessage(FastaMessage message) { |
| 869 library.addCompileTimeError(message.charOffset, message.message, | 864 library.addCompileTimeError(message.charOffset, message.message, |
| 870 fileUri: message.uri); | 865 fileUri: message.uri); |
| 871 } | 866 } |
| 872 | 867 |
| 873 @override | 868 @override |
| 874 Link<Token> handleMemberName(Link<Token> identifiers) { | 869 Link<Token> handleMemberName(Link<Token> identifiers) { |
| 875 if (!enableNative || identifiers.isEmpty) return identifiers; | 870 if (!enableNative || identifiers.isEmpty) return identifiers; |
| 876 return removeNativeClause(identifiers, stringExpectedAfterNative); | 871 return removeNativeClause(identifiers); |
| 877 } | 872 } |
| 878 | 873 |
| 879 @override | 874 @override |
| 880 void debugEvent(String name) { | 875 void debugEvent(String name) { |
| 881 // printEvent(name); | 876 // printEvent(name); |
| 882 } | 877 } |
| 883 } | 878 } |
| OLD | NEW |