From 5e8e430d750525296a7f2af10c2cb037527552a4 Mon Sep 17 00:00:00 2001 From: Richard Kreckel Date: Mon, 2 Sep 2002 20:42:56 +0000 Subject: [PATCH] * Fix broken C output. (Chris Dams) --- ginac/mul.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) 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 << "*"; -- 2.44.0