- void append_module(Module &, DataFile::Collection *);
- void append_stage(Stage &);
- void import(DataFile::Collection *, const std::string &);
- void generate(Stage &, Mode);
- bool optimize(Stage &);
+ /** Appends a module to the target, processing any imports found in it. */
+ void append_module(const Module &, ModuleCache &);
+
+ /** Appends a single stage to the matching stage of the target. */
+ void append_stage(const Stage &);
+
+ /// Imports a module by name and appends it to the target. */
+ void import(ModuleCache &, const std::string &);
+
+ /** Generates any implicitly defines syntactic structures and resolves
+ variables. */
+ void generate(Stage &);
+
+ template<typename T>
+ bool resolve(Stage &, unsigned &, unsigned);
+
+ /** Resolves various references between nodes. Flags can be specified to
+ request resolving particular aspects. Resolving may ripple into other
+ aspects as necessary. */
+ void resolve(Stage &, unsigned = RESOLVE_ALL);
+
+ /** Runs validators on a stage. Diagnostic messages are recorded in the
+ stage for later inspection. */
+ void validate(Stage &);
+
+ /** Checks a stage's recorded diagnostics for errors. If any are found,
+ returns true. */
+ bool check_errors(Stage &);
+
+ static bool diagnostic_line_order(const Diagnostic &, const Diagnostic &);
+
+ /** Applies optimizations to a stage. The return value indicates which
+ stage should be optimized next. */
+ OptimizeResult optimize(Stage &);
+
+ /** Performs final adjustments on a stage after compilation. */