new FilteredPointerKey.MultipleClassesFilter(types.toArray(new IClass[0])) );
new FilteredPointerKey.MultipleClassesFilter(types.toArray(new IClass[0])) );
PointerKey result = getFilteredPointerKeyForLocal(instruction.getResult(), new FilteredPointerKey.MultipleClassesFilter(types.toArray(new IClass[0]))); PointerKey value = getPointerKeyForLocal(instruction.getVal());
PointerKey result = getFilteredPointerKeyForLocal(instruction.getResult(), new FilteredPointerKey.MultipleClassesFilter(types.toArray(new IClass[0]))); PointerKey value = getPointerKeyForLocal(instruction.getVal());
vals.foreach(x -> { InstanceKeyAndState ikAndState = ikAndStates.getMappedObject(x); for (IClass t : ((MultipleClassesFilter) typeFilter).getConcreteTypes()) { if (cha.isAssignableFrom(t, ikAndState.getInstanceKey().getConcreteType())) { tmp.add(x);
vals.foreach(x -> { InstanceKeyAndState ikAndState = ikAndStates.getMappedObject(x); for (IClass t : ((MultipleClassesFilter) typeFilter).getConcreteTypes()) { if (cha.isAssignableFrom(t, ikAndState.getInstanceKey().getConcreteType())) { tmp.add(x);
@Override public void visitCheckCast(SSACheckCastInstruction instruction) { Set<IClass> types = HashSetFactory.make(); for(TypeReference t : instruction.getDeclaredResultTypes()) { IClass cls = cha.lookupClass(t); if (cls == null) { return; } else { types.add(cls); } } PointerKey result = heapModel.getFilteredPointerKeyForLocal(node, instruction.getResult(), new FilteredPointerKey.MultipleClassesFilter(types.toArray(new IClass[0])) ); PointerKey value = heapModel.getPointerKeyForLocal(node, instruction.getVal()); addNode(result); addNode(value); addEdge(result, value, AssignLabel.noFilter()); }
@Override public void visitCheckCast(SSACheckCastInstruction instruction) { Set<IClass> types = HashSetFactory.make(); for(TypeReference t : instruction.getDeclaredResultTypes()) { IClass cls = cha.lookupClass(t); if (cls == null) { return; } else { types.add(cls); } } PointerKey result = heapModel.getFilteredPointerKeyForLocal(node, instruction.getResult(), new FilteredPointerKey.MultipleClassesFilter(types.toArray(new IClass[0])) ); PointerKey value = heapModel.getPointerKeyForLocal(node, instruction.getVal()); addNode(result); addNode(value); addEdge(result, value, AssignLabel.noFilter()); }
@Override public void visitCheckCast(SSACheckCastInstruction instruction) { Set<IClass> types = HashSetFactory.make(); for(TypeReference t : instruction.getDeclaredResultTypes()) { IClass cls = cha.lookupClass(t); if (cls == null) { return; } else { types.add(cls); } } FilteredPointerKey.MultipleClassesFilter filter = new FilteredPointerKey.MultipleClassesFilter(types.toArray(new IClass[0])); PointerKey result = heapModel.getPointerKeyForLocal(node, instruction.getResult()); PointerKey value = heapModel.getPointerKeyForLocal(node, instruction.getVal()); g.addNode(result); g.addNode(value); g.addEdge(result, value, AssignLabel.make(filter)); }
@Override public void visitCheckCast(SSACheckCastInstruction instruction) { Set<IClass> types = HashSetFactory.make(); for(TypeReference t : instruction.getDeclaredResultTypes()) { IClass cls = cha.lookupClass(t); if (cls == null) { return; } else { types.add(cls); } } FilteredPointerKey.MultipleClassesFilter filter = new FilteredPointerKey.MultipleClassesFilter(types.toArray(new IClass[0])); PointerKey result = heapModel.getPointerKeyForLocal(node, instruction.getResult()); PointerKey value = heapModel.getPointerKeyForLocal(node, instruction.getVal()); g.addNode(result); g.addNode(value); g.addEdge(result, value, AssignLabel.make(filter)); }
@Override public boolean addFiltered(PropagationSystem system, PointsToSetVariable L, PointsToSetVariable R) { IntSet f = bits(system); return (f == null) ? false : L.addAllInIntersection(R, f); }
@Override public boolean addInverseFiltered(PropagationSystem system, PointsToSetVariable L, PointsToSetVariable R) { IntSet f = bits(system); // SJF: this is horribly inefficient. we really don't want to do // diffs in here. TODO: fix it. probably keep not(f) cached and // use addAllInIntersection return (f == null) ? L.addAll(R) : L.addAll(IntSetUtil.diff(R.getValue(), f)); }
@Override public boolean addInverseFiltered(PropagationSystem system, PointsToSetVariable L, PointsToSetVariable R) { IntSet f = bits(system); // SJF: this is horribly inefficient. we really don't want to do // diffs in here. TODO: fix it. probably keep not(f) cached and // use addAllInIntersection return (f == null) ? L.addAll(R) : L.addAll(IntSetUtil.diff(R.getValue(), f)); }
@Override public boolean addFiltered(PropagationSystem system, PointsToSetVariable L, PointsToSetVariable R) { IntSet f = bits(system); return (f == null) ? false : L.addAllInIntersection(R, f); }