[poincare] Clean integer power transform

Change-Id: I3d000ab3802aa542c35ce2b5e45dcf68434f89d3
This commit is contained in:
Émilie Feral
2017-10-02 17:23:21 +02:00
parent 855b42a710
commit 7f937d8be7

View File

@@ -12,7 +12,7 @@ bool Simplification::IntegerPowerTransform(Expression * captures[]) {
Power * p = static_cast<Power *>(captures[0]);
Integer * i1 = static_cast<Integer *>(captures[1]);
Integer * i2 = static_cast<Integer *>(captures[2]);
Expression * result = nullptr;
if (i2->isNegative()) {
if (i2->isEqualTo(Integer(-1))) {
return false;
@@ -20,12 +20,11 @@ bool Simplification::IntegerPowerTransform(Expression * captures[]) {
Integer absI2 = *i2;
absI2.setNegative(false);
Expression * operands[2] = {new Integer(Integer::Power(*i1, absI2)), new Integer(-1)};
Power * d = new Power(operands, false);
static_cast<Hierarchy *>(p->parent())->replaceOperand(p, d, true);
return true;
result = new Power(operands, false);
} else {
result = new Integer(Integer::Power(*i1, *i2));
}
Integer * r = new Integer(Integer::Power(*i1, *i2));
static_cast<Hierarchy *>(p->parent())->replaceOperand(p, r, true);
static_cast<Hierarchy *>(p->parent())->replaceOperand(p, result, true);
return true;
}