Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(351)

Side by Side Diff: pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart

Issue 2941093002: Only attempt to do type inference on fields that lack a declared type. (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 /// This file declares a "shadow hierarchy" of concrete classes which extend 5 /// This file declares a "shadow hierarchy" of concrete classes which extend
6 /// the kernel class hierarchy, adding methods and fields needed by the 6 /// the kernel class hierarchy, adding methods and fields needed by the
7 /// BodyBuilder. 7 /// BodyBuilder.
8 /// 8 ///
9 /// Instances of these classes may be created using the factory methods in 9 /// Instances of these classes may be created using the factory methods in
10 /// `ast_factory.dart`. 10 /// `ast_factory.dart`.
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 _initialTarget.function.functionType, 677 _initialTarget.function.functionType,
678 computeConstructorReturnType(_initialTarget), 678 computeConstructorReturnType(_initialTarget),
679 arguments); 679 arguments);
680 inferrer.listener.constructorInvocationExit(this, inferredType); 680 inferrer.listener.constructorInvocationExit(this, inferredType);
681 return inferredType; 681 return inferredType;
682 } 682 }
683 } 683 }
684 684
685 /// Concrete shadow object representing a field in kernel form. 685 /// Concrete shadow object representing a field in kernel form.
686 class KernelField extends Field { 686 class KernelField extends Field {
687 bool _implicitlyTyped = true;
688
689 FieldNode _fieldNode; 687 FieldNode _fieldNode;
690 688
691 bool _isInferred = false; 689 bool _isInferred = false;
692 690
693 KernelTypeInferrer _typeInferrer; 691 KernelTypeInferrer _typeInferrer;
694 692
695 KernelField(Name name, {String fileUri}) : super(name, fileUri: fileUri) {} 693 KernelField(Name name, {String fileUri}) : super(name, fileUri: fileUri) {}
696 694
697 @override
698 void set type(DartType value) {
699 _implicitlyTyped = false;
700 super.type = value;
701 }
702
703 void _setInferredType(DartType inferredType) { 695 void _setInferredType(DartType inferredType) {
704 _isInferred = true; 696 _isInferred = true;
705 super.type = inferredType; 697 super.type = inferredType;
706 } 698 }
707 } 699 }
708 700
709 /// Concrete shadow object representing a for-in loop in kernel form. 701 /// Concrete shadow object representing a for-in loop in kernel form.
710 class KernelForInStatement extends ForInStatement implements KernelStatement { 702 class KernelForInStatement extends ForInStatement implements KernelStatement {
711 final bool _declaresVariable; 703 final bool _declaresVariable;
712 704
(...skipping 1194 matching lines...) Expand 10 before | Expand all | Expand 10 after
1907 } 1899 }
1908 1900
1909 @override 1901 @override
1910 KernelTypeInferrer createTopLevelTypeInferrer(TypeInferenceListener listener, 1902 KernelTypeInferrer createTopLevelTypeInferrer(TypeInferenceListener listener,
1911 InterfaceType thisType, KernelField field) { 1903 InterfaceType thisType, KernelField field) {
1912 return field._typeInferrer = 1904 return field._typeInferrer =
1913 new KernelTypeInferrer._(this, field.fileUri, listener, true, thisType); 1905 new KernelTypeInferrer._(this, field.fileUri, listener, true, thisType);
1914 } 1906 }
1915 1907
1916 @override 1908 @override
1917 bool fieldHasInitializer(KernelField field) {
1918 return field.initializer != null;
1919 }
1920
1921 @override
1922 DartType getFieldDeclaredType(KernelField field) {
1923 return field._implicitlyTyped ? null : field.type;
1924 }
1925
1926 @override
1927 int getFieldOffset(KernelField field) { 1909 int getFieldOffset(KernelField field) {
1928 return field.fileOffset; 1910 return field.fileOffset;
1929 } 1911 }
1930 1912
1931 @override 1913 @override
1932 KernelTypeInferrer getFieldTypeInferrer(KernelField field) { 1914 KernelTypeInferrer getFieldTypeInferrer(KernelField field) {
1933 return field._typeInferrer; 1915 return field._typeInferrer;
1934 } 1916 }
1935 1917
1936 @override 1918 @override
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
2293 } 2275 }
2294 2276
2295 transformChildren(v) { 2277 transformChildren(v) {
2296 return internalError("Internal error: Unsupported operation."); 2278 return internalError("Internal error: Unsupported operation.");
2297 } 2279 }
2298 2280
2299 visitChildren(v) { 2281 visitChildren(v) {
2300 return internalError("Internal error: Unsupported operation."); 2282 return internalError("Internal error: Unsupported operation.");
2301 } 2283 }
2302 } 2284 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698