Add anonymous structs

This commit is contained in:
nub31
2026-02-25 21:21:28 +01:00
parent d771396bd4
commit cb4aeb9c01
6 changed files with 153 additions and 18 deletions

View File

@@ -448,6 +448,7 @@ public class Generator
NubTypeVoid => "void" + (varName != null ? $" {varName}" : ""),
NubTypeBool => "bool" + (varName != null ? $" {varName}" : ""),
NubTypeStruct type => $"struct {NameMangler.Mangle(type.Module, type.Name, type)}" + (varName != null ? $" {varName}" : ""),
NubTypeAnonymousStruct type => CTypeAnonymousStruct(type, varName),
NubTypeEnum type => $"struct {NameMangler.Mangle(type.Module, type.Name, type)}" + (varName != null ? $" {varName}" : ""),
NubTypeEnumVariant type => CType(type.EnumType, varName),
NubTypeSInt type => $"int{type.Width}_t" + (varName != null ? $" {varName}" : ""),
@@ -458,6 +459,11 @@ public class Generator
_ => throw new ArgumentOutOfRangeException(nameof(node), node, null)
};
}
private string CTypeAnonymousStruct(NubTypeAnonymousStruct type, string? varName)
{
return $"struct {{ {string.Join(' ', type.Fields.Select(x => $"{CType(x.Type)} {x.Name};"))} }}{(varName != null ? $" {varName}" : "")}";
}
}
internal class IndentedTextWriter