diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2015-08-27 10:43:38 +1000 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2015-08-27 11:05:54 +1000 |
commit | 0b121d1864a3db1b34e5102e8258984ad0e8fd53 (patch) | |
tree | 59b43744a9899e8238b50e71eacb6aeddf1a990f /src | |
parent | 79171ce68e4cb6953faba31770ec77ccc23c76a9 (diff) | |
download | scala-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')
-rw-r--r-- | src/repl/scala/tools/nsc/interpreter/IMain.scala | 6 |
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 |