summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@epfl.ch>2011-05-05 15:27:57 +0000
committerLukas Rytz <lukas.rytz@epfl.ch>2011-05-05 15:27:57 +0000
commitc937fd95700bef739f012e2a11b84bc848f200be (patch)
tree8180b14c907ecbd6d7d2dffb62b111b236972b04
parent1c0df8f97ec740eca56e82049f42d2ab2ec45d73 (diff)
downloadscala-c937fd95700bef739f012e2a11b84bc848f200be.tar.gz
scala-c937fd95700bef739f012e2a11b84bc848f200be.tar.bz2
scala-c937fd95700bef739f012e2a11b84bc848f200be.zip
close #4524 and close #4425, review by odersky.
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala7
-rw-r--r--test/files/neg/t4425.check4
-rw-r--r--test/files/neg/t4425.scala4
-rw-r--r--test/files/pos/t4524.scala9
4 files changed, 23 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala b/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala
index 5b4a5b3c44..8e286ca983 100644
--- a/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala
@@ -189,7 +189,12 @@ trait NamesDefaults { self: Analyzer =>
} else {
val module = companionModuleOf(baseFun.symbol.owner, context)
if (module == NoSymbol) None
- else Some(atPos(pos.focus)(gen.mkAttributedRef(pre, module)))
+ else {
+ val ref = atPos(pos.focus)(gen.mkAttributedRef(pre, module))
+ if (module.isStable && pre.isStable) // fixes #4524. the type checker does the same for
+ ref.setType(singleType(pre, module)) // typedSelect, it calls "stabilize" on the result.
+ Some(ref)
+ }
}
}
diff --git a/test/files/neg/t4425.check b/test/files/neg/t4425.check
new file mode 100644
index 0000000000..4ff4b1eec0
--- /dev/null
+++ b/test/files/neg/t4425.check
@@ -0,0 +1,4 @@
+t4425.scala:3: error: erroneous or inaccessible type
+ 42 match { case _ X _ => () }
+ ^
+one error found
diff --git a/test/files/neg/t4425.scala b/test/files/neg/t4425.scala
new file mode 100644
index 0000000000..d8cc6922f7
--- /dev/null
+++ b/test/files/neg/t4425.scala
@@ -0,0 +1,4 @@
+object Foo {
+ object X { def unapply(x : Int)(y : Option[Int] = None) = None }
+ 42 match { case _ X _ => () }
+}
diff --git a/test/files/pos/t4524.scala b/test/files/pos/t4524.scala
new file mode 100644
index 0000000000..4721a7d067
--- /dev/null
+++ b/test/files/pos/t4524.scala
@@ -0,0 +1,9 @@
+object test {
+ import A._
+ class A(b: B = new A.B())
+ object A {
+ class B
+ new A()
+ }
+}
+