@@ -1070,25 +1070,16 @@ class Namer { typer: Typer =>
1070
1070
else Yes
1071
1071
}
1072
1072
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
1092
1083
1093
1084
/** Add a forwarder with name `alias` or its type name equivalent to `mbr`,
1094
1085
* provided `mbr` is accessible and of the right implicit/non-implicit kind.
@@ -1112,6 +1103,7 @@ class Namer { typer: Typer =>
1112
1103
1113
1104
if canForward(mbr) == CanForward .Yes then
1114
1105
val sym = mbr.symbol
1106
+ val hasDefaults = sym.hasDefaultParams // compute here to ensure HasDefaultParams and NoDefaultParams flags are set
1115
1107
val forwarder =
1116
1108
if mbr.isType then
1117
1109
val forwarderName = checkNoConflict(alias.toTypeName, isPrivate = false , span)
@@ -1136,7 +1128,6 @@ class Namer { typer: Typer =>
1136
1128
(StableRealizable , ExprType (path.tpe.select(sym)))
1137
1129
else
1138
1130
(EmptyFlags , mbr.info.ensureMethodic)
1139
- sym.hasDefaultParams // ensure HasDefaultParams and NoDefaultParams flags are set
1140
1131
var mbrFlags = Exported | Method | Final | maybeStable | sym.flags & RetainedExportFlags
1141
1132
if sym.is(ExtensionMethod ) then mbrFlags |= ExtensionMethod
1142
1133
val forwarderName = checkNoConflict(alias, isPrivate = false , span)
@@ -1155,8 +1146,9 @@ class Namer { typer: Typer =>
1155
1146
if forwarder.isInlineMethod then
1156
1147
PrepareInlineable .registerInlineInfo(forwarder, ddef.rhs)
1157
1148
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))
1160
1152
end addForwarder
1161
1153
1162
1154
def addForwardersNamed (name : TermName , alias : TermName , span : Span ): Unit =
0 commit comments