File tree 1 file changed +13
-11
lines changed
compiler/src/dotty/tools/dotc/core/tasty
1 file changed +13
-11
lines changed Original file line number Diff line number Diff line change @@ -405,19 +405,21 @@ class TreePickler(pickler: TastyPickler, attributes: Attributes) {
405
405
pickleType(tp)
406
406
}
407
407
case This (qual) =>
408
+ // This may be needed when pickling a `This` inside a capture set. See #19662 and #19859.
409
+ // In this case, we pickle the tree as null.asInstanceOf[tree.tpe].
410
+ // Since the pickled tree is not the same as the input, special handling is needed
411
+ // in the tree printer when testing the pickler. See [[PlainPrinter#homogenize]].
412
+ inline def pickleCapturedThis =
413
+ pickleTree(Literal (Constant (null )).cast(tree.tpe).withSpan(tree.span))
408
414
if (qual.isEmpty)
409
415
if tree.tpe.isSingleton then pickleType(tree.tpe)
410
- else
411
- // This may happen when pickling a `This` inside a capture set. See #19662.
412
- // In this case, we pickle the tree as null.asInstanceOf[tree.tpe].
413
- // Since the pickled tree is not the same as the input, special handling is needed
414
- // in the tree printer when testing the pickler. See [[PlainPrinter#homogenize]].
415
- pickleTree(Literal (Constant (null )).cast(tree.tpe).withSpan(tree.span))
416
- else {
417
- writeByte(QUALTHIS )
418
- val ThisType (tref) = tree.tpe: @ unchecked
419
- pickleTree(qual.withType(tref))
420
- }
416
+ else pickleCapturedThis
417
+ else
418
+ tree.tpe match
419
+ case ThisType (tref) =>
420
+ writeByte(QUALTHIS )
421
+ pickleTree(qual.withType(tref))
422
+ case _ => pickleCapturedThis
421
423
case Select (qual, name) =>
422
424
name match {
423
425
case OuterSelectName (_, levels) =>
You can’t perform that action at this time.
0 commit comments