REDO_PREVIOUS
};
+ enum ResolveFlags
+ {
+ RESOLVE_BLOCKS = 1,
+ RESOLVE_TYPES = 2,
+ RESOLVE_VARIABLES = 4,
+ RESOLVE_EXPRESSIONS = 8,
+ RESOLVE_FUNCTIONS = 16,
+ RESOLVE_ALL = 31
+ };
+
Features features;
Module *module;
std::vector<std::string> imported_names;
variables. */
void generate(Stage &, Mode);
- /** Resolves references and expression types. */
- void resolve(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);
+
+ /** Checks the validity of the module. If the return value is false, the
+ module's diagnostics list will contain additional information of errors. */
bool validate(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 &);