/** * @return true iff the system changes */ public boolean newFieldRead(PointerKey lhs, UnaryOperator<PointsToSetVariable> op, PointerKey rhs) { return newConstraint(lhs, op, rhs); }
/** * @return true iff the system changes */ public boolean newFieldWrite(PointerKey lhs, UnaryOperator<PointsToSetVariable> op, PointerKey rhs) { return newConstraint(lhs, op, rhs); }
@Override protected void addAssignmentsForCatchPointerKey(PointerKey exceptionVar, Set<IClass> catchClasses, PointerKey e) { system.newConstraint(exceptionVar, assignOperator, e); }
/** * @return true iff the system changes */ public boolean newFieldWrite(PointerKey lhs, UnaryOperator<PointsToSetVariable> op, PointerKey rhs) { return newConstraint(lhs, op, rhs); }
/** * @return true iff the system changes */ public boolean newFieldRead(PointerKey lhs, UnaryOperator<PointsToSetVariable> op, PointerKey rhs) { return newConstraint(lhs, op, rhs); }
@Override protected void addAssignmentsForCatchPointerKey(PointerKey exceptionVar, Set<IClass> catchClasses, PointerKey e) { system.newConstraint(exceptionVar, assignOperator, e); }
@Override protected void action(PointerKey lexicalKey, int vn) { PointerKey rval = getPointerKeyForLocal(vn); if (contentsAreInvariant(symbolTable, du, vn)) { InstanceKey[] ik = getInvariantContents(vn); system.recordImplicitPointsToSet(rval); for (InstanceKey element : ik) { system.findOrCreateIndexForInstanceKey(element); system.newConstraint(lexicalKey, element); } } else { system.newConstraint(lexicalKey, assignOperator, rval); } } });
@Override public void action(AbstractFieldPointerKey fieldKey) { if (!representsNullType(fieldKey.getInstanceKey())) { system.newConstraint(lhs, assignOperator, fieldKey); AbstractFieldPointerKey unknown = getBuilder().fieldKeyForUnknownWrites(fieldKey); if (unknown != null) { system.newConstraint(lhs, assignOperator, unknown); } } } });
/** * Handle assign of a particular exception instance into an exception variable * * @param exceptionVar points-to set for a variable representing a caught exception * @param catchClasses set of TypeReferences that the exceptionVar may catch * @param e a particular exception instance */ protected void assignInstanceToCatch(PointerKey exceptionVar, Set<IClass> catchClasses, InstanceKey e) { if (catches(catchClasses, e.getConcreteType(), cha)) { system.newConstraint(exceptionVar, e); } }
/** * Handle assign of a particular exception instance into an exception variable * * @param exceptionVar points-to set for a variable representing a caught exception * @param catchClasses set of TypeReferences that the exceptionVar may catch * @param e a particular exception instance */ protected void assignInstanceToCatch(PointerKey exceptionVar, Set<IClass> catchClasses, InstanceKey e) { if (catches(catchClasses, e.getConcreteType(), cha)) { system.newConstraint(exceptionVar, e); } }
@Override public void action(AbstractFieldPointerKey fieldKey) { if (!representsNullType(fieldKey.getInstanceKey())) { system.newConstraint(fieldKey, assignOperator, rhs); } } }
@Override public void action(AbstractFieldPointerKey fieldKey) { if (!representsNullType(fieldKey.getInstanceKey())) { system.newConstraint(fieldKey, assignOperator, rhs); } } }
@Override public void action(AbstractFieldPointerKey fieldKey) { if (!representsNullType(fieldKey.getInstanceKey())) { system.newConstraint(lhs, assignOperator, fieldKey); AbstractFieldPointerKey unknown = getBuilder().fieldKeyForUnknownWrites(fieldKey); if (unknown != null) { system.newConstraint(lhs, assignOperator, unknown); } } } });
@Override public void action(AbstractFieldPointerKey fieldKey) { if (!representsNullType(fieldKey.getInstanceKey())) { for (InstanceKey rhsFixedValue : rhsFixedValues) { system.findOrCreateIndexForInstanceKey(rhsFixedValue); system.newConstraint(fieldKey, rhsFixedValue); } } } }
@Override public void action(AbstractFieldPointerKey fieldKey) { if (!representsNullType(fieldKey.getInstanceKey())) { for (InstanceKey rhsFixedValue : rhsFixedValues) { system.findOrCreateIndexForInstanceKey(rhsFixedValue); system.newConstraint(fieldKey, rhsFixedValue); } } } }
/** * add a constraint indicating that the value def'd by inst can point to a * value of type t */ private void addLvalTypeKeyConstraint(SSAInstruction inst, TypeReference t) { int lval = inst.getDef(0); PointerKey lk = getPointerKeyForLocal(lval); IClass bool = getClassHierarchy().lookupClass(t); InstanceKey key = new ConcreteTypeKey(bool); system.newConstraint(lk, key); }
/** * add a constraint indicating that the value def'd by inst can point to a * value of type t */ private void addLvalTypeKeyConstraint(SSAInstruction inst, TypeReference t) { int lval = inst.getDef(0); PointerKey lk = getPointerKeyForLocal(lval); IClass bool = getClassHierarchy().lookupClass(t); InstanceKey key = new ConcreteTypeKey(bool); system.newConstraint(lk, key); }
@Override public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { IntSetVariable<?> tv = rhs; if (tv.getValue() != null) { tv.getValue().foreach(ptr -> { InstanceKey iKey = system.getInstanceKey(ptr); PointerKey enclosing = new EnclosingObjectReferenceKey(iKey, cls); system.newConstraint(lvalKey, assignOperator, enclosing); }); } return NOT_CHANGED; }
@Override public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { IntSetVariable<?> tv = rhs; if (tv.getValue() != null) { tv.getValue().foreach(ptr -> { InstanceKey iKey = system.getInstanceKey(ptr); PointerKey enclosing = new EnclosingObjectReferenceKey(iKey, cls); system.newConstraint(lvalKey, assignOperator, enclosing); }); } return NOT_CHANGED; }
@Override public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { final IntSetVariable<?> objects = rhs; if (objects.getValue() != null) { objects.getValue().foreach(optr -> { InstanceKey object = system.getInstanceKey(optr); PointerKey objCatalog = getPointerKeyForObjectCatalog(object); if (objCatalog != null) { system.newConstraint(lk, assignOperator, objCatalog); } }); } return NOT_CHANGED; }