[poincare] Correct Expression manipulation

This commit is contained in:
Émilie Feral
2018-08-02 18:14:28 +02:00
parent 0a90560b3c
commit 05ba66cd21
3 changed files with 28 additions and 9 deletions

View File

@@ -12,8 +12,14 @@ TreeNode * ExpressionNode::FailedAllocationStaticNode() {
ExpressionReference ExpressionNode::replaceSymbolWithExpression(char symbol, ExpressionReference expression) {
ExpressionReference reference(this);
for (int i = 0; i < reference.numberOfChildren(); i++) {
reference.replaceTreeChildAtIndex(i, reference.childAtIndex(i).node()->replaceSymbolWithExpression(symbol, expression));
int nbChildren = reference.numberOfChildren();
for (int i = 0; i < nbChildren; i++) {
ExpressionReference newChild = reference.childAtIndex(i).node()->replaceSymbolWithExpression(symbol, expression);
if (reference.numberOfChildren() < nbChildren) {
reference.addChildTreeAtIndex(newChild, i, nbChildren - 1);
} else {
reference.replaceTreeChildAtIndex(i, newChild);
}
}
return reference;
}