diff options
author | Lukas Rytz <lukas.rytz@gmail.com> | 2014-05-09 16:47:56 +0200 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@gmail.com> | 2014-05-09 18:52:45 +0200 |
commit | f0c33206bc125cf4326a340e2cd7c7ec2f360726 (patch) | |
tree | 660b6fe5099ee061c79ce89fcb8ea00691c95daf /src/compiler/scala/tools/nsc/transform/Mixin.scala | |
parent | 908ccd9feea072b4ed249db5f2741f745b42ca75 (diff) | |
download | scala-f0c33206bc125cf4326a340e2cd7c7ec2f360726.tar.gz scala-f0c33206bc125cf4326a340e2cd7c7ec2f360726.tar.bz2 scala-f0c33206bc125cf4326a340e2cd7c7ec2f360726.zip |
SI-8570 set the checkinit bit for unit-typed fields of traits
Fix only, refactoring in subsequent commit.
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/Mixin.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/Mixin.scala | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Mixin.scala b/src/compiler/scala/tools/nsc/transform/Mixin.scala index 673bc04bd9..9c9008bfcc 100644 --- a/src/compiler/scala/tools/nsc/transform/Mixin.scala +++ b/src/compiler/scala/tools/nsc/transform/Mixin.scala @@ -1042,15 +1042,18 @@ abstract class Mixin extends InfoTransform with ast.TreeDSL { // add accessor definitions addDefDef(sym, { if (sym.isSetter) { + val getter = sym.getter(clazz) + def setInitFlag = mkSetFlag(clazz, fieldOffset(getter), getter, bitmapKind(getter)) if (isOverriddenSetter(sym)) UNIT else accessedRef match { - case ref @ Literal(_) => ref + case ref @ Literal(_) => + if (!needsInitFlag(getter)) ref + else Block(setInitFlag, ref) case ref => val init = Assign(ref, Ident(sym.firstParam)) - val getter = sym.getter(clazz) if (!needsInitFlag(getter)) init - else Block(init, mkSetFlag(clazz, fieldOffset(getter), getter, bitmapKind(getter)), UNIT) + else Block(init, setInitFlag, UNIT) } } else if (needsInitFlag(sym)) |