getRange().insert(getFactory().POP, Range.OutsideAfter);
getRange().insert(InstructionConstants.POP, Range.OutsideAfter);
	private void deleteNewAndDup() {		final ConstantPoolGen cpg = getEnclosingClass().getConstantPoolGen();		int depth = 1;		InstructionHandle ih = range.getStart();		while (true) {			Instruction inst = ih.getInstruction();			if (inst instanceof INVOKESPECIAL				&& ((INVOKESPECIAL) inst).getName(cpg).equals("<init>")) {				depth++;			} else if (inst instanceof NEW) {				depth--;				if (depth == 0) break;			}			ih = ih.getPrev();		}		// now IH points to the NEW.  We're followed by the DUP, and that is followed		// by the actual instruciton we care about.  		InstructionHandle newHandle = ih;		InstructionHandle endHandle = newHandle.getNext();		InstructionHandle nextHandle;		if (endHandle.getInstruction() instanceof DUP) {			nextHandle = endHandle.getNext();						retargetFrom(newHandle, nextHandle);			retargetFrom(endHandle, nextHandle);		} else if (endHandle.getInstruction() instanceof DUP_X1) {			InstructionHandle dupHandle = endHandle;			endHandle = endHandle.getNext();			nextHandle = endHandle.getNext();			if (endHandle.getInstruction() instanceof SWAP) {}			else {				// XXX see next XXX comment				throw new RuntimeException("Unhandled kind of new " + endHandle);			}			retargetFrom(newHandle, nextHandle);			retargetFrom(dupHandle, nextHandle);			retargetFrom(endHandle, nextHandle);		} else {			endHandle = newHandle;			nextHandle = endHandle.getNext();			retargetFrom(newHandle, nextHandle);			// add a POP here... we found a NEW w/o a dup or anything else, so			// we must be in statement context.			getRange().insert(getFactory().POP, Range.OutsideAfter);		}		// assert (dupHandle.getInstruction() instanceof DUP);		try {			range.getBody().delete(newHandle, endHandle);		} catch (TargetLostException e) {			throw new BCException("shouldn't happen");		}	}