Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

102 lines (74 sloc) 3.267 kb
/* NSC -- new Scala compiler
* Copyright 2005-2013 LAMP/EPFL
* @author Martin Odersky
*/
package scala.tools.nsc
import util.FreshNameCreator
import scala.reflect.internal.util.{ SourceFile, NoSourceFile }
import scala.collection.mutable
import scala.collection.mutable.{ LinkedHashSet, ListBuffer }
trait CompilationUnits { self: Global =>
/** An object representing a missing compilation unit.
*/
object NoCompilationUnit extends CompilationUnit(NoSourceFile) {
override lazy val isJava = false
override def exists = false
override def toString() = "NoCompilationUnit"
}
/** One unit of compilation that has been submitted to the compiler.
* It typically corresponds to a single file of source code. It includes
* error-reporting hooks. */
class CompilationUnit(val source: SourceFile) extends CompilationUnitContextApi {
/** the fresh name creator */
val fresh: FreshNameCreator = new FreshNameCreator.Default
def freshTermName(prefix: String): TermName = newTermName(fresh.newName(prefix))
def freshTypeName(prefix: String): TypeName = newTypeName(fresh.newName(prefix))
/** the content of the compilation unit in tree form */
var body: Tree = EmptyTree
def exists = source != NoSourceFile && source != null
/** Note: depends now contains toplevel classes.
* To get their sourcefiles, you need to dereference with .sourcefile
*/
val depends = mutable.HashSet[Symbol]()
/** so we can relink
*/
val defined = mutable.HashSet[Symbol]()
/** Synthetic definitions generated by namer, eliminated by typer.
*/
val synthetics = mutable.HashMap[Symbol, Tree]()
/** things to check at end of compilation unit */
val toCheck = new ListBuffer[() => Unit]
/** The features that were already checked for this unit */
var checkedFeatures = Set[Symbol]()
def position(pos: Int) = source.position(pos)
/** The position of a targeted type check
* If this is different from NoPosition, the type checking
* will stop once a tree that contains this position range
* is fully attributed.
*/
def targetPos: Position = NoPosition
/** The icode representation of classes in this compilation unit.
* It is empty up to phase 'icode'.
*/
val icode: LinkedHashSet[icodes.IClass] = new LinkedHashSet
def echo(pos: Position, msg: String) =
reporter.echo(pos, msg)
def error(pos: Position, msg: String) =
reporter.error(pos, msg)
def warning(pos: Position, msg: String) =
reporter.warning(pos, msg)
def deprecationWarning(pos: Position, msg: String) =
currentRun.deprecationWarnings0.warn(pos, msg)
def uncheckedWarning(pos: Position, msg: String) =
currentRun.uncheckedWarnings0.warn(pos, msg)
def inlinerWarning(pos: Position, msg: String) =
currentRun.inlinerWarnings.warn(pos, msg)
def incompleteInputError(pos: Position, msg:String) =
reporter.incompleteInputError(pos, msg)
def comment(pos: Position, msg: String) =
reporter.comment(pos, msg)
/** Is this about a .java source file? */
lazy val isJava = source.file.name.endsWith(".java")
override def toString() = source.toString()
}
}
Jump to Line
Something went wrong with that request. Please try again.