[#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 |