| Index: pkg/compiler/lib/src/resolution/members.dart
|
| diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
|
| index 8644d31efde6798b5217772ab86f9c0d38f47a29..e2c8b91da449e3b8953ac6a33b0a3af9de9c4fbe 100644
|
| --- a/pkg/compiler/lib/src/resolution/members.dart
|
| +++ b/pkg/compiler/lib/src/resolution/members.dart
|
| @@ -4601,6 +4601,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
|
|
| JumpTarget breakElement = getOrDefineTarget(node);
|
| Map<String, LabelDefinition> continueLabels = <String, LabelDefinition>{};
|
| + Set<SwitchCase> switchCasesWithContinues = new Set<SwitchCase>();
|
| Link<Node> cases = node.cases.nodes;
|
| while (!cases.isEmpty) {
|
| SwitchCase switchCase = cases.head;
|
| @@ -4668,12 +4669,22 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| node.cases.accept(this);
|
| statementScope.exitSwitch();
|
|
|
| + continueLabels.forEach((String key, LabelDefinition label) {
|
| + if (label.isContinueTarget) {
|
| + JumpTarget targetElement = label.target;
|
| + SwitchCase switchCase = targetElement.statement;
|
| + switchCasesWithContinues.add(switchCase);
|
| + }
|
| + });
|
| +
|
| // Clean-up unused labels.
|
| continueLabels.forEach((String key, LabelDefinition label) {
|
| if (!label.isContinueTarget) {
|
| JumpTarget targetElement = label.target;
|
| SwitchCase switchCase = targetElement.statement;
|
| - registry.undefineTarget(switchCase);
|
| + if (!switchCasesWithContinues.contains(switchCase)) {
|
| + registry.undefineTarget(switchCase);
|
| + }
|
| registry.undefineLabel(label.label);
|
| }
|
| });
|
|
|