In almost all cases we already know in advance that
color_of() argument is different from NO_PIECE.
So avoid the check for NO_PIECE in color_of() and
test at caller site in the very few places where
this case could occur.
As a nice side effect, this patch fixes a (bogus)
warning under some versions of gcc.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
return false;
// The destination square cannot be occupied by a friendly piece
return false;
// The destination square cannot be occupied by a friendly piece
- if (color_of(piece_on(to)) == us)
+ if (piece_on(to) != NO_PIECE && color_of(piece_on(to)) == us)
return false;
// Handle the special case of a pawn move
return false;
// Handle the special case of a pawn move
case DELTA_SE:
// Capture. The destination square must be occupied by an enemy
// piece (en passant captures was handled earlier).
case DELTA_SE:
// Capture. The destination square must be occupied by an enemy
// piece (en passant captures was handled earlier).
- if (color_of(piece_on(to)) != them)
+ if (piece_on(to) == NO_PIECE || color_of(piece_on(to)) != them)
return false;
// From and to files must be one file apart, avoids a7h5
return false;
// From and to files must be one file apart, avoids a7h5
PieceType capture = type_of(m) == ENPASSANT ? PAWN : type_of(piece_on(to));
assert(color_of(piece) == us);
PieceType capture = type_of(m) == ENPASSANT ? PAWN : type_of(piece_on(to));
assert(color_of(piece) == us);
- assert(color_of(piece_on(to)) != us);
+ assert(piece_on(to) == NO_PIECE || color_of(piece_on(to)) == them);
assert(capture != KING);
if (capture)
assert(capture != KING);
if (capture)
/// | only in 64-bit mode. For compiling requires hardware with
/// | popcnt support.
/// | only in 64-bit mode. For compiling requires hardware with
/// | popcnt support.
#include <cctype>
#include <climits>
#include <cstdlib>
#include <cctype>
#include <climits>
#include <cstdlib>
}
inline Color color_of(Piece p) {
}
inline Color color_of(Piece p) {
- return p == NO_PIECE ? NO_COLOR : Color(p >> 3);
+ assert(p != NO_PIECE);
+ return Color(p >> 3);
}
inline bool is_ok(Square s) {
}
inline bool is_ok(Square s) {