[kernel] CloneVisitor should preserve isDefault on switch cases.

Fixes https://github.com/dart-lang/sdk/issues/32971

Change-Id: I16bf688080ee60853f5de449ead3e7feaec37fc2
Reviewed-on: https://dart-review.googlesource.com/52602
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
This commit is contained in:
Vyacheslav Egorov 2018-04-25 23:53:22 +00:00 committed by commit-bot@chromium.org
parent 613c6d066c
commit 328163bba9
2 changed files with 38 additions and 1 deletions

View file

@ -345,7 +345,8 @@ class CloneVisitor implements TreeVisitor {
switchCases[switchCase] = new SwitchCase(
switchCase.expressions.map(clone).toList(),
new List<int>.from(switchCase.expressionOffsets),
null);
null,
isDefault: switchCase.isDefault);
}
return new SwitchStatement(
clone(node.expression), node.cases.map(clone).toList());

View file

@ -0,0 +1,36 @@
// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Test verifying that default switch cast is cloned correctly by the
// mixin transformation.
import "package:expect/expect.dart";
void main() {
final o = new A();
Expect.isTrue(o.f());
Expect.isTrue(o.g());
}
class A extends B with M {}
class B {
bool f() {
switch (true) {
default:
return true;
}
return false;
}
}
class M {
bool g() {
switch (true) {
default:
return true;
}
return false;
}
}