From: Junio C Hamano Date: Tue, 07 Jul 2015 20:37:08 GMT Subject: Re: [PATCH 2/3] convert "enum date_mode" into a struct Message-ID: In-Reply-To: <20150625165501.GB23503@peff.net> Jeff King writes: > ... However, the tricky case is where we use the > enum labels as constants, like: > > show_date(t, tz, DATE_NORMAL); > > Ideally we could say: > > show_date(t, tz, &{ DATE_NORMAL }); > > but of course C does not allow that. > ... > 3. Provide a wrapper that generates the correct struct on > the fly. The big downside is that we end up pointing to > a single global, which makes our wrapper non-reentrant. > But show_date is already not reentrant, so it does not > matter. > > This patch implements 3, along with a minor macro to keep > the size of the callers sane. Another big downside is that DATE_NORMAL is defined to be "0". This makes it very cumbersome to merge a side branch that uses an outdated definition of show_date() and its friends and tell them to show date normally. The compiler does not help detecting places that need to be adjusted during merge and instead just pass a NULL pointer as a pointer to the new struct.