@@ -721,7 +721,7 @@ object Parsers {
721
721
*/
722
722
def typ (): Tree = {
723
723
val start = in.offset
724
- val imods = funArgMods( EmptyModifiers )
724
+ val imods = modifiers(funArgMods )
725
725
def functionRest (params : List [Tree ]): Tree =
726
726
atPos(start, accept(ARROW )) {
727
727
val t = typ()
@@ -1064,7 +1064,7 @@ object Parsers {
1064
1064
def expr (location : Location .Value ): Tree = {
1065
1065
val start = in.offset
1066
1066
if (in.token == IMPLICIT || in.token == UNUSED ) {
1067
- val imods = funArgMods( EmptyModifiers )
1067
+ val imods = modifiers(funArgMods )
1068
1068
implicitClosure(start, location, imods)
1069
1069
} else {
1070
1070
val saved = placeholderParams
@@ -1729,14 +1729,7 @@ object Parsers {
1729
1729
/** FunArgMods ::= `implicit' FunArgMods
1730
1730
* | `unused' FunArgMods
1731
1731
*/
1732
- def funArgMods (imods : Modifiers , doIfImplicit : () => Unit = () => ()): Modifiers = {
1733
- if (in.token == IMPLICIT ) {
1734
- doIfImplicit()
1735
- funArgMods(addMod(imods, atPos(accept(IMPLICIT )) { Mod .Implicit () }), doIfImplicit)
1736
- } else if (in.token == UNUSED )
1737
- funArgMods(addMod(imods, atPos(accept(UNUSED )) { Mod .Unused () }), doIfImplicit)
1738
- else imods
1739
- }
1732
+ def funArgMods = BitSet (IMPLICIT , UNUSED )
1740
1733
1741
1734
/** Wrap annotation or constructor in New(...).<init> */
1742
1735
def wrapNew (tpt : Tree ) = Select (New (tpt), nme.CONSTRUCTOR )
@@ -1828,7 +1821,7 @@ object Parsers {
1828
1821
* ClsParamClause ::= [nl] `(' [`unused'] [ClsParams] ')'
1829
1822
* ClsParams ::= ClsParam {`' ClsParam}
1830
1823
* ClsParam ::= {Annotation} [{Modifier} (`val' | `var') | `inline'] Param
1831
- * DefParamClauses ::= {DefParamClause} [[nl] `(' [`unused'] `implicit' DefParams `)']
1824
+ * DefParamClauses ::= {DefParamClause} [[nl] `(' [`FunArgMods'] DefParams `)']
1832
1825
* DefParamClause ::= [nl] `(' [`unused'] [DefParams] ')'
1833
1826
* DefParams ::= DefParam {`,' DefParam}
1834
1827
* DefParam ::= {Annotation} [`inline'] Param
@@ -1882,8 +1875,18 @@ object Parsers {
1882
1875
def paramClause (): List [ValDef ] = inParens {
1883
1876
if (in.token == RPAREN ) Nil
1884
1877
else {
1885
- if (in.token == IMPLICIT || in.token == UNUSED )
1886
- imods = funArgMods(imods, () => implicitOffset = in.offset)
1878
+ def funArgMods (): Unit = {
1879
+ if (in.token == IMPLICIT ) {
1880
+ implicitOffset = in.offset
1881
+ imods = addMod(imods, atPos(accept(IMPLICIT )) { Mod .Implicit () })
1882
+ funArgMods()
1883
+ } else if (in.token == UNUSED ) {
1884
+ imods = addMod(imods, atPos(accept(UNUSED )) { Mod .Unused () })
1885
+ funArgMods()
1886
+ }
1887
+ }
1888
+ funArgMods()
1889
+
1887
1890
commaSeparated(() => param())
1888
1891
}
1889
1892
}
@@ -2479,7 +2482,7 @@ object Parsers {
2479
2482
else if (isDefIntro(localModifierTokens))
2480
2483
if (in.token == IMPLICIT || in.token == UNUSED ) {
2481
2484
val start = in.offset
2482
- var imods = funArgMods( EmptyModifiers )
2485
+ var imods = modifiers(funArgMods )
2483
2486
if (isBindingIntro) stats += implicitClosure(start, Location .InBlock , imods)
2484
2487
else stats +++= localDef(start, imods)
2485
2488
} else {
0 commit comments