From 7076fe31e96dd1ebebc45518906b215e104e75fa Mon Sep 17 00:00:00 2001 From: Ondra Kamenik Date: Tue, 17 May 2011 07:34:15 +0200 Subject: [PATCH] When applying substitutions to the atom assignings, they are done also for non-referenced atoms, as they could still be referenced in evaluations. --- dynare++/parser/cc/atom_assignings.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dynare++/parser/cc/atom_assignings.cpp b/dynare++/parser/cc/atom_assignings.cpp index b7973359a..c2529e194 100644 --- a/dynare++/parser/cc/atom_assignings.cpp +++ b/dynare++/parser/cc/atom_assignings.cpp @@ -132,9 +132,13 @@ void AtomAssignings::apply_subst(const AtomSubstitutions::Toldnamemap& mm) for (AtomSubstitutions::Toldnamemap::const_iterator it = mm.begin(); it != mm.end(); ++it) { const char* oldname = (*it).first; - int told = atoms.index(oldname); const AtomSubstitutions::Tshiftnameset& sset = (*it).second; - if (told >= 0 && ! sset.empty()) { + if (! sset.empty()) { + int told = atoms.index(oldname); + if (told < 0 && ! atoms.get_name_storage().query(oldname)) + atoms.register_name(oldname); + if (told == -1) + told = expr.add_nulary(oldname); // at least one substitution here, so make an expression expr.add_formula(told); // say that this expression is not assigned to any atom