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;
        }
    }
Exemplo n.º 2
0
        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());
        }