From 4bc993e0baa841ee1ca0f058b8600179f8b8a00f Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Sat, 2 Jun 2012 19:03:57 -0400 Subject: [PATCH] Revert "remove unneeded unlinking in compiler interface" Unlinking is actually needed. This reverts commit 1581d1b7e1a1aa73a8aa953bff3386336fa3989c. --- compile/interface/Analyzer.scala | 1 + compile/interface/CompilerInterface.scala | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/compile/interface/Analyzer.scala b/compile/interface/Analyzer.scala index 7cfea03bd..e20dd46cc 100644 --- a/compile/interface/Analyzer.scala +++ b/compile/interface/Analyzer.scala @@ -44,6 +44,7 @@ final class Analyzer(val global: CallbackGlobal) extends Compat classFile(on) match { case Some((f,className,inOutDir)) => + if(inOutDir && on.isJavaDefined) registerTopLevelSym(on) f match { case ze: ZipArchive#Entry => for(zip <- ze.underlyingSource; zipFile <- Option(zip.file) ) binaryDependency(zipFile, className) diff --git a/compile/interface/CompilerInterface.scala b/compile/interface/CompilerInterface.scala index bc0a3175a..41a8e5e4e 100644 --- a/compile/interface/CompilerInterface.scala +++ b/compile/interface/CompilerInterface.scala @@ -172,6 +172,7 @@ private final class CachedCompiler0(args: Array[String], initialLog: WeakLog) ex def clear() { callback0 = null + atPhase(currentRun.namerPhase) { forgetAll() } superDropRun() reporter = null } @@ -188,6 +189,21 @@ private final class CachedCompiler0(args: Array[String], initialLog: WeakLog) ex def findOnClassPath(name: String): Option[AbstractFile] = classPath.findClass(name).flatMap(_.binary.asInstanceOf[Option[AbstractFile]]) + override def registerTopLevelSym(sym: Symbol) = toForget += sym + + final def unlinkAll(m: Symbol) { + val scope = m.owner.info.decls + scope unlink m + scope unlink m.companionSymbol + } + + def forgetAll() + { + for(sym <- toForget) + unlinkAll(sym) + toForget = mutable.Set() + } + // fine-control over external changes is unimplemented: // must drop whole CachedCompiler when !changes.isEmpty def reload(changes: DependencyChanges)