From: Richard Kreckel Date: Tue, 16 Oct 2007 06:19:15 +0000 (+0000) Subject: * Fix optimization opportunities missed by Alexei's patch. X-Git-Tag: release_1-5-0~130 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=commitdiff_plain;h=39ad156482436e2c6e9cb3424520d80dab09180c * Fix optimization opportunities missed by Alexei's patch. --- diff --git a/ginac/mul.cpp b/ginac/mul.cpp index 4e95a638..c4cb2e3b 100644 --- a/ginac/mul.cpp +++ b/ginac/mul.cpp @@ -994,12 +994,14 @@ bool mul::can_be_further_expanded(const ex & e) ex mul::expand(unsigned options) const { { - // trivial case: expanding the monomial (~ 30% of all calls) + // trivial case: expanding the monomial (~ 30% of all calls) epvector::const_iterator i = seq.begin(), seq_end = seq.end(); while ((i != seq.end()) && is_a(i->rest) && i->coeff.info(info_flags::integer)) ++i; - if (i == seq_end) - return (new mul(*this))->setflag(status_flags::dynallocated | status_flags::expanded); + if (i == seq_end) { + setflag(status_flags::expanded); + return *this; + } } // do not rename indices if the object has no indices at all diff --git a/ginac/power.cpp b/ginac/power.cpp index 40ba3376..25b1f43a 100644 --- a/ginac/power.cpp +++ b/ginac/power.cpp @@ -772,12 +772,12 @@ tinfo_t power::return_type_tinfo() const ex power::expand(unsigned options) const { - if (is_a(basis) && exponent.info(info_flags::integer)) - return (new power(*this))->setflag(status_flags::dynallocated | status_flags::expanded); - - if (options == 0 && (flags & status_flags::expanded)) + if (is_a(basis) && exponent.info(info_flags::integer)) { + // A special case worth optimizing. + setflag(status_flags::expanded); return *this; - + } + const ex expanded_basis = basis.expand(options); const ex expanded_exponent = exponent.expand(options);