#include #include #include #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(Expression * expression, const Symbol * symbol) { if (symbol->name() == m_name) { if (expression == nullptr) { return; } Evaluation * evaluation = expression->evaluate(*m_parentContext); /* WARNING: We assume that the evaluation of expression is a real */ m_value = Complex::Float(evaluation->toScalar()); delete evaluation; } 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; }