@@ -3476,16 +3476,11 @@ def _attacked_for_king(self, path):
34763476 return False
34773477
34783478 def generate_castling_moves (self , from_mask = BB_ALL , to_mask = BB_ALL ):
3479- king = self .occupied_co [self .turn ] & self .kings & ~ self .promoted & from_mask
3480- king_square = bit_scan (king )
3481- if king_square is None or king_square == - 1 :
3482- return
3483-
3484- if self .is_check ():
3485- return
3486-
3487- king_file_index = file_index (bit_scan (king ))
34883479 backrank = BB_RANK_1 if self .turn == WHITE else BB_RANK_8
3480+ king = self .occupied_co [self .turn ] & self .kings & ~ self .promoted & backrank & from_mask
3481+ king = king & - king
3482+ if not king or self .is_check ():
3483+ return
34893484
34903485 bb_a = BB_FILE_A & backrank
34913486 bb_c = BB_FILE_C & backrank
@@ -3496,9 +3491,8 @@ def generate_castling_moves(self, from_mask=BB_ALL, to_mask=BB_ALL):
34963491 candidates = self .clean_castling_rights () & backrank & to_mask
34973492 while candidates :
34983493 rook = candidates & - candidates
3499- rook_file_index = file_index (bit_scan (rook ))
35003494
3501- a_side = rook_file_index < king_file_index
3495+ a_side = rook < king
35023496
35033497 # In the special case where we castle queenside and our rook
35043498 # shielded us from an attack from a1 or a8, castling would be
@@ -3512,27 +3506,19 @@ def generate_castling_moves(self, from_mask=BB_ALL, to_mask=BB_ALL):
35123506
35133507 if a_side :
35143508 if not rook & bb_d :
3515- empty_for_rook = (
3516- RANK_ATTACKS [rook ][rook | bb_d ] &
3517- RANK_ATTACKS [bb_d ][bb_d | rook ])
3509+ empty_for_rook = RANK_ATTACKS [rook ][rook | bb_d ] & RANK_ATTACKS [bb_d ][bb_d | rook ]
35183510 empty_for_rook |= bb_d
35193511
35203512 if not king & bb_c :
3521- empty_for_king = (
3522- RANK_ATTACKS [king ][king | bb_c ] &
3523- RANK_ATTACKS [bb_c ][bb_c | king ])
3513+ empty_for_king = RANK_ATTACKS [king ][king | bb_c ] & RANK_ATTACKS [bb_c ][bb_c | king ]
35243514 empty_for_king |= bb_c
35253515 else :
35263516 if not rook & bb_f :
3527- empty_for_rook = (
3528- RANK_ATTACKS [rook ][rook | bb_f ] &
3529- RANK_ATTACKS [bb_f ][bb_f | rook ])
3517+ empty_for_rook = RANK_ATTACKS [rook ][rook | bb_f ] & RANK_ATTACKS [bb_f ][bb_f | rook ]
35303518 empty_for_rook |= bb_f
35313519
35323520 if not king & bb_g :
3533- empty_for_king = (
3534- RANK_ATTACKS [king ][king | bb_g ] &
3535- RANK_ATTACKS [bb_g ][bb_g | king ])
3521+ empty_for_king = RANK_ATTACKS [king ][king | bb_g ] & RANK_ATTACKS [bb_g ][bb_g | king ]
35363522 empty_for_king |= bb_g
35373523
35383524 empty_for_rook &= ~ king
0 commit comments