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

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

Issue 2954253002: Add type inference for while and do loops. (Closed)
Patch Set: Created 3 years, 6 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 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 } 545 }
546 546
547 @override 547 @override
548 DartType _inferExpression( 548 DartType _inferExpression(
549 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { 549 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
550 // TODO(scheglov): implement. 550 // TODO(scheglov): implement.
551 return typeNeeded ? const DynamicType() : null; 551 return typeNeeded ? const DynamicType() : null;
552 } 552 }
553 } 553 }
554 554
555 /// Concrete shadow object representing a do loop in kernel form.
556 class KernelDoStatement extends DoStatement implements KernelStatement {
557 KernelDoStatement(Statement body, Expression condition)
558 : super(body, condition);
559
560 @override
561 void _inferStatement(KernelTypeInferrer inferrer) {
562 inferrer.listener.doStatementEnter(this);
563 inferrer.inferStatement(body);
564 inferrer.inferExpression(
565 condition, inferrer.coreTypes.boolClass.rawType, false);
566 inferrer.listener.doStatementExit(this);
567 }
568 }
569
555 /// Concrete shadow object representing a double literal in kernel form. 570 /// Concrete shadow object representing a double literal in kernel form.
556 class KernelDoubleLiteral extends DoubleLiteral implements KernelExpression { 571 class KernelDoubleLiteral extends DoubleLiteral implements KernelExpression {
557 KernelDoubleLiteral(double value) : super(value); 572 KernelDoubleLiteral(double value) : super(value);
558 573
559 @override 574 @override
560 void _collectDependencies(KernelDependencyCollector collector) { 575 void _collectDependencies(KernelDependencyCollector collector) {
561 // No inference dependencies. 576 // No inference dependencies.
562 } 577 }
563 578
564 @override 579 @override
(...skipping 1603 matching lines...) Expand 10 before | Expand all | Expand 10 after
2168 'promotedType', new InstrumentationValueForType(promotedType)); 2183 'promotedType', new InstrumentationValueForType(promotedType));
2169 } 2184 }
2170 this.promotedType = promotedType; 2185 this.promotedType = promotedType;
2171 var inferredType = 2186 var inferredType =
2172 typeNeeded ? (promotedType ?? declaredOrInferredType) : null; 2187 typeNeeded ? (promotedType ?? declaredOrInferredType) : null;
2173 inferrer.listener.variableGetExit(this, inferredType); 2188 inferrer.listener.variableGetExit(this, inferredType);
2174 return inferredType; 2189 return inferredType;
2175 } 2190 }
2176 } 2191 }
2177 2192
2193 /// Concrete shadow object representing a while loop in kernel form.
2194 class KernelWhileStatement extends WhileStatement implements KernelStatement {
2195 KernelWhileStatement(Expression condition, Statement body)
2196 : super(condition, body);
2197
2198 @override
2199 void _inferStatement(KernelTypeInferrer inferrer) {
2200 inferrer.listener.whileStatementEnter(this);
2201 inferrer.inferExpression(
2202 condition, inferrer.coreTypes.boolClass.rawType, false);
2203 inferrer.inferStatement(body);
2204 inferrer.listener.whileStatementExit(this);
2205 }
2206 }
2207
2178 /// Concrete shadow object representing a yield statement in kernel form. 2208 /// Concrete shadow object representing a yield statement in kernel form.
2179 class KernelYieldStatement extends YieldStatement implements KernelStatement { 2209 class KernelYieldStatement extends YieldStatement implements KernelStatement {
2180 KernelYieldStatement(Expression expression, {bool isYieldStar: false}) 2210 KernelYieldStatement(Expression expression, {bool isYieldStar: false})
2181 : super(expression, isYieldStar: isYieldStar); 2211 : super(expression, isYieldStar: isYieldStar);
2182 2212
2183 @override 2213 @override
2184 void _inferStatement(KernelTypeInferrer inferrer) { 2214 void _inferStatement(KernelTypeInferrer inferrer) {
2185 inferrer.listener.yieldStatementEnter(this); 2215 inferrer.listener.yieldStatementEnter(this);
2186 var closureContext = inferrer.closureContext; 2216 var closureContext = inferrer.closureContext;
2187 var typeContext = 2217 var typeContext =
(...skipping 25 matching lines...) Expand all
2213 } 2243 }
2214 2244
2215 transformChildren(v) { 2245 transformChildren(v) {
2216 return internalError("Internal error: Unsupported operation."); 2246 return internalError("Internal error: Unsupported operation.");
2217 } 2247 }
2218 2248
2219 visitChildren(v) { 2249 visitChildren(v) {
2220 return internalError("Internal error: Unsupported operation."); 2250 return internalError("Internal error: Unsupported operation.");
2221 } 2251 }
2222 } 2252 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698