LRDE Tiger Compiler  1.34a $Id: 7fef12e1f5fa43449d667a0eec1d837c40fc1202 $
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
level.hh
Go to the documentation of this file.
1 
6 #ifndef TRANSLATE_LEVEL_HH
7 # define TRANSLATE_LEVEL_HH
8 
9 # include <iosfwd>
10 # include <misc/fwd.hh>
11 # include <frame/fwd.hh>
12 # include <translate/fwd.hh>
13 
14 namespace translate
15 {
27  class Level
28  {
29  public:
30  // \brief Ctor for all the inner levels.
31  //
32  // \param name of this function.
33  // \param parent link the Level of the (static) parent, i.e. the
34  // function declaring this function in the source.
35  // \param formal_escapes
36  // list of Booleans: whether the arguments escape.
37  // Not const since we need to add the static link in there.
38  Level(const misc::symbol& name,
39  const Level* parent = nullptr,
40  frame::bool_list_type formal_escapes = frame::bool_list_type());
41 
50  ~Level();
51 
52  public:
56  const Level* parent_get() const;
60  const frame::Frame& frame_get() const;
62  temp::Label label_get() const;
64  const access_list_type& formals_get() const;
66  int frame_size_get() const;
68 
69 
71  tree::rExp sl() const;
72 
88  tree::rExp fp(const Level& use) const;
89 
91  std::ostream& dump(std::ostream& o) const;
92 
93  public:
97  const Access* local_alloc(bool escapes);
99  const Access* formal_alloc(bool escapes);
100 
101  private:
103  const Level* parent_;
110  };
111 
112 
114  std::ostream& operator<<(std::ostream& o, const Level& l);
115 
116 }
117 
118 # include <translate/level.hxx>
119 
120 #endif // !TRANSLATE_LEVEL_HH