@@ -3083,16 +3083,17 @@ object Parsers {
3083
3083
* | DefTermParamClause
3084
3084
* | UsingParamClause
3085
3085
*/
3086
- def typeOrTermParamClause (nparams : Int , // number of parameters preceding this clause
3087
- ofClass : Boolean = false , // owner is a class
3088
- ofCaseClass : Boolean = false , // owner is a case class
3089
- prefix : Boolean = false , // clause precedes name of an extension method
3090
- givenOnly : Boolean = false , // only given parameters allowed
3091
- firstClause : Boolean = false , // clause is the first in regular list of clauses
3092
- ownerKind : ParamOwner
3086
+ def typeOrTermParamClause (
3087
+ ownerKind : ParamOwner ,
3088
+ nparams : Int , // number of parameters preceding this clause
3089
+ ofClass : Boolean = false , // owner is a class
3090
+ ofCaseClass : Boolean = false , // owner is a case class
3091
+ prefix : Boolean = false , // clause precedes name of an extension method
3092
+ givenOnly : Boolean = false , // only given parameters allowed
3093
+ firstClause : Boolean = false // clause is the first in regular list of clauses
3093
3094
): List [TypeDef ] | List [ValDef ] =
3094
3095
if (in.token == LPAREN )
3095
- paramClause (nparams, ofClass, ofCaseClass, prefix, givenOnly, firstClause)
3096
+ termParamClause (nparams, ofClass, ofCaseClass, prefix, givenOnly, firstClause)
3096
3097
else if (in.token == LBRACKET )
3097
3098
typeParamClause(ownerKind)
3098
3099
else
@@ -3103,34 +3104,34 @@ object Parsers {
3103
3104
/** DefParamClauses ::= DefParamClause { DefParamClause }
3104
3105
*/
3105
3106
def typeOrTermParamClauses (
3106
- ownerKind : ParamOwner ,
3107
- ofClass : Boolean = false ,
3108
- ofCaseClass : Boolean = false ,
3109
- givenOnly : Boolean = false ,
3110
- numLeadParams : Int = 0
3111
- ): List [List [TypeDef ] | List [ValDef ]] =
3112
-
3113
- def recur (firstClause : Boolean , nparams : Int ): List [List [TypeDef ] | List [ValDef ]] =
3107
+ ownerKind : ParamOwner ,
3108
+ ofClass : Boolean = false ,
3109
+ ofCaseClass : Boolean = false ,
3110
+ givenOnly : Boolean = false ,
3111
+ numLeadParams : Int = 0
3112
+ ): List [List [TypeDef ] | List [ValDef ]] =
3113
+
3114
+ def recur (firstClause : Boolean , numLeadParams : Int ): List [List [TypeDef ] | List [ValDef ]] =
3114
3115
newLineOptWhenFollowedBy(LPAREN )
3115
3116
newLineOptWhenFollowedBy(LBRACKET )
3116
3117
if in.token == LPAREN then
3117
3118
val paramsStart = in.offset
3118
- val params = paramClause (
3119
- nparams ,
3119
+ val params = termParamClause (
3120
+ numLeadParams ,
3120
3121
ofClass = ofClass,
3121
3122
ofCaseClass = ofCaseClass,
3122
3123
givenOnly = givenOnly,
3123
3124
firstClause = firstClause)
3124
3125
val lastClause = params.nonEmpty && params.head.mods.flags.is(Implicit )
3125
3126
params :: (
3126
3127
if lastClause then Nil
3127
- else recur(firstClause = false , nparams + params.length))
3128
+ else recur(firstClause = false , numLeadParams + params.length))
3128
3129
else if in.token == LBRACKET then
3129
- typeParamClause(ownerKind) :: recur(firstClause, nparams )
3130
+ typeParamClause(ownerKind) :: recur(firstClause, numLeadParams )
3130
3131
else Nil
3131
3132
end recur
3132
3133
3133
- recur(firstClause = true , nparams = numLeadParams)
3134
+ recur(firstClause = true , numLeadParams = numLeadParams)
3134
3135
end typeOrTermParamClauses
3135
3136
3136
3137
@@ -3187,15 +3188,15 @@ object Parsers {
3187
3188
3188
3189
/** ContextTypes ::= FunArgType {‘,’ FunArgType}
3189
3190
*/
3190
- def contextTypes (ofClass : Boolean , nparams : Int , impliedMods : Modifiers ): List [ValDef ] =
3191
+ def contextTypes (ofClass : Boolean , numLeadParams : Int , impliedMods : Modifiers ): List [ValDef ] =
3191
3192
val tps = commaSeparated(funArgType)
3192
- var counter = nparams
3193
+ var counter = numLeadParams
3193
3194
def nextIdx = { counter += 1 ; counter }
3194
3195
val paramFlags = if ofClass then LocalParamAccessor else Param
3195
3196
tps.map(makeSyntheticParameter(nextIdx, _, paramFlags | Synthetic | impliedMods.flags))
3196
3197
3197
- /** ClsParamClause ::= ‘(’ [‘erased’] ClsParams ‘)’ | UsingClsParamClause
3198
- * UsingClsParamClause ::= ‘(’ ‘using’ [‘erased’] (ClsParams | ContextTypes) ‘)’
3198
+ /** ClsTermParamClause ::= ‘(’ [‘erased’] ClsParams ‘)’ | UsingClsTermParamClause
3199
+ * UsingClsTermParamClause ::= ‘(’ ‘using’ [‘erased’] (ClsParams | ContextTypes) ‘)’
3199
3200
* ClsParams ::= ClsParam {‘,’ ClsParam}
3200
3201
* ClsParam ::= {Annotation}
3201
3202
*
@@ -3212,13 +3213,14 @@ object Parsers {
3212
3213
*
3213
3214
* @return the list of parameter definitions
3214
3215
*/
3215
- def paramClause (nparams : Int , // number of parameters preceding this clause
3216
- ofClass : Boolean = false , // owner is a class
3217
- ofCaseClass : Boolean = false , // owner is a case class
3218
- prefix : Boolean = false , // clause precedes name of an extension method
3219
- givenOnly : Boolean = false , // only given parameters allowed
3220
- firstClause : Boolean = false // clause is the first in regular list of clauses
3221
- ): List [ValDef ] = {
3216
+ def termParamClause (
3217
+ numLeadParams : Int , // number of parameters preceding this clause
3218
+ ofClass : Boolean = false , // owner is a class
3219
+ ofCaseClass : Boolean = false , // owner is a case class
3220
+ prefix : Boolean = false , // clause precedes name of an extension method
3221
+ givenOnly : Boolean = false , // only given parameters allowed
3222
+ firstClause : Boolean = false // clause is the first in regular list of clauses
3223
+ ): List [ValDef ] = {
3222
3224
var impliedMods : Modifiers = EmptyModifiers
3223
3225
3224
3226
def addParamMod (mod : () => Mod ) = impliedMods = addMod(impliedMods, atSpan(in.skipToken()) { mod() })
@@ -3283,7 +3285,7 @@ object Parsers {
3283
3285
checkVarArgsRules(rest)
3284
3286
}
3285
3287
3286
- // begin paramClause
3288
+ // begin termParamClause
3287
3289
inParens {
3288
3290
if in.token == RPAREN && ! prefix && ! impliedMods.is(Given ) then Nil
3289
3291
else
@@ -3298,41 +3300,43 @@ object Parsers {
3298
3300
|| startParamTokens.contains(in.token)
3299
3301
|| isIdent && (in.name == nme.inline || in.lookahead.isColon)
3300
3302
if isParams then commaSeparated(() => param())
3301
- else contextTypes(ofClass, nparams , impliedMods)
3303
+ else contextTypes(ofClass, numLeadParams , impliedMods)
3302
3304
checkVarArgsRules(clause)
3303
3305
clause
3304
3306
}
3305
3307
}
3306
3308
3307
- /** ClsParamClauses ::= {ClsParamClause } [[nl] ‘(’ [‘implicit’] ClsParams ‘)’]
3308
- * TypelessClauses ::= TypelessClause {TypelessClause}
3309
+ /** ClsTermParamClauses ::= {ClsTermParamClause } [[nl] ‘(’ [‘implicit’] ClsParams ‘)’]
3310
+ * TypelessClauses ::= TypelessClause {TypelessClause}
3309
3311
*
3310
3312
* @return The parameter definitions
3311
3313
*/
3312
- def paramClauses (ofClass : Boolean = false ,
3313
- ofCaseClass : Boolean = false ,
3314
- givenOnly : Boolean = false ,
3315
- numLeadParams : Int = 0 ): List [List [ValDef ]] =
3314
+ def termParamClauses (
3315
+ ofClass : Boolean = false ,
3316
+ ofCaseClass : Boolean = false ,
3317
+ givenOnly : Boolean = false ,
3318
+ numLeadParams : Int = 0
3319
+ ): List [List [ValDef ]] =
3316
3320
3317
- def recur (firstClause : Boolean , nparams : Int ): List [List [ValDef ]] =
3321
+ def recur (firstClause : Boolean , numLeadParams : Int ): List [List [ValDef ]] =
3318
3322
newLineOptWhenFollowedBy(LPAREN )
3319
3323
if in.token == LPAREN then
3320
3324
val paramsStart = in.offset
3321
- val params = paramClause (
3322
- nparams ,
3325
+ val params = termParamClause (
3326
+ numLeadParams ,
3323
3327
ofClass = ofClass,
3324
3328
ofCaseClass = ofCaseClass,
3325
3329
givenOnly = givenOnly,
3326
3330
firstClause = firstClause)
3327
3331
val lastClause = params.nonEmpty && params.head.mods.flags.is(Implicit )
3328
3332
params :: (
3329
3333
if lastClause then Nil
3330
- else recur(firstClause = false , nparams + params.length))
3334
+ else recur(firstClause = false , numLeadParams + params.length))
3331
3335
else Nil
3332
3336
end recur
3333
3337
3334
3338
recur(firstClause = true , numLeadParams)
3335
- end paramClauses
3339
+ end termParamClauses
3336
3340
3337
3341
/* -------- DEFS ------------------------------------------- */
3338
3342
@@ -3573,11 +3577,15 @@ object Parsers {
3573
3577
}
3574
3578
}
3575
3579
3580
+
3581
+
3576
3582
/** DefDef ::= DefSig [‘:’ Type] ‘=’ Expr
3577
3583
* | this TypelessClauses [DefImplicitClause] `=' ConstrExpr
3578
3584
* DefDcl ::= DefSig `:' Type
3585
+ * DefSig ::= id [DefTypeParamClause] DefTermParamClauses
3586
+ *
3587
+ * if clauseInterleaving is enabled:
3579
3588
* DefSig ::= id [DefParamClauses] [DefImplicitClause]
3580
- * | ExtParamClause [nl] [‘.’] id DefParamClauses
3581
3589
*/
3582
3590
def defDefOrDcl (start : Offset , mods : Modifiers , numLeadParams : Int = 0 ): DefDef = atSpan(start, nameStart) {
3583
3591
@@ -3596,7 +3604,7 @@ object Parsers {
3596
3604
3597
3605
if (in.token == THIS ) {
3598
3606
in.nextToken()
3599
- val vparamss = paramClauses (numLeadParams = numLeadParams)
3607
+ val vparamss = termParamClauses (numLeadParams = numLeadParams)
3600
3608
if (vparamss.isEmpty || vparamss.head.take(1 ).exists(_.mods.isOneOf(GivenOrImplicit )))
3601
3609
in.token match {
3602
3610
case LBRACKET => syntaxError(em " no type parameters allowed here " )
@@ -3753,12 +3761,12 @@ object Parsers {
3753
3761
val templ = templateOpt(constr)
3754
3762
finalizeDef(TypeDef (name, templ), mods, start)
3755
3763
3756
- /** ClassConstr ::= [ClsTypeParamClause] [ConstrMods] ClsParamClauses
3764
+ /** ClassConstr ::= [ClsTypeParamClause] [ConstrMods] ClsTermParamClauses
3757
3765
*/
3758
3766
def classConstr (isCaseClass : Boolean = false ): DefDef = atSpan(in.lastOffset) {
3759
3767
val tparams = typeParamClauseOpt(ParamOwner .Class )
3760
3768
val cmods = fromWithinClassConstr(constrModsOpt())
3761
- val vparamss = paramClauses (ofClass = true , ofCaseClass = isCaseClass)
3769
+ val vparamss = termParamClauses (ofClass = true , ofCaseClass = isCaseClass)
3762
3770
makeConstructor(tparams, vparamss).withMods(cmods)
3763
3771
}
3764
3772
@@ -3860,7 +3868,7 @@ object Parsers {
3860
3868
newLineOpt()
3861
3869
val vparamss =
3862
3870
if in.token == LPAREN && in.lookahead.isIdent(nme.using)
3863
- then paramClauses (givenOnly = true )
3871
+ then termParamClauses (givenOnly = true )
3864
3872
else Nil
3865
3873
newLinesOpt()
3866
3874
val noParams = tparams.isEmpty && vparamss.isEmpty
@@ -3902,25 +3910,25 @@ object Parsers {
3902
3910
val start = in.skipToken()
3903
3911
val tparams = typeParamClauseOpt(ParamOwner .Def )
3904
3912
val leadParamss = ListBuffer [List [ValDef ]]()
3905
- def nparams = leadParamss.map(_.length).sum
3913
+ def numLeadParams = leadParamss.map(_.length).sum
3906
3914
while
3907
- val extParams = paramClause(nparams , prefix = true )
3915
+ val extParams = termParamClause(numLeadParams , prefix = true )
3908
3916
leadParamss += extParams
3909
3917
isUsingClause(extParams)
3910
3918
do ()
3911
- leadParamss ++= paramClauses (givenOnly = true , numLeadParams = nparams )
3919
+ leadParamss ++= termParamClauses (givenOnly = true , numLeadParams = numLeadParams )
3912
3920
if in.isColon then
3913
3921
syntaxError(em " no `:` expected here " )
3914
3922
in.nextToken()
3915
3923
val methods : List [Tree ] =
3916
3924
if in.token == EXPORT then
3917
3925
exportClause()
3918
3926
else if isDefIntro(modifierTokens) then
3919
- extMethod(nparams ) :: Nil
3927
+ extMethod(numLeadParams ) :: Nil
3920
3928
else
3921
3929
in.observeIndented()
3922
3930
newLineOptWhenFollowedBy(LBRACE )
3923
- if in.isNestedStart then inDefScopeBraces(extMethods(nparams ))
3931
+ if in.isNestedStart then inDefScopeBraces(extMethods(numLeadParams ))
3924
3932
else { syntaxErrorOrIncomplete(em " Extension without extension methods " ) ; Nil }
3925
3933
val result = atSpan(start)(ExtMethods (joinParams(tparams, leadParamss.toList), methods))
3926
3934
val comment = in.getDocComment(start)
0 commit comments