Aladdin - Scala Bugtracking
[#428] project: compiler priority: low category: bug
submitter assigned to status date submitted
Philippe Martin fixed 2005-05-03 13:59:34.0
subject Class bodies are not evaluated linearly
code
object Test {

  abstract class Foo(_a: Int, _b: Int) {

    Console.println("Foo 1: " + this);
    val a: Int = _a;
    Console.println("Foo 2: " + this);
    val b: Int = { fun(); _b }
    Console.println("Foo 3: " + this);
    val x: Int;
    Console.println("Foo 4: " + this);
    val y: Int;
    Console.println("Foo 5: " + this);


    def fun(): Unit = ();

    override def toString(): String =
      "a = " + a + ", b = " + b + ", x = " + x + ", y = " + y;

  }

  class Bar(_a: Int, _b: Int, _x: Int, _y: Int) extends Foo(_a, _b) {

    Console.println("Bar 1: " + this);
    val x: Int = _x;
    Console.println("Bar 2: " + this);
    val y: Int = { fun(); _y }
    Console.println("Bar 3: " + this);

  }

  def main (args: Array[String]): Unit = {
    new Bar(2,3,5,7);
  }

}
what happened
The program prints this:
Foo 1: a = 2, b = 0, x = 5, y = 0
Foo 2: a = 2, b = 0, x = 5, y = 0
Foo 3: a = 2, b = 3, x = 5, y = 0
Foo 4: a = 2, b = 3, x = 5, y = 0
Foo 5: a = 2, b = 3, x = 5, y = 0
Bar 1: a = 2, b = 3, x = 5, y = 0
Bar 2: a = 2, b = 3, x = 5, y = 0
Bar 3: a = 2, b = 3, x = 5, y = 7
what expected It should print this (the class bodies should be evaluated linearly):
Foo 1: a = 0, b = 0, x = 0, y = 0
Foo 2: a = 2, b = 0, x = 0, y = 0
Foo 3: a = 2, b = 3, x = 0, y = 0
Foo 4: a = 2, b = 3, x = 0, y = 0
Foo 5: a = 2, b = 3, x = 0, y = 0
Bar 1: a = 2, b = 3, x = 0, y = 0
Bar 2: a = 2, b = 3, x = 5, y = 0
Bar 3: a = 2, b = 3, x = 5, y = 7
[back to overview]
Changes of this bug report
Martin  edited on  2006-05-08 10:33:02.0