fun parseWithAssignTypedAndExpr()

in gdscript/src/main/kotlin/gdscript/parser/common/GdTypedParser.kt [24:56]


    fun parseWithAssignTypedAndExpr(b: GdPsiBuilder, l: Int, optional: Boolean): Boolean {
        if (!b.recursionGuard(l, "TypedAndExpr")) return false
        val m = b.mark()
        var ok = true
        if (b.nextTokenIs(CEQ)) {
            ok = ok && b.mcToken(ASSIGN_TYPED, CEQ)
            if (ok) {
                ok = ok && GdExprParser.parse(b, l + 1)
                if (!ok) b.error("EXPRESSION")
            }
        } else if (b.nextTokenIs(COLON)) {
            ok = ok && parse(b, l + 1, optional)
            if (ok && b.mcToken(ASSIGN_TYPED, EQ)) {
                if (ok) {
                    ok = ok && GdExprParser.parse(b, l + 1)
                    if (!ok) b.error("EXPRESSION")
                }
            }
        } else if (b.mcToken(ASSIGN_TYPED, EQ)) {
            if (ok) {
                ok = ok && GdExprParser.parse(b, l + 1)
                if (!ok) b.error("EXPRESSION")
            }
        } else if (!optional) {
            m.drop()
            return false
        }

        if (ok || optional) m.drop()
        else m.rollbackTo()

        return ok || optional
    }