diff options
| author | Kai Stevenson <kai@kaistevenson.com> | 2024-07-06 19:00:44 -0700 |
|---|---|---|
| committer | Kai Stevenson <kai@kaistevenson.com> | 2024-07-06 19:00:44 -0700 |
| commit | 8ba7e4819c9a40d95f0739e984a19cedd71f1620 (patch) | |
| tree | dc6bad9aaebcf6d07f05966b460c5f89bd138522 /src/precedent.c | |
| parent | 0b1e955e3a69b6a02c69778adea4f123acfc8369 (diff) | |
Diffstat (limited to 'src/precedent.c')
| -rw-r--r-- | src/precedent.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/src/precedent.c b/src/precedent.c index 44ca1ed..0b04b33 100644 --- a/src/precedent.c +++ b/src/precedent.c @@ -8,11 +8,13 @@ #include "hashtable.h" #include "parse.h" #include "eval.h" +#include "compile.h" int main(int argc, char** argv) { clock_t initTime = clock(); char visual = 0; char debug = 0; + char compiled = 0; if (argc > 1) { for (int i = 1; i < argc; i++) { if (strcmp("--version", argv[i]) == 0) { @@ -31,6 +33,9 @@ int main(int argc, char** argv) { else if (strcmp("--debug", argv[i]) == 0) { debug = 1; } + else if (strcmp("--compiled", argv[i]) == 0) { + compiled = 1; + } } } else { @@ -59,17 +64,24 @@ int main(int argc, char** argv) { write_symbol_visual(finalSymbol, 0); printf("--END VISUALIZATION--\n"); } - hashtable_t* rootTable = init_hashtable(500, NULL); - clock_t setupTime = clock(); - sym_t* sym = eval(finalSymbol, rootTable); - clock_t evalTime = clock(); - if (debug) { - printf("time taken to set up environment: %.5f secs\n", (float)(setupTime - initTime) / (float)CLOCKS_PER_SEC); - printf("time taken to execute program: %.5f secs\n", ((float)(evalTime - setupTime) - initTime) / (float)CLOCKS_PER_SEC); + if (compiled) { + char* res = compile_to_asm(finalSymbol); + destroy_sym_tree(finalSymbol); + printf("%s\n", res); + } + else { + hashtable_t* rootTable = init_hashtable(500, NULL); + clock_t setupTime = clock(); + sym_t* sym = eval(finalSymbol, rootTable); + clock_t evalTime = clock(); + if (debug) { + printf("time taken to set up environment: %.5f secs\n", (float)(setupTime - initTime) / (float)CLOCKS_PER_SEC); + printf("time taken to execute program: %.5f secs\n", ((float)(evalTime - setupTime) - initTime) / (float)CLOCKS_PER_SEC); + } + destroy_sym_tree(finalSymbol); + destroy_sym(sym); + destroy_hashtable(rootTable); } - destroy_sym_tree(finalSymbol); - destroy_sym(sym); - destroy_hashtable(rootTable); return 0; } char* read_file(char* path) { |
