summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/transform/Mixin.scala
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2014-05-09 16:47:56 +0200
committerLukas Rytz <lukas.rytz@gmail.com>2014-05-09 18:52:45 +0200
commitf0c33206bc125cf4326a340e2cd7c7ec2f360726 (patch)
tree660b6fe5099ee061c79ce89fcb8ea00691c95daf /src/compiler/scala/tools/nsc/transform/Mixin.scala
parent908ccd9feea072b4ed249db5f2741f745b42ca75 (diff)
downloadscala-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.scala9
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))