File tree Expand file tree Collapse file tree 3 files changed +38
-0
lines changed
compiler/src/dotty/tools/dotc/typer Expand file tree Collapse file tree 3 files changed +38
-0
lines changed Original file line number Diff line number Diff line change @@ -3135,6 +3135,11 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
31353135 val rhs = implicitArgTree(target, cdef.span,
31363136 where = i " inferring the implementation of the deferred ${dcl.showLocated}"
31373137 )(using searchCtx)
3138+ val resolvedHere =
3139+ rhs.tpe match
3140+ case tp : NamedType => (tp.prefix.typeSymbol eq cls) && tp.name == mbr.name && ! tp.typeSymbol.is(Method )
3141+ case _ => false
3142+ if resolvedHere then failFor(mbr, " the result is self-recursive" )
31383143
31393144 val impl = dcl.copy(cls,
31403145 flags = dcl.flags &~ (HasDefault | Deferred ) | Final | Override ,
Original file line number Diff line number Diff line change 1+
2+ import scala .compiletime .deferred
3+
4+ trait MyCodec [E ]
5+
6+ object auto :
7+ trait CompanionEssentials [E ]:
8+ given myc : MyCodec [E ] = deferred
9+
10+ import auto .CompanionEssentials
11+
12+ case class Person (name : String , age : Int )
13+ object Person extends CompanionEssentials [Person ]: // error
14+ given String = " hw"
15+ given myc (using String ): MyCodec [Person ] = new MyCodec [Person ] {}
16+ override def toString = " "
Original file line number Diff line number Diff line change 1+
2+ import scala .compiletime .deferred
3+
4+ trait MyCodec [E ]
5+
6+ object auto :
7+ trait CompanionEssentials [E ]:
8+ // given [E] => MyCodec[E] = deferred
9+ given MyCodec [E ] = deferred
10+
11+ import auto .CompanionEssentials
12+
13+ case class Person (name : String , age : Int )
14+ object Person extends CompanionEssentials [Person ]:
15+ // given something: [E] => MyCodec[E] = new MyCodec[E] {}
16+ given something : MyCodec [Person ] = new MyCodec [Person ] {}
17+ override def toString = " "
You can’t perform that action at this time.
0 commit comments