aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/transform/Mixin.scala4
-rw-r--r--tests/run/traitInit.check2
-rw-r--r--tests/run/traitInit.scala13
3 files changed, 17 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/transform/Mixin.scala b/src/dotty/tools/dotc/transform/Mixin.scala
index e6e2ad259..8470be2ef 100644
--- a/src/dotty/tools/dotc/transform/Mixin.scala
+++ b/src/dotty/tools/dotc/transform/Mixin.scala
@@ -96,7 +96,7 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
def traitDefs(stats: List[Tree]): List[Tree] = {
val initBuf = new mutable.ListBuffer[Tree]
- stats flatMap {
+ stats.flatMap({
case stat: DefDef if stat.symbol.isGetter && !stat.rhs.isEmpty && !stat.symbol.is(Flags.Lazy) =>
// make initializer that has all effects of previous getter,
// replace getter rhs with empty tree.
@@ -114,7 +114,7 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
case stat =>
initBuf += stat
Nil
- }
+ }) ++ initBuf
}
def transformSuper(tree: Tree): Tree = {
diff --git a/tests/run/traitInit.check b/tests/run/traitInit.check
new file mode 100644
index 000000000..f9264f7fb
--- /dev/null
+++ b/tests/run/traitInit.check
@@ -0,0 +1,2 @@
+Hello
+World
diff --git a/tests/run/traitInit.scala b/tests/run/traitInit.scala
new file mode 100644
index 000000000..664fe4ce0
--- /dev/null
+++ b/tests/run/traitInit.scala
@@ -0,0 +1,13 @@
+trait Hello {
+ println("Hello")
+ val x: Int = 1
+ println("World")
+}
+
+class A extends Hello
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ new A
+ }
+}