TC-O, Desugaring object constructs

TC-O is an optional assignment.

This section has been updated for EPITA- 2021 on 2015-01-21.

At the end of this stage, the compiler must be able to desugar object constructs into plain Tiger without objects, a.k.a. Panther. This feature is triggered by the option --object-desugar. Do not forget that you need to complete and write all missing parts of the object support (parser, ast, binder, type-checker, etc…). Make sure that all of these are correctly working before starting this bonus.

This a very hard assignment. If you plan to work on it, start with very simple programs, and progressively add new desugaring patterns. Be sure to keep a complete test suite to cover all cases and avoid regressions.

Achieving a faithful and complete translation from Tiger to Panther requires a lot of work. Even the reference implementation of the object-desugar pass (about 1,000 lines of code) is not perfect, as some inputs may generate invalid Tiger code after desugaring objects (in particular when playing with scopes).