diff options
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | src/repl/scala/tools/nsc/interpreter/Imports.scala | 2 | ||||
-rw-r--r-- | src/repl/scala/tools/nsc/interpreter/ReplStrings.scala | 16 | ||||
-rw-r--r-- | test/files/run/repl-no-uescape.check | 5 | ||||
-rw-r--r-- | test/files/run/repl-no-uescape.scala | 31 | ||||
-rwxr-xr-x | test/files/run/repl-paste-6.check | 17 | ||||
-rw-r--r-- | test/files/run/repl-paste-6.scala | 23 |
7 files changed, 90 insertions, 6 deletions
@@ -131,7 +131,7 @@ Here, `<milestone>` is the milestone targeted by the PR (e.g., 2.11.6), and `<sh ## IDE Setup ### Eclipse -See `src/eclipse/README.md`. +See [src/eclipse/README.md](src/eclipse/README.md). ### IntelliJ 15 See [src/intellij/README.md](src/intellij/README.md). diff --git a/src/repl/scala/tools/nsc/interpreter/Imports.scala b/src/repl/scala/tools/nsc/interpreter/Imports.scala index 6a75432ac6..fdbd93d862 100644 --- a/src/repl/scala/tools/nsc/interpreter/Imports.scala +++ b/src/repl/scala/tools/nsc/interpreter/Imports.scala @@ -183,7 +183,7 @@ trait Imports { case _ => val valName = req.lineRep.packageName + req.lineRep.readName if (!tempValLines.contains(req.lineRep.lineId)) { - code.append(s"val $valName = $objName\n") + code.append(s"val $valName: ${objName}.type = $objName\n") tempValLines += req.lineRep.lineId } code.append(s"import $valName${req.accessPath}.`$imv`;\n") diff --git a/src/repl/scala/tools/nsc/interpreter/ReplStrings.scala b/src/repl/scala/tools/nsc/interpreter/ReplStrings.scala index 1664546cab..bf7508cb4e 100644 --- a/src/repl/scala/tools/nsc/interpreter/ReplStrings.scala +++ b/src/repl/scala/tools/nsc/interpreter/ReplStrings.scala @@ -11,13 +11,21 @@ import scala.reflect.internal.Chars trait ReplStrings { /** Convert a string into code that can recreate the string. * This requires replacing all special characters by escape - * codes. It does not add the surrounding " marks. */ + * codes. It does not add the surrounding " marks. + */ def string2code(str: String): String = { val res = new StringBuilder for (c <- str) c match { - case '"' | '\'' | '\\' => res += '\\' ; res += c - case _ if c.isControl => res ++= Chars.char2uescape(c) - case _ => res += c + case '"' => res ++= """\"""" + case '\'' => res ++= """\'""" + case '\\' => res ++= """\\""" + case '\b' => res ++= """\b""" + case '\t' => res ++= """\t""" + case '\n' => res ++= """\n""" + case '\f' => res ++= """\f""" + case '\r' => res ++= """\r""" + case _ if c.isControl => res ++= Chars.char2uescape(c) + case _ => res += c } res.toString } diff --git a/test/files/run/repl-no-uescape.check b/test/files/run/repl-no-uescape.check new file mode 100644 index 0000000000..01eeafaa70 --- /dev/null +++ b/test/files/run/repl-no-uescape.check @@ -0,0 +1,5 @@ + +scala> object A +defined object A + +scala> :quit diff --git a/test/files/run/repl-no-uescape.scala b/test/files/run/repl-no-uescape.scala new file mode 100644 index 0000000000..1865109ebf --- /dev/null +++ b/test/files/run/repl-no-uescape.scala @@ -0,0 +1,31 @@ +import scala.tools.partest.ReplTest +import scala.tools.nsc.Settings + +/* +scala> object A +<console>:10: error: invalid escape character ++ "defined object " + "A" + "\u000A" + +Under -Dscala.color=true control chars are common + $eval.this.$print = { + $line2.$read.$iw.$iw; + "\033[1m\033[34mres1\033[0m: \033[1m\033[32mInt\033[0m = ".+(scala.runtime.ScalaRunTime.replStringOf($line2.$read.$iw.$iw.res1, 1000)) + }; + +$ skala -Dscala.color=true -Xno-uescape +Welcome to Scala 2.11.9-20160323-163638-1fcfdd8c8b (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_60). +Type in expressions for evaluation. Or try :help. + +scala> 42 +<console>:10: error: invalid escape character + + "\u001B[1m\u001B[34mres0\u001B[0m: \u001B[1m\u001B[32mInt\u001B[0m = " + scala.runtime.ScalaRunTime.replStringOf(res0, 1000) + */ +object Test extends ReplTest { + override def transformSettings(settings: Settings): Settings = { + settings.nouescape.value = true + settings + } + def code = """ +object A + """ +} diff --git a/test/files/run/repl-paste-6.check b/test/files/run/repl-paste-6.check new file mode 100755 index 0000000000..efcea9274f --- /dev/null +++ b/test/files/run/repl-paste-6.check @@ -0,0 +1,17 @@ + +scala> :paste < EOF +// Entering paste mode (EOF to finish) + +case class C(i: Int) +val c = C(42) +EOF + +// Exiting paste mode, now interpreting. + +defined class C +c: C = C(42) + +scala> val d: C = c // shew +d: C = C(42) + +scala> :quit diff --git a/test/files/run/repl-paste-6.scala b/test/files/run/repl-paste-6.scala new file mode 100644 index 0000000000..8040d24f8a --- /dev/null +++ b/test/files/run/repl-paste-6.scala @@ -0,0 +1,23 @@ + +import scala.tools.partest.ReplTest +import scala.tools.nsc.Settings + + +/* + * Add // show to witness: + * val $line3$read: $line3.$read.INSTANCE.type = $line3.$read.INSTANCE; + */ +object Test extends ReplTest { + override def transformSettings(settings: Settings): Settings = { + settings.Yreplclassbased.value = true + settings + } + def code = + """ +:paste < EOF +case class C(i: Int) +val c = C(42) +EOF +val d: C = c // shew + """ +} |