Skip to content

Commit a2fa123

Browse files
committed
final word on finality of lazy vars?
1 parent c4a3ba4 commit a2fa123

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

src/compiler/scala/tools/nsc/transform/Fields.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,8 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
211211
if (!localLazyVal) reflect.NameTransformer.LOCAL_SUFFIX_STRING
212212
else reflect.NameTransformer.LAZY_LOCAL_SUFFIX_STRING
213213

214-
// TODO: should end up final in bytecode
214+
// the underlying field for a lazy val should not be final because we write to it outside of a constructor,
215+
// so, set the MUTABLE flag
215216
val fieldFlags =
216217
if (!localLazyVal) flags & FieldFlags | PrivateLocal | MUTABLE
217218
else (flags & FieldFlags | ARTIFACT | MUTABLE) & ~(IMPLICIT | STABLE)
@@ -514,7 +515,7 @@ abstract class Fields extends InfoTransform with ast.TreeDSL with TypingTransfor
514515
val refClass = lazyHolders.getOrElse(lazyValType.typeSymbol, LazyRefClass)
515516
val refTpe = if (refClass != LazyRefClass) refClass.tpe else appliedType(refClass.typeConstructor, List(lazyValType))
516517

517-
val flags = (lazyVal.flags & FieldFlags | ARTIFACT | MUTABLE) & ~(IMPLICIT | STABLE)
518+
val flags = (lazyVal.flags & FieldFlags | ARTIFACT | MUTABLE) & ~(IMPLICIT | STABLE) // TODO: why include MUTABLE???
518519
val name = lazyVal.name.toTermName.append(nme.LAZY_LOCAL_SUFFIX_STRING)
519520
val holderSym =
520521
lazyVal.owner.newValue(name, lazyVal.pos, flags) setInfo refTpe

0 commit comments

Comments
 (0)