From 620ef3f5708413f0f6567b14e1bb349b9cc94995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Tue, 31 Mar 2020 12:27:50 +0200 Subject: [PATCH] [poincare] Use SymbolAbstract::hasSameNameAs --- poincare/include/poincare/symbol.h | 1 - poincare/include/poincare/symbol_abstract.h | 1 + poincare/src/function.cpp | 2 +- poincare/src/parametered_expression.cpp | 4 +--- poincare/src/symbol.cpp | 6 +----- poincare/src/symbol_abstract.cpp | 4 ++++ 6 files changed, 8 insertions(+), 10 deletions(-) diff --git a/poincare/include/poincare/symbol.h b/poincare/include/poincare/symbol.h index 4421d81de..e441c8e27 100644 --- a/poincare/include/poincare/symbol.h +++ b/poincare/include/poincare/symbol.h @@ -62,7 +62,6 @@ public: // Symbol properties bool isSystemSymbol() const { return node()->isUnknown(); } - bool hasSameNameAs(Symbol & other) const; const char * name() const { return node()->name(); } // IsVariable tests static bool isSeriesSymbol(const char * c, Poincare::Context * context); diff --git a/poincare/include/poincare/symbol_abstract.h b/poincare/include/poincare/symbol_abstract.h index 521b20217..fab4c79a9 100644 --- a/poincare/include/poincare/symbol_abstract.h +++ b/poincare/include/poincare/symbol_abstract.h @@ -66,6 +66,7 @@ class SymbolAbstract : public Expression { friend class SymbolAbstractNode; public: const char * name() const { return node()->name(); } + bool hasSameNameAs(const SymbolAbstract & other) const; static size_t TruncateExtension(char * dst, const char * src, size_t len); static bool matches(const SymbolAbstract & symbol, ExpressionTest test, Context * context); constexpr static size_t k_maxNameSize = 8; diff --git a/poincare/src/function.cpp b/poincare/src/function.cpp index cc2055a6b..9ed5e7fae 100644 --- a/poincare/src/function.cpp +++ b/poincare/src/function.cpp @@ -102,7 +102,7 @@ Function Function::Builder(const char * name, size_t length, Expression child) { Expression Function::replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) { // Replace the symbol in the child childAtIndex(0).replaceSymbolWithExpression(symbol, expression); - if (symbol.type() == ExpressionNode::Type::Function && strcmp(name(), symbol.name()) == 0) { + if (symbol.type() == ExpressionNode::Type::Function && hasSameNameAs(symbol)) { Expression value = expression.clone(); Expression p = parent(); if (!p.isUninitialized() && p.node()->childAtIndexNeedsUserParentheses(value, p.indexOfChild(*this))) { diff --git a/poincare/src/parametered_expression.cpp b/poincare/src/parametered_expression.cpp index b6b9258db..57bc73dcf 100644 --- a/poincare/src/parametered_expression.cpp +++ b/poincare/src/parametered_expression.cpp @@ -44,9 +44,7 @@ int ParameteredExpressionNode::getVariables(Context * context, isVariableTest is } Expression ParameteredExpression::replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) { - if (symbol.type() != ExpressionNode::Type::Symbol - || !parameter().hasSameNameAs(static_cast(symbol))) - { + if (symbol.type() != ExpressionNode::Type::Symbol || !parameter().hasSameNameAs(symbol)) { // If the symbol is not the parameter, replace normally return defaultReplaceSymbolWithExpression(symbol, expression); } diff --git a/poincare/src/symbol.cpp b/poincare/src/symbol.cpp index 50637fd65..7f58b44b9 100644 --- a/poincare/src/symbol.cpp +++ b/poincare/src/symbol.cpp @@ -134,10 +134,6 @@ Symbol Symbol::Builder(CodePoint name) { return Symbol::Builder(buffer, codePointLength); } -bool Symbol::hasSameNameAs(Symbol & other) const { - return (strcmp(other.name(), name()) == 0); -} - bool Symbol::isSeriesSymbol(const char * c, Poincare::Context * context) { // [NV][1-3] if (c[2] == 0 && (c[0] == 'N' || c[0] == 'V') && c[1] >= '1' && c[1] <= '3') { @@ -197,7 +193,7 @@ Expression Symbol::shallowReduce(ExpressionNode::ReductionContext reductionConte } Expression Symbol::replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) { - if (symbol.type() == ExpressionNode::Type::Symbol && strcmp(name(), symbol.name()) == 0) { + if (symbol.type() == ExpressionNode::Type::Symbol && hasSameNameAs(symbol)) { Expression value = expression.clone(); Expression p = parent(); if (!p.isUninitialized() && p.node()->childAtIndexNeedsUserParentheses(value, p.indexOfChild(*this))) { diff --git a/poincare/src/symbol_abstract.cpp b/poincare/src/symbol_abstract.cpp index 6b2901181..a6708fdee 100644 --- a/poincare/src/symbol_abstract.cpp +++ b/poincare/src/symbol_abstract.cpp @@ -53,6 +53,10 @@ T SymbolAbstract::Builder(const char * name, int length) { return static_cast(h); } +bool SymbolAbstract::hasSameNameAs(const SymbolAbstract & other) const { + return strcmp(other.name(), name()) == 0; +} + size_t SymbolAbstract::TruncateExtension(char * dst, const char * src, size_t len) { return UTF8Helper::CopyUntilCodePoint(dst, len, src, '.'); }