ExpressionPtr AssignmentExpression::postOptimize(AnalysisResultPtr ar) { ar->postOptimize(m_variable); ar->postOptimize(m_value); if (m_variable->is(Expression::KindOfSimpleVariable)) { SimpleVariablePtr var = dynamic_pointer_cast<SimpleVariable>(m_variable); const std::string &name = var->getName(); VariableTablePtr variables = ar->getScope()->getVariables(); if (variables->checkUnused(name)) { variables->addUnused(name); if (m_value->getContainedEffects() != getContainedEffects()) { s_effectsTag++; } return m_value; } } return ExpressionPtr(); }
ExpressionPtr AssignmentExpression::postOptimize(AnalysisResultPtr ar) { ar->postOptimize(m_variable); ar->postOptimize(m_value); if (m_variable->is(Expression::KindOfSimpleVariable)) { SimpleVariablePtr var = dynamic_pointer_cast<SimpleVariable>(m_variable); const std::string &name = var->getName(); VariableTablePtr variables = ar->getScope()->getVariables(); if (!variables->isPseudoMainTable() && !variables->getAttribute(VariableTable::ContainsDynamicVariable) && !variables->isReferenced(name) && variables->isLocal(name)) { variables->addUnused(name); if (m_value->isScalar()) { m_value->setExpectedType(m_expectedType); return m_value; } else { return makeIdCall(ar); } } } return ExpressionPtr(); }