Esempio n. 1
0
        protected EntityInstance createAggregate(ComputationContext ctx, bool hasReference, bool hasPointer,
                                                 IEnumerable <EntityInstance> dereferencedInstances, IEnumerable <FunctionDefinition> members,
                                                 bool partialVirtualTables)
        {
            this.aggregate = TypeBuilder.Create(AutoName.Instance.CreateNew("Aggregate"))
                             .With(members)
                             .SetModifier(EntityModifier.Protocol);
            aggregate.AttachTo(this);
            this.aggregate.Evaluated(ctx, EvaluationCall.AdHocCrossJump);

            EntityInstance aggregate_instance = this.aggregate.InstanceOf;

            foreach (EntityInstance instance in dereferencedInstances)
            {
                EntityInstanceExtension.BuildDuckVirtualTable(ctx, instance, aggregate_instance, allowPartial: partialVirtualTables);
            }

            if (hasReference || hasPointer)
            {
                aggregate_instance = ctx.Env.Reference(aggregate_instance, TypeMutability.None, viaPointer: hasPointer);
            }

            return(aggregate_instance);
        }
Esempio n. 2
0
 public void AddClosure(TypeDefinition closure)
 {
     this.closures.Add(closure);
     closure.AttachTo(this);
 }