Closed
Description
object Omega extends Application {
trait Nat {
def isZero() : Boolean
def pred() : Nat
def toInt() : Int =
this match {
case Zero() => 0
case Succ(p) => p.toInt + 1
}
}
case class Zero() extends Nat {
def isZero() = true
def pred() = null
}
case class Succ(p : Nat) extends Nat {
def isZero = false
def pred() = p
}
case object Omega extends Succ(Omega)
println(Omega.toInt)
}
yields
java.lang.VerifyError: (class: Omega$$Omega$$, method: <init> signature: ()V) Expecting to find object/array on stack
at Omega$$.<init>(omega.scala:25)
at Omega$$.<clinit>(omega.scala)
at Omega.main(omega.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at scala.tools.nsc.ObjectRunner$$$$anonfun$$run$$1.apply(ObjectRunner.scala:75)
at scala.tools.nsc.ObjectRunner$$.withContextClassLoader(ObjectRunner.scala:49)
at scala.tools.nsc.ObjectRunner$$.run(ObjectRunner.scala:74)
at scala.tools.nsc.MainGenericRunner$$.main(MainGenericRunner.scala:154)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)