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)); } }
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); }