public void setInferenceMode(Dropdown option) { switch (option.value) { case 0: InferenceModeOption = InferenceMode.None; break; case 1: InferenceModeOption = InferenceMode.Intrinsic; break; case 2: InferenceModeOption = InferenceMode.Relative; break; } }
static IEnumerable <Function> DoInference(Program program, InferenceMode mode, string annotatedFileName, string expandedFileName) { var tmpFileName = "og__tmp_di.bpl"; if (mode == InferenceMode.SEQUENTIAL) { // remove yields program.TopLevelDeclarations.OfType <Implementation>() .Iter(impl => impl.Blocks .Iter(blk => blk.Cmds = new List <Cmd>(blk.Cmds.Filter(c => !(c is YieldCmd))))); } // Run OG if (dbg) { Console.WriteLine("Running OG: {0}", expandedFileName); } LinearTypeChecker linearTypechecker; CivlTypeChecker moverTypeChecker; var oc = ExecutionEngine.ResolveAndTypecheck(program, annotatedFileName, out linearTypechecker, out moverTypeChecker); if (oc != PipelineOutcome.ResolvedAndTypeChecked) { throw new Exception(string.Format("{0} type checking errors detected in {1}", linearTypechecker.errorCount, annotatedFileName)); } Concurrency.Transform(linearTypechecker, moverTypeChecker); var eraser = new LinearEraser(); eraser.VisitProgram(program); //var stats = new PipelineStatistics(); //ExecutionEngine.EliminateDeadVariablesAndInline(program); //var ret = ExecutionEngine.InferAndVerify(program, stats); //ExecutionEngine.printer.WriteTrailer(stats); //return; program = BoogieUtil.ReResolve(program, dbg ? expandedFileName : tmpFileName); // Run Abs if (dbg) { Console.WriteLine("Running abs houdini on {0}", expandedFileName); } ExecutionEngine.EliminateDeadVariables(program); ExecutionEngine.Inline(program); var domain = Microsoft.Boogie.Houdini.AbstractDomainFactory.GetInstance(absDomain); var abs = new Microsoft.Boogie.Houdini.AbsHoudini(program, domain); var outcome = abs.ComputeSummaries(); if (outcome.outcome != VC.ConditionGeneration.Outcome.Correct) { Console.WriteLine("Some assert failed while running AbsHoudini, aborting"); outcome.errors.Iter(error => og.PrintError(error)); } return(abs.GetAssignment()); }