示例#1
0
        public PointsTo ArgLocalPointsTo(ArgLocal argLocal, int index)
        {
            var key = ArgLocalInstruction.Key(argLocal, index);
            var pt  = default(PointsTo);

            if (argLocalToPointsTo.TryGetValue(key, out pt))
            {
                return(pt);
            }
            else
            {
                return(PointsTo.MakeBottom(argsAlive.Capacity, localsAlive.Capacity));
            }
        }
示例#2
0
        public ArgsLocalsState CloneWithArgLocalPointsTo(ArgLocal argLocal, int index, PointsTo pointsTo)
        {
            var key = ArgLocalInstruction.Key(argLocal, index);
            var res = new ArgsLocalsState(argsAlive.Capacity, localsAlive.Capacity);

            foreach (var kv in argLocalToPointsTo)
            {
                if (kv.Key != key)
                {
                    res.argLocalToPointsTo.Add(kv.Key, kv.Value);
                }
            }
            if (!pointsTo.IsBottom)
            {
                res.argLocalToPointsTo.Add(key, pointsTo);
            }
            return(res);
        }