result_type operator()(const bind &b) { assert(detail::isinstance<name>(b.lhs())); const name& lhs = boost::get<const name&>(b.lhs()); if (m_declared.exists(lhs.id())) { m_modified.insert(lhs.id()); } else { m_declared.insert(lhs.id()); } return b.ptr(); }
result_type operator()(const procedure &p) { for(auto i = p.args().begin(); i != p.args().end(); i++) { assert(detail::isinstance<name>(*i)); const name& arg_name = boost::get<const name&>(*i); m_declared.insert(arg_name.id()); } return rewriter<protector>::operator()(p); }