Commit aeaaa953a0

Robin Voetter <robin@voetter.nl>
2023-09-16 00:58:22
spirv: assign type names to (error) unions
1 parent ece5264
Changed files (2)
src
codegen
link
src/codegen/spirv.zig
@@ -1178,6 +1178,14 @@ pub const DeclGen = struct {
         }
     }
 
+    // Turn a Zig type's name into a cache reference.
+    fn resolveTypeName(self: *DeclGen, ty: Type) !CacheString {
+        var name = std.ArrayList(u8).init(self.gpa);
+        defer name.deinit();
+        try ty.print(name.writer(), self.module);
+        return try self.spv.resolveString(name.items);
+    }
+
     /// Turn a Zig type into a SPIR-V Type, and return its type result-id.
     fn resolveTypeId(self: *DeclGen, ty: Type) !IdResultType {
         const type_ref = try self.resolveType(ty, .direct);
@@ -1289,6 +1297,7 @@ pub const DeclGen = struct {
         }
 
         const ty_ref = try self.spv.resolve(.{ .struct_type = .{
+            .name = try self.resolveTypeName(ty),
             .member_types = member_types.slice(),
             .member_names = member_names.slice(),
         } });
@@ -1443,6 +1452,7 @@ pub const DeclGen = struct {
                         }
 
                         const ty_ref = try self.spv.resolve(.{ .struct_type = .{
+                            .name = try self.resolveTypeName(ty),
                             .member_types = member_types[0..member_index],
                         } });
 
@@ -1472,10 +1482,8 @@ pub const DeclGen = struct {
                     try member_names.append(try self.spv.resolveString(field_name));
                 }
 
-                const name = ip.stringToSlice(try mod.declPtr(struct_type.decl.unwrap().?).getFullyQualifiedName(mod));
-
                 const ty_ref = try self.spv.resolve(.{ .struct_type = .{
-                    .name = try self.spv.resolveString(name),
+                    .name = try self.resolveTypeName(ty),
                     .member_types = member_types.items,
                     .member_names = member_names.items,
                 } });
@@ -1555,6 +1563,7 @@ pub const DeclGen = struct {
                 }
 
                 const ty_ref = try self.spv.resolve(.{ .struct_type = .{
+                    .name = try self.resolveTypeName(ty),
                     .member_types = &member_types,
                     .member_names = &member_names,
                 } });
src/link/SpirV.zig
@@ -111,7 +111,7 @@ pub fn updateFunc(self: *SpirV, module: *Module, func_index: InternPool.Index, a
 
     const func = module.funcInfo(func_index);
     const decl = module.declPtr(func.owner_decl);
-    log.debug("lowering function {s}", .{ module.intern_pool.stringToSlice(decl.name) });
+    log.debug("lowering function {s}", .{module.intern_pool.stringToSlice(decl.name)});
 
     var decl_gen = codegen.DeclGen.init(self.base.allocator, module, &self.spv, &self.decl_link);
     defer decl_gen.deinit();
@@ -127,7 +127,7 @@ pub fn updateDecl(self: *SpirV, module: *Module, decl_index: Module.Decl.Index)
     }
 
     const decl = module.declPtr(decl_index);
-    log.debug("lowering declaration {s}", .{ module.intern_pool.stringToSlice(decl.name) });
+    log.debug("lowering declaration {s}", .{module.intern_pool.stringToSlice(decl.name)});
 
     var decl_gen = codegen.DeclGen.init(self.base.allocator, module, &self.spv, &self.decl_link);
     defer decl_gen.deinit();