Skip to content

Commit

Permalink
Fix i19859 (#19860)
Browse files Browse the repository at this point in the history
Fixes #19859.
  • Loading branch information
Linyxus authored Mar 4, 2024
2 parents 02cc983 + 7aca3c4 commit 469c980
Showing 1 changed file with 13 additions and 11 deletions.
24 changes: 13 additions & 11 deletions compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala
Original file line number Diff line number Diff line change
Expand Up @@ -405,19 +405,21 @@ class TreePickler(pickler: TastyPickler, attributes: Attributes) {
pickleType(tp)
}
case This(qual) =>
// This may be needed when pickling a `This` inside a capture set. See #19662 and #19859.
// In this case, we pickle the tree as null.asInstanceOf[tree.tpe].
// Since the pickled tree is not the same as the input, special handling is needed
// in the tree printer when testing the pickler. See [[PlainPrinter#homogenize]].
inline def pickleCapturedThis =
pickleTree(Literal(Constant(null)).cast(tree.tpe).withSpan(tree.span))
if (qual.isEmpty)
if tree.tpe.isSingleton then pickleType(tree.tpe)
else
// This may happen when pickling a `This` inside a capture set. See #19662.
// In this case, we pickle the tree as null.asInstanceOf[tree.tpe].
// Since the pickled tree is not the same as the input, special handling is needed
// in the tree printer when testing the pickler. See [[PlainPrinter#homogenize]].
pickleTree(Literal(Constant(null)).cast(tree.tpe).withSpan(tree.span))
else {
writeByte(QUALTHIS)
val ThisType(tref) = tree.tpe: @unchecked
pickleTree(qual.withType(tref))
}
else pickleCapturedThis
else
tree.tpe match
case ThisType(tref) =>
writeByte(QUALTHIS)
pickleTree(qual.withType(tref))
case _ => pickleCapturedThis
case Select(qual, name) =>
name match {
case OuterSelectName(_, levels) =>
Expand Down

0 comments on commit 469c980

Please sign in to comment.