In https://repository.st.informatik.tu-dar ... terp.scala the following assertion throws a java.lang.StackOverflowError :
Code: Alles auswählen
assert(interp(
Rec('fact, Fun('n, If0('n, 1, Mult('n, App('fact, Sub('n, 1))))),
App('fact, 5))) == NumV(120))
Code: Alles auswählen
case Rec(boundId, namedExpr, boundBody) =>
Console.println("expr: #"+expr+"#")
val recEnv = collection.mutable.Map() ++ env
Console.println("recEnv.keys before teta: #"+recEnv.keys+"#")
Console.println("recEnv.valus before teta: #"+recEnv.values+"#")
val teta = boundId -> interp(namedExpr, recEnv)
Console.println("teta: #"+teta+"#")
recEnv += teta
Console.println("recEnv.keys after teta: #"+recEnv.keys+"#")
Console.println("recEnv.values after teta: #"+recEnv.values+"#")
Console.println("############################")
interp(boundBody, recEnv)
The traceout looks like :
Code: Alles auswählen
expr: #Rec('fact,Fun('n,If0(Id('n),Num(1),Mult(Id('n),App(Id('fact),Sub(Id('n),Num(1)))))),App(Id('fact),Num(5)))#
recEnv.keys before teta: #Set()#
recEnv.values before teta: #HashMap()#
teta: #('fact,Closure('n,If0(Id('n),Num(1),Mult(Id('n),App(Id('fact),Sub(Id('n),Num(1))))),Map()))#
recEnv.keys after teta: #Set('fact)#
[info] de.tuda.stg.copl.RecursionTest *** ABORTED ***
[info] java.lang.StackOverflowError:
[info] at de.tuda.stg.copl.recursion.RCFLAEInterp$Id.productIterator(RCFLAEInterp.scala:14)
[info] at scala.runtime.ScalaRunTime$._toString(ScalaRunTime.scala:143)
[info] at de.tuda.stg.copl.recursion.RCFLAEInterp$Id.toString(RCFLAEInterp.scala:14)
[info] at java.lang.String.valueOf(String.java:2994)
[info] at scala.collection.mutable.StringBuilder.append(StringBuilder.scala:199)
[info] at scala.collection.TraversableOnce.$anonfun$addString$1(TraversableOnce.scala:358)
[info] at scala.collection.Iterator.foreach(Iterator.scala:937)
[info] at scala.collection.Iterator.foreach$(Iterator.scala:937)
[info] at scala.collection.AbstractIterator.foreach(Iterator.scala:1425)
[info] at scala.collection.TraversableOnce.addString(TraversableOnce.scala:356)
[info] ...
Kind regards.