Skip to content

Commit 5cdfb1c

Browse files
committed
Move specializedTupleArgs into defn
1 parent 522a51c commit 5cdfb1c

File tree

2 files changed

+33
-31
lines changed

2 files changed

+33
-31
lines changed

compiler/src/dotty/tools/dotc/core/Definitions.scala

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1329,6 +1329,37 @@ class Definitions {
13291329

13301330
@tu lazy val TupleType: Array[TypeRef | Null] = mkArityArray("scala.Tuple", MaxTupleArity, 1)
13311331

1332+
def specializedTupleArgs(cls: Symbol): List[Type] = cls.name.toString match
1333+
case "Tuple1$mcD$sp" => List(defn.DoubleType)
1334+
case "Tuple1$mcI$sp" => List(defn.IntType)
1335+
case "Tuple1$mcJ$sp" => List(defn.LongType)
1336+
case "Tuple2$mcCC$sp" => List(defn.CharType, defn.CharType)
1337+
case "Tuple2$mcCD$sp" => List(defn.CharType, defn.DoubleType)
1338+
case "Tuple2$mcCI$sp" => List(defn.CharType, defn.IntType)
1339+
case "Tuple2$mcCJ$sp" => List(defn.CharType, defn.LongType)
1340+
case "Tuple2$mcCZ$sp" => List(defn.CharType, defn.BooleanType)
1341+
case "Tuple2$mcDC$sp" => List(defn.DoubleType, defn.CharType)
1342+
case "Tuple2$mcDD$sp" => List(defn.DoubleType, defn.DoubleType)
1343+
case "Tuple2$mcDI$sp" => List(defn.DoubleType, defn.IntType)
1344+
case "Tuple2$mcDJ$sp" => List(defn.DoubleType, defn.LongType)
1345+
case "Tuple2$mcDZ$sp" => List(defn.DoubleType, defn.BooleanType)
1346+
case "Tuple2$mcIC$sp" => List(defn.IntType, defn.CharType)
1347+
case "Tuple2$mcID$sp" => List(defn.IntType, defn.DoubleType)
1348+
case "Tuple2$mcII$sp" => List(defn.IntType, defn.IntType)
1349+
case "Tuple2$mcIJ$sp" => List(defn.IntType, defn.LongType)
1350+
case "Tuple2$mcIZ$sp" => List(defn.IntType, defn.BooleanType)
1351+
case "Tuple2$mcJC$sp" => List(defn.LongType, defn.CharType)
1352+
case "Tuple2$mcJD$sp" => List(defn.LongType, defn.DoubleType)
1353+
case "Tuple2$mcJI$sp" => List(defn.LongType, defn.IntType)
1354+
case "Tuple2$mcJJ$sp" => List(defn.LongType, defn.LongType)
1355+
case "Tuple2$mcJZ$sp" => List(defn.LongType, defn.BooleanType)
1356+
case "Tuple2$mcZC$sp" => List(defn.BooleanType, defn.CharType)
1357+
case "Tuple2$mcZD$sp" => List(defn.BooleanType, defn.DoubleType)
1358+
case "Tuple2$mcZI$sp" => List(defn.BooleanType, defn.IntType)
1359+
case "Tuple2$mcZJ$sp" => List(defn.BooleanType, defn.LongType)
1360+
case "Tuple2$mcZZ$sp" => List(defn.BooleanType, defn.BooleanType)
1361+
case _ => Nil
1362+
13321363
def SpecialisedTuple(base: Symbol, args: List[Type]): Symbol = base.owner.requiredClass(base.name.specializedName(args))
13331364

13341365
private class FunType(prefix: String):

compiler/src/dotty/tools/dotc/core/classfile/ClassfileParser.scala

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -426,37 +426,8 @@ class ClassfileParser(
426426
// But it's a problem when running -Ycheck after TupleSpecialisation
427427
// as the tree `new Tuple2$mcIC$sp(1, 'a')` doesn't typecheck against
428428
// the expected `(Int, Char)` type.
429-
val args = (if owner == null then "" else owner.name.toString) match
430-
case "Tuple1$mcD$sp" => List(defn.DoubleType)
431-
case "Tuple1$mcI$sp" => List(defn.IntType)
432-
case "Tuple1$mcJ$sp" => List(defn.LongType)
433-
case "Tuple2$mcCC$sp" => List(defn.CharType, defn.CharType)
434-
case "Tuple2$mcCD$sp" => List(defn.CharType, defn.DoubleType)
435-
case "Tuple2$mcCI$sp" => List(defn.CharType, defn.IntType)
436-
case "Tuple2$mcCJ$sp" => List(defn.CharType, defn.LongType)
437-
case "Tuple2$mcCZ$sp" => List(defn.CharType, defn.BooleanType)
438-
case "Tuple2$mcDC$sp" => List(defn.DoubleType, defn.CharType)
439-
case "Tuple2$mcDD$sp" => List(defn.DoubleType, defn.DoubleType)
440-
case "Tuple2$mcDI$sp" => List(defn.DoubleType, defn.IntType)
441-
case "Tuple2$mcDJ$sp" => List(defn.DoubleType, defn.LongType)
442-
case "Tuple2$mcDZ$sp" => List(defn.DoubleType, defn.BooleanType)
443-
case "Tuple2$mcIC$sp" => List(defn.IntType, defn.CharType)
444-
case "Tuple2$mcID$sp" => List(defn.IntType, defn.DoubleType)
445-
case "Tuple2$mcII$sp" => List(defn.IntType, defn.IntType)
446-
case "Tuple2$mcIJ$sp" => List(defn.IntType, defn.LongType)
447-
case "Tuple2$mcIZ$sp" => List(defn.IntType, defn.BooleanType)
448-
case "Tuple2$mcJC$sp" => List(defn.LongType, defn.CharType)
449-
case "Tuple2$mcJD$sp" => List(defn.LongType, defn.DoubleType)
450-
case "Tuple2$mcJI$sp" => List(defn.LongType, defn.IntType)
451-
case "Tuple2$mcJJ$sp" => List(defn.LongType, defn.LongType)
452-
case "Tuple2$mcJZ$sp" => List(defn.LongType, defn.BooleanType)
453-
case "Tuple2$mcZC$sp" => List(defn.BooleanType, defn.CharType)
454-
case "Tuple2$mcZD$sp" => List(defn.BooleanType, defn.DoubleType)
455-
case "Tuple2$mcZI$sp" => List(defn.BooleanType, defn.IntType)
456-
case "Tuple2$mcZJ$sp" => List(defn.BooleanType, defn.LongType)
457-
case "Tuple2$mcZZ$sp" => List(defn.BooleanType, defn.BooleanType)
458-
case _ => argsBuf.toList
459-
AppliedType(tp, args)
429+
val args = defn.specializedTupleArgs(if owner == null then NoSymbol else owner)
430+
AppliedType(tp, if args.isEmpty then argsBuf.toList else args)
460431
}
461432
else tp
462433
case tp =>

0 commit comments

Comments
 (0)