From e3b58d0c993aa4be16214ce52aea5952a9e5f877 Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Thu, 13 Oct 2011 20:50:58 +0000 Subject: Adjustment to @switch. Don't require a tableswitch if the matcher elected not to emit one because there were so few cases. No review. --- src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala | 4 +++- test/files/pos/switch-small.scala | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 test/files/pos/switch-small.scala diff --git a/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala b/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala index 809dbe7695..c25f33393a 100644 --- a/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala +++ b/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala @@ -407,7 +407,9 @@ abstract class ExplicitOuter extends InfoTransform if (unchecked) nselector = nselector1 - (!unchecked, isSwitchAnnotation(tpt.tpe)) + // Don't require a tableswitch if there are 1-2 casedefs + // since the matcher intentionally emits an if-then-else. + (!unchecked, isSwitchAnnotation(tpt.tpe) && ncases.size > 2) case _ => (true, false) } diff --git a/test/files/pos/switch-small.scala b/test/files/pos/switch-small.scala new file mode 100644 index 0000000000..9de9ca028e --- /dev/null +++ b/test/files/pos/switch-small.scala @@ -0,0 +1,8 @@ +import annotation._ + +object Test { + def f(x: Int) = (x: @switch) match { + case 1 => 1 + case _ => 2 + } +} -- cgit v1.2.3