From 8b2c00d8ba448bffe91807922b1f73ca475fe7c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Wed, 7 Nov 2018 17:40:23 +0100 Subject: [PATCH] [apps/poincare] Forbid variable creation with same name as existing func --- apps/shared/global_context.cpp | 3 +++ poincare/src/store.cpp | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/apps/shared/global_context.cpp b/apps/shared/global_context.cpp index 49012c719..bc6e2be5e 100644 --- a/apps/shared/global_context.cpp +++ b/apps/shared/global_context.cpp @@ -102,6 +102,9 @@ const Expression GlobalContext::ExpressionForActualSymbol(const SymbolAbstract & } Ion::Storage::Record::ErrorStatus GlobalContext::SetExpressionForActualSymbol(const Expression & expression, const SymbolAbstract & symbol, Ion::Storage::Record previousRecord) { + if (!previousRecord.isNull() && Ion::Storage::FullNameHasExtension(previousRecord.fullName(), funcExtension, strlen(funcExtension))) { + return Ion::Storage::Record::ErrorStatus::NameTaken; + } // Delete any record with same name (as it is going to be overriden) previousRecord.destroy(); return Ion::Storage::sharedStorage()->createRecordWithExtension(symbol.name(), expExtension, expression.addressInPool(), expression.size()); diff --git a/poincare/src/store.cpp b/poincare/src/store.cpp index c83913ba0..963ba89c7 100644 --- a/poincare/src/store.cpp +++ b/poincare/src/store.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include extern "C" { #include @@ -67,6 +68,9 @@ Expression Store::shallowReduce(Context & context, Preferences::AngleUnit angleU } context.setExpressionForSymbol(finalValue.simplify(context, angleUnit, false), symbol(), context); Expression e = context.expressionForSymbol(symbol()); + if (e.isUninitialized()) { + return Undefined(); + } replaceWithInPlace(e); return e.shallowReduce(context, angleUnit, replaceSymbols); }