| 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.diet_listener; | 5 library fasta.diet_listener; |
| 6 | 6 |
| 7 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart' | 7 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart' |
| 8 show TypeInferenceEngine; | 8 show TypeInferenceEngine; |
| 9 | 9 |
| 10 import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart' | 10 import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart' |
| 11 show TypeInferenceListener; | 11 show TypeInferenceListener; |
| 12 | 12 |
| 13 import 'package:front_end/src/fasta/type_inference/type_inferrer.dart' | 13 import 'package:front_end/src/fasta/type_inference/type_inferrer.dart' |
| 14 show TypeInferrerDisabled; | 14 show TypeInferrerDisabled; |
| 15 | 15 |
| 16 import 'package:kernel/ast.dart' show AsyncMarker, Class, InterfaceType; | 16 import 'package:kernel/ast.dart' show AsyncMarker, Class, InterfaceType; |
| 17 | 17 |
| 18 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; | 18 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; |
| 19 | 19 |
| 20 import 'package:kernel/core_types.dart' show CoreTypes; | 20 import 'package:kernel/core_types.dart' show CoreTypes; |
| 21 | 21 |
| 22 import '../fasta_codes.dart' show FastaMessage, codeExpectedBlockToSkip; | 22 import '../fasta_codes.dart' show FastaMessage, codeExpectedBlockToSkip; |
| 23 | 23 |
| 24 import '../parser/parser.dart' show MemberKind, Parser, optional; | 24 import '../parser/parser.dart' show MemberKind, Parser, optional; |
| 25 | 25 |
| 26 import '../../scanner/token.dart' show BeginToken, Token; | 26 import '../../scanner/token.dart' show BeginToken, Token; |
| 27 | 27 |
| 28 import '../parser/dart_vm_native.dart' show removeNativeClause; | 28 import '../parser/native_support.dart' |
| 29 show removeNativeClause, skipNativeClause; |
| 29 | 30 |
| 30 import '../util/link.dart' show Link; | 31 import '../util/link.dart' show Link; |
| 31 | 32 |
| 32 import '../errors.dart' show Crash, InputError, inputError, internalError; | 33 import '../errors.dart' show Crash, InputError, inputError, internalError; |
| 33 | 34 |
| 34 import 'stack_listener.dart' show NullValue, StackListener; | 35 import 'stack_listener.dart' show NullValue, StackListener; |
| 35 | 36 |
| 36 import '../kernel/body_builder.dart' show BodyBuilder; | 37 import '../kernel/body_builder.dart' show BodyBuilder; |
| 37 | 38 |
| 38 import '../builder/builder.dart'; | 39 import '../builder/builder.dart'; |
| 39 | 40 |
| 40 import 'source_library_builder.dart' show SourceLibraryBuilder; | 41 import 'source_library_builder.dart' show SourceLibraryBuilder; |
| 41 | 42 |
| 42 class DietListener extends StackListener { | 43 class DietListener extends StackListener { |
| 43 final SourceLibraryBuilder library; | 44 final SourceLibraryBuilder library; |
| 44 | 45 |
| 45 final ClassHierarchy hierarchy; | 46 final ClassHierarchy hierarchy; |
| 46 | 47 |
| 47 final CoreTypes coreTypes; | 48 final CoreTypes coreTypes; |
| 48 | 49 |
| 49 final bool enableNative; | 50 final bool enableNative; |
| 50 | 51 |
| 52 final bool stringExpectedAfterNative; |
| 53 |
| 51 final TypeInferenceEngine typeInferenceEngine; | 54 final TypeInferenceEngine typeInferenceEngine; |
| 52 | 55 |
| 53 ClassBuilder currentClass; | 56 ClassBuilder currentClass; |
| 54 | 57 |
| 55 /// For top-level declarations, this is the library scope. For class members, | 58 /// For top-level declarations, this is the library scope. For class members, |
| 56 /// this is the instance scope of [currentClass]. | 59 /// this is the instance scope of [currentClass]. |
| 57 Scope memberScope; | 60 Scope memberScope; |
| 58 | 61 |
| 59 @override | 62 @override |
| 60 Uri uri; | 63 Uri uri; |
| 61 | 64 |
| 62 DietListener(SourceLibraryBuilder library, this.hierarchy, this.coreTypes, | 65 DietListener(SourceLibraryBuilder library, this.hierarchy, this.coreTypes, |
| 63 this.typeInferenceEngine) | 66 this.typeInferenceEngine) |
| 64 : library = library, | 67 : library = library, |
| 65 uri = library.fileUri, | 68 uri = library.fileUri, |
| 66 memberScope = library.scope, | 69 memberScope = library.scope, |
| 67 enableNative = library.loader.target.enableNative(library); | 70 enableNative = |
| 71 library.loader.target.backendTarget.enableNative(library.uri), |
| 72 stringExpectedAfterNative = |
| 73 library.loader.target.backendTarget.nativeExtensionExpectsString; |
| 68 | 74 |
| 69 void discard(int n) { | 75 void discard(int n) { |
| 70 for (int i = 0; i < n; i++) { | 76 for (int i = 0; i < n; i++) { |
| 71 pop(); | 77 pop(); |
| 72 } | 78 } |
| 73 } | 79 } |
| 74 | 80 |
| 75 @override | 81 @override |
| 76 void endMetadataStar(int count, bool forParameter) { | 82 void endMetadataStar(int count, bool forParameter) { |
| 77 debugEvent("MetadataStar"); | 83 debugEvent("MetadataStar"); |
| (...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 void endNamedMixinApplication(Token beginToken, Token classKeyword, | 514 void endNamedMixinApplication(Token beginToken, Token classKeyword, |
| 509 Token equals, Token implementsKeyword, Token endToken) { | 515 Token equals, Token implementsKeyword, Token endToken) { |
| 510 debugEvent("NamedMixinApplication"); | 516 debugEvent("NamedMixinApplication"); |
| 511 discard(2); // Name and metadata. | 517 discard(2); // Name and metadata. |
| 512 checkEmpty(beginToken.charOffset); | 518 checkEmpty(beginToken.charOffset); |
| 513 } | 519 } |
| 514 | 520 |
| 515 @override | 521 @override |
| 516 Token handleUnrecoverableError(Token token, FastaMessage message) { | 522 Token handleUnrecoverableError(Token token, FastaMessage message) { |
| 517 if (enableNative && message.code == codeExpectedBlockToSkip) { | 523 if (enableNative && message.code == codeExpectedBlockToSkip) { |
| 518 Token recover = library.loader.target.skipNativeClause(token); | 524 Token recover = skipNativeClause(token, stringExpectedAfterNative); |
| 519 if (recover != null) return recover; | 525 if (recover != null) return recover; |
| 520 } | 526 } |
| 521 return super.handleUnrecoverableError(token, message); | 527 return super.handleUnrecoverableError(token, message); |
| 522 } | 528 } |
| 523 | 529 |
| 524 @override | 530 @override |
| 525 Link<Token> handleMemberName(Link<Token> identifiers) { | 531 Link<Token> handleMemberName(Link<Token> identifiers) { |
| 526 if (!enableNative || identifiers.isEmpty) return identifiers; | 532 if (!enableNative || identifiers.isEmpty) return identifiers; |
| 527 return removeNativeClause(identifiers); | 533 return removeNativeClause(identifiers, stringExpectedAfterNative); |
| 528 } | 534 } |
| 529 | 535 |
| 530 AsyncMarker getAsyncMarker(StackListener listener) => listener.pop(); | 536 AsyncMarker getAsyncMarker(StackListener listener) => listener.pop(); |
| 531 | 537 |
| 532 void parseFunctionBody( | 538 void parseFunctionBody( |
| 533 StackListener listener, Token token, Token metadata, MemberKind kind) { | 539 StackListener listener, Token token, Token metadata, MemberKind kind) { |
| 534 try { | 540 try { |
| 535 Parser parser = new Parser(listener); | 541 Parser parser = new Parser(listener); |
| 536 List metadataConstants; | 542 List metadataConstants; |
| 537 if (metadata != null) { | 543 if (metadata != null) { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 609 fileUri: message.uri, | 615 fileUri: message.uri, |
| 610 // We assume this error has already been reported by OutlineBuilder. | 616 // We assume this error has already been reported by OutlineBuilder. |
| 611 silent: true); | 617 silent: true); |
| 612 } | 618 } |
| 613 | 619 |
| 614 @override | 620 @override |
| 615 void debugEvent(String name) { | 621 void debugEvent(String name) { |
| 616 // printEvent(name); | 622 // printEvent(name); |
| 617 } | 623 } |
| 618 } | 624 } |
| OLD | NEW |