From 09dbf3f148b0dc04e10dd50ed2aa626c26afaeec Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Mon, 25 May 2015 22:15:43 +1000 Subject: SI-9326 Fix regression with existentials in parent types The typechecker rewrites `p.foo` to `p..foo` if `foo` must come from a package object. This logic was overhauled in 51745c06f3, but this caused a regression. I reverted to the predecessor of that commit to see how things worked before. The lookup of the name `X` bound to the existential quantifier, but incorrectly included the prefix `test.type` in the result of the lookup. However, the subsequent call to `isInPackageObject` (from `makeAccessible`) returned false, so we didn't try to rewrite `X` to `test..X`. This commit makes a minimal fix that makes `isInPackageObject` return false for existentials. --- src/compiler/scala/tools/nsc/typechecker/Contexts.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala index d5a3fba76f..25c800e4d0 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala @@ -956,7 +956,7 @@ trait Contexts { self: Analyzer => * it selected from a prefix with `pkg` as its type symbol? */ def isInPackageObject(sym: Symbol, pkg: Symbol): Boolean = - pkg.isPackage && sym.owner != pkg + pkg.isPackage && sym.owner != pkg && !sym.isExistentiallyBound def isNameInScope(name: Name) = lookupSymbol(name, _ => true).isSuccess -- cgit v1.2.3