@@ -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