// Constructor public PointsToAndWriteEffects(Method m, PointsToAnalysis pta) : base(m,pta) { this.writeEffects = new AbstractEffects(); this.allWriteEffects = new AbstractEffects(); this.readEffects = new AbstractEffects(); this.allReadEffects = new AbstractEffects(); this.callToNonAnalyzableMethods = new Dictionary<Label, Set<Method>>(); // this.nonNullState = null; }
// Copy Constructor public PointsToAndWriteEffects(PointsToAndWriteEffects ptWE): base(ptWE) { writeEffects = new AbstractEffects(ptWE.writeEffects); allWriteEffects = ptWE.allWriteEffects; readEffects = new AbstractEffects(ptWE.readEffects); ; allReadEffects = ptWE.allReadEffects; callToNonAnalyzableMethods = new Dictionary<Label, Set<Method>>(ptWE.callToNonAnalyzableMethods); //if(ptWE.nonNullState!=null) // nonNullState = new NonNullState((NonNullState)ptWE.nonNullState); }
/// <summary> /// Given a Set of effects over abstract heap locations, /// computes a set of effects over the method parameters /// or in the global scope /// </summary> /// <param name="Effects"></param> /// <returns></returns> public Set<VariableEffect> ComputeEffects(AbstractEffects Effects) { Set<VariableEffect> variableEffects = new Set<VariableEffect>(); // Traverse every write effect foreach (AField af in Effects) variableEffects.AddRange(EffectsInVariables(af)); return variableEffects; }
public bool Includes(AbstractEffects we) { return modifies.Includes(we.modifies); }
public void Join(AbstractEffects we) { if (modifies != we.modifies) { modifies.AddRange(we.modifies); } }
public AbstractEffects(AbstractEffects w) { modifies = new Set<AField>(w.modifies); }
public PointsToAndWriteEffects(PointsToState ptWE) : base(ptWE) { this.writeEffects = new AbstractEffects(); this.allWriteEffects = new AbstractEffects(); this.readEffects = new AbstractEffects(); this.allReadEffects = new AbstractEffects(); this.callToNonAnalyzableMethods = new Dictionary<Label, Set<Method>>(); //if(ptWE.nonNullState!=null) // nonNullState = new NonNullState((NonNullState)ptWE.nonNullState); }