remove generics for now

This commit is contained in:
nub31
2025-07-22 20:08:49 +02:00
parent d9d08a4367
commit ae95a1f808

View File

@@ -1,77 +0,0 @@
using NubLang.Syntax.Parsing.Node;
namespace NubLang.Syntax.Generics;
public class GenericInstantiator
{
private readonly IEnumerable<SyntaxTree> _syntaxTrees;
private readonly Queue<GenericStructQueue> _structQueue = [];
public GenericInstantiator(IEnumerable<SyntaxTree> syntaxTrees)
{
_syntaxTrees = syntaxTrees;
}
public IEnumerable<SyntaxTree> Visit()
{
_structQueue.Clear();
var syntaxTrees = new List<SyntaxTree>();
foreach (var syntaxTree in _syntaxTrees)
{
var definitions = new List<DefinitionSyntax>();
foreach (var definition in syntaxTree.Definitions)
{
if (definition.Parameters.Any())
{
switch (definition)
{
case StructSyntax structSyntax:
{
var usages = _syntaxTrees
.SelectMany(x => x.GetDescendants())
.OfType<CustomTypeSyntax>()
.Where(x => x.Namespace == structSyntax.Namespace)
.Where(x => x.Name == structSyntax.Name);
foreach (var usage in usages)
{
if (!_structQueue.Any(x => x.Type.Namespace == usage.Namespace && x.Type.Name == usage.Name))
{
_structQueue.Enqueue(new GenericStructQueue(structSyntax, usage, false));
}
}
break;
}
default:
{
throw new ArgumentOutOfRangeException(nameof(definition));
}
}
}
else
{
definitions.Add(definition);
}
}
while (_structQueue.TryDequeue(out var item))
{
definitions.Add(new StructSyntax(item.Type.Tokens, item.Struct.Namespace, [], item.Type.MangledName(), item.Struct.Fields, item.Struct.Functions));
}
syntaxTrees.Add(new SyntaxTree(syntaxTree.Tokens, syntaxTree.Namespace, definitions, syntaxTree.Diagnostics));
}
return syntaxTrees;
}
}
public class GenericStructQueue(StructSyntax @struct, CustomTypeSyntax type, bool created)
{
public StructSyntax Struct { get; init; } = @struct;
public CustomTypeSyntax Type { get; init; } = type;
public bool Created { get; set; } = created;
}