aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/transform/FirstTransform.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-04-22 14:52:34 +0200
committerMartin Odersky <odersky@gmail.com>2015-04-22 17:19:35 +0200
commit79958518b4f95b3dd8e34d543757034d181e4514 (patch)
tree1633ef8d9764fe9a1233c661288ecf5ccf1c6620 /src/dotty/tools/dotc/transform/FirstTransform.scala
parent1d4e4a6d4784edfe1d2490de7ceff9d3c82d4d27 (diff)
downloaddotty-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.scala44
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