From c12ab3a2e27397b82d061713c1f9050bbb44e488 Mon Sep 17 00:00:00 2001 From: Ruben Dashyan Date: Wed, 25 Mar 2020 17:01:45 +0100 Subject: [PATCH] [poincare/multiplication] Simplify shallowBeautify --- poincare/src/multiplication.cpp | 34 ++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/poincare/src/multiplication.cpp b/poincare/src/multiplication.cpp index 5813ec84b..fc8aa8922 100644 --- a/poincare/src/multiplication.cpp +++ b/poincare/src/multiplication.cpp @@ -411,7 +411,25 @@ Expression Multiplication::shallowBeautify(ExpressionNode::ReductionContext redu } if (unitsAccu.numberOfChildren() > 0) { units = Division::Builder(units, unitsAccu.clone()).deepReduce(reductionContext); - units = Multiplication::Builder(unitsAccu, units).shallowReduce(reductionContext); + units = Multiplication::Builder(units); + static_cast(units).mergeSameTypeChildrenInPlace(); + { + Expression unitsNumer, unitsDenom, unitsUnits; + static_cast(units).splitIntoNormalForm(unitsNumer, unitsDenom, unitsUnits, reductionContext); + if (!unitsNumer.isUninitialized()) { + result = Multiplication::Builder(result, unitsNumer); + } + if (!unitsDenom.isUninitialized()) { + result = Division::Builder(result, unitsDenom); + } + units = unitsUnits; + } + if (units.isUninitialized()) { + units = unitsAccu; + } else { + units = Multiplication::Builder(unitsAccu, units); + static_cast(units).mergeSameTypeChildrenInPlace(); + } } /* Turn into 'Float x units'. @@ -421,20 +439,6 @@ Expression Multiplication::shallowBeautify(ExpressionNode::ReductionContext redu * we focus on one single factor. The first Unit factor is certainly the * most relevant. */ - if (units.type() == ExpressionNode::Type::Multiplication) { - /* First, as step 2 might have introduced non Unit factors in 'units', - * 'units' must be split again. - */ - Expression unitsNumer, unitsDenom, unitsUnits; - static_cast(units).splitIntoNormalForm(unitsNumer, unitsDenom, unitsUnits, reductionContext); - if (!unitsNumer.isUninitialized()) { - result = Multiplication::Builder(result, unitsNumer); - } - if (!unitsDenom.isUninitialized()) { - result = Division::Builder(result, unitsDenom); - } - units = unitsUnits; - } double value = result.approximateToScalar(reductionContext.context(), reductionContext.complexFormat(), reductionContext.angleUnit()); if (std::isnan(value)) {