symboltable.scala
来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 120 行
SCALA
120 行
/* NSC -- new scala compiler * Copyright 2005-2008 LAMP/EPFL * @author Martin Odersky */// $Id: SymbolTable.scala 14347 2008-03-10 12:00:03Z odersky $package scala.tools.nsc.symtabimport nsc.ast.Treesimport util._abstract class SymbolTable extends Names with Symbols with Types with Scopes with Definitions with Constants with InfoTransformers with StdNames with AnnotationInfos with AnnotationCheckers with Trees{ def settings: Settings def rootLoader: LazyType def log(msg: AnyRef) /** Are we compiling for the J2ME CLDC platform ? */ def forCLDC: Boolean /** Are we compiling for Java SE ? */ def forJVM: Boolean /** Are we compiling for .NET ? */ def forMSIL: Boolean /** are we in a lampion presentation compiler? cannot get inIDE flag from global */ def inIDE : Boolean = false protected def trackTypeIDE(sym : Symbol) : Boolean = true def compare(sym : Symbol, name : Name) = sym.name == name def verifyAndPrioritize[T](g : Symbol => Symbol)(pt : Type)(f : => T) = f def trackSetInfo[T <: Symbol](sym : T)(info : Type) : T = { sym.setInfo(info); sym } def notifyImport(what : Name, container : Type, from : Name, to : Name) : Unit = {} def sanitize(tree : Tree) : Tree = tree def attachSource(symbol : ClassSymbol, file : io.AbstractFile) : Unit = { assert(symbol != null) } def prepareReset(symbol : Symbol, tpe : LazyType) : Unit = { assert(symbol != null) } /** A period is an ordinal number for a phase in a run. * Phases in later runs have higher periods than phases in earlier runs. * Later phases have higher periods than earlier phases in the same run. */ type Period = Int final val NoPeriod = 0 /** An ordinal number for compiler runs. First run has number 1. */ type RunId = Int final val NoRunId = 0 private var ph: Phase = NoPhase private var per = NoPeriod final def phase: Phase = ph final def phase_=(p: Phase) { //System.out.println("setting phase to " + p) assert((p ne null) && p != NoPhase) ph = p per = (currentRunId << 8) + p.id } /** The current compiler run identifier. */ def currentRunId: RunId /** The run identifier of the given period */ final def runId(period: Period): RunId = period >> 8 /** The phase identifier of the given period */ final def phaseId(period: Period): Phase#Id = period & 0xFF /** The period at the start of run that includes `period' */ final def startRun(period: Period): Period = period & 0xFFFFFF00 /** The current period */ final def currentPeriod: Period = { //assert(per == (currentRunId << 8) + phase.id) per } /** The phase associated with given period */ final def phaseOf(period: Period): Phase = phaseWithId(phaseId(period)) final def period(rid: RunId, pid: Phase#Id): Period = (currentRunId << 8) + pid /** Perform given operation at given phase */ final def atPhase[T](ph: Phase)(op: => T): T = { val current = phase phase = ph val result = op phase = current result } /** The set of all installed infotransformers */ var infoTransformers = new InfoTransformer { val pid = NoPhase.id val changesBaseClasses = true def transform(sym: Symbol, tpe: Type): Type = tpe } /** The phase which has given index as identifier */ val phaseWithId: Array[Phase]}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?