package scala.tools.nsc
package backend
package icode
import scala.collection._
trait Repository {
val global: Global
import global._
import icodes._
val loaded: mutable.Map[Symbol, IClass] = new mutable.HashMap
def available(sym: Symbol) = classes.contains(sym) || loaded.contains(sym)
def icode(sym: Symbol): Option[IClass] = (classes get sym) orElse (loaded get sym)
def icode(sym: Symbol, force: Boolean): IClass =
icode(sym) getOrElse {
log("loading " + sym)
load(sym)
assert(available(sym))
loaded(sym)
}
def load(sym: Symbol) {
try {
val (c1, c2) = icodeReader.readClass(sym)
assert(c1.symbol == sym || c2.symbol == sym,
"c1.symbol = %s, c2.symbol = %s, sym = %s".format(c1.symbol, c2.symbol, sym))
loaded += (c1.symbol -> c1)
loaded += (c2.symbol -> c2)
} catch {
case e: Throwable =>
log("Failed to load %s. [%s]".format(sym.fullName, e.getMessage))
if (settings.debug.value)
e.printStackTrace
}
}
}