It currently consists of a sequence of filters:
In particular, syntax macros also respect block scope and file scope. Therefore, if you prepare syntax macros in a separate file, you must #import or #include the file, to export the macros. Macros defined in a file included by an include directive are only recognized within that file (after other phases of processing of course).
It also handles elision of conditional constructions nased on constant conditions, and the recursive conditional desugaring of files denoted by include directives. The include facility caches the results of syntax macro processing, and inclusion is subject to time-stamp checking to relieve the compiler from expensive front end processing. The caches have the extension ".par".
Desugaring is also responsible for splitting scoped entities into one of three kinds of statement forms: directives, definitions and executable. Some statements, notably variable initialisations, can generate both a definition and an executable component.