Skip to content

Commit fdd53e1

Browse files
committed
Make LazyVals.getOffset work on j.l.Class instead of taking the instance.
1 parent e0162b5 commit fdd53e1

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

src/dotty/runtime/LazyVals.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ object LazyVals {
6565
monitors(id)
6666
}
6767

68-
@inline def getOffset(obj: Object, name: String) = unsafe.objectFieldOffset(obj.getClass.getDeclaredField(name))
68+
@inline def getOffset(clz: Class[_], name: String) = unsafe.objectFieldOffset(clz.getDeclaredField(name))
6969

7070
object Names {
7171
final val state = "STATE"

src/dotty/tools/dotc/transform/LazyVals.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer {
289289

290290
val tpe = x.tpe.widen.resultType.widen
291291
val claz = x.symbol.owner.asClass
292-
val thiz = This(claz)(ctx.fresh.setOwner(claz))
292+
val thizClass = Literal(Constant(claz.info))
293293
val companion = claz.companionModule
294294
val helperModule = ctx.requiredModule("dotty.runtime.LazyVals")
295295
val getOffset = Select(ref(helperModule), RLazyValsNames_getOffset)
@@ -313,7 +313,7 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer {
313313
val flagName = (StdNames.nme.BITMAP_PREFIX + id.toString).toTermName
314314
val flagSymbol = ctx.newSymbol(claz, flagName, containerFlags, defn.LongType).enteredAfter(this)
315315
flag = ValDef(flagSymbol, Literal(Constants.Constant(0L)))
316-
val offsetTree = ValDef(offsetSymbol, getOffset.appliedTo(thiz, Literal(Constant(flagName.toString))))
316+
val offsetTree = ValDef(offsetSymbol, getOffset.appliedTo(thizClass, Literal(Constant(flagName.toString))))
317317
info.defs = offsetTree :: info.defs
318318
}
319319

@@ -322,7 +322,7 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer {
322322
val flagName = (StdNames.nme.BITMAP_PREFIX + "0").toTermName
323323
val flagSymbol = ctx.newSymbol(claz, flagName, containerFlags, defn.LongType).enteredAfter(this)
324324
flag = ValDef(flagSymbol, Literal(Constants.Constant(0L)))
325-
val offsetTree = ValDef(offsetSymbol, getOffset.appliedTo(thiz, Literal(Constant(flagName.toString))))
325+
val offsetTree = ValDef(offsetSymbol, getOffset.appliedTo(thizClass, Literal(Constant(flagName.toString))))
326326
appendOffsetDefs += (companion.name.moduleClassName -> new OffsetInfo(List(offsetTree), ord))
327327
}
328328

0 commit comments

Comments
 (0)