Beispiel #1
0
        public IEnumerable <Traceable> GetHeapTraceables(SimplePTGNode node, IFieldReference field)
        {
            var location           = new Location(node, field);
            var originalTraceables = GetLocationTraceables(location);

            var traceables = new HashSet <Traceable>();


            if (field.Type.IsClassOrStruct())
            {
                foreach (var target in PTG.GetTargets(node, field))
                {
                    if (Dependencies.A2_References.ContainsKey(target) && target != SimplePointsToGraph.NullNode)
                    {
                        traceables.UnionWith(Dependencies.A2_References[target]);
                    }
                }
            }

            if (traceables.Count > originalTraceables.Count)
            {
            }

            originalTraceables.UnionWith(traceables);

            return(originalTraceables);
        }
Beispiel #2
0
        public void AssignHeapTraceables(SimplePTGNode SimplePTGNode, IFieldReference field, IEnumerable <Traceable> traceables)
        {
            var newTraceables = new HashSet <Traceable>(traceables);

            // If it is a scalar field we modify A3_Field
            if (!field.Type.IsClassOrStruct())
            {
                var location = new Location(SimplePTGNode, field);
                //this.Dependencies.A3_Fields[location] = new HashSet<Traceable>(traceables);
                // TODO:  a weak update
                this.Dependencies.A3_Fields[location] = newTraceables;
            }

            // This should be only for references
            // we modify A2_Refs(n) where n \in PT(SimplePTGNode, field)
            if (field.Type.IsClassOrStruct())
            {
                var targets = PTG.GetTargets(SimplePTGNode, field);// .Except(new HashSet<SimplePTGNode>() { SimplePointsToGraph.NullNode } );
                if (targets.Any())
                {
                    foreach (var targetNode in targets)
                    {
                        if (targetNode != SimplePointsToGraph.NullNode)
                        {
                            // TODO: Change for Add
                            this.Dependencies.A2_References[targetNode] = newTraceables;
                            //this.Dependencies.A2_References[targetNode] = new HashSet<Traceable>(traceables);
                        }
                    }
                }
                else
                {
                }
            }
        }
        private void barButtonItem4_ItemClick(object sender, ItemClickEventArgs e)
        {
            PTG f = new PTG(Sess);

            this.Hide();
            f.ShowDialog();
            this.Show();
        }
Beispiel #4
0
        public IEnumerable <Traceable> GetHeapTraceables(IVariable arg, IFieldReference field)
        {
            var result = new HashSet <Traceable>();
            var nodes  = PTG.GetTargets(arg); // , field);

            foreach (var node in nodes)
            {
                result.UnionWith(GetHeapTraceables(node, field));
            }
            return(result);
        }
Beispiel #5
0
        /// <summary>
        ///  This one is just for debugging
        /// </summary>
        /// <param name="arg"></param>
        /// <returns></returns>
        public IEnumerable <Tuple <IFieldReference, IEnumerable <Traceable> > > GetHeapTraceables(IVariable arg)
        {
            var result = new HashSet <Tuple <IFieldReference, IEnumerable <Traceable> > >();
            var nodes  = PTG.GetTargets(arg);

            foreach (var node in nodes)
            {
                var locations = this.PTG.GetTargets(node).Select(nf => new Location(node, nf.Key));
                result.UnionWith(locations.Select(location => new Tuple <IFieldReference, IEnumerable <Traceable> >(location.Field, GetLocationTraceables(location))));
            }
            return(result);
        }
Beispiel #6
0
        private HashSet <Traceable> GetTraceablesForReferences(IVariable arg)
        {
            var traceables = new HashSet <Traceable>();

            if (arg.Type.IsClassOrStruct())
            {
                foreach (var SimplePTGNode in PTG.GetTargets(arg))
                {
                    if (SimplePTGNode != SimplePointsToGraph.NullNode && Dependencies.A2_References.ContainsKey(SimplePTGNode))
                    {
                        traceables.UnionWith(Dependencies.A2_References[SimplePTGNode]);
                    }
                }
            }

            return(traceables);
        }
Beispiel #7
0
        public void AddTraceables(IVariable destination, IEnumerable <Traceable> traceables)
        {
            // TODO: In the future only assign A2_Variable to Scalaras
            //if (!destination.Type.IsClassOrStruct())
            {
                this.Dependencies.A2_Variables.AddRange(destination, traceables);
            }

            if (destination.Type.IsClassOrStruct())
            {
                foreach (var targetNode in PTG.GetTargets(destination))
                {
                    if (targetNode != SimplePointsToGraph.NullNode)
                    {
                        this.Dependencies.A2_References.AddRange(targetNode, traceables);
                    }
                }
            }
        }
Beispiel #8
0
        public bool AssignHeapTraceables(IVariable destination, IFieldReference field, IEnumerable <Traceable> traceables)
        {
            var nodes = PTG.GetTargets(destination);

            if (nodes.Any())
            {
                // This should be only for scalars
                foreach (var SimplePTGNode in nodes)
                {
                    if (SimplePTGNode != SimplePointsToGraph.NullNode)
                    {
                        AssignHeapTraceables(SimplePTGNode, field, traceables);
                    }
                }
            }
            else
            {
                return(false);
            }
            return(true);
        }
Beispiel #9
0
 public override int GetHashCode()
 {
     return(Dependencies.GetHashCode() + PTG.GetHashCode());
 }