override fun parse()

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
    }