diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala | 24 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/interpreter/Phased.scala | 5 |
2 files changed, 20 insertions, 9 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala index 2562d37450..7c4deb78f4 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala @@ -291,7 +291,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { private def addEnclosingMethodAttribute(jclass: JClass, clazz: Symbol) { val sym = clazz.originalEnclosingMethod if (sym.isMethod) { - log("enclosing method for %s is %s (%s)".format(clazz, sym, sym.enclClass)) + log("enclosing method for %s is %s (in %s)".format(clazz, sym, sym.enclClass)) jclass addAttribute fjbgContext.JEnclosingMethodAttribute( jclass, javaName(sym.enclClass), @@ -300,15 +300,21 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { ) } else if (clazz.isAnonymousClass) { val enclClass = clazz.rawowner - assert(enclClass.isClass) + assert(enclClass.isClass, "" + enclClass) val sym = enclClass.primaryConstructor - log("enclosing method for %s is %s (%s)".format(clazz, sym, enclClass)) - jclass addAttribute fjbgContext.JEnclosingMethodAttribute( - jclass, - javaName(enclClass), - javaName(sym), - JMethodType.ARGLESS_VOID_FUNCTION - ) + if (sym == NoSymbol) + log("Ran out of room looking for an enclosing method for %s: no constructor here.".format( + enclClass, clazz) + ) + else { + log("enclosing method for %s is %s (in %s)".format(clazz, sym, enclClass)) + jclass addAttribute fjbgContext.JEnclosingMethodAttribute( + jclass, + javaName(enclClass), + javaName(sym), + javaType(sym).asInstanceOf[JMethodType] + ) + } } } diff --git a/src/compiler/scala/tools/nsc/interpreter/Phased.scala b/src/compiler/scala/tools/nsc/interpreter/Phased.scala index 0c46007131..1406d2af39 100644 --- a/src/compiler/scala/tools/nsc/interpreter/Phased.scala +++ b/src/compiler/scala/tools/nsc/interpreter/Phased.scala @@ -66,6 +66,11 @@ trait Phased { def apply[T](body: => T): T = atPhase(get)(body) def multi[T](body: => T): Seq[T] = multi map (ph => at(ph)(body)) def all[T](body: => T): Seq[T] = ats(PhaseName.all)(body) + def allshow[T](body: => T): Seq[T] = { + val pairs = atz(PhaseName.all)(body) + pairs foreach { case (ph, op) => Console.println("%15s -> %s".format(ph, op.toString take 240)) } + pairs map (_._2) + } def at[T](ph: PhaseName)(body: => T): T = { val saved = get |