/// It should be used when setting up a position on board.
/// You can't undo the move.
-void Position::do_setup_move(Move m, StateInfo& newSt) {
+void Position::do_setup_move(Move m) {
+
+ StateInfo newSt;
do_move(m, newSt);
// Update the number of plies played from the starting position
startPosPlyCounter++;
+
+ // Our StateInfo newSt is about going out of scope so copy
+ // its content inside pos before it disappears.
+ detach();
}
/// Position::do_move() makes a move, and saves all information necessary
assert(is_ok());
assert(move_is_ok(m));
+ assert(&newSt != st);
nodes++;
Key key = st->key;
Value npMaterial[2];
};
- if (&newSt != st)
- memcpy(&newSt, st, sizeof(ReducedStateInfo));
+ memcpy(&newSt, st, sizeof(ReducedStateInfo));
newSt.previous = st;
st = &newSt;