On Tue, Nov 8, 2016 at 12:11 PM, Karthik Nayak <karthik.188@xxxxxxxxx> wrote: > From: Karthik Nayak <karthik.188@xxxxxxxxx> > > 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. > Signed-off-by: Karthik Nayak <Karthik.188@xxxxxxxxx> > --- > 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 > } > > 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 >