Skip to content

Commit b34964b

Browse files
committed
Also propagate language imports into block expressions
1 parent 92b1c5a commit b34964b

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,7 +1059,7 @@ class TreeUnpickler(reader: TastyReader,
10591059
else
10601060
Nil
10611061

1062-
def readIndexedStats(exprOwner: Symbol, end: Addr)(using Context): List[Tree] =
1062+
def readIndexedStats[T](exprOwner: Symbol, end: Addr, k: (List[Tree], Context) => T = sameTrees)(using Context): T =
10631063
val buf = new mutable.ListBuffer[Tree]
10641064
var curCtx = ctx
10651065
while currentAddr.index < end.index do
@@ -1069,13 +1069,15 @@ class TreeUnpickler(reader: TastyReader,
10691069
case stat: Import => curCtx = ctx.importContext(stat, stat.symbol)
10701070
case _ =>
10711071
assert(currentAddr.index == end.index)
1072-
buf.toList
1072+
k(buf.toList, curCtx)
10731073

1074-
def readStats(exprOwner: Symbol, end: Addr)(using Context): List[Tree] = {
1074+
def readStats[T](exprOwner: Symbol, end: Addr, k: (List[Tree], Context) => T = sameTrees)(using Context): T = {
10751075
fork.indexStats(end)
1076-
readIndexedStats(exprOwner, end)
1076+
readIndexedStats(exprOwner, end, k)
10771077
}
10781078

1079+
private def sameTrees(xs: List[Tree], ctx: Context) = xs
1080+
10791081
def readIndexedParams[T <: MemberDef](tag: Int)(using Context): List[T] =
10801082
collectWhile(nextByte == tag) { readIndexedDef().asInstanceOf[T] }
10811083

@@ -1183,9 +1185,8 @@ class TreeUnpickler(reader: TastyReader,
11831185
case BLOCK =>
11841186
val exprReader = fork
11851187
skipTree()
1186-
val stats = readStats(ctx.owner, end)
1187-
val expr = exprReader.readTerm()
1188-
Block(stats, expr)
1188+
readStats(ctx.owner, end,
1189+
(stats, ctx) => Block(stats, exprReader.readTerm()(using ctx)))
11891190
case INLINED =>
11901191
val exprReader = fork
11911192
skipTree()
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
1+
class B:
2+
def g: String | Null = ???
3+
4+
def f =
5+
import scala.language.unsafeNulls
6+
if ??? then "" else g
7+
18
import scala.language.unsafeNulls
29
class C {
310
def g: String | Null = ???
411

512
def f =
613
if ??? then "" else g
7-
}
14+
}

0 commit comments

Comments
 (0)