diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-12-19 07:25:26 -0800 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-12-19 07:25:26 -0800 |
commit | fc8bfb4b7564151eecb721c831f3f7d0655f2b1e (patch) | |
tree | 9466b411f4126cbc9e56a65d93f0ab6288787530 | |
parent | d99a4919e0fa4894829c752a8f881d7b103d8cda (diff) | |
parent | b275c38c9491a6f7a47be40cb52e2935ca0e2d69 (diff) | |
download | scala-fc8bfb4b7564151eecb721c831f3f7d0655f2b1e.tar.gz scala-fc8bfb4b7564151eecb721c831f3f7d0655f2b1e.tar.bz2 scala-fc8bfb4b7564151eecb721c831f3f7d0655f2b1e.zip |
Merge pull request #3257 from xeno-by/topic/duplicate-macro-args
(2.11.0-M8) duplicates macro arguments before expansion
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Macros.scala | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Macros.scala b/src/compiler/scala/tools/nsc/typechecker/Macros.scala index a18068f2e0..1deb74640c 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Macros.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Macros.scala @@ -345,7 +345,7 @@ trait Macros extends FastTrack with MacroRuntimes with Traces with Helpers { new { val universe: self.global.type = self.global val callsiteTyper: universe.analyzer.Typer = typer.asInstanceOf[global.analyzer.Typer] - val expandee = universe.analyzer.macroExpanderAttachment(expandeeTree).original orElse expandeeTree + val expandee = universe.analyzer.macroExpanderAttachment(expandeeTree).original orElse duplicateAndKeepPositions(expandeeTree) val macroRole = universe.analyzer.macroExpanderAttachment(expandeeTree).role } with UnaffiliatedMacroContext { val prefix = Expr[Nothing](prefixTree)(TypeTag.Nothing) @@ -403,8 +403,8 @@ trait Macros extends FastTrack with MacroRuntimes with Traces with Helpers { val wrappedArgs = mapWithIndex(args)((arg, j) => { val fingerprint = implParams(min(j, implParams.length - 1)) fingerprint match { - case LiftedTyped => context.Expr[Nothing](arg)(TypeTag.Nothing) // TODO: SI-5752 - case LiftedUntyped => arg + case LiftedTyped => context.Expr[Nothing](arg.duplicate)(TypeTag.Nothing) // TODO: SI-5752 + case LiftedUntyped => arg.duplicate case _ => abort(s"unexpected fingerprint $fingerprint in $binding with paramss being $paramss " + s"corresponding to arg $arg in $argss") } |