private void extendCallSink(ExtensionSinkPoint point, FlowOutputSet inSet) { inSet.StartTransaction(); inSet.Extend(point.OwningExtension.Owner.OutSet); //Services.FlowResolver.CallDispatchMerge(_inSet, OwningExtension.Branches); inSet.CommitTransaction(); }
public override void VisitExtensionSink(ExtensionSinkPoint p) { var ends = p.OwningExtension.Branches.Select(c => c.Graph.End.OutSet).ToArray(); OutputSet.MergeWithCallLevel(p.OwningExtension.Owner, ends); p.ResolveReturnValue(); }
internal FlowExtension(ProgramPointBase owner) { Owner = owner; if (Owner is ExtensionSinkPoint) { //Because of avoiding recursion - extension sink is also sink for self Sink = owner as ExtensionSinkPoint; } else { Sink = new ExtensionSinkPoint(this); } }