Skip to content

Commit 3ebf926

Browse files
Use compUnitInfo in mirrorSupportsDefaultArguments
1 parent 247917c commit 3ebf926

File tree

3 files changed

+12
-9
lines changed

3 files changed

+12
-9
lines changed

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import Constants.Constant
1616
import Annotations.Annotation
1717
import Phases.*
1818
import ast.tpd.Literal
19-
import dotty.tools.tasty.TastyHeaderUnpickler.TastyVersion
2019
import transform.Mixin
20+
import dotty.tools.tasty.TastyVersion
2121

2222
import dotty.tools.dotc.transform.sjs.JSSymUtils.sjsNeedsField
2323

@@ -120,9 +120,10 @@ class SymUtils:
120120
*/
121121
def mirrorSupportsDefaultArguments(using Context): Boolean =
122122
!self.is(JavaDefined) && !self.is(Scala2x) && self.isClass && {
123-
// val tastyVersion: TastyVersion = ???
124-
// tastyVersion.major == 28 && tastyVersion.minor >= 4
125-
true // TODO
123+
val compUnitInfo = self.asClass.compUnitInfo
124+
compUnitInfo != null && (compUnitInfo.nn.tastyInfo match
125+
case None => true // was not loaded from TASTy
126+
case Some(TastyInfo(TastyVersion(major, minor, exp), _)) => major == 28 && minor >= 4)
126127
}
127128

128129
/** Is this an old style implicit conversion?

compiler/src/dotty/tools/dotc/transform/SyntheticMembers.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import NameOps.*
1010
import Annotations.Annotation
1111
import typer.ProtoTypes.constrained
1212
import ast.{tpd, untpd}
13+
1314
import util.Property
1415
import util.Spans.Span
1516
import config.Printers.derive
@@ -644,7 +645,7 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
644645
synthesizeDef(meth, vrefss => body(cls, vrefss.head.head))
645646
}
646647
}
647-
def overrideMethod(name: TermName, info: Type, cls: Symbol, body: (Symbol, Tree) => Context ?=> Tree): Unit = { // TODO online override if changed
648+
def overrideMethod(name: TermName, info: Type, cls: Symbol, body: (Symbol, Tree) => Context ?=> Tree): Unit = {
648649
val meth = newSymbol(clazz, name, Synthetic | Method | Override, info, coord = clazz.coord)
649650
meth.enteredAfter(thisPhase)
650651
newBody = newBody :+ synthesizeExperimentalDef(meth, vrefss => body(cls, vrefss.head.head))
@@ -666,8 +667,9 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
666667
addParent(defn.Mirror_ProductClass.typeRef)
667668
addMethod(nme.fromProduct, MethodType(defn.ProductClass.typeRef :: Nil, monoType.typeRef), cls,
668669
fromProductBody(_, _, optInfo).ensureConforms(monoType.typeRef)) // t4758.scala or i3381.scala are examples where a cast is needed
669-
if cls.mirrorSupportsDefaultArguments && cls.primaryConstructor.hasDefaultParams then overrideMethod(
670-
nme.defaultArgument, MethodType(defn.IntType :: Nil, defn.AnyType), cls, defaultArgumentBody(_, _, optInfo))
670+
if cls.mirrorSupportsDefaultArguments && cls.primaryConstructor.hasDefaultParams then
671+
overrideMethod(nme.defaultArgument, MethodType(defn.IntType :: Nil, defn.AnyType), cls,
672+
defaultArgumentBody(_, _, optInfo))
671673
}
672674
def makeSumMirror(cls: Symbol, optInfo: Option[MirrorImpl.OfSum]) = {
673675
addParent(defn.Mirror_SumClass.typeRef)

compiler/src/dotty/tools/dotc/typer/Synthesizer.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,8 +411,8 @@ class Synthesizer(typer: Typer)(using @constructorOnly c: Context):
411411
val elemLabels = accessors.map(acc => ConstantType(Constant(acc.name.toString)))
412412
val elemsLabels = TypeOps.nestedPairs(elemLabels)
413413

414-
val supportsDefaults = cls.mirrorSupportsDefaultArguments
415-
val elemHasDefaults = accessors.map(acc => ConstantType(Constant(supportsDefaults && acc.is(HasDefault))))
414+
val elemHasDefaults = accessors.map(acc =>
415+
ConstantType(Constant(cls.mirrorSupportsDefaultArguments && acc.is(HasDefault))))
416416
val elemsHasDefaults = TypeOps.nestedPairs(elemHasDefaults)
417417

418418
val typeElems = tps.getOrElse(accessors.map(mirroredType.resultType.memberInfo(_).widenExpr))

0 commit comments

Comments
 (0)