summaryrefslogtreecommitdiff
path: root/tiger-compiler/src/bind/renamer.cc
blob: 1f13de0be5f99a27c56f2bd742fa2cad06da1a06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/**
 ** \file bind/renamer.cc
 ** \brief Implementation of bind::Renamer.
 */

#include <bind/renamer.hh>

namespace bind
{
  using namespace ast;

  // FIXME DONE: Some code was deleted here.

  void Renamer::operator()(ast::VarDec& e)
  {
    if (renames_.find(&e) != renames_.end())
      super_type::operator()(e);
    new_name_(&e);
    e.name_set(renames_.at(&e));
    super_type::operator()(e);
  }
  void Renamer::operator()(ast::TypeDec& e)
  {
    if (renames_.find(&e) != renames_.end())
      super_type::operator()(e);
    new_name_(&e);
    e.name_set(renames_.at(&e));
    super_type::operator()(e);
  }
  void Renamer::operator()(ast::FunctionDec& e)
  {
    if (e.body_get() == nullptr || e.name_get() == "_main"
        || renames_.find(&e) != renames_.end())
      {
        super_type::operator()(e);
        return;
      }
    new_name_(&e);
    e.name_set(renames_.at(&e));
    super_type::operator()(e);
  }
  void Renamer::operator()(ast::SimpleVar& e)
  {
    if (renames_.find(e.def_get()) != renames_.end())
      e.name_set(renames_.at(e.def_get()));
  }
  void Renamer::operator()(ast::NameTy& e)
  {
    if (renames_.find(e.def_get()) != renames_.end())
      e.name_set(renames_.at(e.def_get()));
  }
  void Renamer::operator()(ast::CallExp& e)
  {
    if (e.def_get() == nullptr || e.def_get()->body_get() == nullptr
        || e.name_get() == "_main")
      super_type::operator()(e);
    else
      {
        e.name_set(renames_.at(e.def_get()));
        super_type::operator()(e);
      }
  }
} // namespace bind