diff options
author | Martin Odersky <odersky@gmail.com> | 2015-04-22 14:52:34 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-04-22 17:19:35 +0200 |
commit | 79958518b4f95b3dd8e34d543757034d181e4514 (patch) | |
tree | 1633ef8d9764fe9a1233c661288ecf5ccf1c6620 /src/dotty/tools/dotc/transform/FirstTransform.scala | |
parent | 1d4e4a6d4784edfe1d2490de7ceff9d3c82d4d27 (diff) | |
download | dotty-79958518b4f95b3dd8e34d543757034d181e4514.tar.gz dotty-79958518b4f95b3dd8e34d543757034d181e4514.tar.bz2 dotty-79958518b4f95b3dd8e34d543757034d181e4514.zip |
Roll some of FirstTransform functionaility into PostTyper
Everything that needs to be done before pickling moves to PostTyper.
The idea is that we want to make Pickler come before FirstTransform.
Diffstat (limited to 'src/dotty/tools/dotc/transform/FirstTransform.scala')
-rw-r--r-- | src/dotty/tools/dotc/transform/FirstTransform.scala | 44 |
1 files changed, 2 insertions, 42 deletions
diff --git a/src/dotty/tools/dotc/transform/FirstTransform.scala b/src/dotty/tools/dotc/transform/FirstTransform.scala index da0ec68d3..aecc1b86f 100644 --- a/src/dotty/tools/dotc/transform/FirstTransform.scala +++ b/src/dotty/tools/dotc/transform/FirstTransform.scala @@ -24,10 +24,7 @@ import StdNames._ /** The first tree transform * - ensures there are companion objects for all classes except module classes - * - eliminates some kinds of trees: Imports, NamedArgs, all TypTrees other than TypeTree - * - converts Select/Ident/SelectFromTypeTree nodes that refer to types to TypeTrees. - * - inserts `.package` for selections of package object members - * - checks the bounds of AppliedTypeTrees + * - eliminates some kinds of trees: Imports, NamedArgs * - stubs out native methods */ class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer with AnnotationTransformer { thisTransformer => @@ -111,47 +108,10 @@ class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer wi override def transformStats(trees: List[Tree])(implicit ctx: Context, info: TransformerInfo): List[Tree] = ast.Trees.flatten(reorderAndComplete(trees)(ctx.withPhase(thisTransformer.next))) - private def normalizeType(tree: Tree)(implicit ctx: Context) = - if (tree.isType) TypeTree(tree.tpe).withPos(tree.pos) else tree - - override def transformIdent(tree: Ident)(implicit ctx: Context, info: TransformerInfo) = tree.tpe match { - case tpe: ThisType => - /* - A this reference hide in a self ident, and be subsequently missed - when deciding on whether outer accessors are needed and computing outer paths. - We do this normalization directly after Typer, because during typer the - ident should rest available for hyperlinking.*/ - This(tpe.cls).withPos(tree.pos) - case _ => normalizeType(tree) - } - - - - override def transformSelect(tree: Select)(implicit ctx: Context, info: TransformerInfo) = - normalizeType { - val qual = tree.qualifier - qual.symbol.moduleClass.denot match { - case pkg: PackageClassDenotation if !tree.symbol.maybeOwner.is(Package) => - cpy.Select(tree)(qual select pkg.packageObj.symbol, tree.name) - case _ => - tree - } - } - - override def transformSelectFromTypeTree(tree: SelectFromTypeTree)(implicit ctx: Context, info: TransformerInfo) = - normalizeType(tree) - override def transformOther(tree: Tree)(implicit ctx: Context, info: TransformerInfo) = tree match { case tree: Import => EmptyTree case tree: NamedArg => transform(tree.arg) - case AppliedTypeTree(tycon, args) => - val tparams = tycon.tpe.typeSymbol.typeParams - val bounds = tparams.map(tparam => - tparam.info.asSeenFrom(tycon.tpe.normalizedPrefix, tparam.owner.owner).bounds) - Checking.checkBounds(args, bounds, _.substDealias(tparams, _)) - normalizeType(tree) - case tree => - normalizeType(tree) + case tree => tree } // invariants: all modules have companion objects |