From d9687d585525476ecd9544b0e367e456af1b0642 Mon Sep 17 00:00:00 2001 From: Eugene Burmako Date: Tue, 18 Mar 2014 00:34:16 +0100 Subject: SI-8425 don't create double-dollar names in c.freshName If we append a dollar to a user-provided prefix that ends in a dollar, we create a potential for confusion for backend phases. That's why this commit prevents such situations from happening. --- src/compiler/scala/reflect/macros/contexts/Names.scala | 3 ++- test/files/run/t8425.check | 1 + test/files/run/t8425/Macros_1.scala | 12 ++++++++++++ test/files/run/t8425/Test_2.scala | 3 +++ 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 test/files/run/t8425.check create mode 100644 test/files/run/t8425/Macros_1.scala create mode 100644 test/files/run/t8425/Test_2.scala diff --git a/src/compiler/scala/reflect/macros/contexts/Names.scala b/src/compiler/scala/reflect/macros/contexts/Names.scala index 299af40b94..5a5bb428b5 100644 --- a/src/compiler/scala/reflect/macros/contexts/Names.scala +++ b/src/compiler/scala/reflect/macros/contexts/Names.scala @@ -33,8 +33,9 @@ trait Names { // // TODO: hopefully SI-7823 will provide an ultimate answer to this problem. // In the meanwhile I will also keep open the original issue: SI-6879 "c.freshName is broken". + val prefix = if (name.endsWith("$")) name else name + "$" // SI-8425 val sortOfUniqueSuffix = freshNameCreator.newName(nme.FRESH_SUFFIX) - name + "$" + sortOfUniqueSuffix + prefix + sortOfUniqueSuffix } def freshName[NameType <: Name](name: NameType): NameType = diff --git a/test/files/run/t8425.check b/test/files/run/t8425.check new file mode 100644 index 0000000000..8379fa0a74 --- /dev/null +++ b/test/files/run/t8425.check @@ -0,0 +1 @@ +List(fresh$macro$1, $macro$2) diff --git a/test/files/run/t8425/Macros_1.scala b/test/files/run/t8425/Macros_1.scala new file mode 100644 index 0000000000..71a96518e8 --- /dev/null +++ b/test/files/run/t8425/Macros_1.scala @@ -0,0 +1,12 @@ +import scala.language.experimental.macros +import scala.reflect.macros.blackbox.Context + +object Macros { + def foo: Unit = macro impl + def impl(c: Context) = { + import c.universe._ + val test1 = c.freshName() + val test2 = c.freshName("$") + q"println(List($test1, $test2))" + } +} \ No newline at end of file diff --git a/test/files/run/t8425/Test_2.scala b/test/files/run/t8425/Test_2.scala new file mode 100644 index 0000000000..acfddae942 --- /dev/null +++ b/test/files/run/t8425/Test_2.scala @@ -0,0 +1,3 @@ +object Test extends App { + Macros.foo +} \ No newline at end of file -- cgit v1.2.3