Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
keyboardDrummer committed Jan 26, 2024
1 parent d6446ab commit 9764fbc
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 11 deletions.
4 changes: 1 addition & 3 deletions Source/ExecutionEngine/ExecutionEngine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -724,9 +724,7 @@ public IReadOnlyList<IVerificationTask> GetVerificationTasks(Program program) {
out var gotoCmdOrigins,
out var modelViewInfo);
var splitOnEveryAssert = Options.VcsSplitOnEveryAssert;
run.Implementation.CheckBooleanAttribute("vcs_split_on_every_assert", ref splitOnEveryAssert);
var splits = ManualSplitFinder.FocusAndSplit(Options, run, gotoCmdOrigins, vcGenerator, splitOnEveryAssert);
var splits = ManualSplitFinder.FocusAndSplit(Options, run, gotoCmdOrigins, vcGenerator);
return splits.Select(split => new VerificationTask(this, processedProgram, split, modelViewInfo));
}).ToList();
}
Expand Down
9 changes: 6 additions & 3 deletions Source/VCGeneration/ManualSplitFinder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,20 @@ namespace VCGeneration;

public static class ManualSplitFinder
{
public static List<Split> FocusAndSplit(VCGenOptions options, ImplementationRun run, Dictionary<TransferCmd, ReturnCmd> gotoCmdOrigins, VerificationConditionGenerator par, bool splitOnEveryAssert)
public static List<Split> FocusAndSplit(VCGenOptions options, ImplementationRun run, Dictionary<TransferCmd, ReturnCmd> gotoCmdOrigins, VerificationConditionGenerator par)
{
List<Split> focussedImpl = FocusAttribute.FocusImpl(options, run, gotoCmdOrigins, par);
return focussedImpl.Select(s => FindManualSplits(s, splitOnEveryAssert)).SelectMany(x => x).ToList();
return focussedImpl.Select(FindManualSplits).SelectMany(x => x).ToList();
}

public static List<Split /*!*/> FindManualSplits(Split initialSplit, bool splitOnEveryAssert)
public static List<Split /*!*/> FindManualSplits(Split initialSplit)
{
Contract.Requires(initialSplit.Implementation != null);
Contract.Ensures(Contract.Result<List<Split>>() == null || cce.NonNullElements(Contract.Result<List<Split>>()));

var splitOnEveryAssert = initialSplit.Options.VcsSplitOnEveryAssert;
initialSplit.Run.Implementation.CheckBooleanAttribute("vcs_split_on_every_assert", ref splitOnEveryAssert);

var splitPoints = new Dictionary<Block, int>();
foreach (var block in initialSplit.Blocks)
{
Expand Down
7 changes: 2 additions & 5 deletions Source/VCGeneration/SplitAndVerifyWorker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,8 @@ public class SplitAndVerifyWorker
private readonly int maxKeepGoingSplits;
public List<Split> ManualSplits { get; }
private double maxVcCost;
private readonly bool splitOnEveryAssert;

private bool DoSplitting => ManualSplits.Count > 1 || KeepGoing || splitOnEveryAssert;
private bool DoSplitting => ManualSplits.Count > 1 || KeepGoing;
private bool TrackingProgress => DoSplitting && (callback.OnProgress != null || options.Trace);
private bool KeepGoing => maxKeepGoingSplits > 1;

Expand Down Expand Up @@ -58,11 +57,9 @@ public SplitAndVerifyWorker(VCGenOptions options, VerificationConditionGenerator
maxVcCost = tmpMaxVcCost;
}

splitOnEveryAssert = options.VcsSplitOnEveryAssert;
Implementation.CheckBooleanAttribute("vcs_split_on_every_assert", ref splitOnEveryAssert);

ResetPredecessors(Implementation.Blocks);
ManualSplits = ManualSplitFinder.FocusAndSplit(options, run, gotoCmdOrigins, verificationConditionGenerator, splitOnEveryAssert);
ManualSplits = ManualSplitFinder.FocusAndSplit(options, run, gotoCmdOrigins, verificationConditionGenerator);

if (ManualSplits.Count == 1 && maxSplits > 1) {
ManualSplits = Split.DoSplit(ManualSplits[0], maxVcCost, maxSplits);
Expand Down

0 comments on commit 9764fbc

Please sign in to comment.