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

Side by Side Diff: pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart

Issue 2855403002: Type inference for StringConcatenation. (Closed)
Patch Set: Fixes for review comments. 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.md file. 3 // BSD-style license that can be found in the LICENSE.md file.
4 4
5 import 'package:front_end/src/base/instrumentation.dart'; 5 import 'package:front_end/src/base/instrumentation.dart';
6 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart'; 6 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
7 import 'package:front_end/src/fasta/type_inference/type_promotion.dart'; 7 import 'package:front_end/src/fasta/type_inference/type_promotion.dart';
8 import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart' ; 8 import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart' ;
9 import 'package:kernel/ast.dart' 9 import 'package:kernel/ast.dart'
10 show DartType, DynamicType, InterfaceType, Member; 10 show DartType, DynamicType, InterfaceType, Member;
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 } 236 }
237 237
238 /// Performs the core type inference algorithm for string literals. 238 /// Performs the core type inference algorithm for string literals.
239 /// 239 ///
240 /// [typeContext], [typeNeeded], and the return value behave as described in 240 /// [typeContext], [typeNeeded], and the return value behave as described in
241 /// [inferExpression]. 241 /// [inferExpression].
242 DartType inferStringLiteral(DartType typeContext, bool typeNeeded) { 242 DartType inferStringLiteral(DartType typeContext, bool typeNeeded) {
243 return typeNeeded ? coreTypes.stringClass.rawType : null; 243 return typeNeeded ? coreTypes.stringClass.rawType : null;
244 } 244 }
245 245
246 /// Performs the core type inference algorithm for string concatenations.
247 ///
248 /// [typeContext], [typeNeeded], and the return value behave as described in
249 /// [inferExpression].
250 DartType inferStringConcatenation(
251 DartType typeContext, bool typeNeeded, Iterable<E> expressions) {
252 for (E expression in expressions) {
253 inferExpression(expression, null, false);
254 }
255 return typeNeeded ? coreTypes.stringClass.rawType : null;
256 }
257
246 /// Performs the core type inference algorithm for variable declarations. 258 /// Performs the core type inference algorithm for variable declarations.
247 /// 259 ///
248 /// [declaredType] is the declared type of the variable, or `null` if the type 260 /// [declaredType] is the declared type of the variable, or `null` if the type
249 /// should be inferred. [initializer] is the initializer expression. 261 /// should be inferred. [initializer] is the initializer expression.
250 /// [offset] is the character offset of the variable declaration (for 262 /// [offset] is the character offset of the variable declaration (for
251 /// instrumentation). [setType] is a callback that will be used to set the 263 /// instrumentation). [setType] is a callback that will be used to set the
252 /// inferred type. 264 /// inferred type.
253 void inferVariableDeclaration(DartType declaredType, E initializer, 265 void inferVariableDeclaration(DartType declaredType, E initializer,
254 int offset, void setType(DartType type)) { 266 int offset, void setType(DartType type)) {
255 if (initializer == null) return; 267 if (initializer == null) return;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 /// Gets the return type that was inferred for the current closure. 313 /// Gets the return type that was inferred for the current closure.
302 get inferredReturnType { 314 get inferredReturnType {
303 if (_inferredReturnType == null) { 315 if (_inferredReturnType == null) {
304 // No return statement found. 316 // No return statement found.
305 // TODO(paulberry): is it correct to infer `dynamic`? 317 // TODO(paulberry): is it correct to infer `dynamic`?
306 return const DynamicType(); 318 return const DynamicType();
307 } 319 }
308 return _inferredReturnType; 320 return _inferredReturnType;
309 } 321 }
310 } 322 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698