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

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

Issue 2894343002: Add statement hooks to 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.md file. 3 // BSD-style license that can be found in the LICENSE.md file.
4 4
5 import 'package:kernel/ast.dart'; 5 import 'package:kernel/ast.dart';
6 6
7 /// Base class for [TypeInferenceListener] that defines the API for debugging. 7 /// Base class for [TypeInferenceListener] that defines the API for debugging.
8 /// 8 ///
9 /// By default no debug info is printed. To enable debug printing, mix in 9 /// By default no debug info is printed. To enable debug printing, mix in
10 /// [TypeInferenceDebugging]. 10 /// [TypeInferenceDebugging].
11 class TypeInferenceBase { 11 class TypeInferenceBase {
12 bool debugExpressionEnter( 12 bool debugExpressionEnter(
13 String expressionType, Expression expression, DartType typeContext) { 13 String expressionType, Expression expression, DartType typeContext) {
14 return false; 14 return false;
15 } 15 }
16 16
17 debugExpressionExit( 17 void debugExpressionExit(
18 String expressionType, Expression expression, DartType inferredType) {} 18 String expressionType, Expression expression, DartType inferredType) {}
19
20 void debugStatementEnter(String statementType, Statement statement) {}
21
22 void debugStatementExit(String statementType, Statement statement) {}
19 } 23 }
20 24
21 /// Mixin which can be applied to [TypeInferenceListener] to cause debug info to 25 /// Mixin which can be applied to [TypeInferenceListener] to cause debug info to
22 /// be printed. 26 /// be printed.
23 class TypeInferenceDebugging implements TypeInferenceBase { 27 class TypeInferenceDebugging implements TypeInferenceBase {
24 bool debugExpressionEnter( 28 bool debugExpressionEnter(
25 String expressionType, Expression expression, DartType typeContext) { 29 String expressionType, Expression expression, DartType typeContext) {
26 print('Enter $expressionType($expression) (context=$typeContext)'); 30 print('Enter $expressionType($expression) (context=$typeContext)');
27 return true; 31 return true;
28 } 32 }
29 33
30 debugExpressionExit( 34 void debugExpressionExit(
31 String expressionType, Expression expression, DartType inferredType) { 35 String expressionType, Expression expression, DartType inferredType) {
32 print('Exit $expressionType($expression) (type=$inferredType)'); 36 print('Exit $expressionType($expression) (type=$inferredType)');
33 } 37 }
38
39 void debugStatementEnter(String statementType, Statement statement) {
40 print('Enter $statementType($statement)');
41 }
42
43 void debugStatementExit(String statementType, Statement statement) {
44 print('Exit $statementType($statement)');
45 }
34 } 46 }
35 47
36 /// Callback interface used by [TypeInferrer] to report the results of type 48 /// Callback interface used by [TypeInferrer] to report the results of type
37 /// inference to a client. 49 /// inference to a client.
38 /// 50 ///
39 /// The interface is structured as a set of enter/exit methods. The enter 51 /// The interface is structured as a set of enter/exit methods. The enter
40 /// methods are called as the inferrer recurses down through the AST, and the 52 /// methods are called as the inferrer recurses down through the AST, and the
41 /// exit methods are called on the way back up. The enter methods take a 53 /// exit methods are called on the way back up. The enter methods take a
42 /// [DartType] argument representing the downwards inference context, and return 54 /// [DartType] argument representing the downwards inference context, and return
43 /// a bool indicating whether the TypeInferenceListener needs to know the final 55 /// a bool indicating whether the TypeInferenceListener needs to know the final
44 /// inferred type; the exit methods take [DartType] argument representing the 56 /// inferred type; the exit methods take [DartType] argument representing the
45 /// final inferred type. 57 /// final inferred type.
46 /// 58 ///
47 /// The default implementation (in this base class) does nothing, however it can 59 /// The default implementation (in this base class) does nothing, however it can
48 /// be used to debug type inference by uncommenting the 60 /// be used to debug type inference by uncommenting the
49 /// "with TypeInferenceDebugging" clause below. 61 /// "with TypeInferenceDebugging" clause below.
50 class TypeInferenceListener 62 class TypeInferenceListener
51 extends TypeInferenceBase // with TypeInferenceDebugging 63 extends TypeInferenceBase // with TypeInferenceDebugging
52 { 64 {
53 bool asExpressionEnter(AsExpression expression, DartType typeContext) => 65 bool asExpressionEnter(AsExpression expression, DartType typeContext) =>
54 debugExpressionEnter("asExpression", expression, typeContext); 66 debugExpressionEnter("asExpression", expression, typeContext);
55 67
56 void asExpressionExit(AsExpression expression, DartType inferredType) => 68 void asExpressionExit(AsExpression expression, DartType inferredType) =>
57 debugExpressionExit("asExpression", expression, inferredType); 69 debugExpressionExit("asExpression", expression, inferredType);
58 70
71 void blockEnter(Block statement) => debugStatementEnter('block', statement);
72
73 void blockExit(Block statement) => debugStatementExit('block', statement);
74
59 bool boolLiteralEnter(BoolLiteral expression, DartType typeContext) => 75 bool boolLiteralEnter(BoolLiteral expression, DartType typeContext) =>
60 debugExpressionEnter("boolLiteral", expression, typeContext); 76 debugExpressionEnter("boolLiteral", expression, typeContext);
61 77
62 void boolLiteralExit(BoolLiteral expression, DartType inferredType) => 78 void boolLiteralExit(BoolLiteral expression, DartType inferredType) =>
63 debugExpressionExit("boolLiteral", expression, inferredType); 79 debugExpressionExit("boolLiteral", expression, inferredType);
64 80
65 bool conditionalExpressionEnter( 81 bool conditionalExpressionEnter(
66 ConditionalExpression expression, DartType typeContext) => 82 ConditionalExpression expression, DartType typeContext) =>
67 debugExpressionEnter("conditionalExpression", expression, typeContext); 83 debugExpressionEnter("conditionalExpression", expression, typeContext);
68 84
69 void conditionalExpressionExit( 85 void conditionalExpressionExit(
70 ConditionalExpression expression, DartType inferredType) => 86 ConditionalExpression expression, DartType inferredType) =>
71 debugExpressionExit("conditionalExpression", expression, inferredType); 87 debugExpressionExit("conditionalExpression", expression, inferredType);
72 88
73 bool constructorInvocationEnter( 89 bool constructorInvocationEnter(
74 ConstructorInvocation expression, DartType typeContext) => 90 ConstructorInvocation expression, DartType typeContext) =>
75 debugExpressionEnter("constructorInvocation", expression, typeContext); 91 debugExpressionEnter("constructorInvocation", expression, typeContext);
76 92
77 void constructorInvocationExit( 93 void constructorInvocationExit(
78 ConstructorInvocation expression, DartType inferredType) => 94 ConstructorInvocation expression, DartType inferredType) =>
79 debugExpressionExit("constructorInvocation", expression, inferredType); 95 debugExpressionExit("constructorInvocation", expression, inferredType);
80 96
81 bool doubleLiteralEnter(DoubleLiteral expression, DartType typeContext) => 97 bool doubleLiteralEnter(DoubleLiteral expression, DartType typeContext) =>
82 debugExpressionEnter("doubleLiteral", expression, typeContext); 98 debugExpressionEnter("doubleLiteral", expression, typeContext);
83 99
84 void doubleLiteralExit(DoubleLiteral expression, DartType inferredType) => 100 void doubleLiteralExit(DoubleLiteral expression, DartType inferredType) =>
85 debugExpressionExit("doubleLiteral", expression, inferredType); 101 debugExpressionExit("doubleLiteral", expression, inferredType);
86 102
103 void expressionStatementEnter(ExpressionStatement statement) =>
104 debugStatementEnter('expressionStatement', statement);
105
106 void expressionStatementExit(ExpressionStatement statement) =>
107 debugStatementExit('expressionStatement', statement);
108
109 void functionDeclarationEnter(FunctionDeclaration statement) =>
110 debugStatementEnter('functionDeclaration', statement);
111
112 void functionDeclarationExit(FunctionDeclaration statement) =>
113 debugStatementExit('functionDeclaration', statement);
114
87 bool functionExpressionEnter( 115 bool functionExpressionEnter(
88 FunctionExpression expression, DartType typeContext) => 116 FunctionExpression expression, DartType typeContext) =>
89 debugExpressionEnter("functionExpression", expression, typeContext); 117 debugExpressionEnter("functionExpression", expression, typeContext);
90 118
91 void functionExpressionExit( 119 void functionExpressionExit(
92 FunctionExpression expression, DartType inferredType) => 120 FunctionExpression expression, DartType inferredType) =>
93 debugExpressionExit("functionExpression", expression, inferredType); 121 debugExpressionExit("functionExpression", expression, inferredType);
94 122
123 void ifStatementEnter(IfStatement statement) =>
124 debugStatementEnter('ifStatement', statement);
125
126 void ifStatementExit(IfStatement statement) =>
127 debugStatementExit('ifStatement', statement);
128
95 bool intLiteralEnter(IntLiteral expression, DartType typeContext) => 129 bool intLiteralEnter(IntLiteral expression, DartType typeContext) =>
96 debugExpressionEnter("intLiteral", expression, typeContext); 130 debugExpressionEnter("intLiteral", expression, typeContext);
97 131
98 void intLiteralExit(IntLiteral expression, DartType inferredType) => 132 void intLiteralExit(IntLiteral expression, DartType inferredType) =>
99 debugExpressionExit("intLiteral", expression, inferredType); 133 debugExpressionExit("intLiteral", expression, inferredType);
100 134
101 bool isExpressionEnter(IsExpression expression, DartType typeContext) => 135 bool isExpressionEnter(IsExpression expression, DartType typeContext) =>
102 debugExpressionEnter("isExpression", expression, typeContext); 136 debugExpressionEnter("isExpression", expression, typeContext);
103 137
104 void isExpressionExit(IsExpression expression, DartType inferredType) => 138 void isExpressionExit(IsExpression expression, DartType inferredType) =>
(...skipping 18 matching lines...) Expand all
123 void methodInvocationExit( 157 void methodInvocationExit(
124 MethodInvocation expression, DartType inferredType) => 158 MethodInvocation expression, DartType inferredType) =>
125 debugExpressionExit("methodInvocation", expression, inferredType); 159 debugExpressionExit("methodInvocation", expression, inferredType);
126 160
127 bool nullLiteralEnter(NullLiteral expression, DartType typeContext) => 161 bool nullLiteralEnter(NullLiteral expression, DartType typeContext) =>
128 debugExpressionEnter("nullLiteral", expression, typeContext); 162 debugExpressionEnter("nullLiteral", expression, typeContext);
129 163
130 void nullLiteralExit(NullLiteral expression, DartType inferredType) => 164 void nullLiteralExit(NullLiteral expression, DartType inferredType) =>
131 debugExpressionExit("nullLiteral", expression, inferredType); 165 debugExpressionExit("nullLiteral", expression, inferredType);
132 166
167 void returnStatementEnter(ReturnStatement statement) =>
168 debugStatementEnter('returnStatement', statement);
169
170 void returnStatementExit(ReturnStatement statement) =>
171 debugStatementExit('returnStatement', statement);
172
133 bool staticGetEnter(StaticGet expression, DartType typeContext) => 173 bool staticGetEnter(StaticGet expression, DartType typeContext) =>
134 debugExpressionEnter("staticGet", expression, typeContext); 174 debugExpressionEnter("staticGet", expression, typeContext);
135 175
136 void staticGetExit(StaticGet expression, DartType inferredType) => 176 void staticGetExit(StaticGet expression, DartType inferredType) =>
137 debugExpressionExit("staticGet", expression, inferredType); 177 debugExpressionExit("staticGet", expression, inferredType);
138 178
139 bool staticInvocationEnter( 179 bool staticInvocationEnter(
140 StaticInvocation expression, DartType typeContext) => 180 StaticInvocation expression, DartType typeContext) =>
141 debugExpressionEnter("staticInvocation", expression, typeContext); 181 debugExpressionEnter("staticInvocation", expression, typeContext);
142 182
143 void staticInvocationExit( 183 void staticInvocationExit(
144 StaticInvocation expression, DartType inferredType) => 184 StaticInvocation expression, DartType inferredType) =>
145 debugExpressionExit("staticInvocation", expression, inferredType); 185 debugExpressionExit("staticInvocation", expression, inferredType);
146 186
147 bool stringConcatenationEnter( 187 bool stringConcatenationEnter(
148 StringConcatenation expression, DartType typeContext) => 188 StringConcatenation expression, DartType typeContext) =>
149 debugExpressionEnter("stringConcatenation", expression, typeContext); 189 debugExpressionEnter("stringConcatenation", expression, typeContext);
150 190
151 void stringConcatenationExit( 191 void stringConcatenationExit(
152 StringConcatenation expression, DartType inferredType) => 192 StringConcatenation expression, DartType inferredType) =>
153 debugExpressionExit("stringConcatenation", expression, inferredType); 193 debugExpressionExit("stringConcatenation", expression, inferredType);
154 194
155 bool stringLiteralEnter(StringLiteral expression, DartType typeContext) => 195 bool stringLiteralEnter(StringLiteral expression, DartType typeContext) =>
156 debugExpressionEnter("StringLiteral", expression, typeContext); 196 debugExpressionEnter("StringLiteral", expression, typeContext);
157 197
158 void stringLiteralExit(StringLiteral expression, DartType inferredType) => 198 void stringLiteralExit(StringLiteral expression, DartType inferredType) =>
159 debugExpressionExit("StringLiteral", expression, inferredType); 199 debugExpressionExit("StringLiteral", expression, inferredType);
160 200
201 void variableDeclarationEnter(VariableDeclaration statement) =>
202 debugStatementEnter('variableDeclaration', statement);
203
204 void variableDeclarationExit(VariableDeclaration statement) =>
205 debugStatementExit('variableDeclaration', statement);
206
161 bool variableGetEnter(VariableGet expression, DartType typeContext) => 207 bool variableGetEnter(VariableGet expression, DartType typeContext) =>
162 debugExpressionEnter("variableGet", expression, typeContext); 208 debugExpressionEnter("variableGet", expression, typeContext);
163 209
164 void variableGetExit(VariableGet expression, DartType inferredType) => 210 void variableGetExit(VariableGet expression, DartType inferredType) =>
165 debugExpressionExit("variableGet", expression, inferredType); 211 debugExpressionExit("variableGet", expression, inferredType);
166 212
167 bool variableSetEnter(VariableSet expression, DartType typeContext) => 213 bool variableSetEnter(VariableSet expression, DartType typeContext) =>
168 debugExpressionEnter("variableSet", expression, typeContext); 214 debugExpressionEnter("variableSet", expression, typeContext);
169 215
170 void variableSetExit(VariableSet expression, DartType inferredType) => 216 void variableSetExit(VariableSet expression, DartType inferredType) =>
171 debugExpressionExit("variableSet", expression, inferredType); 217 debugExpressionExit("variableSet", expression, inferredType);
172 } 218 }
OLDNEW
« 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