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 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 DartType _inferExpression( | 291 DartType _inferExpression( |
292 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | 292 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
293 IsExpression isExpression = this.operand; | 293 IsExpression isExpression = this.operand; |
294 return inferrer.inferIsExpression( | 294 return inferrer.inferIsExpression( |
295 typeContext, typeNeeded, isExpression.operand); | 295 typeContext, typeNeeded, isExpression.operand); |
296 } | 296 } |
297 } | 297 } |
298 | 298 |
299 /// Concrete shadow object representing a list literal in kernel form. | 299 /// Concrete shadow object representing a list literal in kernel form. |
300 class KernelListLiteral extends ListLiteral implements KernelExpression { | 300 class KernelListLiteral extends ListLiteral implements KernelExpression { |
| 301 final DartType _declaredTypeArgument; |
| 302 |
301 KernelListLiteral(List<Expression> expressions, | 303 KernelListLiteral(List<Expression> expressions, |
302 {DartType typeArgument, bool isConst: false}) | 304 {DartType typeArgument, bool isConst: false}) |
303 : super(expressions, typeArgument: typeArgument, isConst: isConst); | 305 : _declaredTypeArgument = typeArgument, |
| 306 super(expressions, |
| 307 typeArgument: typeArgument ?? const DynamicType(), |
| 308 isConst: isConst); |
304 | 309 |
305 @override | 310 @override |
306 DartType _inferExpression( | 311 DartType _inferExpression( |
307 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | 312 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
308 return inferrer.inferListLiteral(typeContext, typeNeeded, typeArgument); | 313 return inferrer.inferListLiteral( |
| 314 typeContext, typeNeeded, fileOffset, _declaredTypeArgument, expressions, |
| 315 (type) { |
| 316 typeArgument = type; |
| 317 }); |
309 } | 318 } |
310 } | 319 } |
311 | 320 |
312 /// Shadow object for [LogicalExpression]. | 321 /// Shadow object for [LogicalExpression]. |
313 class KernelLogicalExpression extends LogicalExpression | 322 class KernelLogicalExpression extends LogicalExpression |
314 implements KernelExpression { | 323 implements KernelExpression { |
315 KernelLogicalExpression(Expression left, String operator, Expression right) | 324 KernelLogicalExpression(Expression left, String operator, Expression right) |
316 : super(left, operator, right); | 325 : super(left, operator, right); |
317 | 326 |
318 @override | 327 @override |
(...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
879 : super(variable, value); | 888 : super(variable, value); |
880 | 889 |
881 @override | 890 @override |
882 DartType _inferExpression( | 891 DartType _inferExpression( |
883 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | 892 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
884 var variable = this.variable as KernelVariableDeclaration; | 893 var variable = this.variable as KernelVariableDeclaration; |
885 return inferrer.inferVariableSet( | 894 return inferrer.inferVariableSet( |
886 typeContext, typeNeeded, variable._declaredType, value); | 895 typeContext, typeNeeded, variable._declaredType, value); |
887 } | 896 } |
888 } | 897 } |
OLD | NEW |