Beispiel #1
0
        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());
                    }
                }
            }
        }
Beispiel #2
0
 internal static NameDefinition NewConstructorNameDefinition()
 {
     return(NameDefinition.Create(NewConstructorName));
 }