Skip to content

Commit b78f369

Browse files
authored
Merge pull request #434 from scala/backport-lts-3.3-23236
Backport "Fix scala#23194: Try to handle SkolemTypes in SingletonTypeTree during pickling" to 3.3 LTS
2 parents 9e13257 + ce21145 commit b78f369

File tree

4 files changed

+25
-5
lines changed

4 files changed

+25
-5
lines changed

compiler/src/dotty/tools/dotc/config/ScalaSettings.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ object ScalaSettings:
3737
ScalaRelease.values.toList.map(_.show)
3838

3939
def supportedSourceVersions: List[String] =
40-
SourceVersion.values.toList.map(_.toString)
40+
SourceVersion.values.diff(SourceVersion.illegalInSettings)
41+
.map(_.toString).toList
4142

4243
def defaultClasspath: String = sys.env.getOrElse("CLASSPATH", ".")
4344

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -630,8 +630,13 @@ class TreePickler(pickler: TastyPickler) {
630630
case tree: TypeTree =>
631631
pickleType(tree.tpe)
632632
case SingletonTypeTree(ref) =>
633-
writeByte(SINGLETONtpt)
634-
pickleTree(ref)
633+
val tp = ref.tpe
634+
val tp1 = tp.deskolemized
635+
if tp1 ne tp then
636+
pickleType(tp1)
637+
else
638+
writeByte(SINGLETONtpt)
639+
pickleTree(ref)
635640
case RefinedTypeTree(parent, refinements) =>
636641
if (refinements.isEmpty) pickleTree(parent)
637642
else {

tests/neg/indentRight.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ object Test {
2424
}
2525

2626
trait A
27-
case class B() extends A // error: Line is indented too far to the right
28-
case object C extends A // error: Line is indented too far to the right
27+
case class B() extends A
28+
case object C extends A
2929

3030
if (true) // OK
3131
println("hi")

tests/pos/i23194.scala

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class R[T] extends annotation.StaticAnnotation
2+
3+
class A[T]:
4+
val next: A[T] = null
5+
val self: this.type = this
6+
val selfnext: this.next.type = this.next
7+
def f: (A[T] @R[this.type], A[T] @R[this.next.type]) = ???
8+
def g: (A[T] @R[self.type], A[T] @R[selfnext.type]) = ???
9+
10+
class Test:
11+
def test =
12+
val (a, b) = A[String]().f
13+
val (a2, b2) = A[String]().g
14+

0 commit comments

Comments
 (0)