Skip to content

Commit 736682e

Browse files
committed
Extension methods: address reviewers comments #563
1 parent a1fda63 commit 736682e

File tree

1 file changed

+13
-19
lines changed

1 file changed

+13
-19
lines changed

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

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@ class ExtensionMethods extends MiniPhaseTransform with DenotTransformer with Ful
4646
override def runsAfterGroupsOf = Set(classOf[FirstTransform]) // need companion objects to exist
4747

4848
override def transform(ref: SingleDenotation)(implicit ctx: Context): SingleDenotation = ref match {
49-
case moduleClass: ClassDenotation if moduleClass is ModuleClass =>
50-
moduleClass.linkedClass match {
49+
case moduleClassSym: ClassDenotation if moduleClassSym is ModuleClass =>
50+
moduleClassSym.linkedClass match {
5151
case valueClass: ClassSymbol if isDerivedValueClass(valueClass) =>
52-
val cinfo = moduleClass.classInfo
52+
val cinfo = moduleClassSym.classInfo
5353
val decls1 = cinfo.decls.cloneScope
54-
val moduleSym = moduleClass.symbol.asClass
54+
val moduleSym = moduleClassSym.symbol.asClass
5555

5656
var newSuperClass: Type = null
5757

@@ -61,7 +61,7 @@ class ExtensionMethods extends MiniPhaseTransform with DenotTransformer with Ful
6161
if (!(valueClass is Scala2x)) ctx.atPhase(thisTransformer) { implicit ctx =>
6262
for (decl <- valueClass.classInfo.decls) {
6363
if (isMethodWithExtension(decl))
64-
decls1.enter(createExtensionMethod(decl, moduleClass.symbol))
64+
decls1.enter(createExtensionMethod(decl, moduleClassSym.symbol))
6565
}
6666
}
6767

@@ -74,19 +74,13 @@ class ExtensionMethods extends MiniPhaseTransform with DenotTransformer with Ful
7474

7575
val defn = ctx.definitions
7676

77-
val underlyingName = underlying.classSymbol match {
78-
case defn.IntClass => nme.Int
79-
case defn.ByteClass => nme.Byte
80-
case defn.ShortClass => nme.Short
81-
case defn.DoubleClass => nme.Double
82-
case defn.FloatClass => nme.Float
83-
case defn.LongClass => nme.Long
84-
case defn.BooleanClass => nme.Boolean
85-
case defn.CharClass => nme.Char
86-
case _ => nme.Object
87-
}
77+
val underlyingCls = underlying.classSymbol
78+
val underlyingClsName =
79+
if (defn.ScalaNumericValueClasses.contains(underlyingCls) ||
80+
underlyingCls == defn.BooleanClass) underlyingCls.name else nme.Object
81+
8882

89-
val syp = ctx.requiredClass(s"dotty.runtime.vc.VC${underlyingName}Companion").asClass
83+
val syp = ctx.requiredClass(s"dotty.runtime.vc.VC${underlyingClsName}Companion").asClass
9084

9185
newSuperClass = tpd.ref(syp).select(nme.CONSTRUCTOR).appliedToType(valueClass.typeRef).tpe.resultType
9286

@@ -96,12 +90,12 @@ class ExtensionMethods extends MiniPhaseTransform with DenotTransformer with Ful
9690

9791
// add a VCXXXCompanion superclass
9892

99-
moduleClass.copySymDenotation(info =
93+
moduleClassSym.copySymDenotation(info =
10094
cinfo.derivedClassInfo(
10195
classParents = ctx.normalizeToClassRefs(List(newSuperClass), moduleSym, decls1),
10296
decls = decls1))
10397
case _ =>
104-
moduleClass
98+
moduleClassSym
10599
}
106100
case ref: SymDenotation
107101
if isMethodWithExtension(ref) && ref.hasAnnotation(defn.TailrecAnnotationClass) =>

0 commit comments

Comments
 (0)