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