示例#1
0
    /// <summary>
    /// node2 \in mapping[node1]
    /// </summary>
    /// <param name="node1"></param>
    /// <param name="node2"></param>
    public void Relate(IPTAnalysisNode node1, IPTAnalysisNode node2)
    {
      Nodes ns = Nodes.Empty;
      if (!mapping.ContainsKey(node1))
        mapping[node1] = ns;
      else
        ns = mapping[node1];

      // For omega nodes we must add all objects reachable from the caller's node
      // and set load node (and parameters) as omega nodes.
      if (node1.IsOmega || node1.IsOmegaLoad || node1.IsOmegaConfined)
      {
          Nodes reachRef = node1.IsOmegaConfined ? this.callerPTG.getReachRefsOwned(node2) : this.callerPTG.getReachRefs(node2);
          foreach (IPTAnalysisNode nr in reachRef)
          {
              if (nr.IsLoad)
              {
                  ILoadNode iln = (ILoadNode)nr;
                  iln.SetOmegaLoadNode();
                  if(node1.IsOmegaConfined)
                      iln.SetOmegaConfinedLoadNode();
              }
              ns.Add(nr);
          }
      }
      else
      {
          ns.Add(node2);
      }
    }
示例#2
0
        private bool HasInvariantField(IPTAnalysisNode n)
        {
            var x = new Nodes();

            x.Add(n);
            return(HasInvariantField(x));
        }
示例#3
0
 protected virtual AbstractValue ConsistencyFor(IPTAnalysisNode n)
 {
     if (consistency.ContainsKey(n))
     {
         return(consistency[n]);
     }
     return(ConsistencyLattice.AVal.MaybeInconsistent);
     //return ConsistencyLattice.AVal.Consistent;
 }
示例#4
0
 public void WeakUpdateNode(IPTAnalysisNode n, AbstractValue a)
 {
     if (consistency.ContainsKey(n))
     {
         consistency[n] = ConsistencyLattice.It.Join(a, consistency[n]);
     }
     else
     {
         UpdateNode(n, a);
     }
 }
 public void WeakUpdateNode(IPTAnalysisNode n, AbstractValue a)
 {
     if (consistency.ContainsKey(n))
         consistency[n] = ConsistencyLattice.It.Join(a, consistency[n]);
     else
         UpdateNode(n, a);
 }
        private bool IsVisibleNode(IPTAnalysisNode n)
        {
            if (n.IsInside)
                return false;
            bool isVisible = true;


            // Nodes B = ReachablesFromOutside();
            isVisible = isVisible && IsReachableFromOutside(n);
            return isVisible;
        }
示例#7
0
 /// <summary>
 /// return mapping[n] U ({n} - PNode)
 /// </summary>
 /// <param name="n"></param>
 /// <returns></returns>
 public Nodes RelatedExtended(IPTAnalysisNode n)
 {
   Nodes res = new Nodes(Related(n));
   // if (!(n.IsParameterNode) && (!n.IsVariableReference) && !IsRemovedLoadNode(n))
   // VariableReference includes ParameterNodes
   if ((!n.IsVariableReference) && !IsRemovedLoadNode(n))
   {
     if (res.Count != 0 && n.IsParameterValueLNode &&
         n.Label.Method.Equals(calleePTG.Method))
     {
     }
     else
       res.Add(n);
   }
   return res;
 }
示例#8
0
 private bool IsRemovedLoadNode(IPTAnalysisNode n)
 {
   return n.IsLoad && removedLoadNodes.Contains((LNode)n);
 }
示例#9
0
    /// <summary>
    /// sNodes \in mapping[node1]
    /// </summary>
    /// <param name="node1"></param>
    /// <param name="node2"></param>
    public void Relate(IPTAnalysisNode node1, Nodes sNodes)
    {
        /*
      Nodes ns = Nodes.Empty;
      if (!mapping.ContainsKey(node1))
        mapping[node1] = ns;
      else
        ns = mapping[node1];

      ns.AddRange(sNodes);
         */
        foreach (IPTAnalysisNode n2 in sNodes)
            Relate(node1, n2);
    }
示例#10
0
 /// <summary>
 /// return mapping[n]
 /// </summary>
 /// <param name="n"></param>
 /// <returns></returns>
 public Nodes Related(IPTAnalysisNode n)
 {
   Nodes res = Nodes.Empty;
   if (mapping.ContainsKey(n))
     res.AddRange(mapping[n]);
   return res;
 }
 protected virtual AbstractValue ConsistencyFor(IPTAnalysisNode n)
 {
     if (consistency.ContainsKey(n))
         return consistency[n];
     return ConsistencyLattice.AVal.MaybeInconsistent;
     //return ConsistencyLattice.AVal.Consistent;
 }
 public void UpdateNode(IPTAnalysisNode n, AbstractValue a)
 {
     consistency[n] = a;
 }
示例#13
0
 public void UpdateNode(IPTAnalysisNode n, AbstractValue a)
 {
     consistency[n] = a;
 }
 private void RegisterReadEffect(IPTAnalysisNode n, Field f, Label lb)
 {
     if (IsVisibleEffect(n, f))
     {
         readEffects.AddEffect(n, f, lb);
     }
     allReadEffects.AddEffect(n, f, lb);
 }
 private void RegisterWriteEffect(IPTAnalysisNode n, Field f, Label lb, bool wasNull)
 {
     if (IsVisibleEffect(n, f))
     {
         writeEffects.AddEffect(n, f, lb,wasNull);
     }
     allWriteEffects.AddEffect(n, f, lb,wasNull);
 }
 public void AddEffect(IPTAnalysisNode n, Field f, Label lb,bool wasNull)
 {
     AField af = new AField(n, f, lb,wasNull);
     AddWriteEffect(af);
 }
 public virtual bool IsExposable(IPTAnalysisNode n)
 {
     ConsistencyLattice.AVal a = (ConsistencyLattice.AVal)ConsistencyFor(n);
     return a.IsExposable;
 }
        private bool IsReachableFromOutside(IPTAnalysisNode n)
        {
            Nodes Esc = new Nodes(PointsToGraph.E);
            Esc.Add(GNode.nGBL);
            foreach (PNode pn in PointsToGraph.AddrPNodes)
            {
                Esc.Add(pn);
            }
            return PointsToGraph.IsReachableFrom(n,Esc,true,true,true);

        }
        bool IsVisibleEffect(IPTAnalysisNode n, Field f)
        {
            bool isVisibleEffect = true;
            if (IsVisibleNode(n))
            {
                if (n.IsParameterNode)
                {
                    PNode pn = (PNode)n;
                    if (pn.IsByValue && (f.Equals(PTGraph.asterisk) || pn.IsStruct))
                        isVisibleEffect = false;
                }
            }
            else
                isVisibleEffect = false;
            return isVisibleEffect;

        }
示例#20
0
 public virtual bool IsExposable(IPTAnalysisNode n)
 {
     ConsistencyLattice.AVal a = (ConsistencyLattice.AVal)ConsistencyFor(n);
     return(a.IsExposable);
 }
 private bool HasInvariantField(IPTAnalysisNode n)
 {
     var x = new Nodes();
     x.Add(n);
     return HasInvariantField(x);
 }