Re: [PATCH 2/3] convert "enum date_mode" into a struct
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jul 7, 2015, 20:37 UTC
- Message-ID
- <xmqqbnfn3dsb.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <20150625165501.GB23503@peff.net>
Jeff King <peff@peff.net> writes:
Show 19 quoted lines
> ... 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.