From ad62d9f8b00d328c099268366ae05c5122915fa6 Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Wed, 7 Oct 2009 13:55:07 +0000 Subject: More revealing error message for the crasher in... More revealing error message for the crasher in #2433. --- .../scala/tools/nsc/symtab/classfile/ClassfileParser.scala | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala') diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala index c4283652ec..3e3b4961e0 100644 --- a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala +++ b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala @@ -40,7 +40,7 @@ abstract class ClassfileParser { protected var isScala: Boolean = _ // does class file describe a scala class? protected var isScalaRaw: Boolean = _ // this class file is a scala class with no pickled info protected var hasMeta: Boolean = _ // does class file contain jaco meta attribute?s - protected var busy: Boolean = false // lock to detect recursive reads + protected var busy: Option[Symbol] = None // lock to detect recursive reads private var externalName: Name = _ // JVM name of the current class protected var classTParams = Map[Name,Symbol]() @@ -65,8 +65,13 @@ abstract class ClassfileParser { else e.getClass.toString } + ")") } - assert(!busy, "internal error: illegal class file dependency") - busy = true + assert(!busy.isDefined, { + val (s1, s2) = (busy.get, root) + if (s1 eq s2) "unsatisfiable cyclic dependency in '%s'".format(s1) + else "illegal class file dependency between '%s' and '%s'".format(s1, s2) + }) + + busy = Some(root) /*root match { case cs: ClassSymbol => cs.classFile = file @@ -95,7 +100,7 @@ abstract class ClassfileParser { case e: RuntimeException => handleError(e) } } finally { - busy = false + busy = None } protected def statics: Symbol = staticModule.moduleClass -- cgit v1.2.3