diff --git a/poincare/src/unit.cpp b/poincare/src/unit.cpp index f92b0bc7a..d7af01d2a 100644 --- a/poincare/src/unit.cpp +++ b/poincare/src/unit.cpp @@ -764,14 +764,20 @@ void Unit::ChooseBestRepresentativeAndPrefixForValue(Expression units, double * bool Unit::ShouldDisplayAdditionalOutputs(double value, Expression unit, Preferences::UnitFormat unitFormat) { UnitNode::Vector vector = UnitNode::Vector::FromBaseUnits(unit); const Representative * representative = Representative::RepresentativeForDimension(vector); - return representative != nullptr - && ((unit.type() == ExpressionNode::Type::Unit && !static_cast(unit).isBaseUnit()) - || representative->hasAdditionalExpressions(value, unitFormat)); + + ExpressionTypeTest isNonBase = [](const Expression e, const void * context) { + return e.type() == ExpressionNode::Type::Unit && !e.convert().isBaseUnit(); + }; + + return (representative != nullptr && representative->hasAdditionalExpressions(value, unitFormat)) + || unit.hasExpression(isNonBase, nullptr); } int Unit::SetAdditionalExpressions(Expression units, double value, Expression * dest, int availableLength, ExpressionNode::ReductionContext reductionContext) { const Representative * representative = units.type() == ExpressionNode::Type::Unit ? static_cast(units).node()->representative() : UnitNode::Representative::RepresentativeForDimension(UnitNode::Vector::FromBaseUnits(units)); - assert(representative); + if (!representative) { + return 0; + } return representative->setAdditionalExpressions(value, dest, availableLength, reductionContext); }