aboutsummaryrefslogblamecommitdiff
path: root/src/dotty/tools/dotc/transform/Splitter.scala
blob: 43a91a058c51e7ec0d5b52c91063116a56712274 (plain) (tree)





















                                                                                                           
                                                             



                                
package dotty.tools.dotc
package transform

import TreeTransforms._
import ast.Trees._
import core.Contexts._
import core.Types._

/** This transform makes usre every identifier and select node
 *  carries a symbol. To do this, certain qualifiers with a union type
 *  have to be "splitted" with a type test.
 *
 *  For now, only self references are treated.
 */
class Splitter extends TreeTransform {
  import ast.tpd._

  override def name: String = "splitter"

  /** Replace self referencing idents with ThisTypes. */
  override def transformIdent(tree: Ident)(implicit ctx: Context, info: TransformerInfo) = tree.tpe match {
    case ThisType(cls) =>
      ctx.debuglog(s"owner = ${ctx.owner}, context = ${ctx}")
      This(cls) withPos tree.pos
    case _ => tree
  }
}