summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Macros.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-12-19 07:25:26 -0800
committerJason Zaugg <jzaugg@gmail.com>2013-12-19 07:25:26 -0800
commitfc8bfb4b7564151eecb721c831f3f7d0655f2b1e (patch)
tree9466b411f4126cbc9e56a65d93f0ab6288787530 /src/compiler/scala/tools/nsc/typechecker/Macros.scala
parentd99a4919e0fa4894829c752a8f881d7b103d8cda (diff)
parentb275c38c9491a6f7a47be40cb52e2935ca0e2d69 (diff)
downloadscala-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
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Macros.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Macros.scala6
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")
}