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<symbol>(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
ex power::expand(unsigned options) const
{
- if (is_a<symbol>(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<symbol>(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);