public void visitShiftExpr(final ShiftExpr expr) {
		expr.visitChildren(this);

		genPostponed(expr);

		if (expr.type().isIntegral()) {
			if (expr.dir() == ShiftExpr.LEFT) {
				method.addInstruction(Opcode.opcx_ishl);
				stackHeight -= 1;
			} else if (expr.dir() == ShiftExpr.RIGHT) {
				method.addInstruction(Opcode.opcx_ishr);
				stackHeight -= 1;
			} else {
				method.addInstruction(Opcode.opcx_iushr);
				stackHeight -= 1;
			}
		} else if (expr.type().equals(Type.LONG)) {
			if (expr.dir() == ShiftExpr.LEFT) {
				method.addInstruction(Opcode.opcx_lshl);
				stackHeight -= 1;
			} else if (expr.dir() == ShiftExpr.RIGHT) {
				method.addInstruction(Opcode.opcx_lshr);
				stackHeight -= 1;
			} else {
				method.addInstruction(Opcode.opcx_lushr);
				stackHeight -= 1;
			}
		} else {
			throw new IllegalArgumentException("Can't generate code for type: "
					+ expr.type() + " (expr " + expr + ")");
		}
	}