Skip to content

Commit 19af0d2

Browse files
committed
Tweak syntax and use vars
1 parent 01447df commit 19af0d2

File tree

1 file changed

+11
-14
lines changed

1 file changed

+11
-14
lines changed

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

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1570,28 +1570,25 @@ trait Applications extends Compatibility {
15701570
def trySelectUnapply(qual: untpd.Tree)(fallBack: (Tree, TyperState) => Tree): Tree = {
15711571
// try first for non-overloaded, then for overloaded occurrences
15721572
def tryWithName(name: TermName)(fallBack: (Tree, TyperState) => Tree)(using Context): Tree =
1573-
/** Returns `true` if there are type parameters after the last explicit
1574-
* (non-implicit) term parameters list.
1575-
*/
1576-
@tailrec
1577-
def hasTrailingTypeParams(paramss: List[List[Symbol]], acc: Boolean = false): Boolean =
1573+
// `true` if there are type parameters not followed by explicit term parameters.
1574+
def hasTrailingTypeParams(paramss: List[List[Symbol]], trailingTypeParams: Boolean): Boolean =
15781575
paramss match
1579-
case Nil => acc
1580-
case params :: rest =>
1581-
val newAcc =
1582-
params match
1583-
case param :: _ if param.isType => true
1584-
case param :: _ if param.isTerm && !param.isOneOf(GivenOrImplicit) => false
1585-
case _ => acc
1586-
hasTrailingTypeParams(paramss.tail, newAcc)
1576+
case params :: paramss =>
1577+
val isTrailingTypeParams =
1578+
params match
1579+
case param :: _ if param.isType => true
1580+
case param :: _ if param.isTerm && !param.isOneOf(GivenOrImplicit) => false
1581+
case _ => trailingTypeParams
1582+
hasTrailingTypeParams(paramss, isTrailingTypeParams)
1583+
case nil => trailingTypeParams
15871584

15881585
def tryWithProto(qual: untpd.Tree, targs: List[Tree], pt: Type)(using Context) =
15891586
val proto = UnapplyFunProto(pt, this)
15901587
val unapp = untpd.Select(qual, name)
15911588
val result =
15921589
if targs.isEmpty then typedExpr(unapp, proto)
15931590
else typedExpr(unapp, PolyProto(targs, proto)).appliedToTypeTrees(targs)
1594-
if result.symbol.exists && hasTrailingTypeParams(result.symbol.paramSymss) then
1591+
if result.symbol.exists && hasTrailingTypeParams(result.symbol.paramSymss, trailingTypeParams = false) then
15951592
// We don't accept `unapply` or `unapplySeq` methods with type
15961593
// parameters after the last explicit term parameter because we
15971594
// can't encode them: `UnApply` nodes cannot take type paremeters.

0 commit comments

Comments
 (0)