private ComposedFactQuery <Variable> CreateFactQuery <Variable> (Predicate <APC> isUnreachable, IEnumerable <IMethodResult <Variable> > results) { var res = new ComposedFactQuery <Variable> (isUnreachable); res.Add(new ConstantPropagationFactQuery <Variable> ()); foreach (var methodResult in results) { res.Add(methodResult.FactQuery); } return(res); }
private void AnalyzeMethodInternal(Method method, List <string> proofResults) { string fullMethodName = method.FullName; IMethodDriver <LabeledSymbol <APC, SymbolicValue>, SymbolicValue> methodDriver = this.analysis_driver.CreateMethodDriver(method); methodDriver.RunHeapAndExpressionAnalyses(); var results = new List <IMethodResult <SymbolicValue> > (this.analyzers.Values.Count); foreach (IMethodAnalysis analysis in this.analyzers.Values) { IMethodResult <SymbolicValue> result = analysis.Analyze(fullMethodName, methodDriver); results.Add(result); } ComposedFactQuery <SymbolicValue> facts = CreateFactQuery(methodDriver.BasicFacts.IsUnreachable, results); foreach (var methodResult in results) { methodResult.ValidateImplicitAssertions(facts, proofResults); } AssertionFinder.ValidateAssertions(facts, methodDriver, proofResults); }