Chromium Code Reviews| 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..77a546ffbe281e7850d14b325d9df8593cfea93a 100644 |
| --- a/pkg/compiler/lib/src/resolution/members.dart |
| +++ b/pkg/compiler/lib/src/resolution/members.dart |
| @@ -4,6 +4,8 @@ |
| library dart2js.resolution.members; |
| +import 'dart:collection'; |
| + |
| import '../common.dart'; |
| import '../common/names.dart' show Selectors; |
| import '../common/resolution.dart' show Resolution; |
| @@ -4601,6 +4603,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> { |
| JumpTarget breakElement = getOrDefineTarget(node); |
| Map<String, LabelDefinition> continueLabels = <String, LabelDefinition>{}; |
| + Set<SwitchCase> switchCasesWithContinues = new HashSet<SwitchCase>(); |
|
sra1
2017/02/07 01:05:06
I'd just say new Set and avoid the import.
Emily Fortuna
2017/02/07 01:30:56
Done.
|
| Link<Node> cases = node.cases.nodes; |
| while (!cases.isEmpty) { |
| SwitchCase switchCase = cases.head; |
| @@ -4668,12 +4671,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); |
| } |
| }); |