public bool TryRetrievePreAndPostPartitions( APC pc, BoxedVariable <Variable> array, out Pair <IPartitionAbstraction <BoxedVariable <Variable>, BoxedExpression>, IPartitionAbstraction <BoxedVariable <Variable>, BoxedExpression> > partitions) { SimplePartitionAbstractDomain <BoxedVariable <Variable>, BoxedExpression> prePartitions; SimplePartitionAbstractDomain <BoxedVariable <Variable>, BoxedExpression> postPartitions; if (this.partitions.TryPartitionAt(pc, out prePartitions)) { IPartitionAbstraction <BoxedVariable <Variable>, BoxedExpression> prePartition; if (prePartitions.TryGetValue(array, out prePartition)) { if (this.partitions.TryPartitionAt(this.Context.Post(pc), out postPartitions)) { IPartitionAbstraction <BoxedVariable <Variable>, BoxedExpression> postPartition; if (postPartitions.TryGetValue(array, out postPartition)) { partitions = new Pair <IPartitionAbstraction <BoxedVariable <Variable>, BoxedExpression>, IPartitionAbstraction <BoxedVariable <Variable>, BoxedExpression> >(prePartition, postPartition); return(true); } } } } partitions = default(Pair <IPartitionAbstraction <BoxedVariable <Variable>, BoxedExpression>, IPartitionAbstraction <BoxedVariable <Variable>, BoxedExpression> >); return(false); }
public bool LookupState(IMethodResult <Variable> mr, APC pc, out SimplePartitionAbstractDomain <BoxedVariable <Variable>, BoxedExpression> astate) { astate = null; PartitionAnalysis an = mr as PartitionAnalysis; if (an == null) { return(false); } return(an.PreStateLookup(pc, out astate)); }
public bool AssignInParallel(IMethodResult <Variable> mr, ref SimplePartitionAbstractDomain <BoxedVariable <Variable>, BoxedExpression> astate, Dictionary <BoxedVariable <Variable>, FList <BoxedVariable <Variable> > > mapping, Converter <BoxedVariable <Variable>, BoxedExpression> convert) { PartitionAnalysis an = mr as PartitionAnalysis; if (an == null) { return(false); } astate.AssignInParallel(mapping, convert); return(true); }
internal ContainerAnalysis( string methodName, IMethodDriver <APC, Local, Parameter, Method, Field, Property, Type, Attribute, Assembly, ExternalExpression, Variable, ILogOptions> mdriver, PartitionAnalysis partitions, List <Analyzers.Containers.ContainerOptions> optionsList) : base(methodName, mdriver, optionsList[0]) { // TODO : we can imagine that the analysis used to handle indexes is choose wrt optionsList. //this.indexesAnalysis = new NumericalAnalysis<Options>(this.MethodName, this.MethodDriver, new List<Analyzers.Bounds.BoundsOptions>()); this.indexesAnalysis = new NumericalAnalysis <Analyzers.Containers.ContainerOptions>(this.MethodName, this.MethodDriver, optionsList); this.partitions = partitions; this.obligations = new ContainersObligations(mdriver, optionsList[0]); }
public SimplePartitionAbstractDomain <BoxedVariable <Variable>, BoxedExpression> Join(IMethodResult <Variable> mr, SimplePartitionAbstractDomain <BoxedVariable <Variable>, BoxedExpression> astate1, SimplePartitionAbstractDomain <BoxedVariable <Variable>, BoxedExpression> astate2) { PartitionAnalysis an = mr as PartitionAnalysis; if (an == null) { return(null); } bool bWeaker; return(an.Join(new Pair <APC, APC>(), astate1, astate2, out bWeaker, false)); }
public List <BoxedExpression> ExtractAssertions( IMethodResult <Variable> mr, SimplePartitionAbstractDomain <BoxedVariable <Variable>, BoxedExpression> astate, IExpressionContext <APC, Local, Parameter, Method, Field, Type, ExternalExpression, Variable> context, IDecodeMetaData <Local, Parameter, Method, Field, Property, Type, Attribute, Assembly> metaDataDecoder) { PartitionAnalysis an = mr as PartitionAnalysis; if (an == null) { return(null); } BoxedExpressionReader <APC, Local, Parameter, Method, Field, Property, Type, Variable, ExternalExpression, Attribute, Assembly> br = new BoxedExpressionReader <APC, Local, Parameter, Method, Field, Property, Type, Variable, ExternalExpression, Attribute, Assembly>(context, metaDataDecoder); return(an.ToListOfBoxedExpressions(astate, br)); }
HelperForPartitionAnalysis(string methodName, IMethodDriver <APC, Local, Parameter, Method, Field, Property, Type, Attribute, Assembly, ExternalExpression, Variable, ILogOptions> driver, List <Analyzers.Containers.ContainerOptions> optionsList, IFactQuery <BoxedExpression, Variable> factQuery) { PartitionAnalysis analysis; analysis = new PartitionAnalysis(methodName, driver, optionsList, factQuery); // *** The next lines must be strictly sequential *** var closure = driver.CreateForward <SimplePartitionAbstractDomain <BoxedVariable <Variable>, BoxedExpression> >(analysis); // At this point, CreateForward has called the Visitor, so the context has been created, so that now we can call initValue SimplePartitionAbstractDomain <BoxedVariable <Variable>, BoxedExpression> .Trace = optionsList[0].TracePartitionAnalysis; var initValue = analysis.InitialValue; closure(initValue); // Do the analysis return(analysis); }