static __isl_give isl_printer *upoly_print(__isl_keep struct isl_upoly *up,
__isl_keep isl_dim *dim, __isl_keep isl_mat *div,
- __isl_take isl_printer *p)
+ __isl_take isl_printer *p, int outer)
{
- int i, n, first;
+ int i, n, first, print_parens;
struct isl_upoly_rec *rec;
if (!p || !up || !dim || !div)
if (!rec)
goto error;
n = upoly_rec_n_non_zero(rec);
- if (n > 1)
+ print_parens = n > 1 || (outer && rec->up.var >= isl_dim_total(dim));
+ if (print_parens)
p = isl_printer_print_str(p, "(");
for (i = 0, first = 1; i < rec->n; ++i) {
if (isl_upoly_is_zero(rec->p[i]))
if (!first)
p = isl_printer_print_str(p, " + ");
if (i == 0 || !isl_upoly_is_one(rec->p[i]))
- p = upoly_print(rec->p[i], dim, div, p);
+ p = upoly_print(rec->p[i], dim, div, p, 0);
}
first = 0;
if (i == 0)
p = isl_printer_print_str(p, " * ");
p = print_pow(p, dim, div, rec->up.var, i);
}
- if (n > 1)
+ if (print_parens)
p = isl_printer_print_str(p, ")");
return p;
error:
{
if (!p || !qp)
goto error;
- p = upoly_print(qp->upoly, qp->dim, qp->div, p);
+ p = upoly_print(qp->upoly, qp->dim, qp->div, p, 1);
return p;
error:
isl_printer_free(p);
qp = isl_qpolynomial_mul(qp, f);
}
if (qp)
- p = upoly_print(qp->upoly, qp->dim, qp->div, p);
+ p = upoly_print(qp->upoly, qp->dim, qp->div, p, 0);
if (!isl_int_is_one(den)) {
p = isl_printer_print_str(p, ")/");
p = isl_printer_print_isl_int(p, den);