//- The list belongs to the caller to .Add() to as desired. public static OrderPreservingSet <BuildObject> getBasmFlavoredTransitiveDependencies(IContextGeneratingVerb context, BuildObject rootObj, out DependencyDisposition ddisp) { OrderPreservingSet <BuildObject> result = new OrderPreservingSet <BuildObject>(); TransitiveDepsVerb depsVerb = getBasmFlavoredTransitiveDepVerb(context, rootObj); result.Add(depsVerb.depsObj()); result.AddRange(depsVerb.getAvailableDeps(out ddisp)); //- NB add root object at end of list, to keep it in definition-dependency order result.Add(rootObj); return(result); }
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 override IEnumerable <BuildObject> getDependencies(out DependencyDisposition ddisp) { OrderPreservingSet <BuildObject> deps = BeatExtensions.getBeatFlavoredShallowDependencies( this.contextVerb, this.beatobj, out ddisp, BeatIncludes.ImportFilter.ForBeatOrBasm); deps.Add(this.getBeatExecutable()); return(deps); }
protected override IEnumerable <SourcePath> getRootArgs() { OrderPreservingSet <SourcePath> specFiles = new OrderPreservingSet <SourcePath>(); specFiles.Add(this.getDafnyPrelude()); specFiles.Add(this.getSeqSpec()); DependencyDisposition ddisp; foreach (SourcePath src in this.getAllDafnyModules(out ddisp)) { if (this.transformFilterAccepts(src)) { specFiles.Add(src); } } return(specFiles); }
public override IEnumerable <BuildObject> getDependencies(out DependencyDisposition ddisp) { ddisp = DependencyDisposition.Complete; OrderPreservingSet <BuildObject> deps = new OrderPreservingSet <BuildObject>(); // Things we need to stitch the interface: deps.Add(this.genericStitch); deps.Add(this.appSpecificStitch); deps.AddRange(this.mainBeatVerb.getOutputs()); // Things we need to stitch the imports into the imp file: deps.Add(this.entryImpInput); deps.Add(this.context.getContextOutput()); IIncludePathContext pathContext = this.context.fetchIfAvailable(ref ddisp); if (pathContext != null) { this.dafnyMainIfcInput = pathContext.search("dafny_Main_i", ModPart.Ifc); Util.Assert(this.dafnyMainIfcInput != null); deps.Add(this.dafnyMainIfcInput); this.dafnyMainImpInput = pathContext.search("dafny_Main_i", ModPart.Ifc); Util.Assert(this.dafnyMainImpInput != null); deps.Add(this.dafnyMainImpInput); } return(deps); }
//- This used to use a BeatTransitiveDepsVerb, but we're going with shallow dependencies at the moment. //- We may want to restore that behavior later, if we can get some sane transitive dep tree worked out for //- Verve code. //- The returned list belongs to the caller to .Add() to as desired. //- TODO this really needs to be factored to supply the actual Beat-flavored references separately //- from the auxiliary deps (transitive dep objects and context dep objects), so we don't have //- client code trying to filter back out the part it wants. Brittle. public static OrderPreservingSet <BuildObject> getBeatFlavoredShallowDependencies( IContextGeneratingVerb contextVerb, BuildObject rootObj, out DependencyDisposition ddisp, BeatIncludes.ImportFilter filter) { OrderPreservingSet <BuildObject> result = new OrderPreservingSet <BuildObject>(); result.Add(contextVerb.getContextOutput()); try { result.AddRange(getBeatFlavoredShallowIncludes(contextVerb, rootObj, filter)); ddisp = DependencyDisposition.Complete; } catch (ObjNotReadyException) { ddisp = DependencyDisposition.Incomplete; } catch (ObjFailedException) { ddisp = DependencyDisposition.Failed; } result.Add(rootObj); //- root really needs to go at the end of the list. return(result); }
private static IEnumerable <BeatIncludes.LabeledInclude> getBeatFlavoredShallowIncludesLabeled( IContextGeneratingVerb contextVerb, BuildObject rootObj) { ContextContents context = (ContextContents) BuildEngine.theEngine.getNuObjContents().openVirtual(contextVerb.getContextOutput()); BeatIncludes includes = new BeatIncludes(context.context); OrderPreservingSet <BeatIncludes.LabeledInclude> result = new OrderPreservingSet <BeatIncludes.LabeledInclude>( includes.getLabeledIncludes(rootObj)); if (BeatExtensions.whichPart(rootObj) == ModPart.Imp) { BuildObject rootIfc = context.context.search(rootObj.getFileNameWithoutExtension(), ModPart.Ifc); result.Add(new BeatIncludes.LabeledInclude(BeatIncludes.ImportFilter.ForBeatOrBasm, rootIfc)); } return(result); }
IEnumerable <SourcePath> getTrustedBoogieAxioms() { OrderPreservingSet <SourcePath> result = new OrderPreservingSet <SourcePath>(); AnnotationScanner anns = new AnnotationScanner(basmInput); foreach (string[] annotation in anns.getAnnotations(AddBoogieAxiomAnnotation)) { string module = annotation[1]; SourcePath trustedPath = new SourcePath(Path.Combine( BuildEngine.theEngine.getSrcRoot(), BuildEngine.VerveTrustedSpecDir, module + BoogieVerb.BPL_EXTN)); result.Add(trustedPath); } return(result); }
void getBasmModule(string modName, ModPart modPart) { //-Logger.WriteLine(String.Format("context {0} modName {1} modPart {2}", context, modName, modPart)); //-BuildObject ifcObj = context.search(modName, modPart); BuildObject ifcObj = BuildEngine.theEngine.getHasher().search(context, modName, modPart); if (ifcObj == null) { Util.Assert(false); //- I'm not sure this case even occur anymore, since we guard the foreach on incomplete deps _ddisp = _ddisp.combine(DependencyDisposition.Incomplete); } else { ifcObj = maybeBeat(ifcObj, _mutableVerbSet); _basmModules.Add(ifcObj); } }
public override IVerbWorker getWorker() { OrderPreservingSet <BuildObject> shallowDeps = new OrderPreservingSet <BuildObject>(); OrderPreservingSet <BuildObject> transitiveDeps = new OrderPreservingSet <BuildObject>(); IEnumerable <BuildObject> includes = getIncludeFactory().getIncludes(obj); foreach (BuildObject child in includes) { shallowDeps.Add(child); transitiveDeps.AddRange(factory(child).getTransitiveIncludes()); transitiveDeps.Add(child); } VirtualContents contents = new TransitiveDepsContents(shallowDeps, transitiveDeps); BuildEngine.theEngine.getNuObjContents().storeVirtual(depsObj(), new Fresh(), contents); return(new VerbSyncWorker(new Fresh())); }