44 lines
1.2 KiB
C#
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>();
|
|
}
|
|
} |