Skip to content

Commit 5af6287

Browse files
Allow inlining of deferred defs
1 parent df99c94 commit 5af6287

File tree

3 files changed

+11
-9
lines changed

3 files changed

+11
-9
lines changed

compiler/src/dotty/tools/dotc/inlines/Inlines.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -565,9 +565,12 @@ object Inlines:
565565
private def inlinedTypeDef(tdef: TypeDef, inlinedSym: Symbol)(using Context): TypeDef =
566566
tpd.TypeDef(inlinedSym.asType).withSpan(parent.span)
567567

568-
private def inlinedRhs(rhs: Tree): Inlined =
569-
val inlinedRhs = inlined(rhs)._2
570-
Inlined(tpd.ref(parentSym), Nil, inlinedRhs).withSpan(parent.span)
568+
private def inlinedRhs(rhs: Tree): Tree =
569+
if rhs.isEmpty then
570+
rhs
571+
else
572+
val inlinedRhs = inlined(rhs)._2
573+
Inlined(tpd.ref(parentSym), Nil, inlinedRhs).withSpan(parent.span)
571574

572575
end InlineParentTrait
573576
end Inlines

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ object Typer {
111111

112112
def isInlineableFromInlineTrait(inlinedTraitSym: ClassSymbol, member: tpd.Tree)(using Context): Boolean =
113113
!(member.isInstanceOf[tpd.TypeDef] && inlinedTraitSym.typeParams.contains(member.symbol))
114-
&& !member.symbol.is(Deferred)
115114
&& !member.symbol.isAllOf(Inline)
116115
}
117116
/** Typecheck trees, the main entry point is `typed`.
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
inline trait A:
2-
def x: Int
1+
inline trait A[T]:
2+
def x: T
33

4-
class B extends A:
5-
override def x: Int = 1
6-
def f = x
4+
class B extends A[Int]:
5+
def x = 1
6+
def f: Int = x

0 commit comments

Comments
 (0)