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

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

Issue 2849293002: Infer types of bool/null/string literals. (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 17 matching lines...) Expand all
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698