Aladdin - Scala Bugtracking
[#1080] project: compiler priority: low category: bug
submitter assigned to status date submitted
Nikolay Iulian fixed 2007-05-01 13:12:20.0
subject [contrib #436] unexpected failure to identify tail recursion
code
object A
{
    val name = "1/2/3"

        val l_brief = new StringBuilder(name.length)
        def loop(a_index : Int) : Unit =
        {
            Console.println("loop depth: " + (new Exception).getStackTrace.length)
            l_brief.append(name.charAt(a_index))
            val l_slash = name.indexOf("/", a_index)

            Console.println("a_index: " + a_index + ", l_slash: " + l_slash)

            if (-1 != l_slash)
            {
                loop(1 + l_slash)
            }
        }
        loop(0)

    val briefName =
        l_brief.toString

    Console.println(briefName)
}

object B
{
    val name = "1/2/3"

    val briefName =
    {
        val l_brief = new StringBuilder(name.length)
        def loop(a_index : Int) : Unit =
        {
            Console.println("loop depth: " + (new Exception).getStackTrace.length)
            l_brief.append(name.charAt(a_index))
            val l_slash = name.indexOf("/", a_index)

            Console.println("a_index: " + a_index + ", l_slash: " + l_slash)

            if (-1 != l_slash)
            {
                loop(1 + l_slash)
            }
        }
        loop(0)

        l_brief.toString
    }

    Console.println(briefName)
}

object Main extends Application
{
    Console.println("Output of A:")
    val a = A
    Console.println()
    Console.println("Output of B:")
    val b = B
}
what happened
With the above code in Test.scala:
$rm -rf classes && mkdir classes && scalac Test.scala -d classes && (cd classes ; scala Main)
Output of A:
loop depth: 13
a_index: 0, l_slash: 1
loop depth: 13
a_index: 2, l_slash: 3
loop depth: 13
a_index: 4, l_slash: -1
123

Output of B:
loop depth: 13
a_index: 0, l_slash: 1
loop depth: 14
a_index: 2, l_slash: 3
loop depth: 15
a_index: 4, l_slash: -1
123
what expected The depths under Output of B to all be 13.
[back to overview]
Changes of this bug report
Nikolay  edited on  2007-05-01 13:13:04.0
contribution #436
Iulian  edited on  2007-05-01 17:04:20.0