diff options
| author | gingerBill <ginger.bill.22@gmail.com> | 2016-07-07 21:47:33 +0100 |
|---|---|---|
| committer | gingerBill <ginger.bill.22@gmail.com> | 2016-07-07 21:47:33 +0100 |
| commit | 7430008fd7088339821923bdff533369b7967904 (patch) | |
| tree | 207c8e9b67f938c38982d1c9a2630e2ff7018700 /src/main.cpp | |
Initial Commit
Original Git Repo "went bad" so I had to restart.
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 000000000..55bb389ab --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,41 @@ +#include "common.cpp" +#include "tokenizer.cpp" +#include "parser.cpp" +#include "printer.cpp" +#include "checker.cpp" +#include "generator.cpp" + +int main(int argc, char **argv) { + if (argc < 2) { + gb_printf_err("Please specify a .odin file\n"); + return 1; + } + + init_global_scope(); + + for (int arg_index = 1; arg_index < argc; arg_index++) { + char *arg = argv[arg_index]; + char *filename = arg; + Parser parser = {0}; + + if (init_parser(&parser, filename)) { + defer (destroy_parser(&parser)); + AstNode *root_node = parse_statement_list(&parser, NULL); + // print_ast(root_node, 0); + + Checker checker = {}; + init_checker(&checker, &parser); + defer (destroy_checker(&checker)); + + check_statement_list(&checker, root_node); + + Generator generator = {}; + if (init_generator(&generator, &checker)) { + defer (destroy_generator(&generator)); + generate_code(&generator, root_node); + } + } + } + + return 0; +} |