This commit is contained in:
nub31
2025-07-05 18:08:59 +02:00
parent 5246e54ac9
commit e195731b9e
9 changed files with 413 additions and 296 deletions

View File

@@ -2,7 +2,7 @@ using Syntax.Node;
namespace Syntax;
public class DefinitionTable
public sealed class DefinitionTable
{
private readonly List<TopLevelNode> _topLevelNodes;
@@ -10,14 +10,54 @@ public class DefinitionTable
{
_topLevelNodes = syntaxTrees.SelectMany(x => x.TopLevelNodes).ToList();
}
}
public class BoundDefinitionTable
{
private readonly List<BoundTopLevelNode> _topLevelNodes;
public BoundDefinitionTable(IEnumerable<BoundSyntaxTree> syntaxTrees)
public IEnumerable<LocalFuncNode> LookupLocalFunc(string @namespace, string name)
{
_topLevelNodes = syntaxTrees.SelectMany(x => x.TopLevelNodes).ToList();
return _topLevelNodes
.OfType<LocalFuncNode>()
.Where(x => x.Namespace == @namespace && x.Name == name);
}
public IEnumerable<ExternFuncNode> LookupExternFunc(string @namespace, string name)
{
return _topLevelNodes
.OfType<ExternFuncNode>()
.Where(x => x.Namespace == @namespace && x.Name == name);
}
public IEnumerable<StructNode> LookupStruct(string @namespace, string name)
{
return _topLevelNodes
.OfType<StructNode>()
.Where(x => x.Namespace == @namespace && x.Name == name);
}
public IEnumerable<StructFieldNode> LookupStructField(StructNode structNode, string field)
{
return structNode.Fields.Where(x => x.Name == field);
}
public IEnumerable<TraitImplNode> LookupTraitImpl(NubType itemType)
{
return _topLevelNodes
.OfType<TraitImplNode>()
.Where(x => x.TraitType == itemType);
}
public IEnumerable<TraitFuncImplNode> LookupTraitFuncImpl(TraitImplNode traitImpl, string name)
{
return traitImpl.Functions.Where(x => x.Name == name);
}
public IEnumerable<TraitNode> LookupTrait(string @namespace, string name)
{
return _topLevelNodes
.OfType<TraitNode>()
.Where(x => x.Namespace == @namespace && x.Name == name);
}
public IEnumerable<TraitFuncNode> LookupTraitFunc(TraitNode trait, string name)
{
return trait.Functions.Where(x => x.Name == name);
}
}