From 63d0eb660b0bcbaef6216ce9df40989db8efa803 Mon Sep 17 00:00:00 2001 From: nub31 Date: Mon, 16 Mar 2026 16:04:43 +0100 Subject: [PATCH] CType -> TypeName --- compiler/Generator.cs | 58 ++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/compiler/Generator.cs b/compiler/Generator.cs index 16bc27a..dffe355 100644 --- a/compiler/Generator.cs +++ b/compiler/Generator.cs @@ -121,7 +121,6 @@ public class Generator private readonly ModuleGraph moduleGraph; private readonly string? entryPoint; private IndentedTextWriter writer = new(); - private readonly HashSet referencedTypes = []; private readonly Dictionary referencedStringLiterals = []; private readonly HashSet emittedTypes = []; private readonly Stack 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++}"; @@ -1126,4 +1122,4 @@ internal class IndentedTextWriter disposed = true; } } -} \ No newline at end of file +}