Skip to content

Commit d4be1f8

Browse files
committed
Simplify
1 parent c92f1e2 commit d4be1f8

File tree

1 file changed

+14
-22
lines changed

1 file changed

+14
-22
lines changed

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

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)