From: Simon Tatham Date: Mon, 12 Sep 2005 12:38:58 +0000 (+0000) Subject: I found a slightly odd-looking line of code in this file a few days X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=f07576f49e9b08c9a9b2482b07e14a3e846224eb;p=sgt-puzzles.git I found a slightly odd-looking line of code in this file a few days ago, and nearly changed it to the obvious thing. After some thought, though, I've decided the `bug' is better off unfixed, and added a comment explaining why. [originally from svn r6293] --- diff --git a/midend.c b/midend.c index cc360b5..833cbef 100644 --- a/midend.c +++ b/midend.c @@ -356,8 +356,24 @@ void midend_new_game(midend *me) } ensure(me); + + /* + * It might seem a bit odd that we're using me->params to + * create the initial game state, rather than me->curparams + * which is better tailored to this specific game and which we + * always know. + * + * It's supposed to be an invariant in the midend that + * me->params and me->curparams differ in no aspect that is + * important after generation (i.e. after new_desc()). By + * deliberately passing the _less_ specific of these two + * parameter sets, we provoke play-time misbehaviour in the + * case where a game has failed to encode a play-time parameter + * in the non-full version of encode_params(). + */ me->states[me->nstates].state = me->ourgame->new_game(me, me->params, me->desc); + me->states[me->nstates].movestr = NULL; me->states[me->nstates].movetype = NEWGAME; me->nstates++;