| 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/dart_vm_native.dart' show removeNativeClause; | 31 import '../parser/native_support.dart' |
| 32 show extractNativeMethodName, removeNativeClause, skipNativeClause; |
| 32 | 33 |
| 33 import '../operator.dart' | 34 import '../operator.dart' |
| 34 show | 35 show |
| 35 Operator, | 36 Operator, |
| 36 operatorFromString, | 37 operatorFromString, |
| 37 operatorToString, | 38 operatorToString, |
| 38 operatorRequiredArgumentCount; | 39 operatorRequiredArgumentCount; |
| 39 | 40 |
| 40 import '../quote.dart' show unescapeString; | 41 import '../quote.dart' show unescapeString; |
| 41 | 42 |
| 42 enum MethodBody { | 43 enum MethodBody { |
| 43 Abstract, | 44 Abstract, |
| 44 Regular, | 45 Regular, |
| 45 RedirectingFactoryBody, | 46 RedirectingFactoryBody, |
| 46 } | 47 } |
| 47 | 48 |
| 48 class OutlineBuilder extends UnhandledListener { | 49 class OutlineBuilder extends UnhandledListener { |
| 49 final SourceLibraryBuilder library; | 50 final SourceLibraryBuilder library; |
| 50 | 51 |
| 51 final bool enableNative; | 52 final bool enableNative; |
| 53 final bool stringExpectedAfterNative; |
| 52 | 54 |
| 53 /// When true, recoverable parser errors are silently ignored. This is | 55 /// When true, recoverable parser errors are silently ignored. This is |
| 54 /// because they will be reported by the BodyBuilder later. However, typedefs | 56 /// because they will be reported by the BodyBuilder later. However, typedefs |
| 55 /// are fully compiled by the outline builder, so parser errors are turned on | 57 /// are fully compiled by the outline builder, so parser errors are turned on |
| 56 /// when parsing typedefs. | 58 /// when parsing typedefs. |
| 57 bool silenceParserErrors = true; | 59 bool silenceParserErrors = true; |
| 58 | 60 |
| 59 String nativeMethodName; | 61 String nativeMethodName; |
| 60 | 62 |
| 61 OutlineBuilder(SourceLibraryBuilder library) | 63 OutlineBuilder(SourceLibraryBuilder library) |
| 62 : library = library, | 64 : library = library, |
| 63 enableNative = library.loader.target.enableNative(library); | 65 enableNative = |
| 66 library.loader.target.backendTarget.enableNative(library.uri), |
| 67 stringExpectedAfterNative = |
| 68 library.loader.target.backendTarget.nativeExtensionExpectsString; |
| 64 | 69 |
| 65 @override | 70 @override |
| 66 Uri get uri => library.fileUri; | 71 Uri get uri => library.fileUri; |
| 67 | 72 |
| 68 @override | 73 @override |
| 69 int popCharOffset() => pop(); | 74 int popCharOffset() => pop(); |
| 70 | 75 |
| 71 List<String> popIdentifierList(int count) { | 76 List<String> popIdentifierList(int count) { |
| 72 if (count == 0) return null; | 77 if (count == 0) return null; |
| 73 List<String> list = new List<String>.filled(count, null, growable: true); | 78 List<String> list = new List<String>.filled(count, null, growable: true); |
| (...skipping 758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 832 if (silenceParserErrors) { | 837 if (silenceParserErrors) { |
| 833 debugEvent("RecoverableError"); | 838 debugEvent("RecoverableError"); |
| 834 } else { | 839 } else { |
| 835 super.handleRecoverableError(token, message); | 840 super.handleRecoverableError(token, message); |
| 836 } | 841 } |
| 837 } | 842 } |
| 838 | 843 |
| 839 @override | 844 @override |
| 840 Token handleUnrecoverableError(Token token, FastaMessage message) { | 845 Token handleUnrecoverableError(Token token, FastaMessage message) { |
| 841 if (enableNative && message.code == codeExpectedBlockToSkip) { | 846 if (enableNative && message.code == codeExpectedBlockToSkip) { |
| 842 var target = library.loader.target; | 847 Token recover = skipNativeClause(token, stringExpectedAfterNative); |
| 843 Token recover = target.skipNativeClause(token); | |
| 844 if (recover != null) { | 848 if (recover != null) { |
| 845 nativeMethodName = target.extractNativeMethodName(token); | 849 nativeMethodName = |
| 850 stringExpectedAfterNative ? extractNativeMethodName(token) : ""; |
| 846 return recover; | 851 return recover; |
| 847 } | 852 } |
| 848 } | 853 } |
| 849 return super.handleUnrecoverableError(token, message); | 854 return super.handleUnrecoverableError(token, message); |
| 850 } | 855 } |
| 851 | 856 |
| 852 @override | 857 @override |
| 853 void addCompileTimeErrorFromMessage(FastaMessage message) { | 858 void addCompileTimeErrorFromMessage(FastaMessage message) { |
| 854 library.addCompileTimeError(message.charOffset, message.message, | 859 library.addCompileTimeError(message.charOffset, message.message, |
| 855 fileUri: message.uri); | 860 fileUri: message.uri); |
| 856 } | 861 } |
| 857 | 862 |
| 858 @override | 863 @override |
| 859 Link<Token> handleMemberName(Link<Token> identifiers) { | 864 Link<Token> handleMemberName(Link<Token> identifiers) { |
| 860 if (!enableNative || identifiers.isEmpty) return identifiers; | 865 if (!enableNative || identifiers.isEmpty) return identifiers; |
| 861 return removeNativeClause(identifiers); | 866 return removeNativeClause(identifiers, stringExpectedAfterNative); |
| 862 } | 867 } |
| 863 | 868 |
| 864 @override | 869 @override |
| 865 void debugEvent(String name) { | 870 void debugEvent(String name) { |
| 866 // printEvent(name); | 871 // printEvent(name); |
| 867 } | 872 } |
| 868 } | 873 } |
| OLD | NEW |