union definitions
This commit is contained in:
@@ -44,9 +44,14 @@ public class Generator
|
||||
{
|
||||
foreach (var (name, info) in module.GetTypes())
|
||||
{
|
||||
if (info is Module.TypeInfoStruct s)
|
||||
switch (info)
|
||||
{
|
||||
writer.WriteLine($"struct {NameMangler.Mangle(module.Name, name, NubTypeStruct.Get(module.Name, name))};");
|
||||
case Module.TypeInfoStruct s:
|
||||
writer.WriteLine($"struct {NameMangler.Mangle(module.Name, name, NubTypeStruct.Get(module.Name, name))};");
|
||||
break;
|
||||
case Module.TypeInfoEnum e:
|
||||
writer.WriteLine($"struct {NameMangler.Mangle(module.Name, name, NubTypeStruct.Get(module.Name, name))};");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -55,24 +60,59 @@ public class Generator
|
||||
{
|
||||
foreach (var (name, info) in module.GetTypes())
|
||||
{
|
||||
if (info is Module.TypeInfoStruct s)
|
||||
switch (info)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.Write("struct ");
|
||||
|
||||
if (s.Packed)
|
||||
writer.Write("__attribute__((__packed__)) ");
|
||||
|
||||
writer.WriteLine(NameMangler.Mangle(module.Name, name, NubTypeStruct.Get(module.Name, name)));
|
||||
writer.WriteLine("{");
|
||||
using (writer.Indent())
|
||||
case Module.TypeInfoStruct s:
|
||||
{
|
||||
foreach (var field in s.Fields)
|
||||
writer.WriteLine();
|
||||
writer.Write("struct ");
|
||||
|
||||
if (s.Packed)
|
||||
writer.Write("__attribute__((__packed__)) ");
|
||||
|
||||
writer.WriteLine(NameMangler.Mangle(module.Name, name, NubTypeStruct.Get(module.Name, name)));
|
||||
writer.WriteLine("{");
|
||||
using (writer.Indent())
|
||||
{
|
||||
writer.WriteLine($"{CType(field.Type, field.Name)};");
|
||||
foreach (var field in s.Fields)
|
||||
{
|
||||
writer.WriteLine($"{CType(field.Type, field.Name)};");
|
||||
}
|
||||
}
|
||||
writer.WriteLine("};");
|
||||
break;
|
||||
}
|
||||
case Module.TypeInfoEnum e:
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.Write($"struct {NameMangler.Mangle(module.Name, name, NubTypeStruct.Get(module.Name, name))}");
|
||||
writer.WriteLine("{");
|
||||
using (writer.Indent())
|
||||
{
|
||||
writer.WriteLine("uint32_t tag;");
|
||||
writer.WriteLine("union");
|
||||
writer.WriteLine("{");
|
||||
using (writer.Indent())
|
||||
{
|
||||
foreach (var variant in e.Variants)
|
||||
{
|
||||
writer.WriteLine($"struct {variant.Name}");
|
||||
writer.WriteLine("{");
|
||||
using (writer.Indent())
|
||||
{
|
||||
foreach (var field in variant.Fields)
|
||||
{
|
||||
writer.WriteLine($"{CType(field.Type, field.Name)};");
|
||||
}
|
||||
}
|
||||
writer.WriteLine("};");
|
||||
}
|
||||
}
|
||||
writer.WriteLine("};");
|
||||
}
|
||||
writer.WriteLine("};");
|
||||
break;
|
||||
}
|
||||
writer.WriteLine("};");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user