예제 #1
0
        protected IEnumerable <BoogieVerb> getBoogieVerbs(VerificationRequest verificationRequest)
        {
            if (verificationRequest.verifyMode == VerificationRequest.VerifyMode.NoVerify)
            {
                return(new BoogieVerb[] { });
            }

            BoogieAsmDepBase.BasmModuleAccumulator acc = new BoogieAsmDepBase.BasmModuleAccumulator(context, upstreamObj, includeAllImps());
            List <BuildObject> basmModules             = new List <BuildObject>(acc.basmModules.Where(mod => !mod.isTrusted));

            OrderPreservingSet <BoogieVerb> normal_Boogie  = new OrderPreservingSet <BoogieVerb>();
            OrderPreservingSet <BoogieVerb> SymDiff_Boogie = new OrderPreservingSet <BoogieVerb>();

            foreach (BuildObject basmModule in basmModules)
            {
                if (verificationRequest.verifyMode == VerificationRequest.VerifyMode.SelectiveVerify &&
                    !verificationRequest.selectiveVerifyModuleNames.Contains(basmModule.getFileNameWithoutExtension()))
                {
                    continue;
                }
                normal_Boogie.Add(new BoogieVerb(context, basmModule, symdiff: VerificationRequest.SymDiffMode.NoSymDiff));

                if (verificationRequest.getSymDiffMode() == VerificationRequest.SymDiffMode.UseSymDiff &&
                    BoogieAsmVerifyVerb.needs_symdiff(basmModule))
                {
                    SymDiff_Boogie.Add(new BoogieVerb(context, basmModule, symdiff: VerificationRequest.SymDiffMode.UseSymDiff));
                }
            }

            return(SymDiff_Boogie.Union(normal_Boogie));
        }
 public BoogieAsmVerifyVerb(IContextGeneratingVerb context, BuildObject input, bool buildSymDiffMutualSummary)
     : base(context, input)
 {
     this.buildSymDiffMutualSummary = buildSymDiffMutualSummary;
     this.enableSymdiff             = BoogieAsmVerifyVerb.needs_symdiff(basmInput);
 }