diff --git a/src/position.cpp b/src/position.cpp index dd6ec05b..480a92ec 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -315,9 +315,10 @@ void Position::print(Move m) const { /// Position::copy() creates a copy of the input position. -void Position::copy(const Position &pos) { +void Position::copy(const Position& pos) { memcpy(this, &pos, sizeof(Position)); + saveState(); // detach and copy state info } @@ -1607,15 +1608,16 @@ int Position::see(Square from, Square to) const { } -/// Position::setStartState() copies the content of the argument +/// Position::saveState() copies the content of the current state /// inside startState and makes st point to it. This is needed /// when the st pointee could become stale, as example because /// the caller is about to going out of scope. -void Position::setStartState(const StateInfo& s) { +void Position::saveState() { - startState = s; + startState = *st; st = &startState; + st->previous = NULL; // as a safe guard } @@ -1966,7 +1968,7 @@ void Position::init_piece_square_tables() { /// the white and black sides reversed. This is only useful for debugging, /// especially for finding evaluation symmetry bugs. -void Position::flipped_copy(const Position &pos) { +void Position::flipped_copy(const Position& pos) { assert(pos.is_ok()); diff --git a/src/position.h b/src/position.h index aa7c7ab8..9737d761 100644 --- a/src/position.h +++ b/src/position.h @@ -138,8 +138,8 @@ public: void print(Move m = MOVE_NONE) const; // Copying - void copy(const Position &pos); - void flipped_copy(const Position &pos); + void copy(const Position& pos); + void flipped_copy(const Position& pos); // The piece on a given square Piece piece_on(Square s) const; @@ -250,7 +250,7 @@ public: bool square_is_weak(Square s, Color c) const; // Doing and undoing moves - void setStartState(const StateInfo& st); + void saveState(); void do_move(Move m, StateInfo& st); void do_move(Move m, StateInfo& st, Bitboard dcCandidates); void undo_move(Move m); diff --git a/src/uci.cpp b/src/uci.cpp index a6452005..4a333f70 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -210,9 +210,9 @@ namespace { if (RootPosition.rule_50_counter() == 0) RootPosition.reset_game_ply(); } - // Our StateInfo st is about going out of scope, - // so save its content before they disappear. - RootPosition.setStartState(st); + // Our StateInfo st is about going out of scope so copy + // its content inside RootPosition before they disappear. + RootPosition.saveState(); } } }