diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index a4d8b811c..f2ce0cb8a 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -243,12 +243,20 @@ void Expression::defaultSetChildrenInPlace(Expression other) { template Evaluation Expression::approximateToEvaluation(Context& context, Preferences::AngleUnit angleUnit) const { - assert(sRecursionCountReinitializationIsLocked == true); + bool willHaveToUnlock = ResetRecursionCountAndLockReset(); + IncrementRecursionCount(); + Evaluation result; if (RecursionMaximalDepthExceeded()) { - return Complex::Undefined(); // TODO Propagate error "Recursion too deep" + result = Complex::Undefined(); // TODO Propagate error "Recursion too deep" + } else { + result = node()->approximate(U(), context, angleUnit); } - return node()->approximate(U(), context, angleUnit); + + if (willHaveToUnlock) { + UnlockRecursionCountReset(); + } + return result; } Expression Expression::defaultReplaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression expression) {