CType -> TypeName

This commit is contained in:
nub31
2026-03-16 16:04:43 +01:00
parent 918d25f8c8
commit 63d0eb660b

View File

@@ -121,7 +121,6 @@ public class Generator
private readonly ModuleGraph moduleGraph;
private readonly string? entryPoint;
private IndentedTextWriter writer = new();
private readonly HashSet<NubType> referencedTypes = [];
private readonly Dictionary<string, string> referencedStringLiterals = [];
private readonly HashSet<NubType> emittedTypes = [];
private readonly Stack<Scope> scopes = new();
@@ -152,9 +151,9 @@ public class Generator
if (info.Source == Module.DefinitionSource.Internal && !info.Extern && !info.Exported)
writer.Write("static ");
var parameters = function.Parameters.Select(x => CType(x.Type, x.Name.Ident));
var parameters = function.Parameters.Select(x => $"{TypeName(x.Type)} {x.Name.Ident}");
writer.WriteLine($"{CType(function.ReturnType, info.MangledName)}({string.Join(", ", parameters)})");
writer.WriteLine($"{TypeName(function.ReturnType)} {info.MangledName}({string.Join(", ", parameters)})");
writer.WriteLine("{");
using (writer.Indent())
{
@@ -182,9 +181,9 @@ public class Generator
writer.Write("static ");
if (info.Type is NubTypeFunc fn)
writer.WriteLine($"{CType(fn.ReturnType, info.MangledName)}({string.Join(", ", fn.Parameters.Select(p => CType(p)))});");
writer.WriteLine($"{TypeName(fn.ReturnType)} {info.MangledName}({string.Join(", ", fn.Parameters.Select(TypeName))});");
else
writer.WriteLine($"{CType(info.Type, info.MangledName)};");
writer.WriteLine($"{TypeName(info.Type)} {info.MangledName};");
writer.WriteLine();
}
@@ -211,11 +210,14 @@ public class Generator
writer = new IndentedTextWriter();
while (referencedTypes.Count != 0)
while (emittedTypes.Count != typeNames.Count)
{
var type = referencedTypes.ElementAt(0);
EmitTypeDefinitionIfNotEmitted(type);
referencedTypes.Remove(type);
var nextTypes = typeNames.Keys.ToArray();
foreach (var type in nextTypes)
{
EmitTypeDefinitionIfNotEmitted(type);
}
}
var types = writer.ToString();
@@ -266,7 +268,7 @@ public class Generator
{
foreach (var field in structInfo.Fields)
{
writer.WriteLine($"{CType(field.Type, field.Name)};");
writer.WriteLine($"{TypeName(field.Type)} {field.Name};");
}
}
writer.WriteLine($"}} {name};");
@@ -285,7 +287,7 @@ public class Generator
{
foreach (var field in anonymousStructType.Fields)
{
writer.WriteLine($"{CType(field.Type, field.Name)};");
writer.WriteLine($"{TypeName(field.Type)} {field.Name};");
}
}
writer.WriteLine($"}} {name};");
@@ -319,7 +321,7 @@ public class Generator
{
if (variant.Type is not null)
{
writer.WriteLine($"{CType(variant.Type, variant.Name)};");
writer.WriteLine($"{TypeName(variant.Type)} {variant.Name};");
}
}
}
@@ -363,7 +365,7 @@ public class Generator
{
writer.WriteLine("size_t count;");
writer.WriteLine("size_t capacity;");
writer.WriteLine($"{CType(arrayType.ElementType)} *items;");
writer.WriteLine($"{TypeName(arrayType.ElementType)} *items;");
writer.WriteLine("uint32_t ref;");
}
writer.WriteLine($"}} {backingName};");
@@ -509,7 +511,7 @@ public class Generator
{
var value = EmitExpression(statement.Value);
EmitCopyConstructor(value, statement.Value.Type);
writer.WriteLine($"{CType(statement.Type, statement.Name.Ident)} = {value};");
writer.WriteLine($"{TypeName(statement.Type)} {statement.Name.Ident} = {value};");
scopes.Peek().DeconstructableNames.Add((statement.Name.Ident, statement.Type));
}
@@ -577,7 +579,7 @@ public class Generator
using (writer.Indent())
{
var arrayType = (NubTypeArray)statement.Array.Type;
writer.WriteLine($"{CType(arrayType.ElementType, statement.VariableName.Ident)} = {array}->items[{index}];");
writer.WriteLine($"{TypeName(arrayType.ElementType)} {statement.VariableName.Ident} = {array}->items[{index}];");
EmitStatement(statement.Body);
}
writer.WriteLine("}");
@@ -610,7 +612,7 @@ public class Generator
if (@case.VariableName != null)
{
Debug.Assert(variantInfo.Type is not null);
writer.WriteLine($"{CType(variantInfo.Type, @case.VariableName.Ident)} = {target}.{@case.Variant.Ident};");
writer.WriteLine($"{TypeName(variantInfo.Type)} {@case.VariableName.Ident} = {target}.{@case.Variant.Ident};");
}
EmitStatement(@case.Body);
@@ -658,7 +660,7 @@ public class Generator
if (expression.Operation == TypedNodeExpressionBinary.Op.Add && expression.Left.Type is NubTypeString && expression.Right.Type is NubTypeString)
{
scopes.Peek().DeconstructableNames.Add((name, expression.Type));
writer.WriteLine($"{CType(NubTypeString.Instance, name)} = string_concat({left}, {right});");
writer.WriteLine($"{TypeName(NubTypeString.Instance)} {name} = string_concat({left}, {right});");
return name;
}
@@ -682,7 +684,7 @@ public class Generator
_ => throw new ArgumentOutOfRangeException()
};
writer.WriteLine($"{CType(expression.Type, name)} = {op};");
writer.WriteLine($"{TypeName(expression.Type)} {name} = {op};");
return name;
}
@@ -700,7 +702,7 @@ public class Generator
_ => throw new ArgumentOutOfRangeException()
};
writer.WriteLine($"{CType(expression.Type, name)} = {op};");
writer.WriteLine($"{TypeName(expression.Type)} {name} = {op};");
return name;
}
@@ -728,7 +730,7 @@ public class Generator
var initializerStrings = initializerValues.Select(x => $".{x.Key} = {x.Value}");
writer.WriteLine($"{CType(expression.Type, name)} = ({CType(expression.Type)}){{ {string.Join(", ", initializerStrings)} }};");
writer.WriteLine($"{TypeName(expression.Type)} {name} = ({TypeName(expression.Type)}){{ {string.Join(", ", initializerStrings)} }};");
return name;
}
@@ -753,7 +755,7 @@ public class Generator
EmitCopyConstructor(value, expression.Value.Type);
}
writer.Write($"{CType(expression.Type, name)} = ({CType(expression.Type)}){{ .tag = {tag}");
writer.Write($"{TypeName(expression.Type)} {name} = ({TypeName(expression.Type)}){{ .tag = {tag}");
if (value != null)
writer.WriteLine($", .{enumVariantType.Variant} = {value} }};");
@@ -768,7 +770,7 @@ public class Generator
var name = Tmp();
scopes.Peek().DeconstructableNames.Add((name, expression.Type));
writer.WriteLine($"{CType(expression.Type, name)} = {TypeName(expression.Type)}_make();");
writer.WriteLine($"{TypeName(expression.Type)} {name} = {TypeName(expression.Type)}_make();");
foreach (var value in expression.Values)
{
@@ -784,7 +786,7 @@ public class Generator
var name = Tmp();
scopes.Peek().DeconstructableNames.Add((name, expression.Type));
var value = EmitExpression(expression.Value);
writer.WriteLine($"{CType(expression.Type, name)} = string_from_cstr({value});");
writer.WriteLine($"{TypeName(expression.Type)} {name} = string_from_cstr({value});");
return name;
}
@@ -832,7 +834,7 @@ public class Generator
var parameterValues = expression.Parameters.Select(EmitExpression).ToList();
var tmp = Tmp();
writer.WriteLine($"{CType(expression.Type, tmp)} = {name}({string.Join(", ", parameterValues)});");
writer.WriteLine($"{TypeName(expression.Type)} {tmp} = {name}({string.Join(", ", parameterValues)});");
return tmp;
}
@@ -865,12 +867,6 @@ public class Generator
return name;
}
private string CType(NubType node, string? varName = null)
{
referencedTypes.Add(node);
return $"{TypeName(node)}" + (varName != null ? $" {varName}" : "");
}
private string Tmp()
{
return $"_tmp{tmpNameIndex++}";