summaryrefslogtreecommitdiff
path: root/test/files/presentation/t8085
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-12-17 17:47:15 +0100
committerJason Zaugg <jzaugg@gmail.com>2013-12-18 14:29:17 +0100
commit7e85b595502974bebf2f2625c6bc3645f0d3ab27 (patch)
tree842325683b4d5458e1ae639718a75c3bc32d25f7 /test/files/presentation/t8085
parenta12dd9c3b6fb4a767eec8f6d3bf0a9a2266eff85 (diff)
downloadscala-7e85b595502974bebf2f2625c6bc3645f0d3ab27.tar.gz
scala-7e85b595502974bebf2f2625c6bc3645f0d3ab27.tar.bz2
scala-7e85b595502974bebf2f2625c6bc3645f0d3ab27.zip
SI-8085 Fix BrowserTraverser for package objects
A source file like: import foo.bar package object baz Is parsed into: package <empty> { import foo.bar package baz { object `package` } } A special case in Namers compensates by adjusting the owner of `baz` to be `<root>`, rather than `<empty>`. This wasn't being accounted for in `BrowserTraverser`, which underpins `-sourcepath`, and allows the presentation compiler to load top level symbols from sources outside those passes as the list of sources to compile. This bug did not appear in sources like: package p1 package object p2 { ... } ... because the parser does not wrap this in the `package <empty> {}` This goes some way to explaining why it has gone unnoticed for so long.
Diffstat (limited to 'test/files/presentation/t8085')
-rw-r--r--test/files/presentation/t8085/Test.scala1
-rw-r--r--test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala6
-rw-r--r--test/files/presentation/t8085/src/nodescala/package.scala7
3 files changed, 5 insertions, 9 deletions
diff --git a/test/files/presentation/t8085/Test.scala b/test/files/presentation/t8085/Test.scala
index 5d11009818..e46b7ab8c8 100644
--- a/test/files/presentation/t8085/Test.scala
+++ b/test/files/presentation/t8085/Test.scala
@@ -5,7 +5,6 @@ import scala.tools.nsc.interactive.Response
object Test extends InteractiveTest {
override def execute(): Unit = {
- // loadSourceAndWaitUntilTypechecked("package.scala") // <-- uncomment this line and the test succeed
val src = loadSourceAndWaitUntilTypechecked("NodeScalaSuite.scala")
checkErrors(src)
}
diff --git a/test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala b/test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala
index a8803ff86d..45e43c7afb 100644
--- a/test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala
+++ b/test/files/presentation/t8085/src/nodescala/NodeScalaSuite.scala
@@ -1,12 +1,10 @@
package nodescala
-import scala.concurrent.Future
-
class NodeScalaSuite {
- Future.always(517)
+ "".rich
// This is here only to prove that the presentation compiler is instantiated with the
// correct `sourcepath` value (if it wasn't, you would see a `not found: type Foo` in
// the test's output
println(new Foo())
-} \ No newline at end of file
+}
diff --git a/test/files/presentation/t8085/src/nodescala/package.scala b/test/files/presentation/t8085/src/nodescala/package.scala
index 6e9d4b729a..26fb9f08e4 100644
--- a/test/files/presentation/t8085/src/nodescala/package.scala
+++ b/test/files/presentation/t8085/src/nodescala/package.scala
@@ -1,8 +1,7 @@
-import scala.concurrent.Future // <-- if you move the import *inside* the package object, then it all works fine!!
+import scala.Some // <-- if you move the import *inside* the package object, then it all works fine!!
package object nodescala {
- implicit class FutureCompanionOps[T](val f: Future.type) extends AnyVal {
- def always[T](value: T): Future[T] = Promise[T].success(value).future
+ implicit class StringOps(val f: String) {
+ def rich = 0
}
}
-