TC-4 Code to Write
What is to be done.
Because many AST nodes will be annotated with their type, the feature is factored by these two classes. See Typable, and TypeConstructor, for details.
These are typable.
These build types.
Implement the Singletons
type::String
,type::Int
, andtype::Void
. Use templates to factor the code between the three singleton classes, see singleton.The remaining classes are incomplete.
Pay extra attention to
type::operator==(const Type& a, const Type& b)
andtype::Type::compatible_with
.
Of course this is the most tricky part. We hope there are enough comments in there so that you understand what is to be done. Please, post your questions and help us improve it.
It is also the
type::TypeChecker
’s job to set therecord_type
in thetype::Nil
class.record_type
is holding some information about thetype::Record
type associated to thetype::Nil
type. We choose to handle therecord_type
only when no error occured in the type-checking process.
type::Types
are visitable. You must implement the default visitor class template, which walks through the
tree of types doing nothing. It’s used as a base class for the type visitors.- type::PrettyPrinter
In order to output nice error messages, the types need to be printed. You must implement a visitor that prints the types, similar to
ast::PrettyPrinter
.- Computing the Escaping Variables
The implementation of TC-E, Computing the Escaping Variables, suggested at TC-3, Bindings, becomes a core assignment at TC-4, Type Checking.
- src/ast/dumper-dot.* (Optionnal)
Continue the implementation of the dumper dot by dumping the types. You will need to implement the
the dump_type
function and call it in the relevant nodes.