diff --git a/apps/sequence/sequence_context.h b/apps/sequence/sequence_context.h index 16ddcdd9c..7ce0afd4c 100644 --- a/apps/sequence/sequence_context.h +++ b/apps/sequence/sequence_context.h @@ -48,8 +48,8 @@ public: const Poincare::Expression expressionForSymbol(const Poincare::Symbol & symbol) override { return m_parentContext->expressionForSymbol(symbol); } - void setExpressionForSymbolName(const Poincare::Expression & expression, const Poincare::Symbol & symbol, Poincare::Context & context) override { - m_parentContext->setExpressionForSymbolName(expression, symbol, context); + void setExpressionForSymbolName(const Poincare::Expression & expression, const char * symbolName, Poincare::Context & context) override { + m_parentContext->setExpressionForSymbolName(expression, symbolName, context); } template T valueOfSequenceAtPreviousRank(int sequenceIndex, int rank) const { if (sizeof(T) == sizeof(float)) { diff --git a/apps/shared/store_context.cpp b/apps/shared/store_context.cpp index 1a131bd5f..8ec49e6cb 100644 --- a/apps/shared/store_context.cpp +++ b/apps/shared/store_context.cpp @@ -7,8 +7,8 @@ using namespace Poincare; namespace Shared { -void StoreContext::setExpressionForSymbolName(const Expression & expression, const Symbol & symbol, Context & context) { - m_parentContext->setExpressionForSymbolName(expression, symbol, context); +void StoreContext::setExpressionForSymbolName(const Expression & expression, const char * symbolName, Context & context) { + m_parentContext->setExpressionForSymbolName(expression, symbolName, context); } } diff --git a/apps/shared/store_context.h b/apps/shared/store_context.h index 549002c4f..f29471e7d 100644 --- a/apps/shared/store_context.h +++ b/apps/shared/store_context.h @@ -19,7 +19,7 @@ public: {} void setParentContext(Poincare::Context * parentContext) { m_parentContext = parentContext; } void setSeriesPairIndex(int j) { m_seriesPairIndex = j; } - void setExpressionForSymbolName(const Poincare::Expression & expression, const Poincare::Symbol & symbol, Poincare::Context & context) override; + void setExpressionForSymbolName(const Poincare::Expression & expression, const char * symbolName, Poincare::Context & context) override; protected: Shared::DoublePairStore * m_store; int m_seriesPairIndex; diff --git a/apps/variable_box_controller.cpp b/apps/variable_box_controller.cpp index b493925ce..16ed2e6c9 100644 --- a/apps/variable_box_controller.cpp +++ b/apps/variable_box_controller.cpp @@ -79,12 +79,12 @@ bool VariableBoxController::ContentViewController::handleEvent(Ion::Events::Even } if (event == Ion::Events::Backspace && m_currentPage != Page::RootMenu) { if (m_currentPage == Page::Scalar) { - const Symbol symbol('A'+selectedRow()); - m_context->setExpressionForSymbolName(Expression(), symbol, *m_context); + const char symbolName[2] = {static_cast('A'+selectedRow()), 0}; + m_context->setExpressionForSymbolName(Expression(), symbolName, *m_context); } if (m_currentPage == Page::Matrix) { - const Symbol symbol = Symbol::matrixSymbol('0'+(char)selectedRow()); - m_context->setExpressionForSymbolName(Expression(), symbol, *m_context); + const Symbol symbol = Symbol::matrixSymbol('0'+(char)selectedRow()); // TODO do not build an expression, just compute its name + m_context->setExpressionForSymbolName(Expression(), symbol.name(), *m_context); m_matrixLayouts[selectedRow()] = Layout(); } m_selectableTableView.reloadData(); diff --git a/poincare/include/poincare/context.h b/poincare/include/poincare/context.h index 544c6f7c6..bc84a0ecd 100644 --- a/poincare/include/poincare/context.h +++ b/poincare/include/poincare/context.h @@ -9,7 +9,7 @@ class Symbol; class Context { public: virtual const Expression expressionForSymbol(const Symbol & symbol) = 0; - virtual void setExpressionForSymbolName(const Expression & expression, const Symbol & symbol, Context & context) = 0; + virtual void setExpressionForSymbolName(const Expression & expression, const char * symbolName, Context & context) = 0; }; } diff --git a/poincare/include/poincare/global_context.h b/poincare/include/poincare/global_context.h index 965165c3d..998a2a68a 100644 --- a/poincare/include/poincare/global_context.h +++ b/poincare/include/poincare/global_context.h @@ -17,7 +17,7 @@ public: /* The expression recorded in global context is already a expression. * Otherwise, we would need the context and the angle unit to evaluate it */ const Expression expressionForSymbol(const Symbol & symbol) override; - void setExpressionForSymbolName(const Expression & expression, const Symbol & symbol, Context & context) override; + void setExpressionForSymbolName(const Expression & expression, const char * symbolName, Context & context) override; static constexpr uint16_t k_maxNumberOfExpressions = 36; static constexpr uint16_t k_maxNumberOfFunctions = 10; //TODO static constexpr uint16_t k_maxNumberOfSequences = 10; diff --git a/poincare/include/poincare/variable_context.h b/poincare/include/poincare/variable_context.h index 616cb2912..4f1e1033a 100644 --- a/poincare/include/poincare/variable_context.h +++ b/poincare/include/poincare/variable_context.h @@ -13,7 +13,7 @@ public: void setApproximationForVariable(T value); // Context - void setExpressionForSymbolName(const Expression & expression, const Symbol & symbol, Context & context) override; + void setExpressionForSymbolName(const Expression & expression, const char * symbolName, Context & context) override; const Expression expressionForSymbol(const Symbol & symbol) override; private: diff --git a/poincare/src/global_context.cpp b/poincare/src/global_context.cpp index 7d6a192a6..43c76c323 100644 --- a/poincare/src/global_context.cpp +++ b/poincare/src/global_context.cpp @@ -23,16 +23,16 @@ const Expression GlobalContext::expressionForSymbol(const Symbol & symbol) { return ExpressionForRecord(RecordWithName(symbol.name())); } -void GlobalContext::setExpressionForSymbolName(const Expression & expression, const Symbol & symbol, Context & context) { +void GlobalContext::setExpressionForSymbolName(const Expression & expression, const char * symbolName, Context & context) { /* If the new expression contains the symbol, replace it because it will be * destroyed afterwards (to be able to do A+2->A) */ - Ion::Storage::Record record = RecordWithName(symbol.name()); + Ion::Storage::Record record = RecordWithName(symbolName); Expression e = ExpressionForRecord(record); - Expression finalExpression = expression.clone().replaceSymbolWithExpression(symbol.name(), e); + Expression finalExpression = expression.clone().replaceSymbolWithExpression(symbolName, e); // Delete any record with same name (as it is going to be overriden) record.destroy(); - Ion::Storage::Record::ErrorStatus err = Ion::Storage::sharedStorage()->createRecordWithExtension(symbol.name(), ExtensionForExpression(finalExpression), finalExpression.addressInPool(), finalExpression.size()); + Ion::Storage::Record::ErrorStatus err = Ion::Storage::sharedStorage()->createRecordWithExtension(symbolName, ExtensionForExpression(finalExpression), finalExpression.addressInPool(), finalExpression.size()); if (err != Ion::Storage::Record::ErrorStatus::None) { assert(err == Ion::Storage::Record::ErrorStatus::NotEnoughSpaceAvailable); // TODO: return false to set flag that the file system is full? diff --git a/poincare/src/store.cpp b/poincare/src/store.cpp index 87725b566..c30a6be4f 100644 --- a/poincare/src/store.cpp +++ b/poincare/src/store.cpp @@ -33,7 +33,7 @@ Layout StoreNode::createLayout(Preferences::PrintFloatMode floatDisplayMode, int template Evaluation StoreNode::templatedApproximate(Context& context, Preferences::AngleUnit angleUnit) const { Store s(this); - context.setExpressionForSymbolName(s.value(), s.symbol(), context); + context.setExpressionForSymbolName(s.value(), s.symbol().name(), context); if (context.expressionForSymbol(s.symbol()).isUninitialized()) { return Complex::Undefined(); } @@ -41,7 +41,7 @@ Evaluation StoreNode::templatedApproximate(Context& context, Preferences::Ang } Expression Store::shallowReduce(Context & context, Preferences::AngleUnit angleUnit) { - context.setExpressionForSymbolName(value(), symbol(), context); + context.setExpressionForSymbolName(value(), symbol().name(), context); Expression c1 = childAtIndex(1); replaceWithInPlace(c1); return c1.shallowReduce(context, angleUnit); diff --git a/poincare/src/variable_context.cpp b/poincare/src/variable_context.cpp index 12dcf4021..49dd041c0 100644 --- a/poincare/src/variable_context.cpp +++ b/poincare/src/variable_context.cpp @@ -20,14 +20,14 @@ void VariableContext::setApproximationForVariable(T value) { } template -void VariableContext::setExpressionForSymbolName(const Expression & expression, const Symbol & symbol, Context & context) { - if (strcmp(symbol.name(), m_name) == 0) { +void VariableContext::setExpressionForSymbolName(const Expression & expression, const char * symbolName, Context & context) { + if (strcmp(symbolName, m_name) == 0) { if (expression.isUninitialized()) { return; } m_value = Float(expression.approximateToScalar(context, Preferences::sharedPreferences()->angleUnit())); } else { - m_parentContext->setExpressionForSymbolName(expression, symbol, context); + m_parentContext->setExpressionForSymbolName(expression, symbolName, context); } }