main.cpp 960 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "common.cpp"
  2. #include "tokenizer.cpp"
  3. #include "parser.cpp"
  4. #include "printer.cpp"
  5. #include "checker/checker.cpp"
  6. #include "codegen/codegen.cpp"
  7. int main(int argc, char **argv) {
  8. if (argc < 2) {
  9. gb_printf_err("Please specify a .odin file\n");
  10. return 1;
  11. }
  12. int success = 1;
  13. init_universal_scope();
  14. for (int arg_index = 1; arg_index < argc; arg_index++) {
  15. char *arg = argv[arg_index];
  16. char *init_filename = arg;
  17. Parser parser = {0};
  18. if (init_parser(&parser)) {
  19. defer (destroy_parser(&parser));
  20. if (parse_files(&parser, init_filename) == ParseFile_None) {
  21. // print_ast(parser.files[0].declarations, 0);
  22. Checker checker = {};
  23. init_checker(&checker, &parser);
  24. defer (destroy_checker(&checker));
  25. check_parsed_files(&checker);
  26. ssaGen ssa = {};
  27. if (ssa_gen_init(&ssa, &checker)) {
  28. defer (ssa_gen_destroy(&ssa));
  29. ssa_gen_code(&ssa);
  30. success = 0;
  31. }
  32. }
  33. }
  34. }
  35. return success;
  36. }