icodes.scala

来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 92 行

SCALA
92
字号
/* NSC -- new scala compiler * Copyright 2005-2007 LAMP/EPFL * @author  Martin Odersky */// $Id: ICodes.scala 13313 2007-11-20 16:29:15Z dragos $package scala.tools.nsc.backend.icodeimport java.io.PrintWriterimport scala.collection.mutable.HashMapimport scala.tools.nsc.symtab._import analysis.{Liveness, ReachingDefinitions}import scala.tools.nsc.symtab.classfile.ICodeReader/** Glue together ICode parts. * *  @author Iulian Dragos */abstract class ICodes extends AnyRef                                 with Members                                 with BasicBlocks                                                 with Opcodes                                 with TypeStacks                                  with TypeKinds                                 with ExceptionHandlers                                 with Primitives                                 with Linearizers                                 with Printers                                 with Repository{  val global: Global  /** The ICode representation of classes */  var classes: HashMap[global.Symbol, IClass] = new HashMap()  /** The ICode linearizer. */  val linearizer: Linearizer =     if (global.settings.Xlinearizer.value == "rpo")      new ReversePostOrderLinearizer()    else if (global.settings.Xlinearizer.value == "dfs")      new DepthFirstLinerizer()    else if (global.settings.Xlinearizer.value == "normal")      new NormalLinearizer();    else if (global.settings.Xlinearizer.value == "dump")      new DumpLinearizer()    else      global.abort("Unknown linearizer: " + global.settings.Xlinearizer.value)  /** Print all classes and basic blocks. Used for debugging. */  def dump {    val printer = new TextPrinter(new PrintWriter(Console.out, true),                                  new DumpLinearizer)    classes.values foreach { c => printer.printClass(c) }  }  object liveness extends Liveness {    val global: ICodes.this.global.type = ICodes.this.global  }  object reachingDefinitions extends ReachingDefinitions {    val global: ICodes.this.global.type = ICodes.this.global  }  lazy val AnyRefReference: TypeKind = REFERENCE(global.definitions.ObjectClass)  import global.settings  if (settings.XO.value) {    settings.inline.value = true    settings.Xcloselim.value = true    settings.Xdce.value = true  }  object icodeReader extends ICodeReader {    lazy val global: ICodes.this.global.type = ICodes.this.global  }    /** A phase which works on icode. */  abstract class ICodePhase(prev: Phase) extends global.GlobalPhase(prev) {    override def erasedTypes = true    override def apply(unit: global.CompilationUnit) {      unit.icode foreach { c => apply(c) }    }        def apply(cls: global.icodes.IClass): Unit  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?