@@ -1070,25 +1070,16 @@ class Namer { typer: Typer =>
10701070 else Yes
10711071 }
10721072
1073- def defaultGetters (sym : TermSymbol ): List [Symbol ] =
1074- def recur (params : List [Symbol ], paramss : List [List [Symbol ]], n : Int ): List [Symbol ] =
1075- params match
1076- case param :: params1 =>
1077- def otherGetters =
1078- recur(params1, paramss, if param.isType then n else n + 1 )
1079- if param.is(HasDefault ) then
1080- val getterName = DefaultGetterName (sym.name, n)
1081- val getter = path.tpe.member(DefaultGetterName (sym.name, n)).symbol
1082- assert(getter.exists, i " $path does not have a default getter named $getterName" )
1083- getter :: otherGetters
1084- else
1085- otherGetters
1086- case Nil =>
1087- paramss match
1088- case params1 :: paramss1 => recur(params1, paramss1, n)
1089- case Nil => Nil
1090- recur(Nil , sym.paramSymss, 0 )
1091- .showing(i " default getters of $sym, ${sym.paramSymss.nestedMap(_.flagsString)} = $result" )
1073+ def foreachDefaultGetterOf (sym : TermSymbol , op : TermSymbol => Unit ): Unit =
1074+ var n = 0
1075+ for params <- sym.paramSymss; param <- params do
1076+ if param.isTerm then
1077+ if param.is(HasDefault ) then
1078+ val getterName = DefaultGetterName (sym.name, n)
1079+ val getter = path.tpe.member(DefaultGetterName (sym.name, n)).symbol
1080+ assert(getter.exists, i " $path does not have a default getter named $getterName" )
1081+ op(getter.asTerm)
1082+ n += 1
10921083
10931084 /** Add a forwarder with name `alias` or its type name equivalent to `mbr`,
10941085 * provided `mbr` is accessible and of the right implicit/non-implicit kind.
@@ -1112,6 +1103,7 @@ class Namer { typer: Typer =>
11121103
11131104 if canForward(mbr) == CanForward .Yes then
11141105 val sym = mbr.symbol
1106+ val hasDefaults = sym.hasDefaultParams // compute here to ensure HasDefaultParams and NoDefaultParams flags are set
11151107 val forwarder =
11161108 if mbr.isType then
11171109 val forwarderName = checkNoConflict(alias.toTypeName, isPrivate = false , span)
@@ -1136,7 +1128,6 @@ class Namer { typer: Typer =>
11361128 (StableRealizable , ExprType (path.tpe.select(sym)))
11371129 else
11381130 (EmptyFlags , mbr.info.ensureMethodic)
1139- sym.hasDefaultParams // ensure HasDefaultParams and NoDefaultParams flags are set
11401131 var mbrFlags = Exported | Method | Final | maybeStable | sym.flags & RetainedExportFlags
11411132 if sym.is(ExtensionMethod ) then mbrFlags |= ExtensionMethod
11421133 val forwarderName = checkNoConflict(alias, isPrivate = false , span)
@@ -1155,8 +1146,9 @@ class Namer { typer: Typer =>
11551146 if forwarder.isInlineMethod then
11561147 PrepareInlineable .registerInlineInfo(forwarder, ddef.rhs)
11571148 buf += ddef.withSpan(span)
1158- for getter <- defaultGetters(sym.asTerm) do
1159- addForwarder(getter.name.asTermName, getter, span)
1149+ if hasDefaults then
1150+ foreachDefaultGetterOf(sym.asTerm,
1151+ getter => addForwarder(getter.name.asTermName, getter, span))
11601152 end addForwarder
11611153
11621154 def addForwardersNamed (name : TermName , alias : TermName , span : Span ): Unit =
0 commit comments