From 4ae72d68d8a511fdf4b3fef8d1970c3ec3cbc01e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Fri, 10 Aug 2018 10:10:12 +0200 Subject: [PATCH] [poincare] Enable to call method on undefined Expression --- poincare/include/poincare.h | 1 + poincare/include/poincare/expression.h | 2 +- poincare/include/poincare/layout_reference.h | 2 +- poincare/src/expression.cpp | 7 +++++-- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/poincare/include/poincare.h b/poincare/include/poincare.h index ddb662ac8..dca3a9b83 100644 --- a/poincare/include/poincare.h +++ b/poincare/include/poincare.h @@ -105,6 +105,7 @@ #include #else +#include #include #include #include diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index 970411635..2a20b7408 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -106,7 +106,7 @@ public: bool isEqualToItsApproximationLayout(Expression approximation, int bufferSize, Preferences::AngleUnit angleUnit, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits, Context & context); /* Layout Helper */ - LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { return this->node()->createLayout(floatDisplayMode, numberOfSignificantDigits); } + LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { return isDefined() ? node()->createLayout(floatDisplayMode, numberOfSignificantDigits) : LayoutRef(); } int serialize(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const { return this->node()->serialize(buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits); } /* Simplification */ diff --git a/poincare/include/poincare/layout_reference.h b/poincare/include/poincare/layout_reference.h index 54607da14..94dbd82e1 100644 --- a/poincare/include/poincare/layout_reference.h +++ b/poincare/include/poincare/layout_reference.h @@ -14,7 +14,7 @@ public: using TreeByReference::operator==; using TreeByReference::operator!=; - LayoutReference(LayoutNode * node) : + LayoutReference(LayoutNode * node = nullptr) : TreeByReference(node) {} LayoutReference clone() const { diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index 4cb5bab9c..e767760d3 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -220,8 +220,11 @@ Expression Expression::deepBeautify(Context & context, Preferences::AngleUnit an template Expression Expression::approximate(Context& context, Preferences::AngleUnit angleUnit, Preferences::Preferences::ComplexFormat complexFormat) const { - Evaluation e = node()->approximate(U(), context, angleUnit); - return e->complexToExpression(complexFormat); + if (isDefined()) { + Evaluation e = node()->approximate(U(), context, angleUnit); + return e->complexToExpression(complexFormat); + } + return Undefined(); } template