OLD | NEW |
---|---|
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 17 matching lines...) Expand all Loading... | |
28 KernelBlock(List<Statement> statements) : super(statements); | 28 KernelBlock(List<Statement> statements) : super(statements); |
29 | 29 |
30 @override | 30 @override |
31 void _inferStatement(KernelTypeInferrer inferrer) { | 31 void _inferStatement(KernelTypeInferrer inferrer) { |
32 for (var statement in statements) { | 32 for (var statement in statements) { |
33 inferrer.inferStatement(statement); | 33 inferrer.inferStatement(statement); |
34 } | 34 } |
35 } | 35 } |
36 } | 36 } |
37 | 37 |
38 /// Concrete shadow object representing a boolean literal in kernel form. | |
39 class KernelBoolLiteral extends BoolLiteral implements KernelExpression { | |
40 KernelBoolLiteral(bool value) : super(value); | |
41 | |
42 @override | |
43 DartType _inferExpression( | |
44 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | |
45 return inferrer.inferBoolLiteral(typeContext, typeNeeded); | |
46 } | |
47 } | |
48 | |
38 /// Concrete shadow object representing a double literal in kernel form. | 49 /// Concrete shadow object representing a double literal in kernel form. |
39 class KernelDoubleLiteral extends DoubleLiteral implements KernelExpression { | 50 class KernelDoubleLiteral extends DoubleLiteral implements KernelExpression { |
40 KernelDoubleLiteral(double value) : super(value); | 51 KernelDoubleLiteral(double value) : super(value); |
41 | 52 |
42 @override | 53 @override |
43 DartType _inferExpression( | 54 DartType _inferExpression( |
44 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | 55 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
45 return inferrer.inferDoubleLiteral(typeContext, typeNeeded); | 56 return inferrer.inferDoubleLiteral(typeContext, typeNeeded); |
46 } | 57 } |
47 } | 58 } |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
218 class KernelStaticGet extends StaticGet implements KernelExpression { | 229 class KernelStaticGet extends StaticGet implements KernelExpression { |
219 KernelStaticGet(Member target) : super(target); | 230 KernelStaticGet(Member target) : super(target); |
220 | 231 |
221 @override | 232 @override |
222 DartType _inferExpression( | 233 DartType _inferExpression( |
223 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | 234 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
224 return inferrer.inferStaticGet(typeContext, typeNeeded, target.getterType); | 235 return inferrer.inferStaticGet(typeContext, typeNeeded, target.getterType); |
225 } | 236 } |
226 } | 237 } |
227 | 238 |
239 /// Concrete shadow object representing a string concatenation in kernel form. | |
240 class KernelStringConcatenation extends StringConcatenation | |
241 implements KernelExpression { | |
242 KernelStringConcatenation(List<Expression> expressions) : super(expressions); | |
243 | |
244 @override | |
245 DartType _inferExpression( | |
246 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | |
247 return inferrer.inferStringLiteral(typeContext, typeNeeded); | |
Paul Berry
2017/05/01 22:03:44
This works for now, but in the long run it will ne
scheglov
2017/05/02 02:35:20
Done.
I ended up removing testing for StringConcat
| |
248 } | |
249 } | |
250 | |
251 /// Concrete shadow object representing a string literal in kernel form. | |
252 class KernelStringLiteral extends StringLiteral implements KernelExpression { | |
253 KernelStringLiteral(String value) : super(value); | |
254 | |
255 @override | |
256 DartType _inferExpression( | |
257 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | |
258 return inferrer.inferStringLiteral(typeContext, typeNeeded); | |
259 } | |
260 } | |
261 | |
228 /// Concrete implementation of [TypeInferenceEngine] specialized to work with | 262 /// Concrete implementation of [TypeInferenceEngine] specialized to work with |
229 /// kernel objects. | 263 /// kernel objects. |
230 class KernelTypeInferenceEngine extends TypeInferenceEngineImpl<KernelField> { | 264 class KernelTypeInferenceEngine extends TypeInferenceEngineImpl<KernelField> { |
231 KernelTypeInferenceEngine(Instrumentation instrumentation, bool strongMode) | 265 KernelTypeInferenceEngine(Instrumentation instrumentation, bool strongMode) |
232 : super(instrumentation, strongMode); | 266 : super(instrumentation, strongMode); |
233 | 267 |
234 @override | 268 @override |
235 void clearFieldInitializer(KernelField field) { | 269 void clearFieldInitializer(KernelField field) { |
236 field.initializer = null; | 270 field.initializer = null; |
237 } | 271 } |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
486 // KernelVariableDeclaration. | 520 // KernelVariableDeclaration. |
487 mutatedInClosure = true; | 521 mutatedInClosure = true; |
488 declaredType = variable.type; | 522 declaredType = variable.type; |
489 } | 523 } |
490 return inferrer.inferVariableGet(typeContext, typeNeeded, mutatedInClosure, | 524 return inferrer.inferVariableGet(typeContext, typeNeeded, mutatedInClosure, |
491 _fact, _scope, fileOffset, declaredType, (type) { | 525 _fact, _scope, fileOffset, declaredType, (type) { |
492 promotedType = type; | 526 promotedType = type; |
493 }); | 527 }); |
494 } | 528 } |
495 } | 529 } |
OLD | NEW |