summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@typesafe.com>2014-07-15 07:25:44 +0200
committerLukas Rytz <lukas.rytz@typesafe.com>2014-07-15 07:25:44 +0200
commit64df8bc3cb78a32cccc929d60b226b68ad67d624 (patch)
tree05489c8f182bede4b930aa7df6b69c81e2ff1156 /src
parent854de2dc0b209888d487f958e54cd05526cfd3f1 (diff)
parent146bdd7073e1184af36d3378595297f3cb92bccf (diff)
downloadscala-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')
-rw-r--r--src/compiler/scala/tools/reflect/FormatInterpolator.scala18
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