diff --git a/poincare/include/poincare/symbol.h b/poincare/include/poincare/symbol.h index fd53292d9..a91cfabe5 100644 --- a/poincare/include/poincare/symbol.h +++ b/poincare/include/poincare/symbol.h @@ -70,6 +70,7 @@ public: return Expression(); } // Symbol properties + bool isSystemSymbol() const { return name()[0] == SpecialSymbols::UnknownX && name()[1] == 0; } static bool isSeriesSymbol(const char * c); static bool isRegressionSymbol(const char * c); bool matches(ExpressionTest test, Context & context) const; diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index 5c21e6b5b..7c1c5b883 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -226,6 +226,7 @@ void Expression::defaultSetChildrenInPlace(Expression other) { bool Expression::hasReplaceableSymbols(Context & context) const { return recursivelyMatches([](const Expression e, Context & context, bool replaceSymbols) { return (e.type() == ExpressionNode::Type::Symbol + && !static_cast(e).isSystemSymbol() && !context.expressionForSymbol(static_cast(e)).isUninitialized()) || (e.type() == ExpressionNode::Type::Function && !context.expressionForSymbol(static_cast(e)).isUninitialized()); diff --git a/poincare/src/symbol.cpp b/poincare/src/symbol.cpp index ebb31f072..6454ef600 100644 --- a/poincare/src/symbol.cpp +++ b/poincare/src/symbol.cpp @@ -204,6 +204,9 @@ int Symbol::getPolynomialCoefficients(Context & context, const char * symbolName } Expression Symbol::replaceReplaceableSymbols(Context & context) { + if (isSystemSymbol()) { + return *this; + } Expression e = context.expressionForSymbol(*this); if (e.isUninitialized()) { return *this;