diff --git a/poincare/include/poincare/global_context.h b/poincare/include/poincare/global_context.h index 3e102cda2..8b5a76b7d 100644 --- a/poincare/include/poincare/global_context.h +++ b/poincare/include/poincare/global_context.h @@ -23,6 +23,7 @@ public: static constexpr uint16_t k_maxNumberOfMatrixExpressions = 10; static Complex * defaultExpression(); private: + static Complex * nanExpression(); int symbolIndex(const Symbol * symbol) const; Expression * m_expressions[k_maxNumberOfScalarExpressions]; Complex m_pi; diff --git a/poincare/src/global_context.cpp b/poincare/src/global_context.cpp index 51819d9bc..89466f31e 100644 --- a/poincare/src/global_context.cpp +++ b/poincare/src/global_context.cpp @@ -28,6 +28,11 @@ Complex * GlobalContext::defaultExpression() { return defaultExpression; } +Complex * GlobalContext::nanExpression() { + static Complex * nanExpression = new Complex(Complex::Float(NAN)); + return nanExpression; +} + int GlobalContext::symbolIndex(const Symbol * symbol) const { int index = symbol->name() - 'A'; return index; @@ -42,7 +47,7 @@ const Expression * GlobalContext::expressionForSymbol(const Symbol * symbol) { } int index = symbolIndex(symbol); if (index < 0 || index >= k_maxNumberOfScalarExpressions) { - return nullptr; + return nanExpression(); } if (m_expressions[index] == nullptr) { return defaultExpression(); diff --git a/poincare/src/symbol.cpp b/poincare/src/symbol.cpp index 2b41192c6..4e21f8aff 100644 --- a/poincare/src/symbol.cpp +++ b/poincare/src/symbol.cpp @@ -25,7 +25,7 @@ float Symbol::privateApproximate(Context& context, AngleUnit angleUnit) const { Expression * Symbol::privateEvaluate(Context& context, AngleUnit angleUnit) const { assert(angleUnit != AngleUnit::Default); - if (context.expressionForSymbol(this)) { + if (context.expressionForSymbol(this) != nullptr) { return context.expressionForSymbol(this)->evaluate(context, angleUnit); } return nullptr;