 
         let player = playerTurn
         for moveSquare in movesBitboard {
-            try! _execute(square >>> moveSquare)
+            try! _execute(uncheckedMove: square >>> moveSquare)
             if board.attackersToKing(for: player) != 0 {
                 movesBitboard[moveSquare] = false
             }

        guard isLegal(move: move) else {
            throw ExecutionError.illegalMove(move, playerTurn, board)
        }
        try _execute(move, promotion: promotion)
        if kingIsChecked {
            attackersToKing = 0
        } else {

    }

    /// Executes a move without checking the legality of the move.
    private func _execute(uncheckedMove move: Move, promotion: @noescape () -> Piece.Kind) throws {
        let piece = board[move.start]!
        var endPiece = piece
        var capture = board[move.end]
