LRDE Tiger Compiler
1.34a $Id: 7fef12e1f5fa43449d667a0eec1d837c40fc1202 $
|
Prune useless function declarations within an AST. More...
#include <pruner.hh>
Public Types | |
typedef astclone::Cloner | super_type |
Public Member Functions | |
Pruner () | |
Build an Pruner. | |
ast::Ast * | result_get () |
template<typename T > | |
T * | recurse (const T &t) |
template<typename T > | |
T * | recurse (const T *const t) |
template<typename CollectionType > | |
CollectionType * | recurse_collection (const CollectionType &c) |
Clone a collection object. | |
virtual void | operator() (const ast::ArrayExp &) override |
virtual void | operator() (const ast::ArrayTy &) override |
virtual void | operator() (const ast::AssignExp &) override |
virtual void | operator() (const ast::BreakExp &) override |
virtual void | operator() (const ast::CallExp &) override |
virtual void | operator() (const ast::CastExp &) override |
virtual void | operator() (const ast::CastVar &) override |
virtual void | operator() (const ast::ClassTy &) override |
virtual void | operator() (const ast::DecsList &) override |
virtual void | operator() (const ast::Field &) override |
virtual void | operator() (const ast::FieldInit &) override |
virtual void | operator() (const ast::FieldVar &) override |
virtual void | operator() (const ast::ForExp &) override |
virtual void | operator() (const ast::FunctionDec &) override |
virtual void | operator() (const ast::IfExp &) override |
virtual void | operator() (const ast::IntExp &) override |
virtual void | operator() (const ast::LetExp &) override |
virtual void | operator() (const ast::MethodCallExp &) override |
virtual void | operator() (const ast::MethodDec &) override |
virtual void | operator() (const ast::NameTy &) override |
virtual void | operator() (const ast::NilExp &) override |
virtual void | operator() (const ast::ObjectExp &) override |
virtual void | operator() (const ast::OpExp &) override |
virtual void | operator() (const ast::RecordExp &) override |
virtual void | operator() (const ast::RecordTy &) override |
virtual void | operator() (const ast::SeqExp &) override |
virtual void | operator() (const ast::SimpleVar &) override |
virtual void | operator() (const ast::StringExp &) override |
virtual void | operator() (const ast::SubscriptVar &) override |
virtual void | operator() (const ast::TypeDec &) override |
virtual void | operator() (const ast::VarDec &) override |
virtual void | operator() (const ast::WhileExp &) override |
virtual void | operator() (const ast::FunctionDecs &) override |
virtual void | operator() (const ast::MethodDecs &) override |
virtual void | operator() (const ast::TypeDecs &) override |
virtual void | operator() (const ast::VarDecs &) override |
virtual void | operator() (typename Const< Ast >::type &e) |
The entry point: visit e. | |
virtual void | operator() (typename Const< ClassTy >::type &)=0 |
virtual void | operator() (typename Const< MethodCallExp >::type &)=0 |
virtual void | operator() (typename Const< MethodDec >::type &)=0 |
virtual void | operator() (typename Const< ObjectExp >::type &)=0 |
template<class E > | |
void | operator() (E *e) |
Helper to visit nodes manipulated via a pointer. | |
template<typename DecsType > | |
void | decs_visit (const DecsType &e) |
Visit a chunk (i.e., a list of Function, Var, and Type decs). | |
Visit Variable related nodes. | |
virtual void | operator() (typename Const< SimpleVar >::type &e) override |
virtual void | operator() (typename Const< FieldVar >::type &e) override |
virtual void | operator() (typename Const< SubscriptVar >::type &e) override |
virtual void | operator() (typename Const< CastVar >::type &e) override |
Visit Expression related nodes. | |
virtual void | operator() (typename Const< NilExp >::type &e) override |
virtual void | operator() (typename Const< IntExp >::type &e) override |
virtual void | operator() (typename Const< StringExp >::type &e) override |
virtual void | operator() (typename Const< CallExp >::type &e) override |
virtual void | operator() (typename Const< OpExp >::type &e) override |
virtual void | operator() (typename Const< RecordExp >::type &e) override |
virtual void | operator() (typename Const< SeqExp >::type &e) override |
virtual void | operator() (typename Const< AssignExp >::type &e) override |
virtual void | operator() (typename Const< IfExp >::type &e) override |
virtual void | operator() (typename Const< WhileExp >::type &e) override |
virtual void | operator() (typename Const< ForExp >::type &e) override |
virtual void | operator() (typename Const< BreakExp >::type &) override |
virtual void | operator() (typename Const< LetExp >::type &e) override |
virtual void | operator() (typename Const< ArrayExp >::type &e) override |
virtual void | operator() (typename Const< CastExp >::type &e) override |
virtual void | operator() (typename Const< FieldInit >::type &e) override |
Visit Declaration related nodes. | |
Visiting declarations is simple, but there are many clauses. This is because in Tiger, the declarations are processed by chunks (a chunk of Function declarations, then Var or Type, then ...). So we have to explain
| |
virtual void | operator() (typename Const< DecsList >::type &e) override |
Visit a list of function, type and/or variables declarations. | |
virtual void | operator() (typename Const< Decs >::type &e) |
Visit a Decs chunks. | |
virtual void | operator() (typename Const< VarDecs >::type &e) override |
Visit Var declarations. | |
virtual void | operator() (typename Const< VarDec >::type &e) override |
virtual void | operator() (typename Const< FunctionDec >::type &e) override |
virtual void | operator() (typename Const< TypeDec >::type &e) override |
template<typename DecsType > | |
void | decs_visit (typename Const< DecsType >::type &e) |
Visit a chunk (i.e., a list of Function, Var, and Type decs). | |
Visit Type related nodes. | |
virtual void | operator() (typename Const< NameTy >::type &e) override |
virtual void | operator() (typename Const< RecordTy >::type &e) override |
virtual void | operator() (typename Const< ArrayTy >::type &e) override |
Visit Field related nodes. | |
virtual void | operator() (typename Const< Field >::type &e) override |
Protected Member Functions | |
template<typename E > | |
void | accept (E *e) |
Protected Attributes | |
ast::Ast * | result_ |
The cloned Ast. |
Prune useless function declarations within an AST.
inlining::Pruner::Pruner | ( | ) |
Build an Pruner.
|
protectedinherited |
A convenient shortcut for recurring code like this:
However, the drawback of this approach is that it doesn't take care of the constness, and any const violation will be reported within the body of this method, not at its corresponding call site.
We cannot use the misc/select_const.hh approach here, since the compiler cannot resolve a function overloaded or specialized on an associated type of a template. E.g., writing accept like this:
won't work directly. Of course, one can help the compiler, providing it with E
but this is painful.
|
inherited |
Visit a chunk (i.e., a list of Function, Var, and Type decs).
It is exactly the same in the three cases, so the code is factored via a template method.
References assertion.
|
inlineinherited |
Visit a chunk (i.e., a list of Function, Var, and Type decs).
It is exactly the same in the three cases, so the code is factored via a template method.
|
pure virtualinherited |
Implemented in ast::GenNonObjectVisitor< Const >, and ast::GenObjectVisitor< Const >.
|
pure virtualinherited |
Implemented in ast::GenNonObjectVisitor< Const >, and ast::GenObjectVisitor< Const >.
|
pure virtualinherited |
Implemented in ast::GenNonObjectVisitor< Const >, and ast::GenObjectVisitor< Const >.
|
pure virtualinherited |
Implemented in ast::GenNonObjectVisitor< Const >, and ast::GenObjectVisitor< Const >.
|
overridevirtualinherited |
Referenced by object::DesugarVisitor::operator()().
|
overridevirtualinherited |
|
overridevirtualinherited |
Reimplemented in object::DesugarVisitor.
|
overridevirtualinherited |
|
overridevirtualinherited |
Reimplemented in object::DesugarVisitor.
|
virtualinherited |
The entry point: visit e.
Reimplemented from ast::GenVisitor< Const >.
Referenced by callgraph::CallGraphVisitor::operator()(), object::Renamer::operator()(), and translate::Translator::operator()().
|
overridevirtualinherited |
|
overridevirtualinherited |
|
overridevirtualinherited |
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Reimplemented in object::DesugarVisitor.
References ast::DecsList::decs_get(), ast::Ast::location_get(), astclone::Cloner::recurse_collection(), and astclone::Cloner::result_.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
|
overridevirtualinherited |
Reimplemented in object::DesugarVisitor.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Reimplemented in desugar::DesugarVisitor.
References ast::ForExp::body_get(), ast::ForExp::hi_get(), ast::Ast::location_get(), astclone::Cloner::recurse(), astclone::Cloner::result_, and ast::ForExp::vardec_get().
|
overridevirtualinherited |
|
overridevirtualinherited |
|
overridevirtualinherited |
References ast::Ast::location_get(), astclone::Cloner::result_, and ast::IntExp::value_get().
|
overridevirtualinherited |
|
inherited |
Helper to visit nodes manipulated via a pointer.
|
overridevirtualinherited |
Reimplemented in object::DesugarVisitor.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Reimplemented in object::DesugarVisitor.
References ast::Ast::location_get(), ast::NameTy::name_get(), and astclone::Cloner::result_.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
References ast::Ast::location_get(), and astclone::Cloner::result_.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Reimplemented in object::DesugarVisitor.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Reimplemented in desugar::DesugarVisitor.
References ast::OpExp::left_get(), ast::Ast::location_get(), ast::OpExp::oper_get(), astclone::Cloner::recurse(), astclone::Cloner::result_, and ast::OpExp::right_get().
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
References ast::SimpleVar::name_get(), and astclone::Cloner::result_.
|
overridevirtualinherited |
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Reimplemented in object::DesugarVisitor.
References ast::VarDec::init_get(), ast::Ast::location_get(), ast::Dec::name_get(), astclone::Cloner::recurse(), and ast::VarDec::type_name_get().
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Reimplemented in object::DesugarVisitor.
|
overridevirtualinherited |
Reimplemented in object::DesugarVisitor.
|
overridevirtualinherited |
Reimplemented in object::DesugarVisitor.
|
overridevirtualinherited |
Reimplemented in object::DesugarVisitor.
|
overridevirtualinherited |
Visit a list of function, type and/or variables declarations.
Implements ast::GenVisitor< Const >.
References misc::for_each().
|
virtualinherited |
Visit a Decs chunks.
|
overridevirtualinherited |
Visit Var declarations.
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
overridevirtualinherited |
Implements ast::GenVisitor< Const >.
|
inherited |
References assertion.
Referenced by object::DesugarVisitor::operator()(), astclone::Cloner::operator()(), and object::DesugarVisitor::recurse_args().
|
inherited |
References assertion.
|
inherited |
Clone a collection object.
Using overloading for this method is tempting, but it would lead to the same prototype than the first recurse method.
A partial specialization for std::list<T> would work, but is not allowed by C++ standard. As a consequence, we are stuck to using different names.
References assertion.
Referenced by astclone::Cloner::operator()().
|
inherited |
References astclone::Cloner::result_.
Referenced by astclone::clone(), inlining::inline_expand(), inlining::prune(), desugar::raw_bound_checks_add(), desugar::raw_desugar(), and object::raw_desugar().
|
protectedinherited |
The cloned Ast.
Referenced by object::DesugarVisitor::operator()(), astclone::Cloner::operator()(), and astclone::Cloner::result_get().