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 |