/* NSC -- new Scala compiler * Copyright 2005-2007 LAMP/EPFL * @author Martin Odersky */ // $Id$ package scala.tools.nsc /** An nsc sub-component. * * @author Martin Odersky */ abstract class SubComponent { /** The global environment; overridden by instantiation in Global. */ val global: Global /** The name of the phase */ val phaseName: String /** New flags defined by the phase which are not valid before */ def phaseNewFlags: Long = 0 /** The phase factory */ def newPhase(prev: Phase): Phase /** The phase defined by this subcomponent. Can be called only after phase is installed by newPhase. */ // lazy val ownPhase: Phase = global.currentRun.phaseNamed(phaseName) /** A standard phase template */ abstract class StdPhase(prev: Phase) extends global.GlobalPhase(prev) { def name = phaseName override def newFlags = phaseNewFlags } }