@@ -2917,17 +2917,23 @@ object Parsers {
29172917 }
29182918
29192919 /** ClsParamClauses ::= {ClsParamClause} [[nl] ‘(’ [‘implicit’] ClsParams ‘)’]
2920- * | {ClsParamClause} {GivenClsParamClause}
2920+ * | ClsParamClause ClsParamClauses
2921+ * | ClsParamClauses1
2922+ * ClsParamClauses1 ::= WithClsParamClause ClsParamClauses
2923+ * | AnnotTypes ClsParamClauses1ClsParamClauses
29212924 * DefParamClauses ::= {DefParamClause} [[nl] ‘(’ [‘implicit’] DefParams ‘)’]
2922- * | {DefParamClause} {GivenParamClause}
2925+ * | DefParamClause DefParamClauses
2926+ * | DefParamClauses1
2927+ * DefParamClauses1 ::= WithCaramClause DefParamClauses
2928+ * | AnnotTypes DeParamClauses1
29232929 *
29242930 * @return The parameter definitions
29252931 */
29262932 def paramClauses (ofClass : Boolean = false ,
29272933 ofCaseClass : Boolean = false ,
29282934 givenOnly : Boolean = false ): List [List [ValDef ]] =
29292935
2930- def recur (firstClause : Boolean , nparams : Int , givenOnly : Boolean ): List [List [ValDef ]] =
2936+ def recur (firstClause : Boolean , nparams : Int ): List [List [ValDef ]] =
29312937 newLineOptWhenFollowedBy(LPAREN )
29322938 val prefixMods =
29332939 if in.token == WITH && in.ch != Chars .LF then // TODO: remove LF test
@@ -2949,14 +2955,17 @@ object Parsers {
29492955 || params.nonEmpty && params.head.mods.flags.is(Given )
29502956 params :: (
29512957 if lastClause then Nil
2952- else recur(firstClause = false , nparams + params.length, givenOnly | isGivenClause ))
2958+ else recur(firstClause = false , nparams + params.length))
29532959 else if prefixMods.is(Given ) then
29542960 val params = givenTypes(annotType, nparams, ofClass)
2955- params :: recur(firstClause = false , nparams + params.length, true )
2961+ params :: (
2962+ if in.token == WITH then recur(firstClause = false , nparams + params.length)
2963+ else Nil
2964+ )
29562965 else Nil
29572966 end recur
29582967
2959- recur(firstClause = true , 0 , givenOnly )
2968+ recur(firstClause = true , 0 )
29602969 end paramClauses
29612970
29622971/* -------- DEFS ------------------------------------------- */
@@ -3448,11 +3457,12 @@ object Parsers {
34483457 syntaxError(i " extension clause can only define methods " , stat.span)
34493458 }
34503459
3451- /** GivenDef ::= [GivenSig] [‘_’ ‘<:’] Type ‘=’ Expr
3452- * | [GivenSig] ConstrApps [TemplateBody]
3453- * GivenSig ::= [id] [DefTypeParamClause] GivenParamClauses ‘as’
3454- * ExtParamClause ::= [DefTypeParamClause] DefParamClause
3455- * ExtMethods ::= [nl] ‘{’ ‘def’ DefDef {semi ‘def’ DefDef} ‘}’
3460+ /** GivenDef ::= [GivenSig] [‘_’ ‘<:’] Type ‘=’ Expr
3461+ * | [GivenSig] ConstrApps [TemplateBody]
3462+ * GivenSig ::= [id] [DefTypeParamClause] {WithParamsOrTypes} ‘as’
3463+ * ExtParamClause ::= [DefTypeParamClause] DefParamClause
3464+ * ExtMethods ::= [nl] ‘{’ ‘def’ DefDef {semi ‘def’ DefDef} ‘}’
3465+ * WithParamsOrTypes ::= WithParamClause | AnnotTypes
34563466 */
34573467 def givenDef (start : Offset , mods : Modifiers , instanceMod : Mod ) = atSpan(start, nameStart) {
34583468 var mods1 = addMod(mods, instanceMod)
0 commit comments