From b596488a01b3fd4e287e5b5c05985e35b03ea8ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 20 May 2020 11:38:37 +0200 Subject: [PATCH] [poincare] Multiplication::shallowBeautify: removeUnit can only be called on reduced expression This fixes the following bug: input i+10*sqrt(i) --- poincare/src/multiplication.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/poincare/src/multiplication.cpp b/poincare/src/multiplication.cpp index 519d8c520..f8ffdb9e4 100644 --- a/poincare/src/multiplication.cpp +++ b/poincare/src/multiplication.cpp @@ -356,13 +356,15 @@ Expression Multiplication::shallowBeautify(ExpressionNode::ReductionContext redu } Expression result; + Expression self = *this; // Step 2: Handle the units - Expression self = *this; - Expression units; - self = removeUnit(&units); + if (hasUnit()) { + Expression units; + self = deepReduce(reductionContext); // removeUnit has to be called on reduced expression + self = removeUnit(&units); - if (!units.isUninitialized()) { + assert(!units.isUninitialized()); ExpressionNode::UnitConversion unitConversionMode = reductionContext.unitConversion(); if (unitConversionMode == ExpressionNode::UnitConversion::Default) { /* Step 2a: Recognize derived units