protected void doVisitArrayLoad(int def, int arrayRef) { PointerKey result = getPointerKeyForLocal(def); PointerKey arrayRefPtrKey = getPointerKeyForLocal(arrayRef); if (hasNoInterestingUses(def)) { system.recordImplicitPointsToSet(result); } else { if (contentsAreInvariant(symbolTable, du, arrayRef)) { system.recordImplicitPointsToSet(arrayRefPtrKey); InstanceKey[] ik = getInvariantContents(arrayRef); for (int i = 0; i < ik.length; i++) { if (!representsNullType(ik[i])) { system.findOrCreateIndexForInstanceKey(ik[i]); PointerKey p = getPointerKeyForArrayContents(ik[i]); if (p == null) { } else { system.newConstraint(result, assignOperator, p); } } } } else { assert !system.isUnified(result); assert !system.isUnified(arrayRefPtrKey); system.newSideEffect(getBuilder().new ArrayLoadOperator(system.findOrCreatePointsToSet(result)), arrayRefPtrKey); } } }
protected void doVisitArrayLoad(int def, int arrayRef) { PointerKey result = getPointerKeyForLocal(def); PointerKey arrayRefPtrKey = getPointerKeyForLocal(arrayRef); if (hasNoInterestingUses(def)) { system.recordImplicitPointsToSet(result); } else { if (contentsAreInvariant(symbolTable, du, arrayRef)) { system.recordImplicitPointsToSet(arrayRefPtrKey); InstanceKey[] ik = getInvariantContents(arrayRef); for (int i = 0; i < ik.length; i++) { if (!representsNullType(ik[i])) { system.findOrCreateIndexForInstanceKey(ik[i]); PointerKey p = getPointerKeyForArrayContents(ik[i]); if (p == null) { } else { system.newConstraint(result, assignOperator, p); } } } } else { assert !system.isUnified(result); assert !system.isUnified(arrayRefPtrKey); system.newSideEffect(getBuilder().new ArrayLoadOperator(system.findOrCreatePointsToSet(result)), arrayRefPtrKey); } } }
for (InstanceKey element : ik) { system.findOrCreateIndexForInstanceKey(element); assert !system.isUnified(arrayRefPtrKey); system.newSideEffect(getBuilder().new InstanceArrayStoreOperator(element), arrayRefPtrKey);
for (InstanceKey element : ik) { system.findOrCreateIndexForInstanceKey(element); assert !system.isUnified(arrayRefPtrKey); system.newSideEffect(getBuilder().new InstanceArrayStoreOperator(element), arrayRefPtrKey);