| [#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] | ||||
| Martin edited on 2006-05-08 10:33:02.0 |