From c8f4316b374d78caaf5ba605cd34e323b78a77de Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Fri, 10 Jun 2011 22:38:17 +0000 Subject: A test case demonstrating some of the issues wi... A test case demonstrating some of the issues with DelayedInit. References #4680. Review by odersky. --- test/files/run/bug4680.check | 60 +++++++++++++++++++++++++++++++++++++ test/files/run/bug4680.scala | 71 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 test/files/run/bug4680.check create mode 100644 test/files/run/bug4680.scala (limited to 'test') diff --git a/test/files/run/bug4680.check b/test/files/run/bug4680.check new file mode 100644 index 0000000000..b5cfc651f2 --- /dev/null +++ b/test/files/run/bug4680.check @@ -0,0 +1,60 @@ + + +// new C { } +-A -B -C + +// new C { 5 } +-A -B -C +A+ B+ C+ + +// new D() +-A -B -C -D +A+ B+ C+ D+ + +// new D() { } +-A -B -C -D +A+ B+ C+ D+ + +// new D() { val x = 5 } +-A -B -C -D +A+ B+ C+ D+ +A+ B+ C+ D+ + +// new { val x = 5 } with D() +-A -B -C -D +A+ B+ C+ D+ + +// new E() { val x = 5 } +-A -B -C -D +A+ B+ C+ D+ E+ +-E + +A+ B+ C+ D+ E+ + +A+ B+ C+ D+ E+ + + +// new { val x = 5 } with E() +-A -B -C -D +A+ B+ C+ D+ E+ +-E + +A+ B+ C+ D+ E+ + + +// new { val x = 5 } with E() { } +-A -B -C -D +A+ B+ C+ D+ E+ +-E + +A+ B+ C+ D+ E+ + + +// new { val x = 5 } with E() { 5 } +-A -B -C -D +A+ B+ C+ D+ E+ +-E + +A+ B+ C+ D+ E+ + +A+ B+ C+ D+ E+ diff --git a/test/files/run/bug4680.scala b/test/files/run/bug4680.scala new file mode 100644 index 0000000000..d5c8d0e7af --- /dev/null +++ b/test/files/run/bug4680.scala @@ -0,0 +1,71 @@ +trait A extends DelayedInit { + print("-A ") + + def delayedInit(body: => Unit) = { + body + postConstructionCode + } + protected def postConstructionCode: Unit = { + print("\nA+ ") + } +} +trait B extends A { + print("-B ") + override protected def postConstructionCode: Unit = { + super.postConstructionCode + print("B+ ") + } +} + +trait C extends B { + print("-C ") + override protected def postConstructionCode: Unit = { + super.postConstructionCode + print("C+ ") + } +} + +class D() extends C { + print("-D ") + override protected def postConstructionCode: Unit = { + super.postConstructionCode + print("D+ ") + } +} +class E() extends D() { + println("-E") + override protected def postConstructionCode: Unit = { + super.postConstructionCode + println("E+") + } +} + + +object Test { + def p(msg: String) = println("\n\n// " + msg) + + def main(args: Array[String]) { + p("new C { }") + new C { } + p("new C { 5 }") + new C { 5 } + + p("new D()") + new D() + p("new D() { }") + new D() { } + p("new D() { val x = 5 }") + new D() { val x = 5 } + p("new { val x = 5 } with D()") + new { val x = 5 } with D() + + p("new E() { val x = 5 }") + new E() { val x = 5 } + p("new { val x = 5 } with E()") + new { val x = 5 } with E() + p("new { val x = 5 } with E() { }") + new { val x = 5 } with E() { } + p("new { val x = 5 } with E() { 5 }") + new { val x = 5 } with E() { 5 } + } +} -- cgit v1.2.3