diff options
author | som-snytt <som.snytt@gmail.com> | 2016-04-20 07:48:57 -0700 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@typesafe.com> | 2016-04-20 16:48:57 +0200 |
commit | 684c314d882dcfd26558c9972cfd5acabc9f051f (patch) | |
tree | 3324c257002a34c0543eaa8d2fdbde406c04d896 | |
parent | 956923acd32766c63cd0eab0788d1811481d7e30 (diff) | |
download | scala-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.scala | 2 | ||||
-rwxr-xr-x | test/files/run/repl-paste-6.check | 17 | ||||
-rw-r--r-- | test/files/run/repl-paste-6.scala | 23 |
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 + """ +} |