diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2014-03-03 11:21:15 +0100 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2014-03-03 11:21:15 +0100 |
commit | 24ff7d7f7930ee9917465a9fe762f891251a58f6 (patch) | |
tree | 35e169bd7fd608c1ee7c8c4c624b5964f97f6b04 /src/compiler/scala/tools/reflect | |
parent | da124b33956f83be8b2ebbb77208c4aecde1c6dc (diff) | |
parent | 04c55c8d467097d69f3b2d7995e6f1d767b7e7ed (diff) | |
download | scala-24ff7d7f7930ee9917465a9fe762f891251a58f6.tar.gz scala-24ff7d7f7930ee9917465a9fe762f891251a58f6.tar.bz2 scala-24ff7d7f7930ee9917465a9fe762f891251a58f6.zip |
Merge pull request #3595 from densh/si/8332
SI-8332 implicit class param unquoting in quasiquotes
Diffstat (limited to 'src/compiler/scala/tools/reflect')
-rw-r--r-- | src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala b/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala index 481897d0ec..5eae3b6e6f 100644 --- a/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala +++ b/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala @@ -151,21 +151,20 @@ trait Reifiers { self: Quasiquotes => mirrorCall(nme.This, tree) case SyntacticTraitDef(mods, name, tparams, earlyDefs, parents, selfdef, body) => reifyBuildCall(nme.SyntacticTraitDef, mods, name, tparams, earlyDefs, parents, selfdef, body) - case SyntacticClassDef(mods, name, tparams, constrmods, vparamss, earlyDefs, parents, selfdef, body) => - reifyBuildCall(nme.SyntacticClassDef, mods, name, tparams, constrmods, vparamss, - earlyDefs, parents, selfdef, body) + case SyntacticClassDef(mods, name, tparams, constrmods, vparamss, + earlyDefs, parents, selfdef, body) => + mirrorBuildCall(nme.SyntacticClassDef, reify(mods), reify(name), reify(tparams), reify(constrmods), + reifyVparamss(vparamss), reify(earlyDefs), reify(parents), + reify(selfdef), reify(body)) case SyntacticPackageObjectDef(name, earlyDefs, parents, selfdef, body) => reifyBuildCall(nme.SyntacticPackageObjectDef, name, earlyDefs, parents, selfdef, body) case SyntacticObjectDef(mods, name, earlyDefs, parents, selfdef, body) => reifyBuildCall(nme.SyntacticObjectDef, mods, name, earlyDefs, parents, selfdef, body) case SyntacticNew(earlyDefs, parents, selfdef, body) => reifyBuildCall(nme.SyntacticNew, earlyDefs, parents, selfdef, body) - case SyntacticDefDef(mods, name, tparams, build.ImplicitParams(vparamss, implparams), tpt, rhs) => - if (implparams.nonEmpty) - mirrorBuildCall(nme.SyntacticDefDef, reify(mods), reify(name), reify(tparams), - reifyBuildCall(nme.ImplicitParams, vparamss, implparams), reify(tpt), reify(rhs)) - else - reifyBuildCall(nme.SyntacticDefDef, mods, name, tparams, vparamss, tpt, rhs) + case SyntacticDefDef(mods, name, tparams, vparamss, tpt, rhs) => + mirrorBuildCall(nme.SyntacticDefDef, reify(mods), reify(name), reify(tparams), + reifyVparamss(vparamss), reify(tpt), reify(rhs)) case SyntacticValDef(mods, name, tpt, rhs) if tree != noSelfType => reifyBuildCall(nme.SyntacticValDef, mods, name, tpt, rhs) case SyntacticVarDef(mods, name, tpt, rhs) => @@ -270,6 +269,12 @@ trait Reifiers { self: Quasiquotes => def reifyPackageStat(hole: Hole) = reifyConstructionCheck(nme.mkPackageStat, hole) + def reifyVparamss(vparamss: List[List[ValDef]]) = { + val build.ImplicitParams(paramss, implparams) = vparamss + if (implparams.isEmpty) reify(paramss) + else reifyBuildCall(nme.ImplicitParams, paramss, implparams) + } + /** Splits list into a list of groups where subsequent elements are considered * similar by the corresponding function. * |