diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2023-11-01 15:22:47 +0000 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2023-11-01 15:22:47 +0000 |
commit | 6d35283ef01114475b6069f1a3c24e3b537bd510 (patch) | |
tree | 25507bc7a0bb8405915e7f2a67dbb4048572a3eb | |
parent | 6a270eda1e444a68d5db9102b11af9153fa58a1c (diff) | |
download | ovm-6d35283ef01114475b6069f1a3c24e3b537bd510.tar.gz ovm-6d35283ef01114475b6069f1a3c24e3b537bd510.tar.bz2 ovm-6d35283ef01114475b6069f1a3c24e3b537bd510.zip |
Clearer VERBOSE messages
-rw-r--r-- | asm/main.c | 25 | ||||
-rw-r--r-- | vm/main.c | 62 | ||||
-rw-r--r-- | vm/runtime.c | 3 |
3 files changed, 64 insertions, 26 deletions
@@ -71,7 +71,19 @@ int main(int argc, char *argv[]) printf("\t[%sTOKENISER%s]: %lu bytes -> %lu tokens\n", TERM_GREEN, TERM_RESET, buffer.used, tokens.available); #endif + +#if VERBOSE >= 2 + printf("\t[%sTOKENISER%s]: Tokens parsed:\n", TERM_GREEN, TERM_RESET); + for (size_t i = 0; i < tokens.available; ++i) + { + token_t token = TOKEN_STREAM_AT(tokens.data, i); + printf("\t[%lu]: %s(`%s`)@%lu,%lu\n", i, token_type_as_cstr(token.type), + token.str, token.line, token.column); + } +#endif + free(buffer.data); + buffer.data = NULL; size_t number = 0; inst_t *instructions = NULL; @@ -96,6 +108,16 @@ int main(int argc, char *argv[]) TERM_RESET, tokens.available, number); #endif +#if VERBOSE >= 2 + printf("\t[%sPARSER%s]: Instructions parsed:\n", TERM_GREEN, TERM_RESET); + for (size_t i = 0; i < number; ++i) + { + printf("\t[%lu]: ", i); + inst_print(instructions[i], stdout); + printf("\n"); + } +#endif + fp = fopen(out_file, "wb"); insts_write_bytecode_file(instructions, number, fp); fclose(fp); @@ -104,7 +126,8 @@ int main(int argc, char *argv[]) out_file); #endif end: - // Free the tokens and parsed data + if (buffer.data) + free(buffer.data); if (tokens.data) { for (size_t i = 0; i < tokens.available; ++i) @@ -17,17 +17,49 @@ #include "./runtime.h" #include <lib/inst.h> -int interpret_bytecode(const char *filepath) +void usage(const char *program_name, FILE *out) +{ + fprintf(out, + "Usage: %s [OPTIONS] FILE\n" + "\t FILE: Bytecode file to execute\n" + "\tOptions:\n" + "\t\t To be developed...\n", + program_name); +} + +int main(int argc, char *argv[]) { - FILE *fp = fopen(filepath, "rb"); + if (argc == 1) + { + usage(argv[0], stderr); + return 1; + } + const char *filename = argv[1]; + +#if VERBOSE >= 1 + printf("[%sINTERPRETER%s]: Interpreting `%s`\n", TERM_YELLOW, TERM_RESET, + filename); +#endif + + FILE *fp = fopen(filename, "rb"); size_t number = 0; inst_t *instructions = insts_read_bytecode_file(fp, &number); fclose(fp); +#if VERBOSE >= 1 + printf("\t[%sBYTECODE-READER%s]: Read %lu instructions\n", TERM_GREEN, + TERM_RESET, number); +#endif + byte stack[256]; vm_t vm = {0}; vm_load_stack(&vm, stack, ARR_SIZE(stack)); vm_load_program(&vm, instructions, number); + +#if VERBOSE >= 1 + printf("\t[%sVM-SETUP%s]: Loaded stack and program into VM\n", TERM_GREEN, + TERM_RESET); +#endif err_t err = vm_execute_all(&vm); int ret = 0; @@ -39,27 +71,9 @@ int interpret_bytecode(const char *filepath) ret = 255 - err; } free(instructions); - return ret; -} - -void usage(const char *program_name, FILE *out) -{ - fprintf(out, - "Usage: %s [OPTIONS] FILE\n" - "\t FILE: Bytecode file to execute\n" - "\tOptions:\n" - "\t\t To be developed...\n", - program_name); -} -int main(int argc, char *argv[]) -{ - if (argc == 1) - { - usage(argv[0], stderr); - return 1; - } - const char *filename = argv[1]; - - return interpret_bytecode(filename); +#if VERBOSE >= 1 + printf("[%sINTERPRETER%s]: Finished execution\n", TERM_GREEN, TERM_RESET); +#endif + return ret; } diff --git a/vm/runtime.c b/vm/runtime.c index 998bdc3..e6fb654 100644 --- a/vm/runtime.c +++ b/vm/runtime.c @@ -299,7 +299,8 @@ err_t vm_execute_all(vm_t *vm) } #if VERBOSE >= 1 - fprintf(stdout, "[vm_execute_all]: Final VM state(Cycle %lu)\n", cycles); + fprintf(stdout, "[%svm_execute_all%s]: Final VM state(Cycle %lu)\n", + TERM_YELLOW, TERM_RESET, cycles); vm_print_all(vm, stdout); #endif return err; |