Skip to content

Commit 19a029b

Browse files
committed
Inline _N case class product members under -Yscala2-stdlib
Scala 2 does not generate the methods `_N`. This is solved by inlining those calls, which removes the calls to those methods and the definitions of those methods in the bytecode.
1 parent 13a0102 commit 19a029b

File tree

3 files changed

+13
-27
lines changed

3 files changed

+13
-27
lines changed

compiler/src/dotty/tools/dotc/ast/Desugar.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -637,7 +637,10 @@ object desugar {
637637
// new C[...](p1, ..., pN)(moreParams)
638638
val (caseClassMeths, enumScaffolding) = {
639639
def syntheticProperty(name: TermName, tpt: Tree, rhs: Tree) =
640-
DefDef(name, Nil, tpt, rhs).withMods(synthetic)
640+
val mods =
641+
if ctx.settings.Yscala2Stdlib.value then synthetic | Inline
642+
else synthetic
643+
DefDef(name, Nil, tpt, rhs).withMods(mods)
641644

642645
def productElemMeths =
643646
val caseParams = derivedVparamss.head.toArray

project/MiMaFilters.scala

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,6 @@ object MiMaFilters {
208208
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.StreamExtensions#AccumulatorFactoryInfo.*AccumulatorFactoryInfo"),
209209
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.StreamExtensions#StreamShape.*StreamShape"),
210210
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.StreamExtensions#StreamUnboxer.*StreamUnboxer"),
211-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.::._1"),
212-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.::._2"),
213211
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.List.partialNotApplied"),
214212
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.ListSet.emptyInstance"),
215213
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.Nil.andThen"),
@@ -220,16 +218,10 @@ object MiMaFilters {
220218
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.Set.emptyInstance"),
221219
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.Stream.collectedTail"),
222220
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.Stream.filteredTail"),
223-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.TreeSeqMap#Ordering#Bin._1"),
224-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.TreeSeqMap#Ordering#Bin._2"),
225-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.TreeSeqMap#Ordering#Bin._3"),
226-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.TreeSeqMap#Ordering#Bin._4"),
227221
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.TreeSeqMap#Ordering#Bin.apply"),
228222
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.TreeSeqMap#Ordering#Bin.unapply"),
229223
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.TreeSeqMap#Ordering#Iterator.empty"),
230224
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.TreeSeqMap#Ordering#Iterator.Empty"),
231-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.TreeSeqMap#Ordering#Tip._1"),
232-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.TreeSeqMap#Ordering#Tip._2"),
233225
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.TreeSeqMap#Ordering#Tip.apply"),
234226
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.TreeSeqMap#Ordering#Tip.unapply"),
235227
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.Vector.fillSparse"),
@@ -253,10 +245,8 @@ object MiMaFilters {
253245
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.RedBlackTree#Tree.empty"),
254246
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.UnrolledBuffer.unrolledlength"),
255247
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.UnrolledBuffer#Unrolled.<init>$default$4"),
256-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.Searching#Found._1"),
257248
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.Searching#Found.apply"),
258249
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.Searching#Found.unapply"),
259-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.Searching#InsertionPoint._1"),
260250
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.Searching#InsertionPoint.apply"),
261251
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.Searching#InsertionPoint.unapply"),
262252
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.SortedMapFactoryDefaults.empty"),
@@ -265,13 +255,11 @@ object MiMaFilters {
265255
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.SortedSetOps.ordMsg"),
266256
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.SortedSetOps.zipOrdMsg"),
267257
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.Stepper.throwNSEE"),
268-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringView._1"),
269258
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.View.dropRightIterator"),
270259
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.View.takeRightIterator"),
271260
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.View#Filter.apply"),
272261
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.BatchingExecutor#AbstractBatch.this"),
273262
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.Channel#LinkedList.this"),
274-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.duration.Deadline._1"),
275263
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.ExecutionContext.opportunistic"),
276264
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.Future.addToBuilderFun"),
277265
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.Future.collectFailed"),
@@ -295,40 +283,26 @@ object MiMaFilters {
295283
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.jdk.FunctionWrappers#*"),
296284
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.math.Ordering.tryCompare"),
297285
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.PartialFunction.unlifted"),
298-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.ScalaReflectionException._1"),
299-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Some._1"),
300-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.StringContext._1"),
301286
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.sys.process.BasicIO.connectNoOp"),
302287
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.sys.process.BasicIO.connectToStdIn"),
303288
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.sys.process.Process.Future"),
304289
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.sys.process.Process.Spawn"),
305-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.UninitializedFieldError._1"),
306290
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.control.Exception#Catch.<init>$default$2"),
307291
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.control.Exception#Catch.<init>$default$3"),
308-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.control.TailCalls#Call._1"),
309292
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.control.TailCalls#Call.apply"),
310293
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.control.TailCalls#Call.unapply"),
311-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.control.TailCalls#Cont._1"),
312-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.control.TailCalls#Cont._2"),
313294
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.control.TailCalls#Cont.apply"),
314295
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.control.TailCalls#Cont.unapply"),
315-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.control.TailCalls#Done._1"),
316296
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.control.TailCalls#Done.apply"),
317297
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.control.TailCalls#Done.unapply"),
318-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Either#LeftProjection._1"),
319298
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Either#LeftProjection.apply"),
320299
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Either#LeftProjection.unapply"),
321-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Either#RightProjection._1"),
322300
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Either#RightProjection.apply"),
323301
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Either#RightProjection.unapply"),
324-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Failure._1"),
325-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Left._1"),
326302
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.matching.Regex#Match.unapply"),
327303
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Properties.coloredOutputEnabled"),
328304
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Properties.isAvian"),
329305
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Properties.versionFor"),
330-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Right._1"),
331-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Success._1"),
332306

333307
// Non-categorized
334308
ProblemFilters.exclude[IncompatibleMethTypeProblem]("scala.collection.mutable.ArrayBuilder#ofUnit.addAll"),

stdlib-2_13-bootstrapped/test/Main.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ object HelloWorld:
1515

1616
testScala2UnapplySignatures()
1717
testScala2ObjectParents()
18+
testScala2ProductMembers()
1819
}
1920

2021
def testScala2UnapplySignatures() = {
@@ -31,3 +32,11 @@ object HelloWorld:
3132
assert(!typeChecks("Either: scala.deriving.Mirror.Sum"))
3233
assert(!typeChecks("Either: scala.deriving.Mirror"))
3334
}
35+
def testScala2ProductMembers() = {
36+
Some(1)._1
37+
Right(1)._1
38+
(1, 2)._1
39+
(1, 2)._2
40+
::(1, Nil)._1
41+
::(1, Nil)._2
42+
}

0 commit comments

Comments
 (0)