public boolean removePop(StructuredBlock last) {

		/*
		 * There are three possibilities:
		 * 
		 * PUSH method_invocation() POP[sizeof PUSH] to: method_invocation()
		 * 
		 * With java1.3 due to access$ methods the method_invocation can already
		 * be a non void store instruction.
		 * 
		 * PUSH arg1 PUSH arg2 POP2 to: if (arg1 == arg2) empty
		 * 
		 * PUSH arg1 POP to: if (arg1 != 0) empty
		 */

		if (last.outer instanceof SequentialBlock
				&& last.outer.getSubBlocks()[0] instanceof InstructionBlock) {

			if (jump != null && jump.destination == null)
				return false;

			InstructionBlock prev = (InstructionBlock) last.outer
					.getSubBlocks()[0];
			Expression instr = prev.getInstruction();

			if (instr.getType().stackSize() == count) {
				StructuredBlock newBlock;
				if (instr instanceof InvokeOperator
						|| instr instanceof StoreInstruction) {
					Expression newExpr = new PopOperator(instr.getType())
							.addOperand(instr);
					prev.setInstruction(newExpr);
					newBlock = prev;
				} else {
					Expression newCond = new CompareUnaryOperator(
							instr.getType(), Operator.NOTEQUALS_OP)
							.addOperand(instr);
					IfThenElseBlock newIfThen = new IfThenElseBlock(newCond);
					newIfThen.setThenBlock(new EmptyBlock());
					newBlock = newIfThen;
				}
				// We don't move the definitions of the special block, but
				// it shouldn't have any.
				newBlock.moveDefinitions(last.outer, last);
				newBlock.moveJump(jump);
				if (this == last) {
					newBlock.replace(last.outer);
					flowBlock.lastModified = newBlock;
				} else {
					newBlock.replace(this);
					last.replace(last.outer);
				}
				return true;
			}
		}
		return false;
	}