in gdscript/src/main/kotlin/gdscript/parser/common/GdParamListParser.kt [9:39]
override fun parse(b: GdPsiBuilder, l: Int, optional: Boolean): Boolean {
if (!b.recursionGuard(l, "ParamList")) return false
// Allow start with IDENTIFIER or DOTDOTDOT
if (!b.nextTokenIs(DOTDOTDOT) && !GdLiteralExParser.checkExtendedRefId(b)) return optional
var ok = true
val paramList = b.mark()
while (ok && (b.nextTokenIs(DOTDOTDOT) || GdLiteralExParser.checkExtendedRefId(b))) {
// Peek whether this parameter is variadic before consuming tokens in param()
val isRestNext = b.nextTokenIs(DOTDOTDOT)
ok = param(b, l + 1)
// Variadic must be last
if (isRestNext) {
if (b.nextTokenIs(COMMA)) {
b.error("Variadic parameter must be the last parameter", false)
// consume the comma to avoid infinite loop/cascading errors
b.passToken(COMMA)
// best-effort: stop parsing further params
}
break
}
if (!b.passToken(COMMA)) break
}
paramList.done(PARAM_LIST)
return true
}