From 4d71a3a4c63be0aebefd72aa7804b885eb43a573 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Tue, 23 Oct 2018 17:54:48 +0200 Subject: [PATCH] [apps/poincare] Do not replace symbols in result of 3+c->f(x) --- apps/calculation/calculation.cpp | 2 +- apps/shared/poincare_helpers.h | 4 ++-- poincare/include/poincare/expression.h | 4 ++-- poincare/src/expression.cpp | 8 ++++---- poincare/src/store.cpp | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/calculation/calculation.cpp b/apps/calculation/calculation.cpp index 8eba2ffaf..6d4e41ae1 100644 --- a/apps/calculation/calculation.cpp +++ b/apps/calculation/calculation.cpp @@ -42,7 +42,7 @@ void Calculation::setContent(const char * c, Context * context, Expression ansEx * to keep Ans symbol in the calculation store. */ PoincareHelpers::Serialize(input, m_inputText, sizeof(m_inputText)); } - Expression exactOutput = PoincareHelpers::ParseAndSimplify(m_inputText, *context); + Expression exactOutput = PoincareHelpers::ParseAndSimplify(m_inputText, *context, false); PoincareHelpers::Serialize(exactOutput, m_exactOutputText, sizeof(m_exactOutputText)); Expression approximateOutput = PoincareHelpers::Approximate(exactOutput, *context); PoincareHelpers::Serialize(approximateOutput, m_approximateOutputText, sizeof(m_approximateOutputText)); diff --git a/apps/shared/poincare_helpers.h b/apps/shared/poincare_helpers.h index a9a2b9ef6..cbfe1a991 100644 --- a/apps/shared/poincare_helpers.h +++ b/apps/shared/poincare_helpers.h @@ -37,8 +37,8 @@ inline T ApproximateToScalar(const char * text, Poincare::Context & context) { return Poincare::Expression::approximateToScalar(text, context, Poincare::Preferences::sharedPreferences()->angleUnit()); } -inline Poincare::Expression ParseAndSimplify(const char * text, Poincare::Context & context) { - return Poincare::Expression::ParseAndSimplify(text, context, Poincare::Preferences::sharedPreferences()->angleUnit()); +inline Poincare::Expression ParseAndSimplify(const char * text, Poincare::Context & context, bool replaceSymbols = true) { + return Poincare::Expression::ParseAndSimplify(text, context, Poincare::Preferences::sharedPreferences()->angleUnit(), replaceSymbols); } inline void Simplify(Poincare::Expression * e, Poincare::Context & context) { diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index e3bec0581..88ead4d7e 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -162,8 +162,8 @@ public: int serialize(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode = Preferences::PrintFloatMode::Decimal, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const; /* Simplification */ - static Expression ParseAndSimplify(const char * text, Context & context, Preferences::AngleUnit angleUnit); - Expression simplify(Context & context, Preferences::AngleUnit angleUnit); + static Expression ParseAndSimplify(const char * text, Context & context, Preferences::AngleUnit angleUnit, bool replaceSymbols = true); + Expression simplify(Context & context, Preferences::AngleUnit angleUnit, bool replaceSymbols = true); Expression deepReduce(Context & context, Preferences::AngleUnit angleUnit, bool replaceSymbols = true); void reduceChildren(Context & context, Preferences::AngleUnit angleUnit, bool replaceSymbols) { return node()->reduceChildren(context, angleUnit, replaceSymbols); diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index f3340f95a..ac1eb518e 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -270,12 +270,12 @@ int Expression::serialize(char * buffer, int bufferSize, Preferences::PrintFloat /* Simplification */ -Expression Expression::ParseAndSimplify(const char * text, Context & context, Preferences::AngleUnit angleUnit) { +Expression Expression::ParseAndSimplify(const char * text, Context & context, Preferences::AngleUnit angleUnit, bool replaceSymbols) { Expression exp = parse(text); if (exp.isUninitialized()) { return Undefined(); } - exp = exp.simplify(context, angleUnit); + exp = exp.simplify(context, angleUnit, replaceSymbols); /* simplify might have been interrupted, in which case the resulting * expression is uninitialized, so we need to check that. */ if (exp.isUninitialized()) { @@ -284,7 +284,7 @@ Expression Expression::ParseAndSimplify(const char * text, Context & context, Pr return exp; } -Expression Expression::simplify(Context & context, Preferences::AngleUnit angleUnit) { +Expression Expression::simplify(Context & context, Preferences::AngleUnit angleUnit, bool replaceSymbols) { sSimplificationHasBeenInterrupted = false; #if MATRIX_EXACT_REDUCING #else @@ -292,7 +292,7 @@ Expression Expression::simplify(Context & context, Preferences::AngleUnit angleU return *this; } #endif - Expression e = deepReduce(context, angleUnit); + Expression e = deepReduce(context, angleUnit, replaceSymbols); e = e.deepBeautify(context, angleUnit); if (sSimplificationHasBeenInterrupted) { e = Expression(); diff --git a/poincare/src/store.cpp b/poincare/src/store.cpp index 124a921c2..6c08f783c 100644 --- a/poincare/src/store.cpp +++ b/poincare/src/store.cpp @@ -62,9 +62,9 @@ Expression Store::shallowReduce(Context & context, Preferences::AngleUnit angleU } finalValue = finalValue.deepReduce(context, angleUnit, false); context.setExpressionForSymbol(finalValue, symbol(), context); - Expression c1 = childAtIndex(1); - replaceWithInPlace(c1); - return c1.shallowReduce(context, angleUnit, replaceSymbols); + Expression e = context.expressionForSymbol(symbol()); + replaceWithInPlace(e); + return e.shallowReduce(context, angleUnit, replaceSymbols); } }