Skip to content

Commit 367ba78

Browse files
committed
Fix: Preserve mode when lazy unpickling
In readLater the context is not preserved, but reconstituted using the owner of the context building the closure. We need to pass the mode as well, or else ReadPositions might be reset. I noticed this when I saw that positions were not read correctly when inlining.
1 parent a1ce848 commit 367ba78

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1135,7 +1135,7 @@ class TreeUnpickler(reader: TastyReader,
11351135
def readLater[T <: AnyRef](end: Addr, op: TreeReader => Context => T)(implicit ctx: Context): Trees.Lazy[T] = {
11361136
val localReader = fork
11371137
goto(end)
1138-
new LazyReader(localReader, ctx.owner, op)
1138+
new LazyReader(localReader, ctx.owner, ctx.mode, op)
11391139
}
11401140

11411141
def readHole(end: Addr, isType: Boolean)(implicit ctx: Context): Tree = {
@@ -1182,10 +1182,10 @@ class TreeUnpickler(reader: TastyReader,
11821182
}
11831183
}
11841184

1185-
class LazyReader[T <: AnyRef](reader: TreeReader, owner: Symbol, op: TreeReader => Context => T) extends Trees.Lazy[T] {
1185+
class LazyReader[T <: AnyRef](reader: TreeReader, owner: Symbol, mode: Mode, op: TreeReader => Context => T) extends Trees.Lazy[T] {
11861186
def complete(implicit ctx: Context): T = {
11871187
pickling.println(i"starting to read at ${reader.reader.currentAddr} with owner $owner")
1188-
op(reader)(ctx.withPhaseNoLater(ctx.picklerPhase).withOwner(owner))
1188+
op(reader)(ctx.withPhaseNoLater(ctx.picklerPhase).withOwner(owner).withModeBits(mode))
11891189
}
11901190
}
11911191

0 commit comments

Comments
 (0)