@@ -46,12 +46,12 @@ class ExtensionMethods extends MiniPhaseTransform with DenotTransformer with Ful
46
46
override def runsAfterGroupsOf = Set (classOf [FirstTransform ]) // need companion objects to exist
47
47
48
48
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 {
51
51
case valueClass : ClassSymbol if isDerivedValueClass(valueClass) =>
52
- val cinfo = moduleClass .classInfo
52
+ val cinfo = moduleClassSym .classInfo
53
53
val decls1 = cinfo.decls.cloneScope
54
- val moduleSym = moduleClass .symbol.asClass
54
+ val moduleSym = moduleClassSym .symbol.asClass
55
55
56
56
var newSuperClass : Type = null
57
57
@@ -61,7 +61,7 @@ class ExtensionMethods extends MiniPhaseTransform with DenotTransformer with Ful
61
61
if (! (valueClass is Scala2x )) ctx.atPhase(thisTransformer) { implicit ctx =>
62
62
for (decl <- valueClass.classInfo.decls) {
63
63
if (isMethodWithExtension(decl))
64
- decls1.enter(createExtensionMethod(decl, moduleClass .symbol))
64
+ decls1.enter(createExtensionMethod(decl, moduleClassSym .symbol))
65
65
}
66
66
}
67
67
@@ -74,19 +74,13 @@ class ExtensionMethods extends MiniPhaseTransform with DenotTransformer with Ful
74
74
75
75
val defn = ctx.definitions
76
76
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
+
88
82
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
90
84
91
85
newSuperClass = tpd.ref(syp).select(nme.CONSTRUCTOR ).appliedToType(valueClass.typeRef).tpe.resultType
92
86
@@ -96,12 +90,12 @@ class ExtensionMethods extends MiniPhaseTransform with DenotTransformer with Ful
96
90
97
91
// add a VCXXXCompanion superclass
98
92
99
- moduleClass .copySymDenotation(info =
93
+ moduleClassSym .copySymDenotation(info =
100
94
cinfo.derivedClassInfo(
101
95
classParents = ctx.normalizeToClassRefs(List (newSuperClass), moduleSym, decls1),
102
96
decls = decls1))
103
97
case _ =>
104
- moduleClass
98
+ moduleClassSym
105
99
}
106
100
case ref : SymDenotation
107
101
if isMethodWithExtension(ref) && ref.hasAnnotation(defn.TailrecAnnotationClass ) =>
0 commit comments