diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-03-27 20:58:02 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2014-03-27 20:58:02 +0100 |
commit | 26419257cc0b1b37e0130dacde63715340306c1c (patch) | |
tree | e7f7a1a0d5baf5e820765caf28ecec50a712e5f9 /src | |
parent | c34826d1ca183a29f73eb056f69c59a50091ec4d (diff) | |
parent | a0c3bbdb3a4b1055834f3ff5f729dc3af1867696 (diff) | |
download | scala-26419257cc0b1b37e0130dacde63715340306c1c.tar.gz scala-26419257cc0b1b37e0130dacde63715340306c1c.tar.bz2 scala-26419257cc0b1b37e0130dacde63715340306c1c.zip |
Merge pull request #3659 from xeno-by/topic/uncurry-ctors
SI-8451 makes uncurry more forgiving
Diffstat (limited to 'src')
-rw-r--r-- | src/reflect/scala/reflect/internal/ReificationSupport.scala | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/internal/ReificationSupport.scala b/src/reflect/scala/reflect/internal/ReificationSupport.scala index f9f93fbff0..37f7b85720 100644 --- a/src/reflect/scala/reflect/internal/ReificationSupport.scala +++ b/src/reflect/scala/reflect/internal/ReificationSupport.scala @@ -523,11 +523,21 @@ trait ReificationSupport { self: SymbolTable => object SyntacticDefDef extends SyntacticDefDefExtractor { def apply(mods: Modifiers, name: TermName, tparams: List[Tree], vparamss: List[List[Tree]], tpt: Tree, rhs: Tree): DefDef = { + val tparams0 = mkTparams(tparams) val vparamss0 = mkParam(vparamss, PARAM) - DefDef(mods, name, mkTparams(tparams), vparamss0, tpt, rhs) + val rhs0 = { + if (name != nme.CONSTRUCTOR) rhs + else rhs match { + case Block(_, _) => rhs + case _ => Block(List(rhs), gen.mkSyntheticUnit) + } + } + DefDef(mods, name, tparams0, vparamss0, tpt, rhs0) } def unapply(tree: Tree): Option[(Modifiers, TermName, List[TypeDef], List[List[ValDef]], Tree, Tree)] = tree match { + case DefDef(mods, nme.CONSTRUCTOR, tparams, vparamss, tpt, Block(List(expr), Literal(Constant(())))) => + Some((mods, nme.CONSTRUCTOR, tparams, vparamss, tpt, expr)) case DefDef(mods, name, tparams, vparamss, tpt, rhs) => Some((mods, name, tparams, vparamss, tpt, rhs)) case _ => None |