@@ -113,6 +113,7 @@ class TreeUnpickler(reader: TastyReader,
113
113
class Completer (reader : TastyReader )(using @ constructorOnly _ctx : Context ) extends LazyType {
114
114
import reader ._
115
115
val owner = ctx.owner
116
+ val mode = ctx.mode
116
117
val source = ctx.source
117
118
def complete (denot : SymDenotation )(using Context ): Unit =
118
119
def fail (ex : Throwable ) =
@@ -129,7 +130,7 @@ class TreeUnpickler(reader: TastyReader,
129
130
try
130
131
atPhaseBeforeTransforms {
131
132
new TreeReader (reader).readIndexedDef()(
132
- using ctx.withOwner(owner).withSource(source))
133
+ using ctx.withOwner(owner).withModeBits(mode). withSource(source))
133
134
}
134
135
catch
135
136
case ex : AssertionError => fail(ex)
@@ -1193,6 +1194,10 @@ class TreeUnpickler(reader: TastyReader,
1193
1194
res.withAttachment(SuppressedApplyToNone , ())
1194
1195
else res
1195
1196
1197
+ def simplifyLub (tree : Tree ): Tree =
1198
+ tree.overwriteType(tree.tpe.simplified)
1199
+ tree
1200
+
1196
1201
def readLengthTerm (): Tree = {
1197
1202
val end = readEnd()
1198
1203
val result =
@@ -1231,34 +1236,37 @@ class TreeUnpickler(reader: TastyReader,
1231
1236
val expansion = exprReader.readTerm() // need bindings in scope, so needs to be read before
1232
1237
Inlined (call, bindings, expansion)
1233
1238
case IF =>
1234
- if (nextByte == INLINE ) {
1235
- readByte()
1236
- InlineIf (readTerm(), readTerm(), readTerm())
1237
- }
1238
- else
1239
- If (readTerm(), readTerm(), readTerm())
1239
+ simplifyLub(
1240
+ if (nextByte == INLINE ) {
1241
+ readByte()
1242
+ InlineIf (readTerm(), readTerm(), readTerm())
1243
+ }
1244
+ else
1245
+ If (readTerm(), readTerm(), readTerm()))
1240
1246
case LAMBDA =>
1241
1247
val meth = readTerm()
1242
1248
val tpt = ifBefore(end)(readTpt(), EmptyTree )
1243
1249
Closure (Nil , meth, tpt)
1244
1250
case MATCH =>
1245
- if (nextByte == IMPLICIT ) {
1246
- readByte()
1247
- InlineMatch (EmptyTree , readCases(end))
1248
- }
1249
- else if (nextByte == INLINE ) {
1250
- readByte()
1251
- InlineMatch (readTerm(), readCases(end))
1252
- }
1253
- else Match (readTerm(), readCases(end))
1251
+ simplifyLub(
1252
+ if (nextByte == IMPLICIT ) {
1253
+ readByte()
1254
+ InlineMatch (EmptyTree , readCases(end))
1255
+ }
1256
+ else if (nextByte == INLINE ) {
1257
+ readByte()
1258
+ InlineMatch (readTerm(), readCases(end))
1259
+ }
1260
+ else Match (readTerm(), readCases(end)))
1254
1261
case RETURN =>
1255
1262
val from = readSymRef()
1256
1263
val expr = ifBefore(end)(readTerm(), EmptyTree )
1257
1264
Return (expr, Ident (from.termRef))
1258
1265
case WHILE =>
1259
1266
WhileDo (readTerm(), readTerm())
1260
1267
case TRY =>
1261
- Try (readTerm(), readCases(end), ifBefore(end)(readTerm(), EmptyTree ))
1268
+ simplifyLub(
1269
+ Try (readTerm(), readCases(end), ifBefore(end)(readTerm(), EmptyTree )))
1262
1270
case SELECTouter =>
1263
1271
val levels = readNat()
1264
1272
readTerm().outerSelect(levels, SkolemType (readType()))
0 commit comments