Skip to content

Commit 609acf3

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 d0f7846 commit 609acf3

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)