preprocessor: reindex equations marked as [static]

issue#70
Houtan Bastani 2015-04-15 17:00:17 +02:00
parent e045d42c12
commit b27a60d06c
3 changed files with 13 additions and 0 deletions

View File

@ -4294,6 +4294,15 @@ DynamicModel::addStaticOnlyEquation(expr_t eq, int lineno)
static_only_equations_lineno.push_back(lineno);
}
void
DynamicModel::reindexStaticOnlyEquations(SymbolTable &orig_symbol_table)
{
vector<BinaryOpNode *>eqbak = static_only_equations;
static_only_equations.clear();
for (size_t i = 0; i < eqbak.size(); i++)
addStaticOnlyEquation(eqbak[i]->cloneDynamic(*this), static_only_equations_lineno[i]);
}
size_t
DynamicModel::staticOnlyEquationsNbr() const
{

View File

@ -243,6 +243,9 @@ public:
//! Adds an equation marked as [static]
void addStaticOnlyEquation(expr_t eq, int lineno);
//! reindex equations marked as [static]
void reindexStaticOnlyEquations(SymbolTable &orig_symbol_table);
//! Returns number of static only equations
size_t staticOnlyEquationsNbr() const;

View File

@ -314,6 +314,7 @@ ModFile::transformPass(bool nostrict)
SymbolTable orig_symbol_table = symbol_table;
symbol_table.rmExo(unusedExo);
dynamic_model.reindex(orig_symbol_table);
dynamic_model.reindexStaticOnlyEquations(orig_symbol_table);
vector<Statement *> orig_statements = statements;
statements.clear();
for (vector<Statement *>::iterator it = orig_statements.begin(); it != orig_statements.end(); it++)