Re: [PATCH v7 02/17] ref-filter: include reference to 'used_atom' within 'atom_value'
- From
Jacob Keller <jacob.keller@gmail.com>
- Date
- Nov 8, 2016, 23:16 UTC
- Message-ID
- <CA+P7+xqVAEuc12eQJ7-Et0CtXc12t5zDUg3Qsh3214cTh_brbA@mail.gmail.com>
- In-Reply-To
- <20161108201211.25213-3-Karthik.188@gmail.com>
On Tue, Nov 8, 2016 at 12:11 PM, Karthik Nayak <karthik.188@gmail.com> wrote:
Show 13 quoted lines
> From: Karthik Nayak <karthik.188@gmail.com> > > Ensure that each 'atom_value' has a reference to its corresponding > 'used_atom'. This let's us use values within 'used_atom' in the > 'handler' function. > > Hence we can get the %(align) atom's parameters directly from the > 'used_atom' therefore removing the necessity of passing %(align) atom's > parameters to 'atom_value'. > > This also acts as a preparatory patch for the upcoming patch where we > introduce %(if:equals=) and %(if:notequals=). >
Makes sense.
Show 28 quoted lines
> Signed-off-by: Karthik Nayak <Karthik.188@gmail.com>
> ---
> ref-filter.c | 8 +++-----
> 1 file changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/ref-filter.c b/ref-filter.c
> index 8c183a0..8392303 100644
> --- a/ref-filter.c
> +++ b/ref-filter.c
> @@ -230,11 +230,9 @@ struct ref_formatting_state {
>
> struct atom_value {
> const char *s;
> - union {
> - struct align align;
> - } u;
> void (*handler)(struct atom_value *atomv, struct ref_formatting_state *state);
> unsigned long ul; /* used for sorting when not FIELD_STR */
> + struct used_atom *atom;
> };
>
> /*
> @@ -370,7 +368,7 @@ static void align_atom_handler(struct atom_value *atomv, struct ref_formatting_s
> push_stack_element(&state->stack);
> new = state->stack;
> new->at_end = end_align_handler;
> - new->at_end_data = &atomv->u.align;
> + new->at_end_data = &atomv->atom->u.align;At first, this confused me. I was like "we dropped the union, why are we still referencing it. But I realized that the "used_atom" struct actually contains the same union and we were copying it.
Ok, so this looks good.
Thanks, Jake
Show 22 quoted lines
> }
>
> static void if_then_else_handler(struct ref_formatting_stack **stack)
> @@ -1069,6 +1067,7 @@ static void populate_value(struct ref_array_item *ref)
> struct branch *branch = NULL;
>
> v->handler = append_atom;
> + v->atom = atom;
>
> if (*name == '*') {
> deref = 1;
> @@ -1133,7 +1132,6 @@ static void populate_value(struct ref_array_item *ref)
> v->s = " ";
> continue;
> } else if (starts_with(name, "align")) {
> - v->u.align = atom->u.align;
> v->handler = align_atom_handler;
> continue;
> } else if (!strcmp(name, "end")) {
> --
> 2.10.2
>