]> git.sesse.net Git - stockfish/blobdiff - src/movegen.cpp
Fix moveCount after legality check delay
[stockfish] / src / movegen.cpp
index 64c6ac50135d83ea121d1b950c315578cb629ef3..e1e6a54b72aa718c55c9c51bc38416f0d13a4e25 100644 (file)
@@ -151,7 +151,7 @@ template<MoveType Type>
 MoveStack* generate(const Position& pos, MoveStack* mlist) {
 
   assert(pos.is_ok());
-  assert(!pos.is_check());
+  assert(!pos.in_check());
 
   Color us = pos.side_to_move();
   Bitboard target;
@@ -202,7 +202,7 @@ template<>
 MoveStack* generate<MV_NON_CAPTURE_CHECK>(const Position& pos, MoveStack* mlist) {
 
   assert(pos.is_ok());
-  assert(!pos.is_check());
+  assert(!pos.in_check());
 
   Bitboard b, dc;
   Square from;
@@ -243,7 +243,7 @@ template<>
 MoveStack* generate<MV_EVASION>(const Position& pos, MoveStack* mlist) {
 
   assert(pos.is_ok());
-  assert(pos.is_check());
+  assert(pos.in_check());
 
   Bitboard b, target;
   Square from, checksq;
@@ -304,16 +304,7 @@ MoveStack* generate<MV_EVASION>(const Position& pos, MoveStack* mlist) {
 }
 
 
-/// generate<MV_LEGAL / MV_PSEUDO_LEGAL> computes a complete list of legal
-/// or pseudo-legal moves in the current position.
-template<>
-MoveStack* generate<MV_PSEUDO_LEGAL>(const Position& pos, MoveStack* mlist) {
-
-  assert(pos.is_ok());
-
-  return pos.is_check() ? generate<MV_EVASION>(pos, mlist)
-                        : generate<MV_NON_EVASION>(pos, mlist);
-}
+/// generate<MV_LEGAL> computes a complete list of legal moves in the current position
 
 template<>
 MoveStack* generate<MV_LEGAL>(const Position& pos, MoveStack* mlist) {
@@ -323,7 +314,8 @@ MoveStack* generate<MV_LEGAL>(const Position& pos, MoveStack* mlist) {
   MoveStack *last, *cur = mlist;
   Bitboard pinned = pos.pinned_pieces(pos.side_to_move());
 
-  last = generate<MV_PSEUDO_LEGAL>(pos, mlist);
+  last = pos.in_check() ? generate<MV_EVASION>(pos, mlist)
+                        : generate<MV_NON_EVASION>(pos, mlist);
 
   // Remove illegal moves from the list
   while (cur != last)
@@ -451,7 +443,7 @@ namespace {
     // Single and double pawn pushes
     if (Type != MV_CAPTURE)
     {
-        b1 = pawnPushes & emptySquares;
+        b1 = (Type != MV_EVASION ? pawnPushes : pawnPushes & emptySquares);
         b2 = move_pawns<TDELTA_N>(pawnPushes & TRank3BB) & emptySquares;
 
         if (Type == MV_CHECK)