diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-09-23 23:36:04 -0700 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-09-23 23:36:04 -0700 |
commit | c2e3b0656bb449e95a529e266294aeabb9cbef3f (patch) | |
tree | 1dc9915c79f23424d697f34f408ad33b1260ff63 /src | |
parent | 7d570b54c3c895bc8948adeca2e463d135e38feb (diff) | |
parent | 16d963bcb032deb669247e4a95c6391971cafd75 (diff) | |
download | scala-c2e3b0656bb449e95a529e266294aeabb9cbef3f.tar.gz scala-c2e3b0656bb449e95a529e266294aeabb9cbef3f.tar.bz2 scala-c2e3b0656bb449e95a529e266294aeabb9cbef3f.zip |
Merge pull request #2975 from retronym/ticket/7868
SI-7868 Account for numeric widening in match translation
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/patmat/MatchTranslation.scala | 8 | ||||
-rw-r--r-- | src/reflect/scala/reflect/internal/TreeInfo.scala | 9 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/patmat/MatchTranslation.scala b/src/compiler/scala/tools/nsc/transform/patmat/MatchTranslation.scala index 75335f7920..ab19660da5 100644 --- a/src/compiler/scala/tools/nsc/transform/patmat/MatchTranslation.scala +++ b/src/compiler/scala/tools/nsc/transform/patmat/MatchTranslation.scala @@ -600,9 +600,15 @@ trait MatchTranslation { protected def spliceApply(binder: Symbol): Tree = { object splice extends Transformer { + def binderRef(pos: Position): Tree = + REF(binder) setPos pos override def transform(t: Tree) = t match { + // duplicated with the extractor Unapplied case Apply(x, List(i @ Ident(nme.SELECTOR_DUMMY))) => - treeCopy.Apply(t, x, (REF(binder) setPos i.pos) :: Nil) + treeCopy.Apply(t, x, binderRef(i.pos) :: Nil) + // SI-7868 Account for numeric widening, e.g. <unappplySelector>.toInt + case Apply(x, List(i @ (sel @ Select(Ident(nme.SELECTOR_DUMMY), name)))) => + treeCopy.Apply(t, x, treeCopy.Select(sel, binderRef(i.pos), name) :: Nil) case _ => super.transform(t) } diff --git a/src/reflect/scala/reflect/internal/TreeInfo.scala b/src/reflect/scala/reflect/internal/TreeInfo.scala index 1b763b8632..ab7506e657 100644 --- a/src/reflect/scala/reflect/internal/TreeInfo.scala +++ b/src/reflect/scala/reflect/internal/TreeInfo.scala @@ -784,10 +784,13 @@ abstract class TreeInfo { * unapply (unwrapping nested Applies) and returns the fun part of that Apply. */ object Unapplied { + // Duplicated with `spliceApply` def unapply(tree: Tree): Option[Tree] = tree match { - case Apply(fun, Ident(nme.SELECTOR_DUMMY) :: Nil) => Some(fun) - case Apply(fun, _) => unapply(fun) - case _ => None + // SI-7868 Admit Select() to account for numeric widening, e.g. <unappplySelector>.toInt + case Apply(fun, (Ident(nme.SELECTOR_DUMMY)| Select(Ident(nme.SELECTOR_DUMMY), _)) :: Nil) + => Some(fun) + case Apply(fun, _) => unapply(fun) + case _ => None } } |