summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/matching/ParallelMatching.scala70
-rw-r--r--test/files/pos/unapplyVal.scala19
-rw-r--r--test/files/run/patmatnew.scala10
3 files changed, 69 insertions, 30 deletions
diff --git a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
index 29a575fb04..5af7ca3391 100644
--- a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
+++ b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
@@ -809,7 +809,7 @@ trait ParallelMatching {
typed{ Ident(uacall.symbol) }
else
emptynessCheck(uacall.symbol)
- typed { squeezedBlock(List(uacall), makeIf(cond,squeezedBlock(vdefs,succ),fail)) }
+ typed { squeezedBlock(List(handleOuter(uacall)), makeIf(cond,squeezedBlock(vdefs,succ),fail)) }
}
}
@@ -860,37 +860,47 @@ object Rep {
case typat @ Typed(p:UnApply,tpt) =>
pats = (if (tpt.tpe <:< temp(j).tpe) p else typat)::pats
- case o @ Ident(n) =>
- if (n != nme.WILDCARD) {
- /*
- Console.println("/'''''''''''' 1"+o.tpe)
- Console.println("/'''''''''''' 2"+o.symbol)
- Console.println("/'''''''''''' 3"+o.symbol.tpe)
- Console.println("/'''''''''''' 4"+o.symbol.tpe.prefix)
- Console.println("/'''''''''''' 5"+o.symbol.tpe.prefix.isStable)
-
- Console.println("/'''''''''''' 6"+(o.symbol.tpe.typeSymbol hasFlag (Flags.CASE)))
- Console.println("/'''''''''''' 7"+(o.symbol.tpe.termSymbol.hasFlag (Flags.CASE)))
- */
- val stpe =
- if (o.tpe.termSymbol.isModule) {
- singleType(o.tpe.prefix, o.symbol)
- } else {
- singleType(NoPrefix, o.symbol) // equals-check
- }
- val p = Ident(nme.WILDCARD) setType stpe
- val q = Typed(p, TypeTree(stpe)) setType stpe
- pats = q::pats
- } else
- pats = o::pats
+ case o @ Ident(n) if n != nme.WILDCARD =>
+ /*
+ Console.println("/'''''''''''' 1"+o.tpe)
+ Console.println("/'''''''''''' 2"+o.symbol)
+ Console.println("/'''''''''''' 3"+o.symbol.tpe)
+ Console.println("/'''''''''''' 4"+o.symbol.tpe.prefix)
+ Console.println("/'''''''''''' 5"+o.symbol.tpe.prefix.isStable)
+
+ Console.println("/'''''''''''' 6"+(o.symbol.tpe.typeSymbol hasFlag (Flags.CASE)))
+ Console.println("/'''''''''''' 7"+(o.symbol.tpe.termSymbol.hasFlag (Flags.CASE)))
+ */
+ val stpe =
+ if (!o.symbol.isValue) {
+ singleType(o.tpe.prefix, o.symbol)
+ } else {
+ singleType(NoPrefix, o.symbol) // equals-check
+ }
+ val p = Ident(nme.WILDCARD) setType stpe
+ val q = Typed(p, TypeTree(stpe)) setType stpe
+ pats = q::pats
+
+ case o @ Ident(nme.WILDCARD) =>
+ pats = o::pats
case o @ Select(_,_) =>
- val stpe =
- if (o.tpe.termSymbol.isModule) {
- singleType(o.tpe.prefix, o.symbol)
- } else {
- singleType(NoPrefix, o.symbol) // equals-check
- }
+ /*
+ Console.println("!/'''''''''''' 1"+o.tpe)
+ Console.println("!/'''''''''''' 2"+o.symbol)
+ Console.println("!/'''''''''''' 3"+o.symbol.tpe)
+ Console.println("!'''''''''''' 4"+o.symbol.tpe.prefix)
+ Console.println("!/'''''''''''' 5"+o.symbol.tpe.prefix.isStable)
+
+ Console.println("!/'''''''''''' 6"+(o.symbol.tpe.typeSymbol hasFlag (Flags.CASE)))
+ Console.println("!/'''''''''''' 7"+(o.symbol.tpe.termSymbol.hasFlag (Flags.CASE)))
+ */
+ val stpe =
+ if (!o.symbol.isValue) {
+ singleType(o.tpe.prefix, o.symbol)
+ } else {
+ singleType(NoPrefix, o.symbol) // equals-check
+ }
val p = Ident(nme.WILDCARD) setType stpe
val q = Typed(p, TypeTree(stpe)) setType stpe
pats = q::pats
diff --git a/test/files/pos/unapplyVal.scala b/test/files/pos/unapplyVal.scala
index 3816152f20..5da8b14b69 100644
--- a/test/files/pos/unapplyVal.scala
+++ b/test/files/pos/unapplyVal.scala
@@ -16,3 +16,22 @@ class Buffer {
}
}
}
+
+
+object unapplyJoins extends Application { // bug #1257
+
+ class Sync {
+ def apply(): Int = 42
+ def unapply(scrut: Any): Boolean = false
+ }
+
+ class Buffer {
+ object Get extends Sync
+
+ val jp: PartialFunction[Any, Any] = {
+ case Get() =>
+ }
+ }
+
+ println((new Buffer).jp.isDefinedAt(42))
+}
diff --git a/test/files/run/patmatnew.scala b/test/files/run/patmatnew.scala
index cce5bacc46..d9e36a35fe 100644
--- a/test/files/run/patmatnew.scala
+++ b/test/files/run/patmatnew.scala
@@ -199,6 +199,16 @@ object Test extends TestConsoleMain {
}
}
+ object Foo1258 {
+ case object baz
+ def foo(bar : AnyRef) = {
+ val Baz = baz
+ bar match {
+ case Baz => ()
+ }
+ }
+ }
+
object Foo1 {
class Bar1(val x : String)
def p(b : Bar1) = Console.println(b.x)