Next: src/canon, Previous: src/frame, Up: Project Layout [Contents][Index]
Namespace ‘translate’. Translation to intermediate code translation. It includes:
The interface.
Static link aware versions of level::Access
.
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”.
Implementation of translate::Ex
(expressions), Nx
(instructions), Cx
(conditions), and Ix
(if
)
shells. They wrap tree::Tree
to delay their translation until
the actual use is known.
functions used by the translate::Translator
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.
Implements the class ‘Translator’ 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 an ‘ast::SimpleVar’:
virtual void operator()(const SimpleVar& e) { exp_ = simpleVar(*var_access_[e.def_get()], *level_); }