Chromium Code Reviews| 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 |