*            StackManipStmt.DUP_X1)
	 * 
	 * @see StackManipStmt
	 */
	private void manip(final StackExpr[] source, final int[] s, final int kind) {
		Assert.isTrue(Tree.USE_STACK);

		int height = 0; // Height of the stack

		// Calculate current height of the stack. Recall that the stack
		// elements in source have already been popped off the stack.
		for (int i = 0; i < stack.size(); i++) {
			final Expr expr = stack.get(i);
			height += expr.type().stackHeight();
		}

		// Create the new portion of the stack. Make new StackExpr
		// representing the stack after the dup instruction. Push those
		// new StackExprs onto the operand stack. Finally, create a
		// StackManipStmt that represent the transformation of the old
		// stack (before dup instruction) to the new stack (after dup
		// instruction).
		final StackExpr[] target = new StackExpr[s.length];

		for (int i = 0; i < s.length; i++) {
			target[i] = new StackExpr(height, source[s[i]].type());
			final StackExpr copy = (StackExpr) target[i].clone();
			copy.setDef(null);
			stack.push(copy);
			height += target[i].type().stackHeight();
		}

		appendStmt(new StackManipStmt(target, source, kind));
	}