using Syntax.Node; namespace Syntax; public sealed class DefinitionTable { private readonly List _topLevelNodes; public DefinitionTable(IEnumerable syntaxTrees) { _topLevelNodes = syntaxTrees.SelectMany(x => x.TopLevelNodes).ToList(); } public IEnumerable LookupLocalFunc(string @namespace, string name) { return _topLevelNodes .OfType() .Where(x => x.Namespace == @namespace && x.Name == name); } public IEnumerable LookupExternFunc(string @namespace, string name) { return _topLevelNodes .OfType() .Where(x => x.Namespace == @namespace && x.Name == name); } public IEnumerable LookupStruct(string @namespace, string name) { return _topLevelNodes .OfType() .Where(x => x.Namespace == @namespace && x.Name == name); } public IEnumerable LookupStructField(StructNode structNode, string field) { return structNode.Fields.Where(x => x.Name == field); } public IEnumerable LookupTraitImpl(NubType itemType) { return _topLevelNodes .OfType() .Where(x => x.TraitType == itemType); } public IEnumerable LookupTraitFuncImpl(TraitImplNode traitImpl, string name) { return traitImpl.Functions.Where(x => x.Name == name); } public IEnumerable LookupTrait(string @namespace, string name) { return _topLevelNodes .OfType() .Where(x => x.Namespace == @namespace && x.Name == name); } public IEnumerable LookupTraitFunc(TraitNode trait, string name) { return trait.Functions.Where(x => x.Name == name); } }