Files
nub-lang/src/Syntax/DefinitionTable.cs
2025-06-22 18:34:19 +02:00

44 lines
1.2 KiB
C#

using Common;
using Syntax.Parsing;
using Syntax.Parsing.Node;
namespace Syntax;
public class DefinitionTable
{
private readonly IEnumerable<CompilationUnit> _compilationUnits;
public DefinitionTable(IEnumerable<CompilationUnit> compilationUnits)
{
_compilationUnits = compilationUnits;
}
public Optional<IFuncSignature> LookupFunc(string @namespace, string name)
{
var definition = _compilationUnits
.Where(c => c.Namespace == @namespace)
.SelectMany(c => c.Definitions)
.OfType<IFuncSignature>()
.SingleOrDefault(f => f.Name == name);
return Optional.OfNullable(definition);
}
public Optional<StructDefinitionNode> LookupStruct(string @namespace, string name)
{
var definition = _compilationUnits
.Where(c => c.Namespace == @namespace)
.SelectMany(c => c.Definitions)
.OfType<StructDefinitionNode>()
.SingleOrDefault(f => f.Name == name);
return Optional.OfNullable(definition);
}
public IEnumerable<StructDefinitionNode> GetStructs()
{
return _compilationUnits
.SelectMany(c => c.Definitions)
.OfType<StructDefinitionNode>();
}
}