diff options
author | Denys Shabalin <denys.shabalin@typesafe.com> | 2014-02-24 16:03:20 +0100 |
---|---|---|
committer | Denys Shabalin <denys.shabalin@typesafe.com> | 2014-03-02 20:11:46 +0200 |
commit | 04c55c8d467097d69f3b2d7995e6f1d767b7e7ed (patch) | |
tree | 35e169bd7fd608c1ee7c8c4c624b5964f97f6b04 /src/reflect | |
parent | da124b33956f83be8b2ebbb77208c4aecde1c6dc (diff) | |
download | scala-04c55c8d467097d69f3b2d7995e6f1d767b7e7ed.tar.gz scala-04c55c8d467097d69f3b2d7995e6f1d767b7e7ed.tar.bz2 scala-04c55c8d467097d69f3b2d7995e6f1d767b7e7ed.zip |
SI-8332 implicit class param unquoting in quasiquotes
A new api that simplifies handling of implicit parameters has been
mistakingly supporting just methods parameters. This commit adds
support for class parameters too.
Diffstat (limited to 'src/reflect')
-rw-r--r-- | src/reflect/scala/reflect/api/Internals.scala | 2 | ||||
-rw-r--r-- | src/reflect/scala/reflect/internal/ReificationSupport.scala | 16 |
2 files changed, 9 insertions, 9 deletions
diff --git a/src/reflect/scala/reflect/api/Internals.scala b/src/reflect/scala/reflect/api/Internals.scala index 01700345d1..01f928ed61 100644 --- a/src/reflect/scala/reflect/api/Internals.scala +++ b/src/reflect/scala/reflect/api/Internals.scala @@ -581,7 +581,7 @@ trait Internals { self: Universe => val ImplicitParams: ImplicitParamsExtractor trait ImplicitParamsExtractor { - def apply(paramss: List[List[ValDef]], implparams: List[ValDef]): List[List[ValDef]] + def apply(paramss: List[List[Tree]], implparams: List[Tree]): List[List[Tree]] def unapply(vparamss: List[List[ValDef]]): Some[(List[List[ValDef]], List[ValDef])] } diff --git a/src/reflect/scala/reflect/internal/ReificationSupport.scala b/src/reflect/scala/reflect/internal/ReificationSupport.scala index 7f345845fe..66ac4bc751 100644 --- a/src/reflect/scala/reflect/internal/ReificationSupport.scala +++ b/src/reflect/scala/reflect/internal/ReificationSupport.scala @@ -110,14 +110,14 @@ trait ReificationSupport { self: SymbolTable => def mkAnnotation(trees: List[Tree]): List[Tree] = trees.map(mkAnnotation) - def mkParam(argss: List[List[Tree]], extraFlags: FlagSet = NoFlags): List[List[ValDef]] = - argss.map { args => args.map { mkParam(_, extraFlags) } } + def mkParam(argss: List[List[Tree]], extraFlags: FlagSet = NoFlags, excludeFlags: FlagSet = DEFERRED): List[List[ValDef]] = + argss.map { args => args.map { mkParam(_, extraFlags, excludeFlags) } } - def mkParam(tree: Tree, extraFlags: FlagSet): ValDef = tree match { + def mkParam(tree: Tree, extraFlags: FlagSet, excludeFlags: FlagSet): ValDef = tree match { case Typed(Ident(name: TermName), tpt) => - mkParam(ValDef(NoMods, name, tpt, EmptyTree), extraFlags) + mkParam(ValDef(NoMods, name, tpt, EmptyTree), extraFlags, excludeFlags) case vd: ValDef => - var newmods = vd.mods & (~DEFERRED) + var newmods = vd.mods & (~excludeFlags) if (vd.rhs.nonEmpty) newmods |= DEFAULTPARAM copyValDef(vd)(mods = newmods | extraFlags) case _ => @@ -127,7 +127,7 @@ trait ReificationSupport { self: SymbolTable => def mkImplicitParam(args: List[Tree]): List[ValDef] = args.map(mkImplicitParam) - def mkImplicitParam(tree: Tree): ValDef = mkParam(tree, IMPLICIT | PARAM) + def mkImplicitParam(tree: Tree): ValDef = mkParam(tree, IMPLICIT | PARAM, NoFlags) def mkTparams(tparams: List[Tree]): List[TypeDef] = tparams.map { @@ -187,7 +187,7 @@ trait ReificationSupport { self: SymbolTable => protected implicit def fresh: FreshNameCreator = self.currentFreshNameCreator object ImplicitParams extends ImplicitParamsExtractor { - def apply(paramss: List[List[ValDef]], implparams: List[ValDef]): List[List[ValDef]] = + def apply(paramss: List[List[Tree]], implparams: List[Tree]): List[List[Tree]] = if (implparams.nonEmpty) paramss :+ mkImplicitParam(implparams) else paramss def unapply(vparamss: List[List[ValDef]]): Some[(List[List[ValDef]], List[ValDef])] = vparamss match { @@ -300,7 +300,7 @@ trait ReificationSupport { self: SymbolTable => constrMods: Modifiers, vparamss: List[List[Tree]], earlyDefs: List[Tree], parents: List[Tree], selfType: Tree, body: List[Tree]): ClassDef = { val extraFlags = PARAMACCESSOR | (if (mods.isCase) CASEACCESSOR else 0L) - val vparamss0 = mkParam(vparamss, extraFlags) + val vparamss0 = mkParam(vparamss, extraFlags, excludeFlags = DEFERRED | PARAM) val tparams0 = mkTparams(tparams) val parents0 = gen.mkParents(mods, if (mods.isCase) parents.filter { |