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

Unified Diff: pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart

Issue 2888733005: Rework TypeInferenceListener. (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
index e617ce2f20c75827c685bd0776ea44d132fa886b..ff368b5840971d79d1ce818edc1b1e74ebe16e4c 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
@@ -2,7 +2,36 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE.md file.
-import 'package:kernel/ast.dart' show DartType;
+import 'package:kernel/ast.dart';
+
+/// Base class for [TypeInferenceListener] that defines the API for debugging.
+///
+/// By default no debug info is printed. To enable debug printing, mix in
+/// [TypeInferenceDebugging].
+class TypeInferenceBase {
+ bool debugExpressionEnter(
+ String expressionType, Expression expression, DartType typeContext) {
+ return false;
+ }
+
+ debugExpressionExit(
+ String expressionType, Expression expression, DartType inferredType) {}
+}
+
+/// Mixin which can be applied to [TypeInferenceListener] to cause debug info to
+/// be printed.
+class TypeInferenceDebugging implements TypeInferenceBase {
+ bool debugExpressionEnter(
+ String expressionType, Expression expression, DartType typeContext) {
+ print('Enter $expressionType($expression) (context=$typeContext)');
+ return true;
+ }
+
+ debugExpressionExit(
+ String expressionType, Expression expression, DartType inferredType) {
+ print('Exit $expressionType($expression) (type=$inferredType)');
+ }
+}
/// Callback interface used by [TypeInferrer] to report the results of type
/// inference to a client.
@@ -16,123 +45,128 @@ import 'package:kernel/ast.dart' show DartType;
/// final inferred type.
///
/// The default implementation (in this base class) does nothing, however it can
-/// be used to debug type inference by uncommenting the `print` calls in
-/// [debugExpressionEnter] and [debugExpressionExit].
-class TypeInferenceListener {
- bool asExpressionEnter(DartType typeContext) =>
- debugExpressionEnter("asExpression", typeContext);
-
- void asExpressionExit(DartType inferredType) =>
- debugExpressionExit("asExpression", inferredType);
+/// be used to debug type inference by uncommenting the
+/// "with TypeInferenceDebugging" clause below.
+class TypeInferenceListener
+ extends TypeInferenceBase // with TypeInferenceDebugging
+{
+ bool asExpressionEnter(AsExpression expression, DartType typeContext) =>
+ debugExpressionEnter("asExpression", expression, typeContext);
- bool boolLiteralEnter(DartType typeContext) =>
- debugExpressionEnter("boolLiteral", typeContext);
+ void asExpressionExit(AsExpression expression, DartType inferredType) =>
+ debugExpressionExit("asExpression", expression, inferredType);
- void boolLiteralExit(DartType inferredType) =>
- debugExpressionExit("boolLiteral", inferredType);
+ bool boolLiteralEnter(BoolLiteral expression, DartType typeContext) =>
+ debugExpressionEnter("boolLiteral", expression, typeContext);
- bool conditionalExpressionEnter(DartType typeContext) =>
- debugExpressionEnter("conditionalExpression", typeContext);
+ void boolLiteralExit(BoolLiteral expression, DartType inferredType) =>
+ debugExpressionExit("boolLiteral", expression, inferredType);
- void conditionalExpressionExit(DartType inferredType) =>
- debugExpressionExit("conditionalExpression", inferredType);
+ bool conditionalExpressionEnter(
+ ConditionalExpression expression, DartType typeContext) =>
+ debugExpressionEnter("conditionalExpression", expression, typeContext);
- bool constructorInvocationEnter(DartType typeContext) =>
- debugExpressionEnter("constructorInvocation", typeContext);
+ void conditionalExpressionExit(
+ ConditionalExpression expression, DartType inferredType) =>
+ debugExpressionExit("conditionalExpression", expression, inferredType);
- void constructorInvocationExit(DartType inferredType) =>
- debugExpressionExit("constructorInvocation", inferredType);
+ bool constructorInvocationEnter(
+ ConstructorInvocation expression, DartType typeContext) =>
+ debugExpressionEnter("constructorInvocation", expression, typeContext);
- bool debugExpressionEnter(String expressionType, DartType typeContext) {
- // print('Enter $expressionType (context=$typeContext)'); return true;
- return false;
- }
-
- debugExpressionExit(String expressionType, DartType inferredType) {
- // print('Exit $expressionType (type=$inferredType)');
- }
+ void constructorInvocationExit(
+ ConstructorInvocation expression, DartType inferredType) =>
+ debugExpressionExit("constructorInvocation", expression, inferredType);
- bool doubleLiteralEnter(DartType typeContext) =>
- debugExpressionEnter("doubleLiteral", typeContext);
+ bool doubleLiteralEnter(DoubleLiteral expression, DartType typeContext) =>
+ debugExpressionEnter("doubleLiteral", expression, typeContext);
- void doubleLiteralExit(DartType inferredType) =>
- debugExpressionExit("doubleLiteral", inferredType);
+ void doubleLiteralExit(DoubleLiteral expression, DartType inferredType) =>
+ debugExpressionExit("doubleLiteral", expression, inferredType);
- bool functionExpressionEnter(DartType typeContext) =>
- debugExpressionEnter("functionExpression", typeContext);
+ bool functionExpressionEnter(
+ FunctionExpression expression, DartType typeContext) =>
+ debugExpressionEnter("functionExpression", expression, typeContext);
- void functionExpressionExit(DartType inferredType) =>
- debugExpressionExit("functionExpression", inferredType);
+ void functionExpressionExit(
+ FunctionExpression expression, DartType inferredType) =>
+ debugExpressionExit("functionExpression", expression, inferredType);
- bool intLiteralEnter(DartType typeContext) =>
- debugExpressionEnter("intLiteral", typeContext);
+ bool intLiteralEnter(IntLiteral expression, DartType typeContext) =>
+ debugExpressionEnter("intLiteral", expression, typeContext);
- void intLiteralExit(DartType inferredType) =>
- debugExpressionExit("intLiteral", inferredType);
+ void intLiteralExit(IntLiteral expression, DartType inferredType) =>
+ debugExpressionExit("intLiteral", expression, inferredType);
- bool isExpressionEnter(DartType typeContext) =>
- debugExpressionEnter("isExpression", typeContext);
+ bool isExpressionEnter(IsExpression expression, DartType typeContext) =>
+ debugExpressionEnter("isExpression", expression, typeContext);
- void isExpressionExit(DartType inferredType) =>
- debugExpressionExit("isExpression", inferredType);
+ void isExpressionExit(IsExpression expression, DartType inferredType) =>
+ debugExpressionExit("isExpression", expression, inferredType);
- bool isNotExpressionEnter(DartType typeContext) =>
- debugExpressionEnter("isNotExpression", typeContext);
+ bool isNotExpressionEnter(Not expression, DartType typeContext) =>
+ debugExpressionEnter("isNotExpression", expression, typeContext);
- void isNotExpressionExit(DartType inferredType) =>
- debugExpressionExit("isNotExpression", inferredType);
+ void isNotExpressionExit(Not expression, DartType inferredType) =>
+ debugExpressionExit("isNotExpression", expression, inferredType);
- bool listLiteralEnter(DartType typeContext) =>
- debugExpressionEnter("listLiteral", typeContext);
+ bool listLiteralEnter(ListLiteral expression, DartType typeContext) =>
+ debugExpressionEnter("listLiteral", expression, typeContext);
- void listLiteralExit(DartType inferredType) =>
- debugExpressionExit("listLiteral", inferredType);
+ void listLiteralExit(ListLiteral expression, DartType inferredType) =>
+ debugExpressionExit("listLiteral", expression, inferredType);
- bool methodInvocationEnter(DartType typeContext) =>
- debugExpressionEnter("methodInvocation", typeContext);
+ bool methodInvocationEnter(
+ MethodInvocation expression, DartType typeContext) =>
+ debugExpressionEnter("methodInvocation", expression, typeContext);
- void methodInvocationExit(DartType inferredType) =>
- debugExpressionExit("methodInvocation", inferredType);
+ void methodInvocationExit(
+ MethodInvocation expression, DartType inferredType) =>
+ debugExpressionExit("methodInvocation", expression, inferredType);
- bool nullLiteralEnter(DartType typeContext) =>
- debugExpressionEnter("nullLiteral", typeContext);
+ bool nullLiteralEnter(NullLiteral expression, DartType typeContext) =>
+ debugExpressionEnter("nullLiteral", expression, typeContext);
- void nullLiteralExit(DartType inferredType) =>
- debugExpressionExit("nullLiteral", inferredType);
+ void nullLiteralExit(NullLiteral expression, DartType inferredType) =>
+ debugExpressionExit("nullLiteral", expression, inferredType);
- bool staticGetEnter(DartType typeContext) =>
- debugExpressionEnter("staticGet", typeContext);
+ bool staticGetEnter(StaticGet expression, DartType typeContext) =>
+ debugExpressionEnter("staticGet", expression, typeContext);
- void staticGetExit(DartType inferredType) =>
- debugExpressionExit("staticGet", inferredType);
+ void staticGetExit(StaticGet expression, DartType inferredType) =>
+ debugExpressionExit("staticGet", expression, inferredType);
- bool staticInvocationEnter(DartType typeContext) =>
- debugExpressionEnter("staticInvocation", typeContext);
+ bool staticInvocationEnter(
+ StaticInvocation expression, DartType typeContext) =>
+ debugExpressionEnter("staticInvocation", expression, typeContext);
- void staticInvocationExit(DartType inferredType) =>
- debugExpressionExit("staticInvocation", inferredType);
+ void staticInvocationExit(
+ StaticInvocation expression, DartType inferredType) =>
+ debugExpressionExit("staticInvocation", expression, inferredType);
- bool stringConcatenationEnter(DartType typeContext) =>
- debugExpressionEnter("stringConcatenation", typeContext);
+ bool stringConcatenationEnter(
+ StringConcatenation expression, DartType typeContext) =>
+ debugExpressionEnter("stringConcatenation", expression, typeContext);
- void stringConcatenationExit(DartType inferredType) =>
- debugExpressionExit("stringConcatenation", inferredType);
+ void stringConcatenationExit(
+ StringConcatenation expression, DartType inferredType) =>
+ debugExpressionExit("stringConcatenation", expression, inferredType);
- bool stringLiteralEnter(DartType typeContext) =>
- debugExpressionEnter("StringLiteral", typeContext);
+ bool stringLiteralEnter(StringLiteral expression, DartType typeContext) =>
+ debugExpressionEnter("StringLiteral", expression, typeContext);
- void stringLiteralExit(DartType inferredType) =>
- debugExpressionExit("StringLiteral", inferredType);
+ void stringLiteralExit(StringLiteral expression, DartType inferredType) =>
+ debugExpressionExit("StringLiteral", expression, inferredType);
- bool variableGetEnter(DartType typeContext) =>
- debugExpressionEnter("variableGet", typeContext);
+ bool variableGetEnter(VariableGet expression, DartType typeContext) =>
+ debugExpressionEnter("variableGet", expression, typeContext);
- void variableGetExit(DartType inferredType) =>
- debugExpressionExit("variableGet", inferredType);
+ void variableGetExit(VariableGet expression, DartType inferredType) =>
+ debugExpressionExit("variableGet", expression, inferredType);
- bool variableSetEnter(DartType typeContext) =>
- debugExpressionEnter("variableSet", typeContext);
+ bool variableSetEnter(VariableSet expression, DartType typeContext) =>
+ debugExpressionEnter("variableSet", expression, typeContext);
- void variableSetExit(DartType inferredType) =>
- debugExpressionExit("variableSet", inferredType);
+ void variableSetExit(VariableSet expression, DartType inferredType) =>
+ debugExpressionExit("variableSet", expression, inferredType);
}
« no previous file with comments | « pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698