diff options
| author | gingerBill <ginger.bill.22@gmail.com> | 2016-08-15 14:54:45 +0100 |
|---|---|---|
| committer | gingerBill <ginger.bill.22@gmail.com> | 2016-08-15 15:02:45 +0100 |
| commit | dcbb2fcfbdbd3b35ddc44a4c542b7c6375e47214 (patch) | |
| tree | 1670d1ea683c78be063649685c601a17c1dcb025 /src/codegen | |
| parent | 3ed75b22a357292393618fc684b18a1d167f4eb7 (diff) | |
Full Unicode Support
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/print_llvm.cpp | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/codegen/print_llvm.cpp b/src/codegen/print_llvm.cpp index 1c0ab89a1..97cf168b9 100644 --- a/src/codegen/print_llvm.cpp +++ b/src/codegen/print_llvm.cpp @@ -35,7 +35,7 @@ b32 ssa_valid_char(u8 c) { return false; } -void ssa_print_escape_string(gbFile *f, String name) { +void ssa_print_escape_string(gbFile *f, String name, b32 print_quotes) { isize extra = 0; for (isize i = 0; i < name.len; i++) { u8 c = name.text[i]; @@ -50,11 +50,16 @@ void ssa_print_escape_string(gbFile *f, String name) { char hex_table[] = "0123456789ABCDEF"; - isize buf_len = name.len + extra; + isize buf_len = name.len + extra + 2; u8 *buf = gb_alloc_array(gb_heap_allocator(), u8, buf_len); defer (gb_free(gb_heap_allocator(), buf)); isize j = 0; + + if (print_quotes) { + buf[j++] = '"'; + } + for (isize i = 0; i < name.len; i++) { u8 c = name.text[i]; if (ssa_valid_char(c)) { @@ -67,19 +72,23 @@ void ssa_print_escape_string(gbFile *f, String name) { } } - ssa_file_write(f, buf, buf_len); + if (print_quotes) { + buf[j++] = '"'; + } + + ssa_file_write(f, buf, j); } void ssa_print_encoded_local(gbFile *f, String name) { ssa_fprintf(f, "%%"); - ssa_print_escape_string(f, name); + ssa_print_escape_string(f, name, true); } void ssa_print_encoded_global(gbFile *f, String name) { ssa_fprintf(f, "@"); - ssa_print_escape_string(f, name); + ssa_print_escape_string(f, name, true); } @@ -196,7 +205,7 @@ void ssa_print_exact_value(gbFile *f, ssaModule *m, ExactValue value, Type *type break; case ExactValue_String: { ssa_fprintf(f, "c\""); - ssa_print_escape_string(f, value.value_string); + ssa_print_escape_string(f, value.value_string, false); ssa_fprintf(f, "\""); } break; case ExactValue_Integer: @@ -228,7 +237,7 @@ void ssa_print_exact_value(gbFile *f, ssaModule *m, ExactValue value, Type *type } void ssa_print_block_name(gbFile *f, ssaBlock *b) { - ssa_print_escape_string(f, b->label); + ssa_print_escape_string(f, b->label, false); ssa_fprintf(f, ".-.%d", b->id); } |