{
if (i!=0 && av[i] == av[i-1])
continue; // Treat it like a set of Symbol* in effect.
- const ASTNodeSet& sym = *(vars.TermsAlreadySeenMap.find(av[i])->second);
- rhs.insert(sym.begin(), sym.end());
+
+ ASTNodeSet* sym = (vars.TermsAlreadySeenMap.find(av[i])->second);
+ if(rhsAlreadyAdded.find(sym) != rhsAlreadyAdded.end())
+ continue;
+ rhsAlreadyAdded.insert(sym);
+
+ //cout << loopCount++ << " ";
+ //cout << "initial" << rhs.size() << " Adding: " <<sym->size();
+ rhs.insert(sym->begin(), sym->end());
+ //cout << "final:" << rhs.size();
+ //cout << "added:" << sym << endl;
+
}
assert (dependsOn.find(n0) == dependsOn.end());
typedef hash_map<ASTNode, Symbols*,ASTNode::ASTNodeHasher> DependsType;
DependsType dependsOn; // The lhs depends on the variables in the rhs.
ASTNodeSet rhs; // All the rhs that have been seeen.
+ set<ASTNodeSet*> rhsAlreadyAdded;
VariablesInExpression::SymbolPtrSet rhs_visited; // the rhs contains all the variables in here already.
int loopCount;
dependsOn.clear();
rhs.clear();
rhs_visited.clear();
+ rhsAlreadyAdded.clear();
}
VariablesInExpression vars;