#include #include #include extern "C" { #include } namespace Poincare { template VariableContext::VariableContext(char name, Context * parentContext) : m_name(name), m_value(Complex::Float(NAN)), m_parentContext(parentContext) { } template void VariableContext::setExpressionForSymbolName(const Expression * expression, const Symbol * symbol) { if (symbol->name() == m_name) { if (expression == nullptr) { return; } /* WARNING: We assume that the evaluation of expression is a real */ assert(expression->type() == Expression::Type::Complex); m_value = Complex::Float(static_cast *>(expression)->toScalar()); } else { m_parentContext->setExpressionForSymbolName(expression, symbol); } } template const Expression * VariableContext::expressionForSymbol(const Symbol * symbol) { if (symbol->name() == m_name) { return &m_value; } else { return m_parentContext->expressionForSymbol(symbol); } } template class Poincare::VariableContext; template class Poincare::VariableContext; }