浏览代码

Prefix named types with package name in debug types

gingerBill 4 年之前
父节点
当前提交
f1e13bdddb
共有 2 个文件被更改,包括 12 次插入0 次删除
  1. 3 0
      src/llvm_backend.cpp
  2. 9 0
      src/string.cpp

+ 3 - 0
src/llvm_backend.cpp

@@ -2010,6 +2010,9 @@ void lb_debug_complete_types(lbModule *m) {
 			String name = str_lit("<anonymous-struct>");
 			if (t->kind == Type_Named) {
 				name = t->Named.name;
+				if (t->Named.type_name && t->Named.type_name->pkg && t->Named.type_name->pkg->name.len != 0) {
+					name = concatenate3_strings(temporary_allocator(), t->Named.type_name->pkg->name, str_lit("."), t->Named.name);
+				}
 
 				LLVMMetadataRef file = nullptr;
 				unsigned line = 0;

+ 9 - 0
src/string.cpp

@@ -343,6 +343,15 @@ String concatenate_strings(gbAllocator a, String const &x, String const &y) {
 	data[len] = 0;
 	return make_string(data, len);
 }
+String concatenate3_strings(gbAllocator a, String const &x, String const &y, String const &z) {
+	isize len = x.len+y.len+z.len;
+	u8 *data = gb_alloc_array(a, u8, len+1);
+	gb_memmove(data,             x.text, x.len);
+	gb_memmove(data+x.len,       y.text, y.len);
+	gb_memmove(data+x.len+y.len, z.text, z.len);
+	data[len] = 0;
+	return make_string(data, len);
+}
 
 String string_join_and_quote(gbAllocator a, Array<String> strings) {
 	if (!strings.count) {