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

Unified Diff: pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart

Issue 2946273002: Implement override-based type inference for instance methods. (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 side-by-side diff with in-line comments
Download patch
Index: pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
index 7c54474acf391221c4b75b6f6250f485bc312943..5b7e77b9106f37b45f173a5ad793c5c19292c14e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
@@ -215,7 +215,7 @@ class KernelProcedureBuilder extends KernelFunctionBuilder {
int charEndOffset,
[String nativeMethodName,
this.redirectionTarget])
- : procedure = new KernelProcedure(null, kind, null,
+ : procedure = new KernelProcedure(null, kind, null, returnType == null,
fileUri: compilationUnit?.relativeFileUri)
..fileOffset = charOffset
..fileEndOffset = charEndOffset,
@@ -245,15 +245,19 @@ class KernelProcedureBuilder extends KernelFunctionBuilder {
}
}
- bool get isEligibleForGetterSetterInference {
+ bool get isEligibleForTopLevelInference {
if (!isInstanceMember) return false;
- if (isGetter) {
- return returnType == null;
- } else if (isSetter) {
- return formals != null && formals.length > 0 && formals[0].type == null;
- } else {
- return false;
+ if (returnType == null) {
+ // For now, we skip inferred return types of setters.
Siggi Cherem (dart-lang) 2017/06/21 20:19:08 aren't they always void (otherwise it is an error)
Paul Berry 2017/06/21 20:54:47 Not quite. In strong mode if no type is specified
+ // TODO(paulberry): fix this.
+ if (!isSetter) return true;
+ }
+ if (formals != null) {
+ for (var formal in formals) {
+ if (formal.type == null) return true;
+ }
}
+ return false;
}
Procedure build(SourceLibraryBuilder library) {
@@ -269,7 +273,7 @@ class KernelProcedureBuilder extends KernelFunctionBuilder {
procedure.isConst = isConst;
procedure.name = new Name(name, library.target);
}
- if (isEligibleForGetterSetterInference) {
+ if (isEligibleForTopLevelInference) {
library.loader.typeInferenceEngine.recordMember(procedure);
}
return procedure;
@@ -280,7 +284,7 @@ class KernelProcedureBuilder extends KernelFunctionBuilder {
@override
void prepareInitializerInference(
SourceLibraryBuilder library, ClassBuilder currentClass) {
- if (isEligibleForGetterSetterInference) {
+ if (isEligibleForTopLevelInference) {
var typeInferenceEngine = library.loader.typeInferenceEngine;
var listener = new TypeInferenceListener();
typeInferenceEngine.createTopLevelTypeInferrer(

Powered by Google App Engine
This is Rietveld 408576698