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); }
public void AddClosure(TypeDefinition closure) { this.closures.Add(closure); closure.AttachTo(this); }