private void extendCallSink(ExtensionSinkPoint point, FlowOutputSet inSet) { inSet.StartTransaction(); inSet.Extend(point.OwningExtension.Owner.OutSet); //Services.FlowResolver.CallDispatchMerge(_inSet, OwningExtension.Branches); inSet.CommitTransaction(); }
/// <summary> /// Initializes a new instance of the <see cref="ForwardAnalysisBase" /> class. /// Create forward analysis object for given entry method graph. /// </summary> /// <param name="entryMethodGraph">Control flow graph of method which is entry point of analysis</param> /// <param name="createSnapshotDelegate">Method that creates a snapshot used during analysis</param> public ForwardAnalysisBase(Weverca.ControlFlowGraph.ControlFlowGraph entryMethodGraph, CreateSnapshot createSnapshotDelegate) { _createSnapshotDelegate = createSnapshotDelegate; WideningLimit = int.MaxValue; SimplifyLimit = int.MaxValue; EntryInput = createEmptySet(); EntryInput.StartTransaction(); EntryCFG = entryMethodGraph; }
/// <summary> /// Extends the input. /// </summary> protected virtual void extendInput() { var inputs = getInputsForExtension(); if (inputs.Length > 0) { _inSet.StartTransaction(); _inSet.Extend(inputs.ToArray()); _inSet.CommitTransaction(); } }
private void extendCallExtension(ExtensionPoint point, FlowOutputSet inSet) { inSet.StartTransaction(); if (point.Type == ExtensionType.ParallelCall) { inSet.ExtendAsCall(point.Caller.OutSet, point.Graph, point.Flow.CalledObject, point.Flow.Arguments); } else { inSet.Extend(point.Caller.OutSet); } inSet.CommitTransaction(); }
private void standardExtend(IEnumerable <ProgramPointBase> inputs, FlowOutputSet inSet) { var inputSets = new List <FlowInputSet>(); foreach (var input in inputs) { var outSet = GetOutSet(input); var assumeParent = input as AssumePoint; if (outSet == null || (assumeParent != null && !assumeParent.Assumed)) { continue; } inputSets.Add(outSet); } inSet.StartTransaction(); inSet.Extend(inputSets.ToArray()); inSet.CommitTransaction(); }
/// <summary> /// Extends the output. /// </summary> protected virtual void extendOutput() { _outSet.StartTransaction(); _outSet.Extend(_inSet); }