public ScopeTable(IEnumerable <EntityInstance> entities) { this.entities = entities.StoreReadOnly(); this.dict = new Dictionary <string, List <List <EntityInstance> > >(); if (!this.entities.Any()) { return; } int arities = 1 + this.entities.Select(it => it.Target.Name.Arity).Max(); foreach (EntityInstance instance in this.entities) { IEntity entity = instance.Target; NameDefinition name = entity.Name; if (!this.dict.TryGetValue(name.Name, out List <List <EntityInstance> > list)) { list = Enumerable.Range(0, arities).Select(_ => new List <EntityInstance>()).ToList(); this.dict.Add(name.Name, list); } if (name.Arity == 0) { list[0].Add(instance); } else { list[name.Arity].Add(instance); if (entity is FunctionDefinition) { list[0].Add(instance.BuildNoArguments()); } } } }
internal static NameDefinition NewConstructorNameDefinition() { return(NameDefinition.Create(NewConstructorName)); }