diff options
author | Lukas Rytz <lukas.rytz@typesafe.com> | 2014-07-15 07:25:44 +0200 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@typesafe.com> | 2014-07-15 07:25:44 +0200 |
commit | 64df8bc3cb78a32cccc929d60b226b68ad67d624 (patch) | |
tree | 05489c8f182bede4b930aa7df6b69c81e2ff1156 /src/compiler | |
parent | 854de2dc0b209888d487f958e54cd05526cfd3f1 (diff) | |
parent | 146bdd7073e1184af36d3378595297f3cb92bccf (diff) | |
download | scala-64df8bc3cb78a32cccc929d60b226b68ad67d624.tar.gz scala-64df8bc3cb78a32cccc929d60b226b68ad67d624.tar.bz2 scala-64df8bc3cb78a32cccc929d60b226b68ad67d624.zip |
Merge pull request #3878 from som-snytt/issue/8608
SI-8608 f interpolator emits constant strings
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/reflect/FormatInterpolator.scala | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/reflect/FormatInterpolator.scala b/src/compiler/scala/tools/reflect/FormatInterpolator.scala index 57be1afdfe..b445f1e2bb 100644 --- a/src/compiler/scala/tools/reflect/FormatInterpolator.scala +++ b/src/compiler/scala/tools/reflect/FormatInterpolator.scala @@ -182,13 +182,23 @@ abstract class FormatInterpolator { case (part, n) => copyPart(part, n) } - //q"{..$evals; ${fstring.toString}.format(..$ids)}" - locally { + //q"{..$evals; new StringOps(${fstring.toString}).format(..$ids)}" + val format = fstring.toString + if (ids.isEmpty && !format.contains("%")) Literal(Constant(format)) + else { + val scalaPackage = Select(Ident(nme.ROOTPKG), TermName("scala")) + val newStringOps = Select( + New(Select(Select(Select(scalaPackage, + TermName("collection")), TermName("immutable")), TypeName("StringOps"))), + termNames.CONSTRUCTOR + ) val expr = Apply( Select( - Literal(Constant(fstring.toString)), - newTermName("format")), + Apply( + newStringOps, + List(Literal(Constant(format)))), + TermName("format")), ids.toList ) val p = c.macroApplication.pos |