chiark / gitweb /
I found a slightly odd-looking line of code in this file a few days
authorSimon Tatham <anakin@pobox.com>
Mon, 12 Sep 2005 12:38:58 +0000 (12:38 +0000)
committerSimon Tatham <anakin@pobox.com>
Mon, 12 Sep 2005 12:38:58 +0000 (12:38 +0000)
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]

midend.c

index cc360b50c4bd4bb567da4c08f93f5ff1be9444af..833cbeff6a116912284ba151ac8e58093d039c3c 100644 (file)
--- 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++;