Noeud « Next »: , Noeud « Previous »: src/frame, Noeud « Up »: Project Layout



3.2.12 The src/translate Directory

Namespace translate. Translation to intermediate code translation. It includes:

— File: libtranslate.hh (src/translate/)

The interface.

— File: libtranslate.cc (src/translate/)

The compiled module.

— File: fragment.hh (src/translate/)

It implements translate::Fragment, an abstract class, translate::DataFrag to store the literal strings, and translate::ProcFrag to store the routines.

— File: access.hh (src/translate/)
— File: access.cc (src/translate/)

Static link aware versions of level::Access.

— File: level.hh (src/translate/)
— File: level.cc (src/translate/)

translate::Level are wrappers frame::Frame that support the static links, so that we can find an access to the variables of the “parent function”.

— File: exp.hh (src/translate/)

Implementation of translate::Ex (expressions), Nx (instructions), Cx (conditions), and Ix (if) shells. They wrap tree::Node to delay their translation until the actual use is known.

— File: level-entry.hh (src/translate/)

All the information that the environment must keep about variables and functions.

— File: level-env.hh (src/translate/)

The levels environment, containing LevelVarEntry's and LevelFunEntry's. We don't need to store information related to types here.

— File: translation.hh (src/translate/)

functions used by the translate::TranslateVisitor to translate the AST into HIR. For instance, it contains Exp *simpleVar (const Access &access, const Level &level), Exp *callExp (const temp::Label &label, std::list<Exp *> args) etc. which are routines that produce some Tree::Exp. They handle all the unCx etc. magic.

— File: translate-visitor.hh (src/translate/)

Implements the class TranslateVisitor which performs the IR generation thanks to translation.hh. It must not be polluted with translation details: it is only coordinating the AST traversal with the invocation of translation routines. For instance, here is the translation of a ast::SimpleVar:

          virtual void visit (const SimpleVar& e)
          {
            const Access &access = env_.var_access_get (e.name_get ());
            exp_ = simpleVar (access, *level_);
          }