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

Side by Side Diff: pkg/compiler/lib/src/types/types.dart

Issue 2991313002: Split ast based parts from InferrerEngineImpl (Closed)
Patch Set: Created 3 years, 4 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/compiler/lib/src/inferrer/type_graph_nodes.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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 types; 5 library types;
6 6
7 import '../common.dart' show failedAt; 7 import '../common.dart' show failedAt;
8 import '../common/tasks.dart' show CompilerTask; 8 import '../common/tasks.dart' show CompilerTask;
9 import '../compiler.dart' show Compiler; 9 import '../compiler.dart' show Compiler;
10 import '../elements/elements.dart'; 10 import '../elements/elements.dart';
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 138
139 TypeMask get returnType => 139 TypeMask get returnType =>
140 _isJsInterop ? _dynamic : _inferrer.getReturnTypeOfParameter(_owner); 140 _isJsInterop ? _dynamic : _inferrer.getReturnTypeOfParameter(_owner);
141 141
142 TypeMask get type => 142 TypeMask get type =>
143 _isJsInterop ? _dynamic : _inferrer.getTypeOfParameter(_owner); 143 _isJsInterop ? _dynamic : _inferrer.getTypeOfParameter(_owner);
144 } 144 }
145 145
146 /// Internal data used during type-inference to store intermediate results about 146 /// Internal data used during type-inference to store intermediate results about
147 /// a single element. 147 /// a single element.
148 class GlobalTypeInferenceElementData { 148 abstract class GlobalTypeInferenceElementData<T> {
149 TypeMask typeOfSend(T node);
150 TypeMask typeOfGetter(T node);
151 TypeMask typeOfOperator(T node);
152
153 void setTypeMask(T node, TypeMask mask);
154
155 void setGetterTypeMaskInComplexSendSet(T node, TypeMask mask);
156
157 void setOperatorTypeMaskInComplexSendSet(T node, TypeMask mask);
158
159 TypeMask typeOfIterator(T node);
160
161 TypeMask typeOfIteratorMoveNext(T node);
162
163 TypeMask typeOfIteratorCurrent(T node);
164
165 void setIteratorTypeMask(T node, TypeMask mask);
166
167 void setMoveNextTypeMask(T node, TypeMask mask);
168
169 void setCurrentTypeMask(T node, TypeMask mask);
170 }
171
172 class AstGlobalTypeInferenceElementData
173 extends GlobalTypeInferenceElementData<Node> {
149 Map<Object, TypeMask> _typeMasks; 174 Map<Object, TypeMask> _typeMasks;
150 175
151 TypeMask _get(Object node) => _typeMasks != null ? _typeMasks[node] : null; 176 TypeMask _get(Object node) => _typeMasks != null ? _typeMasks[node] : null;
152 void _set(Object node, TypeMask mask) { 177 void _set(Object node, TypeMask mask) {
153 _typeMasks ??= new Maplet<Object, TypeMask>(); 178 _typeMasks ??= new Maplet<Object, TypeMask>();
154 _typeMasks[node] = mask; 179 _typeMasks[node] = mask;
155 } 180 }
156 181
157 TypeMask typeOfSend(Send node) => _get(node); 182 TypeMask typeOfSend(covariant Send node) => _get(node);
158 TypeMask typeOfGetter(SendSet node) => _get(node.selector); 183 TypeMask typeOfGetter(covariant SendSet node) => _get(node.selector);
159 TypeMask typeOfOperator(SendSet node) => _get(node.assignmentOperator); 184 TypeMask typeOfOperator(covariant SendSet node) =>
185 _get(node.assignmentOperator);
160 186
161 void setTypeMask(Send node, TypeMask mask) { 187 void setTypeMask(covariant Send node, TypeMask mask) {
162 _set(node, mask); 188 _set(node, mask);
163 } 189 }
164 190
165 void setGetterTypeMaskInComplexSendSet(SendSet node, TypeMask mask) { 191 void setGetterTypeMaskInComplexSendSet(
192 covariant SendSet node, TypeMask mask) {
166 _set(node.selector, mask); 193 _set(node.selector, mask);
167 } 194 }
168 195
169 void setOperatorTypeMaskInComplexSendSet(SendSet node, TypeMask mask) { 196 void setOperatorTypeMaskInComplexSendSet(
197 covariant SendSet node, TypeMask mask) {
170 _set(node.assignmentOperator, mask); 198 _set(node.assignmentOperator, mask);
171 } 199 }
172 200
173 // TODO(sigmund): clean up. We store data about 3 selectors for "for in" 201 // TODO(sigmund): clean up. We store data about 3 selectors for "for in"
174 // nodes: the iterator, move-next, and current element. Because our map keys 202 // nodes: the iterator, move-next, and current element. Because our map keys
175 // are nodes, we need to fabricate different keys to keep these selectors 203 // are nodes, we need to fabricate different keys to keep these selectors
176 // separate. The current implementation does this by using 204 // separate. The current implementation does this by using
177 // children of the for-in node (these children were picked arbitrarily). 205 // children of the for-in node (these children were picked arbitrarily).
178 206
179 TypeMask typeOfIterator(ForIn node) => _get(node); 207 TypeMask typeOfIterator(covariant ForIn node) => _get(node);
180 208
181 TypeMask typeOfIteratorMoveNext(ForIn node) => _get(node.forToken); 209 TypeMask typeOfIteratorMoveNext(covariant ForIn node) => _get(node.forToken);
182 210
183 TypeMask typeOfIteratorCurrent(ForIn node) => _get(node.inToken); 211 TypeMask typeOfIteratorCurrent(covariant ForIn node) => _get(node.inToken);
184 212
185 void setIteratorTypeMask(ForIn node, TypeMask mask) { 213 void setIteratorTypeMask(covariant ForIn node, TypeMask mask) {
186 _set(node, mask); 214 _set(node, mask);
187 } 215 }
188 216
189 void setMoveNextTypeMask(ForIn node, TypeMask mask) { 217 void setMoveNextTypeMask(covariant ForIn node, TypeMask mask) {
190 _set(node.forToken, mask); 218 _set(node.forToken, mask);
191 } 219 }
192 220
193 void setCurrentTypeMask(ForIn node, TypeMask mask) { 221 void setCurrentTypeMask(covariant ForIn node, TypeMask mask) {
194 _set(node.inToken, mask); 222 _set(node.inToken, mask);
195 } 223 }
196 } 224 }
197 225
198 /// API to interact with the global type-inference engine. 226 /// API to interact with the global type-inference engine.
199 abstract class TypesInferrer { 227 abstract class TypesInferrer {
200 void analyzeMain(FunctionEntity element); 228 void analyzeMain(FunctionEntity element);
201 TypeMask getReturnTypeOfMember(MemberElement element); 229 TypeMask getReturnTypeOfMember(MemberElement element);
202 TypeMask getReturnTypeOfParameter(ParameterElement element); 230 TypeMask getReturnTypeOfParameter(ParameterElement element);
203 TypeMask getTypeOfMember(MemberElement element); 231 TypeMask getTypeOfMember(MemberElement element);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 measure(() { 326 measure(() {
299 typesInferrerInternal ??= 327 typesInferrerInternal ??=
300 new TypeGraphInferrer(compiler, closedWorld, closedWorldRefiner); 328 new TypeGraphInferrer(compiler, closedWorld, closedWorldRefiner);
301 typesInferrerInternal.analyzeMain(mainElement); 329 typesInferrerInternal.analyzeMain(mainElement);
302 typesInferrerInternal.clear(); 330 typesInferrerInternal.clear();
303 results = 331 results =
304 new GlobalTypeInferenceResults(typesInferrerInternal, closedWorld); 332 new GlobalTypeInferenceResults(typesInferrerInternal, closedWorld);
305 }); 333 });
306 } 334 }
307 } 335 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/inferrer/type_graph_nodes.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698