aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/print_llvm.cpp23
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);
}