Re: [PATCH v7 02/17] ref-filter: include reference to 'used_atom' within 'atom_value'
From: Jacob Keller <hidden>
Date: 2016-11-08 23:16:42
On Tue, Nov 8, 2016 at 12:11 PM, Karthik Nayak [off-list ref] wrote:
From: Karthik Nayak <redacted> 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.
quoted hunk ↗ jump to hunk
Signed-off-by: Karthik Nayak <redacted> --- 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
quoted hunk ↗ jump to hunk
} 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