Skip to content

Commit 2680d2a

Browse files
committed
Allow to unpickle a skolem type in more cases
1 parent a5e029a commit 2680d2a

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,8 @@ class TreeUnpickler(reader: TastyReader,
507507
private def readSymNameRef()(using Context): Type = {
508508
val sym = readSymRef()
509509
val prefix = readType()
510-
val res = NamedType(prefix, sym)
510+
def pre = if TypeOps.isLegalPrefix(prefix) then prefix else QualSkolemType(prefix)
511+
val res = NamedType(pre, sym)
511512
prefix match {
512513
case prefix: ThisType if (prefix.cls eq sym.owner) && !sym.is(Opaque) =>
513514
res.withDenot(sym.denot)

tests/pos/i22585-a/inline_1.scala

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import scala.quoted.*
2+
3+
trait Hammer[I, O] {
4+
def hammer(input: I): O
5+
}
6+
7+
object Hammer {
8+
inline def makeHammer[S, O](): Hammer[S, O] =
9+
new Hammer[S, O] {
10+
lazy val (hammer: Hammer[?, Int], idx: Int) = ???
11+
12+
override def hammer(input: S): O = {
13+
hammer.hammer(???.asInstanceOf).asInstanceOf[O]
14+
}
15+
}
16+
}

tests/pos/i22585-a/main_2.scala

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
object HammerSpec {
2+
case class A(x: Int)
3+
case class B(x: Int)
4+
Hammer.makeHammer[A, B]()
5+
}

0 commit comments

Comments
 (0)