diff options
author | Martin Odersky <odersky@gmail.com> | 2014-12-13 17:55:55 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-12-13 18:02:41 +0100 |
commit | 9bc3bb2d1fe3348bc7a92e5cb38a7d9f77166a71 (patch) | |
tree | 016ef664eed45de398c514f17bb654b85e098d4c /src | |
parent | f3d887f079efbe7dbb53abd22bd212eee8e1c67a (diff) | |
download | dotty-9bc3bb2d1fe3348bc7a92e5cb38a7d9f77166a71.tar.gz dotty-9bc3bb2d1fe3348bc7a92e5cb38a7d9f77166a71.tar.bz2 dotty-9bc3bb2d1fe3348bc7a92e5cb38a7d9f77166a71.zip |
Fix #239 - handling of package objects
References to `.package` are now also inserted if the
accessed member comes from a class inherited by a package
object.
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/transform/FirstTransform.scala | 2 | ||||
-rw-r--r-- | src/dotty/tools/dotc/typer/TypeAssigner.scala | 16 |
2 files changed, 9 insertions, 9 deletions
diff --git a/src/dotty/tools/dotc/transform/FirstTransform.scala b/src/dotty/tools/dotc/transform/FirstTransform.scala index 42ace148a..3329ac304 100644 --- a/src/dotty/tools/dotc/transform/FirstTransform.scala +++ b/src/dotty/tools/dotc/transform/FirstTransform.scala @@ -124,7 +124,7 @@ class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer wi normalizeType { val qual = tree.qualifier qual.symbol.moduleClass.denot match { - case pkg: PackageClassDenotation if tree.symbol.maybeOwner.isPackageObject => + case pkg: PackageClassDenotation if !tree.symbol.maybeOwner.is(Package) => cpy.Select(tree)(qual select pkg.packageObj.symbol, tree.name) case _ => tree diff --git a/src/dotty/tools/dotc/typer/TypeAssigner.scala b/src/dotty/tools/dotc/typer/TypeAssigner.scala index 0f1b81be8..1caa070cc 100644 --- a/src/dotty/tools/dotc/typer/TypeAssigner.scala +++ b/src/dotty/tools/dotc/typer/TypeAssigner.scala @@ -114,15 +114,15 @@ trait TypeAssigner { def ensureAccessible(tpe: Type, superAccess: Boolean, pos: Position)(implicit ctx: Context): Type = { def tryInsertPackageObj(tpe: NamedType, d: Denotation): Type = { - def tryInsert: Type = - if (!(d.symbol.maybeOwner is Package)) { - val symOwner = d.alternatives.head.symbol.owner - if (symOwner.isPackageObject) tpe.derivedSelect(symOwner.thisType) - else tpe - } else tpe + def tryInsert(pkgClass: SymDenotation): Type = pkgClass match { + case pkgCls: PackageClassDenotation if !(d.symbol.maybeOwner is Package) => + tpe.derivedSelect(pkgCls.packageObj.valRef) + case _ => + tpe + } tpe.prefix match { - case pre: ThisType if pre.cls is Package => tryInsert - case pre: TermRef if pre.symbol is Package => tryInsert + case pre: ThisType if pre.cls is Package => tryInsert(pre.cls) + case pre: TermRef if pre.symbol is Package => tryInsert(pre.symbol.moduleClass) case _ => tpe } } |