diff options
author | Martin Odersky <odersky@gmail.com> | 2014-12-17 17:13:30 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2014-12-17 17:42:01 +0100 |
commit | 6eaf815923e194cd4d0da8faa0f132dbf8de4608 (patch) | |
tree | f3a76f8bb60353cac118c40d029a8ac72d1a5615 /src/dotty/tools/dotc/core/TypeOps.scala | |
parent | 48966b403a638201e7d174f96176351385f85ac7 (diff) | |
download | dotty-6eaf815923e194cd4d0da8faa0f132dbf8de4608.tar.gz dotty-6eaf815923e194cd4d0da8faa0f132dbf8de4608.tar.bz2 dotty-6eaf815923e194cd4d0da8faa0f132dbf8de4608.zip |
Refactored common behavior from TypeAssigner and TypeErasure
Diffstat (limited to 'src/dotty/tools/dotc/core/TypeOps.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/TypeOps.scala | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/TypeOps.scala b/src/dotty/tools/dotc/core/TypeOps.scala index 8190b8cb6..4716d89b7 100644 --- a/src/dotty/tools/dotc/core/TypeOps.scala +++ b/src/dotty/tools/dotc/core/TypeOps.scala @@ -2,7 +2,7 @@ package dotty.tools.dotc package core import Contexts._, Types._, Symbols._, Names._, Flags._, Scopes._ -import SymDenotations._ +import SymDenotations._, Denotations.Denotation import config.Printers._ import Decorators._ import StdNames._ @@ -224,6 +224,20 @@ trait TypeOps { this: Context => cls.enter(sym, decls) } + def makePackageObjPrefixExplicit(tpe: NamedType, d: Denotation): Type = { + 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(pre.cls) + case pre: TermRef if pre.symbol is Package => tryInsert(pre.symbol.moduleClass) + case _ => tpe + } + } + /** If we have member definitions * * type argSym v= from |