/** ** \file bind/renamer.hh ** \brief Implementation of bind::Renamer. */ #pragma once #include #include #include #include namespace bind { /// Perform identifier renaming within an AST (in place), /// without support for objects. class Renamer : public ast::DefaultVisitor , public ast::NonObjectVisitor , public ast::NonAssertVisitor { public: using super_type = ast::DefaultVisitor; // Import overloaded virtual functions. using super_type::operator(); // FIXME DONE: Some code was deleted here. // Visit methods. /// \brief Process a declaration body or a usage site. /// /// \a def is the definition site of \e (must be equal to /// \a e if it is a Dec node). template void visit(E& e, const Def* def); /// \name Visiting definition sites. /// \{ // FIXME DONE: Some code was deleted here. void operator()(ast::VarDec& e) override; void operator()(ast::TypeDec& e) override; void operator()(ast::FunctionDec& e) override; /// \} /// \name Visiting usage sites. /// \{ // FIXME DONE: Some code was deleted here. void operator()(ast::SimpleVar& e) override; void operator()(ast::NameTy& e) override; void operator()(ast::CallExp& e) override; /// \} private: // FIXME DONE: Some code was deleted here. std::map renames_; void new_name_(const ast::Dec*); }; } // namespace bind #include