summaryrefslogtreecommitdiff
path: root/src/repl/scala/tools/nsc/interpreter
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2015-08-27 10:43:38 +1000
committerJason Zaugg <jzaugg@gmail.com>2015-08-27 11:05:54 +1000
commit0b121d1864a3db1b34e5102e8258984ad0e8fd53 (patch)
tree59b43744a9899e8238b50e71eacb6aeddf1a990f /src/repl/scala/tools/nsc/interpreter
parent79171ce68e4cb6953faba31770ec77ccc23c76a9 (diff)
downloadscala-0b121d1864a3db1b34e5102e8258984ad0e8fd53.tar.gz
scala-0b121d1864a3db1b34e5102e8258984ad0e8fd53.tar.bz2
scala-0b121d1864a3db1b34e5102e8258984ad0e8fd53.zip
SI-9450 Fix triple quoted strings in REPL :power mode
Some extra synthetic code generated under this mode failed to escape input before adding it to a literal string. It used to get away with this most of the time by triple quoting the literal. This commit reuses Scala string escaping logic buried in `Constant` to do this properly. Actually, the proper approach would be to build the synthetic code with trees and quasiquotes, and avoid the mess of stringly-genererated code. I threw in some defensive hygiene for the reference to `Nil` while I was in the neighbourhood.
Diffstat (limited to 'src/repl/scala/tools/nsc/interpreter')
-rw-r--r--src/repl/scala/tools/nsc/interpreter/IMain.scala6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/repl/scala/tools/nsc/interpreter/IMain.scala b/src/repl/scala/tools/nsc/interpreter/IMain.scala
index 06ae179da9..3b54f5274e 100644
--- a/src/repl/scala/tools/nsc/interpreter/IMain.scala
+++ b/src/repl/scala/tools/nsc/interpreter/IMain.scala
@@ -133,7 +133,6 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set
}
catch AbstractOrMissingHandler()
}
- private def tquoted(s: String) = "\"\"\"" + s + "\"\"\""
private val logScope = scala.sys.props contains "scala.repl.scope"
private def scopelog(msg: String) = if (logScope) Console.err.println(msg)
@@ -905,7 +904,10 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set
def path = originalPath("$intp")
def envLines = {
if (!isReplPower) Nil // power mode only for now
- else List("def %s = %s".format("$line", tquoted(originalLine)), "def %s = Nil".format("$trees"))
+ else {
+ val escapedLine = Constant(originalLine).escapedStringValue
+ List(s"""def $$line = $escapedLine """, """def $trees = _root_.scala.Nil""")
+ }
}
def preamble = s"""
|$headerPreamble