summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsom-snytt <som.snytt@gmail.com>2016-04-20 07:48:57 -0700
committerLukas Rytz <lukas.rytz@typesafe.com>2016-04-20 16:48:57 +0200
commit684c314d882dcfd26558c9972cfd5acabc9f051f (patch)
tree3324c257002a34c0543eaa8d2fdbde406c04d896
parent956923acd32766c63cd0eab0788d1811481d7e30 (diff)
downloadscala-684c314d882dcfd26558c9972cfd5acabc9f051f.tar.gz
scala-684c314d882dcfd26558c9972cfd5acabc9f051f.tar.bz2
scala-684c314d882dcfd26558c9972cfd5acabc9f051f.zip
SI-9734 Narrow type when import REPL history (#5084)
Under `-Yrepl-class-based`, imports from historical `$read` instances must be singleton-typed so that path-dependent types remain so.
-rw-r--r--src/repl/scala/tools/nsc/interpreter/Imports.scala2
-rwxr-xr-xtest/files/run/repl-paste-6.check17
-rw-r--r--test/files/run/repl-paste-6.scala23
3 files changed, 41 insertions, 1 deletions
diff --git a/src/repl/scala/tools/nsc/interpreter/Imports.scala b/src/repl/scala/tools/nsc/interpreter/Imports.scala
index 5742c1d0d8..f04e2e808c 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/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
+ """
+}