Ditch the IReadonlyCollection bullshit

This commit is contained in:
nub31
2025-01-30 11:57:29 +01:00
parent 305731bddb
commit 5a8efcf237
13 changed files with 33 additions and 33 deletions

View File

@@ -12,7 +12,7 @@ public class Generator
private readonly StringBuilder _builder;
private readonly LabelFactory _labelFactory;
public Generator(IReadOnlyCollection<DefinitionNode> definitions)
public Generator(List<DefinitionNode> definitions)
{
_definitions = [];
_builder = new StringBuilder();

View File

@@ -90,7 +90,7 @@ public class SymbolTable
return variables;
}
public Func ResolveFunc(string name, IReadOnlyCollection<Type> parameterTypes)
public Func ResolveFunc(string name, List<Type> parameterTypes)
{
var func = _funcDefinitions.FirstOrDefault(f => f.SignatureMatches(name, parameterTypes));
if (func == null)
@@ -101,7 +101,7 @@ public class SymbolTable
return func;
}
public LocalFunc ResolveLocalFunc(string name, IReadOnlyCollection<Type> parameterTypes)
public LocalFunc ResolveLocalFunc(string name, List<Type> parameterTypes)
{
var func = ResolveFunc(name, parameterTypes);
if (func is not LocalFunc localFunc)
@@ -111,7 +111,7 @@ public class SymbolTable
return localFunc;
}
public ExternFunc ResolveExternFunc(string name, IReadOnlyCollection<Type> parameterTypes)
public ExternFunc ResolveExternFunc(string name, List<Type> parameterTypes)
{
var func = ResolveFunc(name, parameterTypes);
if (func is not ExternFunc externFunc)
@@ -151,7 +151,7 @@ public class GlobalVariable(string name, Type type, string identifier) : Variabl
public abstract class Func
{
protected Func(string name, string startLabel, IReadOnlyCollection<FuncParameter> parameters, Optional<Type> returnType)
protected Func(string name, string startLabel, List<FuncParameter> parameters, Optional<Type> returnType)
{
Name = name;
Parameters = parameters;
@@ -161,10 +161,10 @@ public abstract class Func
public string Name { get; }
public string StartLabel { get; }
public IReadOnlyCollection<FuncParameter> Parameters { get; }
public List<FuncParameter> Parameters { get; }
public Optional<Type> ReturnType { get; }
public bool SignatureMatches(string name, IReadOnlyCollection<Type> parameterTypes)
public bool SignatureMatches(string name, List<Type> parameterTypes)
{
return Name == name
&& Parameters.Count == parameterTypes.Count
@@ -174,21 +174,21 @@ public abstract class Func
public class ExternFunc : Func
{
public ExternFunc(string name, string startLabel, IReadOnlyCollection<FuncParameter> parameters, Optional<Type> returnType) : base(name, startLabel, parameters, returnType)
public ExternFunc(string name, string startLabel, List<FuncParameter> parameters, Optional<Type> returnType) : base(name, startLabel, parameters, returnType)
{
}
}
public class LocalFunc : Func
{
public LocalFunc(string name, string startLabel, string endLabel, IReadOnlyCollection<FuncParameter> parameters, Optional<Type> returnType, IReadOnlyCollection<Variable> variables) : base(name, startLabel, parameters, returnType)
public LocalFunc(string name, string startLabel, string endLabel, List<FuncParameter> parameters, Optional<Type> returnType, List<Variable> variables) : base(name, startLabel, parameters, returnType)
{
EndLabel = endLabel;
Variables = variables;
}
public string EndLabel { get; }
public IReadOnlyCollection<Variable> Variables { get; }
public List<Variable> Variables { get; }
public int StackAllocation => Variables.OfType<LocalVariable>().Sum(variable => variable.Offset);
public Variable ResolveVariable(string name)

View File

@@ -48,7 +48,7 @@ public class Lexer
private string _src = string.Empty;
private int _index;
public IReadOnlyCollection<Token> Lex(string src)
public List<Token> Lex(string src)
{
_src = src;
_index = 0;

View File

@@ -1,6 +1,6 @@
namespace Nub.Lang.Frontend.Parsing;
public class BlockNode(IReadOnlyCollection<StatementNode> statements) : Node
public class BlockNode(List<StatementNode> statements) : Node
{
public IReadOnlyCollection<StatementNode> Statements { get; } = statements;
public List<StatementNode> Statements { get; } = statements;
}

View File

@@ -2,10 +2,10 @@
namespace Nub.Lang.Frontend.Parsing;
public class ExternFuncDefinitionNode(string name, IReadOnlyCollection<FuncParameter> parameters, Optional<Type> returnType) : DefinitionNode
public class ExternFuncDefinitionNode(string name, List<FuncParameter> parameters, Optional<Type> returnType) : DefinitionNode
{
public string Name { get; } = name;
public IReadOnlyCollection<FuncParameter> Parameters { get; } = parameters;
public List<FuncParameter> Parameters { get; } = parameters;
public Optional<Type> ReturnType { get; } = returnType;
public override string ToString() => $"{Name}({string.Join(", ", Parameters.Select(p => p.ToString()))}){(ReturnType.HasValue ? ": " + ReturnType.Value : "")}";

View File

@@ -1,9 +1,9 @@
namespace Nub.Lang.Frontend.Parsing;
public class FuncCall(string name, IReadOnlyCollection<ExpressionNode> parameters)
public class FuncCall(string name, List<ExpressionNode> parameters)
{
public string Name { get; } = name;
public IReadOnlyCollection<ExpressionNode> Parameters { get; } = parameters;
public List<ExpressionNode> Parameters { get; } = parameters;
public override string ToString() => $"{Name}()";
}

View File

@@ -2,10 +2,10 @@
namespace Nub.Lang.Frontend.Parsing;
public class LocalFuncDefinitionNode(string name, IReadOnlyCollection<FuncParameter> parameters, BlockNode body, Optional<Type> returnType) : DefinitionNode
public class LocalFuncDefinitionNode(string name, List<FuncParameter> parameters, BlockNode body, Optional<Type> returnType) : DefinitionNode
{
public string Name { get; } = name;
public IReadOnlyCollection<FuncParameter> Parameters { get; } = parameters;
public List<FuncParameter> Parameters { get; } = parameters;
public BlockNode Body { get; } = body;
public Optional<Type> ReturnType { get; } = returnType;

View File

@@ -1,8 +1,8 @@
namespace Nub.Lang.Frontend.Parsing;
public class ModuleNode(string path, IReadOnlyCollection<string> imports, IReadOnlyCollection<DefinitionNode> definitions) : Node
public class ModuleNode(string path, List<string> imports, List<DefinitionNode> definitions) : Node
{
public string Path { get; } = path;
public IReadOnlyCollection<string> Imports { get; } = imports;
public IReadOnlyCollection<DefinitionNode> Definitions { get; } = definitions;
public List<string> Imports { get; } = imports;
public List<DefinitionNode> Definitions { get; } = definitions;
}

View File

@@ -6,10 +6,10 @@ namespace Nub.Lang.Frontend.Parsing;
public class Parser
{
private IReadOnlyCollection<Token> _tokens = [];
private List<Token> _tokens = [];
private int _index;
public ModuleNode ParseModule(IReadOnlyCollection<Token> tokens, string path)
public ModuleNode ParseModule(List<Token> tokens, string path)
{
_index = 0;
_tokens = tokens;

View File

@@ -1,6 +1,6 @@
namespace Nub.Lang.Frontend.Parsing;
public class Syscall(IReadOnlyCollection<ExpressionNode> parameters)
public class Syscall(List<ExpressionNode> parameters)
{
public IReadOnlyCollection<ExpressionNode> Parameters { get; } = parameters;
public List<ExpressionNode> Parameters { get; } = parameters;
}

View File

@@ -3,10 +3,10 @@ using Nub.Lang.Frontend.Parsing;
namespace Nub.Lang.Frontend.Typing;
public class Func(string name, IReadOnlyCollection<FuncParameter> parameters, Optional<BlockNode> body, Optional<Type> returnType)
public class Func(string name, List<FuncParameter> parameters, Optional<BlockNode> body, Optional<Type> returnType)
{
public string Name { get; } = name;
public IReadOnlyCollection<FuncParameter> Parameters { get; } = parameters;
public List<FuncParameter> Parameters { get; } = parameters;
public Optional<BlockNode> Body { get; } = body;
public Optional<Type> ReturnType { get; } = returnType;
}
@@ -17,7 +17,7 @@ public class ExpressionTyper
private readonly List<GlobalVariableDefinitionNode> _variableDefinitions;
private readonly Stack<Variable> _variables;
public ExpressionTyper(IReadOnlyCollection<DefinitionNode> definitions)
public ExpressionTyper(List<DefinitionNode> definitions)
{
_variables = new Stack<Variable>();
_functions = [];

View File

@@ -42,7 +42,7 @@ internal static class Program
}
var modules = RunFrontend(input);
var definitions = modules.SelectMany(f => f.Definitions).ToArray();
var definitions = modules.SelectMany(f => f.Definitions).ToList();
var typer = new ExpressionTyper(definitions);
typer.Populate();
@@ -54,7 +54,7 @@ internal static class Program
return 0;
}
private static IEnumerable<ModuleNode> RunFrontend(string path)
private static List<ModuleNode> RunFrontend(string path)
{
List<ModuleNode> modules = [];
RunFrontend(path, modules);

View File

@@ -45,13 +45,13 @@ public record StringType : Type
public record DelegateType : Type
{
public DelegateType(IReadOnlyCollection<Type> parameters, Optional<Type> returnType)
public DelegateType(List<Type> parameters, Optional<Type> returnType)
{
Parameters = parameters;
ReturnType = returnType;
}
public IReadOnlyCollection<Type> Parameters { get; }
public List<Type> Parameters { get; }
public Optional<Type> ReturnType { get; }
public override string ToString() => $"({string.Join(", ", Parameters)}): {(ReturnType.HasValue ? ReturnType.Value.ToString() : "")}";