From: Taylor Blau <me@ttaylorr.com>
To: "René Scharfe" <l.s.r@web.de>
Cc: Git List <git@vger.kernel.org>, Jeff King <peff@peff.net>,
Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH 1/2] parse-options: add int value pointer to struct option
Date: Sun, 10 Sep 2023 14:40:45 -0400 [thread overview]
Message-ID: <ZP4NrVeqMtFTLEuf@nand.local> (raw)
In-Reply-To: <2d6f3d74-687a-2d40-5c0c-abc396aef80f@web.de>
On Sat, Sep 09, 2023 at 11:10:36PM +0200, René Scharfe wrote:
> Add an int pointer, value_int, to struct option to provide a typed value
> pointer for the various integer options. It allows type checks at
> compile time, which is not possible with the void pointer, value. Its
> use is optional for now.
This is an interesting direction. I wonder about whether or not you'd
consider changing the option structure to contain a tagged union type
that represents some common cases we'd want from a parse-options
callback, something like:
struct option {
/* ... */
union {
void *value;
int *value_int;
/* etc ... */
} u;
enum option_type t;
};
where option_type has some value corresponding to "void *", another for
"int *", and so on.
Alternatively, perhaps you are thinking that we'd use both the value
pointer and the value_int pointer to point at potentially different
values in the same callback. I don't have strong feelings about it, but
I'd just as soon encourage us to shy away from that approach, since
assigning a single callback parameter to each function seems more
organized.
> @@ -109,6 +110,7 @@ static enum parse_opt_result get_value(struct parse_opt_ctx_t *p,
> const char *s, *arg;
> const int unset = flags & OPT_UNSET;
> int err;
> + int *value_int = opt->value_int ? opt->value_int : opt->value;
>
> if (unset && p->opt)
> return error(_("%s takes no value"), optname(opt, flags));
Reading this hunk, I wonder whether we even need a type tag (the
option_type enum above) if each callback knows a priori what type it
expects. But I think storing them together in a union makes sense to do.
Thanks,
Taylor
next prev parent reply other threads:[~2023-09-10 18:40 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-09 21:10 [PATCH 1/2] parse-options: add int value pointer to struct option René Scharfe
2023-09-09 21:14 ` [PATCH 2/2] parse-options: use and require int pointer for OPT_CMDMODE René Scharfe
2023-09-10 10:18 ` Oswald Buddenhagen
2023-09-11 20:11 ` René Scharfe
2023-09-12 8:40 ` Jeff King
2023-09-16 17:45 ` Junio C Hamano
2023-09-18 9:28 ` René Scharfe
2023-09-18 10:10 ` Oswald Buddenhagen
2023-09-19 7:41 ` René Scharfe
2023-09-21 11:07 ` [PATCH] am: fix error message in parse_opt_show_current_patch() Oswald Buddenhagen
2023-09-21 19:09 ` Junio C Hamano
2023-09-21 19:28 ` Oswald Buddenhagen
2023-09-18 13:33 ` [PATCH 2/2] parse-options: use and require int pointer for OPT_CMDMODE Phillip Wood
2023-09-18 17:11 ` Junio C Hamano
2023-09-18 19:48 ` Phillip Wood
2023-10-03 8:49 ` René Scharfe
2023-10-03 17:15 ` Junio C Hamano
2023-09-19 7:47 ` René Scharfe
2023-09-11 19:12 ` Junio C Hamano
2023-09-11 20:11 ` René Scharfe
2023-09-19 9:40 ` Oswald Buddenhagen
2023-09-20 8:18 ` René Scharfe
2023-09-21 10:40 ` Oswald Buddenhagen
2023-10-03 8:49 ` René Scharfe
2023-10-03 9:38 ` Oswald Buddenhagen
2023-10-03 17:54 ` René Scharfe
2023-10-03 18:24 ` Oswald Buddenhagen
2023-09-10 18:40 ` Taylor Blau [this message]
2023-09-11 19:19 ` [PATCH 1/2] parse-options: add int value pointer to struct option Junio C Hamano
2023-09-11 22:28 ` Oswald Buddenhagen
2023-09-18 11:34 ` Kristoffer Haugsbakk
2023-09-18 9:53 ` René Scharfe
2023-09-18 10:28 ` Oswald Buddenhagen
2023-09-18 16:17 ` Junio C Hamano
2023-09-20 11:34 ` René Scharfe
2023-09-11 20:12 ` René Scharfe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZP4NrVeqMtFTLEuf@nand.local \
--to=me@ttaylorr.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=l.s.r@web.de \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.