diff options
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 25 |
1 files changed, 20 insertions, 5 deletions
@@ -41,13 +41,28 @@ void test_parser(int argc, char** argv) { for (int i = 1; i < argc; i++) { struct root_node* root = parse(argv[i]); unsigned int fn_sz = strlen(argv[i]); - char outfile[fn_sz + 1]; - strcpy(outfile, argv[i]); - outfile[fn_sz - 1] = 's'; - outfile[fn_sz] = 0; + char asm_file[fn_sz + 1]; + strcpy(asm_file, argv[i]); + asm_file[fn_sz - 1] = 's'; + asm_file[fn_sz] = 0; - emit_code(root, outfile); + emit_code(root, asm_file); ast_destroy(root); + + char obj_file[fn_sz + 1]; + strcpy(obj_file, argv[i]); + obj_file[fn_sz - 1] = 'o'; + obj_file[fn_sz] = 0; + + char cmd_buffer[2*fn_sz + 20]; + snprintf( + cmd_buffer, + sizeof(cmd_buffer), + "nasm -f elf64 %s -o %s", + asm_file, + obj_file); + int status = system(cmd_buffer); + if (status != 0) exit(status); } } |
