Skip to content

Commit 6aa4613

Browse files
committed
Move methods shared between Mixin and Backend to SymUtils.
1 parent 9c8976d commit 6aa4613

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

src/dotty/tools/dotc/transform/MixinOps.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@ package transform
44
import core._
55
import Symbols._, Types._, Contexts._, SymDenotations._, DenotTransformers._, Flags._
66
import util.Positions._
7+
import SymUtils._
78
import StdNames._, NameOps._
89

910
class MixinOps(cls: ClassSymbol, thisTransform: DenotTransformer)(implicit ctx: Context) {
1011
import ast.tpd._
1112

12-
val superCls: Symbol = cls.classInfo.parents.head.symbol
13-
val mixins: List[ClassSymbol] =
14-
if (cls is Trait) Nil
15-
else cls.baseClasses.tail.takeWhile(_ ne superCls).reverse
13+
val superCls: Symbol = cls.superClass
14+
val mixins: List[ClassSymbol] = cls.mixins
1615

1716
def implementation(member: TermSymbol): TermSymbol =
1817
member.copy(

src/dotty/tools/dotc/transform/SymUtils.scala

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,23 @@ object SymUtils {
2424
class SymUtils(val self: Symbol) extends AnyVal {
2525
import SymUtils._
2626

27+
def superClass(implicit ctx: Context) = {
28+
val parents = self.asClass.classInfo.parents
29+
if (parents.isEmpty) NoSymbol
30+
else parents.head.symbol
31+
}
32+
33+
/** All interfaces implemented by a class, except for those inherited through the superclass. */
34+
def mixins(implicit ctx: Context) = {
35+
val superCls = self.superClass
36+
if (self is Trait) Nil
37+
else {
38+
val baseClasses = self.asClass.baseClasses
39+
if (baseClasses.isEmpty) Nil
40+
else baseClasses.tail.takeWhile(_ ne superCls).reverse
41+
}
42+
}
43+
2744
def isTypeTestOrCast(implicit ctx: Context): Boolean =
2845
self == defn.Any_asInstanceOf || self == defn.Any_isInstanceOf
2946

0 commit comments

Comments
 (0)