diff --git a/apps/interpreter/source/main.cpp b/apps/interpreter/source/main.cpp index 26f285b..047a816 100644 --- a/apps/interpreter/source/main.cpp +++ b/apps/interpreter/source/main.cpp @@ -183,6 +183,15 @@ int main(int argc, char ** argv) { filenames.push_back(argv[arg]); auto root = parser::parse(filenames.back()); + + if (dump_ast) + { + std::cout << "Input file " << filenames.back() << " AST dump:\n\n"; + if (auto function_definition = std::get_if(parsed.back().get())) + ast::print(std::cout, *function_definition->statements); + std::cout << "\n" << std::flush; + } + ast::resolve_identifiers(root); ast::check_and_infer_types(root); ast::validate(root); @@ -190,6 +199,13 @@ int main(int argc, char ** argv) ir_compiled.emplace_back(); ir::compile(ir_compiled.back(), parsed.back()); + + if (dump_ir) + { + std::cout << "Input file " << filenames.back() << " IR dump:\n\n"; + ir::print(std::cout, ir_compiled.back()); + std::cout << "\n" << std::flush; + } } catch (ast::parse_error const & error) { @@ -229,29 +245,6 @@ int main(int argc, char ** argv) } } - if (dump_ast) - { - for (std::size_t i = 0; i < filenames.size(); ++i) - { - std::cout << "Input file " << filenames[i] << " AST dump:\n\n"; - if (auto function_definition = std::get_if(parsed[i].get())) - ast::print(std::cout, *function_definition->statements); - std::cout << "\n"; - } - std::cout << std::flush; - } - - if (dump_ir) - { - for (std::size_t i = 0; i < filenames.size(); ++i) - { - std::cout << "Input file " << filenames[i] << " IR dump:\n\n"; - ir::print(std::cout, ir_compiled[i]); - std::cout << "\n"; - } - std::cout << std::flush; - } - if (jit) { // TODO: treat all input files as modules combined into a single program