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

Side by Side Diff: pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart

Issue 2863733003: Hook up full list literal type inference logic. (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
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 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
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
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 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/kernel/body_builder.dart ('k') | pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698