diff --git a/poincare/src/power.cpp b/poincare/src/power.cpp index d66ab2273..f5a04957c 100644 --- a/poincare/src/power.cpp +++ b/poincare/src/power.cpp @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include @@ -398,6 +397,10 @@ Expression Power::shallowReduce(ExpressionNode::ReductionContext reductionContex // The exponent must be an Integer return replaceWithUndefinedInPlace(); } + if (parent().isUninitialized() && base.type() == ExpressionNode::Type::Unit) { + // A Power of Unit must not be orphan + return Multiplication::Builder(Rational::Builder(1), *this); + } } } @@ -979,15 +982,6 @@ Expression Power::shallowBeautify(ExpressionNode::ReductionContext reductionCont replaceWithInPlace(result); return result; } - - // Step 4: Force Float(1) in front of an orphan Power of Unit - if (parent().isUninitialized() && childAtIndex(0).type() == ExpressionNode::Type::Unit) { - Multiplication m = Multiplication::Builder(Float::Builder(1.0)); - replaceWithInPlace(m); - m.addChildAtIndexInPlace(*this, 1, 1); - return std::move(m); - } - return *this; } diff --git a/poincare/src/unit.cpp b/poincare/src/unit.cpp index d461ccb17..344654270 100644 --- a/poincare/src/unit.cpp +++ b/poincare/src/unit.cpp @@ -1,6 +1,5 @@ #include #include -#include #include #include #include @@ -310,19 +309,16 @@ Expression Unit::shallowReduce(ExpressionNode::ReductionContext reductionContext Expression multiplier = Power::Builder(Rational::Builder(10), Rational::Builder(prefixMultiplier)).shallowReduce(reductionContext); result = Multiplication::Builder(multiplier, result).shallowReduce(reductionContext); } + if (parent().isUninitialized() && result.type() == ExpressionNode::Type::Unit) { + // A Unit must not be orphan + result = Multiplication::Builder(Rational::Builder(1), result); + } replaceWithInPlace(result); return result; } Expression Unit::shallowBeautify(ExpressionNode::ReductionContext reductionContext) { Expression ancestor = parent(); - // Force Float(1) in front of an orphan Unit - if (ancestor.isUninitialized()) { - Multiplication m = Multiplication::Builder(Float::Builder(1.0)); - replaceWithInPlace(m); - m.addChildAtIndexInPlace(*this, 1, 1); - return std::move(m); - } if (!ancestor.isUninitialized() && ancestor.type() == ExpressionNode::Type::Power) { ancestor = ancestor.parent(); }