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

Side by Side Diff: pkg/compiler/lib/src/elements/modelx.dart

Issue 2950303002: Handle for-loop with simple break in compile_from_dill_test (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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 library elements.modelx; 5 library elements.modelx;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common/names.dart' show Identifiers; 8 import '../common/names.dart' show Identifiers;
9 import '../common/resolution.dart' show Resolution, ParsingContext; 9 import '../common/resolution.dart' show Resolution, ParsingContext;
10 import '../compiler.dart' show Compiler; 10 import '../compiler.dart' show Compiler;
(...skipping 3319 matching lines...) Expand 10 before | Expand all | Expand 10 after
3330 UnnamedMixinApplicationElementX( 3330 UnnamedMixinApplicationElementX(
3331 String name, ClassElement subclass, int id, this.node) 3331 String name, ClassElement subclass, int id, this.node)
3332 : this.subclass = subclass, 3332 : this.subclass = subclass,
3333 super(name, subclass.compilationUnit, id); 3333 super(name, subclass.compilationUnit, id);
3334 3334
3335 bool get isUnnamedMixinApplication => true; 3335 bool get isUnnamedMixinApplication => true;
3336 3336
3337 bool get isAbstract => true; 3337 bool get isAbstract => true;
3338 } 3338 }
3339 3339
3340 class LabelDefinitionX implements LabelDefinition<Node> { 3340 class LabelDefinitionX extends LabelDefinition<Node> {
3341 final Label label; 3341 final Label label;
3342 final String labelName; 3342 final String labelName;
3343 final JumpTargetX target; 3343 final JumpTargetX target;
3344 bool isBreakTarget = false; 3344 bool isBreakTarget = false;
3345 bool isContinueTarget = false; 3345 bool isContinueTarget = false;
3346 3346
3347 LabelDefinitionX(Label label, String labelName, this.target) 3347 LabelDefinitionX(Label label, String labelName, this.target)
3348 : this.label = label, 3348 : this.label = label,
3349 this.labelName = labelName; 3349 this.labelName = labelName;
3350 3350
3351 // In case of a synthetic label, just use [labelName] for identifying the 3351 // In case of a synthetic label, just use [labelName] for identifying the
3352 // label. 3352 // label.
3353 String get name => label == null ? labelName : label.identifier.source; 3353 String get name => label == null ? labelName : label.identifier.source;
3354 3354
3355 void setBreakTarget() { 3355 void setBreakTarget() {
3356 isBreakTarget = true; 3356 isBreakTarget = true;
3357 target.isBreakTarget = true; 3357 target.isBreakTarget = true;
3358 } 3358 }
3359 3359
3360 void setContinueTarget() { 3360 void setContinueTarget() {
3361 isContinueTarget = true; 3361 isContinueTarget = true;
3362 target.isContinueTarget = true; 3362 target.isContinueTarget = true;
3363 } 3363 }
3364 3364
3365 bool get isTarget => isBreakTarget || isContinueTarget;
3366
3367 String toString() => 'Label:${name}'; 3365 String toString() => 'Label:${name}';
3368 } 3366 }
3369 3367
3370 class JumpTargetX implements JumpTarget<Node> { 3368 class JumpTargetX extends JumpTarget<Node> {
3371 final ExecutableElement executableContext; 3369 final ExecutableElement executableContext;
3372 final Node statement; 3370 final Node statement;
3373 final int nestingLevel; 3371 final int nestingLevel;
3374 List<LabelDefinition<Node>> labels = <LabelDefinition<Node>>[]; 3372 List<LabelDefinition<Node>> labels = <LabelDefinition<Node>>[];
3375 bool isBreakTarget = false; 3373 bool isBreakTarget = false;
3376 bool isContinueTarget = false; 3374 bool isContinueTarget = false;
3377 3375
3378 final int hashCode = ElementX.newHashCode(); 3376 final int hashCode = ElementX.newHashCode();
3379 3377
3380 JumpTargetX(this.statement, this.nestingLevel, this.executableContext); 3378 JumpTargetX(this.statement, this.nestingLevel, this.executableContext);
3381 3379
3382 @override 3380 @override
3383 MemberElement get memberContext => executableContext.memberContext; 3381 MemberElement get memberContext => executableContext.memberContext;
3384 3382
3385 String get name => "target";
3386
3387 bool get isTarget => isBreakTarget || isContinueTarget;
3388
3389 LabelDefinition<Node> addLabel(Label label, String labelName, 3383 LabelDefinition<Node> addLabel(Label label, String labelName,
3390 {bool isBreakTarget: false}) { 3384 {bool isBreakTarget: false}) {
3391 LabelDefinitionX result = new LabelDefinitionX(label, labelName, this); 3385 LabelDefinitionX result = new LabelDefinitionX(label, labelName, this);
3392 labels.add(result); 3386 labels.add(result);
3393 if (isBreakTarget) { 3387 if (isBreakTarget) {
3394 result.setBreakTarget(); 3388 result.setBreakTarget();
3395 } 3389 }
3396 return result; 3390 return result;
3397 } 3391 }
3398 3392
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
3579 body = node.asFunctionExpression().body; 3573 body = node.asFunctionExpression().body;
3580 } 3574 }
3581 return new ParsedResolvedAst( 3575 return new ParsedResolvedAst(
3582 declaration, 3576 declaration,
3583 node, 3577 node,
3584 body, 3578 body,
3585 definingElement.treeElements, 3579 definingElement.treeElements,
3586 definingElement.compilationUnit.script.resourceUri); 3580 definingElement.compilationUnit.script.resourceUri);
3587 } 3581 }
3588 } 3582 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698