Simplify the promotion case of move_gives_check()
authorMarco Costalba <mcostalba@gmail.com>
Sat, 22 Oct 2011 13:53:35 +0000 (14:53 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 22 Oct 2011 14:01:21 +0000 (15:01 +0100)
No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/position.cpp

index 8c9906e2f6b65e817002d84ec8a8364398467e88..0a04b99b1ac9d1be07bd11ae0430848a7344449c 100644 (file)
@@ -618,6 +618,9 @@ bool Position::is_pseudo_legal(const Move m) const {
   else if (!bit_is_set(attacks_from(pc, from), to))
       return false;
 
+  // Evasions generator already takes care to avoid some kind of illegal moves
+  // and pl_move_is_legal() relies on this. So we have to take care that the
+  // same kind of moves are filtered out here.
   if (in_check())
   {
       // In case of king moves under check we have to remove king so to catch
@@ -685,20 +688,7 @@ bool Position::move_gives_check(Move m, const CheckInfo& ci) const {
   if (is_promotion(m))
   {
       clear_bit(&b, from);
-
-      switch (promotion_piece_type(m))
-      {
-      case KNIGHT:
-          return bit_is_set(attacks_from<KNIGHT>(to), ksq);
-      case BISHOP:
-          return bit_is_set(bishop_attacks_bb(to, b), ksq);
-      case ROOK:
-          return bit_is_set(rook_attacks_bb(to, b), ksq);
-      case QUEEN:
-          return bit_is_set(queen_attacks_bb(to, b), ksq);
-      default:
-          assert(false);
-      }
+      return bit_is_set(attacks_from(Piece(promotion_piece_type(m)), to, b), ksq);
   }
 
   // En passant capture with check ? We have already handled the case