From: Richard Kreckel Date: Mon, 2 Sep 2002 20:42:56 +0000 (+0000) Subject: * Fix broken C output. (Chris Dams) X-Git-Tag: release_1-0-11~7 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=commitdiff_plain;h=5e8e430d750525296a7f2af10c2cb037527552a4 * Fix broken C output. (Chris Dams) --- diff --git a/ginac/mul.cpp b/ginac/mul.cpp index 28233b30..211855a6 100644 --- a/ginac/mul.cpp +++ b/ginac/mul.cpp @@ -141,25 +141,32 @@ void mul::print(const print_context & c, unsigned level) const while (it != itend) { // If the first argument is a negative integer power, it gets printed as "1.0/" - if (it == seq.begin() && ex_to(it->coeff).is_integer() && it->coeff.info(info_flags::negative)) { - if (is_a(c)) + bool needclosingparenthesis = false; + if (it == seq.begin() && it->coeff.info(info_flags::negint)) { + if (is_a(c)) { c.s << "recip("; - else + needclosingparenthesis = true; + } else c.s << "1.0/"; } // If the exponent is 1 or -1, it is left out if (it->coeff.is_equal(_ex1) || it->coeff.is_equal(_ex_1)) it->rest.print(c, precedence()); - else { + else if (it->coeff.info(info_flags::negint)) // Outer parens around ex needed for broken gcc-2.95 parser: - (ex(power(it->rest, abs(ex_to(it->coeff))))).print(c, level); - } + (ex(power(it->rest, -ex_to(it->coeff)))).print(c, level); + else + // Outer parens around ex needed for broken gcc-2.95 parser: + (ex(power(it->rest, ex_to(it->coeff)))).print(c, level); + + if (needclosingparenthesis) + c.s << ")"; // Separator is "/" for negative integer powers, "*" otherwise ++it; if (it != itend) { - if (ex_to(it->coeff).is_integer() && it->coeff.info(info_flags::negative)) + if (it->coeff.info(info_flags::negint)) c.s << "/"; else c.s << "*";