private void setLVValue(int index, Item value) { int addCount = index - lvValues.size() + 1; while ((addCount--) > 0) { lvValues.add(null); } if (!useIterativeAnalysis && seenTransferOfControl) { value = Item.merge(value, lvValues.get(index)); } lvValues.set(index, value); }
Item oldValue = mergeInto.get(i); Item newValue = mergeFrom.get(i); Item merged = Item.merge(oldValue, newValue); if (merged != null && !merged.equals(oldValue)) { mergeInto.set(i, merged);
public void mergeSummary(XField fieldOperand, OpcodeStack.Item mergeValue) { if (SystemProperties.ASSERTIONS_ENABLED) { String mSignature = mergeValue.getSignature(); Type mergeType = Type.getType(mSignature); Type fieldType = Type.getType(fieldOperand.getSignature()); IncompatibleTypes check = IncompatibleTypes.getPriorityForAssumingCompatible(mergeType, fieldType, false); if (check.getPriority() <= Priorities.NORMAL_PRIORITY) { AnalysisContext.logError(fieldOperand + " not compatible with " + mergeValue, new IllegalArgumentException(check.toString())); } } OpcodeStack.Item oldSummary = summary.get(fieldOperand); if (oldSummary != null) { Item newValue = OpcodeStack.Item.merge(mergeValue, oldSummary); newValue.clearNewlyAllocated(); summary.put(fieldOperand, newValue); } else { if (mergeValue.isNewlyAllocated()) { mergeValue = new OpcodeStack.Item(mergeValue); mergeValue.clearNewlyAllocated(); } summary.put(fieldOperand, mergeValue); } }
item = newItem; } else { item = Item.merge(item, newItem);
Item oldValue = mergeInto.get(i); Item newValue = mergeFrom.get(i); Item merged = Item.merge(oldValue, newValue); if (merged != null && !merged.equals(oldValue)) { mergeInto.set(i, merged);
public void mergeSummary(XField fieldOperand, OpcodeStack.Item mergeValue) { if (SystemProperties.ASSERTIONS_ENABLED) { String mSignature = mergeValue.getSignature(); Type mergeType = Type.getType(mSignature); Type fieldType = Type.getType(fieldOperand.getSignature()); IncompatibleTypes check = IncompatibleTypes.getPriorityForAssumingCompatible(mergeType, fieldType, false); if (check.getPriority() <= Priorities.NORMAL_PRIORITY) { AnalysisContext.logError(fieldOperand + " not compatible with " + mergeValue, new IllegalArgumentException(check.toString())); } } OpcodeStack.Item oldSummary = summary.get(fieldOperand); if (oldSummary != null) { Item newValue = OpcodeStack.Item.merge(mergeValue, oldSummary); newValue.clearNewlyAllocated(); summary.put(fieldOperand, newValue); } else { if (mergeValue.isNewlyAllocated()) { mergeValue = new OpcodeStack.Item(mergeValue); mergeValue.clearNewlyAllocated(); } summary.put(fieldOperand, mergeValue); } }
private void setLVValue(int index, Item value) { int addCount = index - lvValues.size() + 1; while ((addCount--) > 0) { lvValues.add(null); } if (!useIterativeAnalysis && seenTransferOfControl) { value = Item.merge(value, lvValues.get(index)); } lvValues.set(index, value); }
item = newItem; } else { item = Item.merge(item, newItem);
@Test public void testMergeTypeOnly() { OpcodeStack.Item intOnly = OpcodeStack.Item.typeOnly("I"); OpcodeStack.Item zeroItem = new OpcodeStack.Item("I", 0); OpcodeStack.Item m1 = OpcodeStack.Item.merge(intOnly, zeroItem); assertEquals(0,m1.getConstant()); OpcodeStack.Item m2 = OpcodeStack.Item.merge(zeroItem, intOnly); assertEquals(0,m2.getConstant()); }
@Test public void testMergeIntAndZero() { OpcodeStack.Item intItem = new OpcodeStack.Item("I"); OpcodeStack.Item zeroItem = new OpcodeStack.Item("I", 0); OpcodeStack.Item m1 = OpcodeStack.Item.merge(intItem, zeroItem); assertNull(m1.getConstant()); OpcodeStack.Item m2 = OpcodeStack.Item.merge(zeroItem, intItem); assertNull(m2.getConstant()); }