@@ -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