Closed
Description
Minimized example
Change tests/run/enum-Trees.scala by adding a trait P
to each case:
trait P
enum Tree[T] {
case True extends Tree[Boolean], P
case False extends Tree[Boolean], P
case Zero extends Tree[Int], P
case Succ(n: Tree[Int]) extends Tree[Int], P
case Pred(n: Tree[Int]) extends Tree[Int], P
case IsZero(n: Tree[Int]) extends Tree[Boolean], P
case If(cond: Tree[Boolean], thenp: Tree[T], elsep: Tree[T])
extends Tree[T], P
}
object Test {
import Tree._
def eval[T](e: Tree[T]): T = e match {
case True => true
case False => false
case Zero => 0
case Succ(f) => eval(f) + 1
case Pred(f) => eval(f) - 1
case IsZero(f) => eval(f) == 0
case If(cond, thenp, elsep) => if (eval(cond)) eval(thenp) else eval(elsep)
}
val data = If(IsZero(Pred(Succ(Zero))), Succ(Succ(Zero)), Pred(Pred(Zero)))
def main(args: Array[String]) = {
println(s"$data --> ${eval(data)}")
}
}
Output
java.lang.StackOverflowError while compiling enum-Tree.scala
Exception in thread "main" java.lang.StackOverflowError
at scala.util.control.NonFatal$.apply(NonFatal.scala:41)
at scala.util.control.NonFatal$.unapply(NonFatal.scala:47)
at dotty.tools.dotc.printing.Formatting$StringFormatter.showArg(Formatting.scala:31)
at dotty.tools.dotc.printing.Formatting$StringFormatter.treatArg(Formatting.scala:49)
at dotty.tools.dotc.printing.Formatting$StringFormatter.$anonfun$2(Formatting.scala:62)
at scala.collection.LazyZip2$$anon$1$$anon$2.next(LazyZipOps.scala:42)
at scala.collection.mutable.Growable.addAll(Growable.scala:62)
at scala.collection.mutable.Growable.addAll$(Growable.scala:59)
at scala.collection.mutable.ArrayBuilder.addAll(ArrayBuilder.scala:69)
at scala.collection.IterableOnceOps.toArray(IterableOnce.scala:1265)
at scala.collection.IterableOnceOps.toArray$(IterableOnce.scala:1259)
at scala.collection.AbstractIterable.toArray(Iterable.scala:921)
at scala.Array$.from(Array.scala:59)
at scala.collection.immutable.ArraySeq$.from(ArraySeq.scala:188)
at scala.collection.immutable.ArraySeq$.from(ArraySeq.scala:179)
at scala.collection.ClassTagIterableFactory$AnyIterableDelegate.from(Factory.scala:656)
at scala.collection.BuildFromLowPriority2$$anon$11.fromSpecific(BuildFrom.scala:113)
at scala.collection.BuildFromLowPriority2$$anon$11.fromSpecific(BuildFrom.scala:110)
at scala.collection.LazyZip2.map(LazyZipOps.scala:37)
at dotty.tools.dotc.printing.Formatting$StringFormatter.assemble(Formatting.scala:62)
at dotty.tools.dotc.core.Decorators$StringInterpolators$.i$extension(Decorators.scala:215)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2332)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint$$anonfun$1(TypeComparer.scala:2367)
at scala.collection.immutable.List.forall(List.scala:358)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2367)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2426)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2422)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2426)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint$$anonfun$1(TypeComparer.scala:2367)
at scala.collection.immutable.List.forall(List.scala:358)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2367)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2426)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2422)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2426)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint$$anonfun$1(TypeComparer.scala:2367)
at scala.collection.immutable.List.forall(List.scala:358)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2367)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2426)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2422)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint(TypeComparer.scala:2426)
at dotty.tools.dotc.core.TypeComparer.provablyDisjoint$$anonfun$1(TypeComparer.scala:2367)
Expectation
Should compile as before
Metadata
Metadata
Assignees
Labels
No labels