X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fposition.cpp;h=4184e494c924d198156d1e1b06415d5442f970ff;hb=9144e48eb63587bde7379c16ddb3defea4b0e409;hp=5a42792eb8a97bc105883a0436cf6cc42f903de5;hpb=f1d982e2c07372627394b83cf24f48e77a34145b;p=stockfish diff --git a/src/position.cpp b/src/position.cpp index 5a42792e..4184e494 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -460,7 +460,9 @@ void Position::find_checkers() { bool Position::pl_move_is_legal(Move m) const { - return pl_move_is_legal(m, pinned_pieces(side_to_move())); + // If we're in check, all pseudo-legal moves are legal, because our + // check evasion generator only generates true legal moves. + return is_check() || pl_move_is_legal(m, pinned_pieces(side_to_move())); } bool Position::pl_move_is_legal(Move m, Bitboard pinned) const { @@ -468,11 +470,7 @@ bool Position::pl_move_is_legal(Move m, Bitboard pinned) const { assert(is_ok()); assert(move_is_ok(m)); assert(pinned == pinned_pieces(side_to_move())); - - // If we're in check, all pseudo-legal moves are legal, because our - // check evasion generator only generates true legal moves. - if (is_check()) - return true; + assert(!is_check()); // Castling moves are checked for legality during move generation. if (move_is_castle(m)) @@ -1939,26 +1937,26 @@ bool Position::has_mate_threat(Color c) { void Position::init_zobrist() { - for(Piece p = WP; p <= BK; p++) - for(Square s = SQ_A1; s <= SQ_H8; s++) - zobrist[color_of_piece(p)][type_of_piece(p)][s] = genrand_int64(); + for (int i = 0; i < 2; i++) + for (int j = 0; j < 8; j++) + for (int k = 0; k < 64; k++) + zobrist[i][j][k] = Key(genrand_int64()); - zobEp[0] = 0ULL; - for(int i = 1; i < 64; i++) - zobEp[i] = genrand_int64(); + for (int i = 0; i < 64; i++) + zobEp[i] = Key(genrand_int64()); - for(int i = 15; i >= 0; i--) - zobCastle[(i&8) | (i&1) | ((i&2) << 1) | ((i&4) >> 1)] = genrand_int64(); + for (int i = 0; i < 16; i++) + zobCastle[i] = genrand_int64(); zobSideToMove = genrand_int64(); for (int i = 0; i < 2; i++) for (int j = 0; j < 8; j++) for (int k = 0; k < 16; k++) - zobMaterial[i][j][k] = (k > 0)? genrand_int64() : 0LL; + zobMaterial[i][j][k] = (k > 0)? Key(genrand_int64()) : Key(0LL); for (int i = 0; i < 16; i++) - zobMaterial[0][KING][i] = zobMaterial[1][KING][i] = 0ULL; + zobMaterial[0][KING][i] = zobMaterial[1][KING][i] = Key(0ULL); }