};
private:
+ enum OptimizeResult
+ {
+ NEXT_STAGE,
+ REDO_STAGE,
+ REDO_PREVIOUS
+ };
+
Features features;
Module *module;
std::vector<std::string> imported_names;
Intended for debugging purposes. */
std::string get_stage_debug(Stage::Type) const;
+ /** Returns diagnostics from compilation. The output is intended to be
+ viewed by humans. */
+ std::string get_diagnostics() const;
+
private:
/** Appends a module to the target, processing any imports found in it. */
void append_module(Module &, DataFile::Collection *);
variables. */
void generate(Stage &, Mode);
- /** Applies optimizations to a stage. The return value indicates if the
- preceding stage should be processed again. */
- bool optimize(Stage &);
+ /** Resolves references and expression types. */
+ void resolve(Stage &);
+
+ bool validate(Stage &);
+
+ /** 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. */
void finalize(Stage &, Mode);