@@ -382,6 +382,7 @@ class LazyVals extends MiniPhase with IdentityDenotTransformer {
382
382
val thizClass = Literal (Constant (claz.info))
383
383
val helperModule = requiredModule(" scala.runtime.LazyVals" )
384
384
val getOffset = Select (ref(helperModule), lazyNme.RLazyVals .getOffset)
385
+ val getOffsetStatic = Select (ref(helperModule), lazyNme.RLazyVals .getOffsetStatic)
385
386
var offsetSymbol : TermSymbol | Null = null
386
387
var flag : Tree = EmptyTree
387
388
var ord = 0
@@ -406,7 +407,8 @@ class LazyVals extends MiniPhase with IdentityDenotTransformer {
406
407
val flagName = LazyBitMapName .fresh(id.toString.toTermName)
407
408
val flagSymbol = newSymbol(claz, flagName, containerFlags, defn.LongType ).enteredAfter(this )
408
409
flag = ValDef (flagSymbol, Literal (Constant (0L )))
409
- val offsetTree = ValDef (offsetSymbol.nn, getOffset.appliedTo(thizClass, Literal (Constant (flagName.toString))))
410
+ val fieldTree = thizClass.select(lazyNme.RLazyVals .getDeclaredField).appliedTo(Literal (Constant (flagName.toString)))
411
+ val offsetTree = ValDef (offsetSymbol.nn, getOffsetStatic.appliedTo(fieldTree))
410
412
info.defs = offsetTree :: info.defs
411
413
}
412
414
@@ -416,7 +418,8 @@ class LazyVals extends MiniPhase with IdentityDenotTransformer {
416
418
val flagName = LazyBitMapName .fresh(" 0" .toTermName)
417
419
val flagSymbol = newSymbol(claz, flagName, containerFlags, defn.LongType ).enteredAfter(this )
418
420
flag = ValDef (flagSymbol, Literal (Constant (0L )))
419
- val offsetTree = ValDef (offsetSymbol.nn, getOffset.appliedTo(thizClass, Literal (Constant (flagName.toString))))
421
+ val fieldTree = thizClass.select(lazyNme.RLazyVals .getDeclaredField).appliedTo(Literal (Constant (flagName.toString)))
422
+ val offsetTree = ValDef (offsetSymbol.nn, getOffsetStatic.appliedTo(fieldTree))
420
423
appendOffsetDefs += (claz -> new OffsetInfo (List (offsetTree), ord))
421
424
}
422
425
@@ -453,6 +456,8 @@ object LazyVals {
453
456
val state : TermName = N .state.toTermName
454
457
val cas : TermName = N .cas.toTermName
455
458
val getOffset : TermName = N .getOffset.toTermName
459
+ val getOffsetStatic : TermName = " getOffsetStatic" .toTermName
460
+ val getDeclaredField : TermName = " getDeclaredField" .toTermName
456
461
}
457
462
val flag : TermName = " flag" .toTermName
458
463
val state : TermName = " state" .toTermName
0 commit comments