Skip to content

Commit 9b44af3

Browse files
committed
Use set for funArgMods
1 parent 97925a0 commit 9b44af3

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

compiler/src/dotty/tools/dotc/parsing/Parsers.scala

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -716,7 +716,7 @@ object Parsers {
716716
*/
717717
def typ(): Tree = {
718718
val start = in.offset
719-
val imods = funArgMods(EmptyModifiers)
719+
val imods = modifiers(funArgMods)
720720
def functionRest(params: List[Tree]): Tree =
721721
atPos(start, accept(ARROW)) {
722722
val t = typ()
@@ -1055,7 +1055,7 @@ object Parsers {
10551055
def expr(location: Location.Value): Tree = {
10561056
val start = in.offset
10571057
if (in.token == IMPLICIT || in.token == UNUSED) {
1058-
val imods = funArgMods(EmptyModifiers)
1058+
val imods = modifiers(funArgMods)
10591059
implicitClosure(start, location, imods)
10601060
} else {
10611061
val saved = placeholderParams
@@ -1723,14 +1723,7 @@ object Parsers {
17231723
/** FunArgMods ::= `implicit' FunArgMods
17241724
* | `unused' FunArgMods
17251725
*/
1726-
def funArgMods(imods: Modifiers, doIfImplicit: () => Unit = () => ()): Modifiers = {
1727-
if (in.token == IMPLICIT) {
1728-
doIfImplicit()
1729-
funArgMods(addMod(imods, atPos(accept(IMPLICIT)) { Mod.Implicit() }), doIfImplicit)
1730-
} else if (in.token == UNUSED)
1731-
funArgMods(addMod(imods, atPos(accept(UNUSED)) { Mod.Unused() }), doIfImplicit)
1732-
else imods
1733-
}
1726+
def funArgMods = BitSet(IMPLICIT, UNUSED)
17341727

17351728
/** Wrap annotation or constructor in New(...).<init> */
17361729
def wrapNew(tpt: Tree) = Select(New(tpt), nme.CONSTRUCTOR)
@@ -1822,7 +1815,7 @@ object Parsers {
18221815
* ClsParamClause ::= [nl] `(' [`unused'] [ClsParams] ')'
18231816
* ClsParams ::= ClsParam {`' ClsParam}
18241817
* ClsParam ::= {Annotation} [{Modifier} (`val' | `var') | `inline'] Param
1825-
* DefParamClauses ::= {DefParamClause} [[nl] `(' [`unused'] `implicit' DefParams `)']
1818+
* DefParamClauses ::= {DefParamClause} [[nl] `(' [`FunArgMods'] DefParams `)']
18261819
* DefParamClause ::= [nl] `(' [`unused'] [DefParams] ')'
18271820
* DefParams ::= DefParam {`,' DefParam}
18281821
* DefParam ::= {Annotation} [`inline'] Param
@@ -1876,8 +1869,18 @@ object Parsers {
18761869
def paramClause(): List[ValDef] = inParens {
18771870
if (in.token == RPAREN) Nil
18781871
else {
1879-
if (in.token == IMPLICIT || in.token == UNUSED)
1880-
imods = funArgMods(imods, () => implicitOffset = in.offset)
1872+
def funArgMods(): Unit = {
1873+
if (in.token == IMPLICIT) {
1874+
implicitOffset = in.offset
1875+
imods = addMod(imods, atPos(accept(IMPLICIT)) { Mod.Implicit() })
1876+
funArgMods()
1877+
} else if (in.token == UNUSED) {
1878+
imods = addMod(imods, atPos(accept(UNUSED)) { Mod.Unused() })
1879+
funArgMods()
1880+
}
1881+
}
1882+
funArgMods()
1883+
18811884
commaSeparated(() => param())
18821885
}
18831886
}
@@ -2473,7 +2476,7 @@ object Parsers {
24732476
else if (isDefIntro(localModifierTokens))
24742477
if (in.token == IMPLICIT || in.token == UNUSED) {
24752478
val start = in.offset
2476-
var imods = funArgMods(EmptyModifiers)
2479+
var imods = modifiers(funArgMods)
24772480
if (isBindingIntro) stats += implicitClosure(start, Location.InBlock, imods)
24782481
else stats +++= localDef(start, imods)
24792482
} else {

0 commit comments

Comments
 (0)