Skip to content

Commit 8f44164

Browse files
committed
style: factor the access to a rule from its items
* src/counterexample.c (item_rule): Move to... * src/counterexample.h: here. * src/AnnotationList.c, src/counterexample.c, src/ielr.c: Use it.
1 parent 1001f48 commit 8f44164

File tree

5 files changed

+19
-42
lines changed

5 files changed

+19
-42
lines changed

src/AnnotationList.c

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ AnnotationList__compute_conflicted_tokens (bitset shift_tokens,
185185
}
186186

187187
static bool
188-
AnnotationList__compute_lhs_contributions (state *s, rule *the_rule,
188+
AnnotationList__compute_lhs_contributions (state *s, const rule *the_rule,
189189
symbol_number conflicted_token,
190190
bitsetv follow_kernel_items,
191191
bitsetv always_follows,
@@ -263,18 +263,12 @@ AnnotationList__computePredecessorAnnotations (
263263
/* If this kernel item is next to the beginning of the RHS,
264264
then check all of the predecessor's goto follows for the
265265
LHS. */
266-
if (item_number_is_rule_number (ritem[s->items[self_item]
267-
- 2]))
266+
if (item_number_is_rule_number (ritem[s->items[self_item] - 2]))
268267
{
269-
int rulei;
270-
for (rulei = s->items[self_item];
271-
!item_number_is_rule_number (ritem[rulei]);
272-
++rulei)
273-
continue;
274268
Sbitset items;
275269
if (AnnotationList__compute_lhs_contributions (
276270
*predecessor,
277-
&rules[item_number_as_rule_number (ritem[rulei])],
271+
item_rule (&ritem[s->items[self_item]]),
278272
contribution_token,
279273
follow_kernel_items, always_follows, predecessors,
280274
item_lookahead_sets, &items, annotations_obstackp))

src/counterexample.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ complete_diverging_example (symbol_number conflict_sym,
364364
lookahead_required = false;
365365
}
366366
}
367-
rule_number r = item_number_as_rule_number (*i);
367+
const rule *r = &rules[item_number_as_rule_number (*i)];
368368
// add derivations for symbols before dot
369369
for (i = item - 1; !item_number_is_rule_number (*i) && i >= ritem; i--)
370370
{
@@ -381,7 +381,7 @@ complete_diverging_example (symbol_number conflict_sym,
381381
derivation_list_prepend (result, derivation_new_leaf (*i));
382382
}
383383
// completing the derivation
384-
derivation *new_deriv = derivation_new (rules[r].lhs->number, result);
384+
derivation *new_deriv = derivation_new (r->lhs->number, result);
385385
result = derivation_list_new ();
386386
derivation_list_append (result, new_deriv);
387387
}

src/gram.c

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,6 @@ int max_code = 256;
4848

4949
int required_version = 0;
5050

51-
rule const *
52-
item_rule (item_number const *item)
53-
{
54-
item_number const *sp = item;
55-
while (0 <= *sp)
56-
++sp;
57-
rule_number r = item_number_as_rule_number (*sp);
58-
return &rules[r];
59-
}
60-
61-
6251
void
6352
item_print (item_number *item, rule const *previous_rule, FILE *out)
6453
{

src/gram.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,15 @@ print_dot (FILE *out)
237237
}
238238

239239
/* Get the rule associated to this item. ITEM points inside RITEM. */
240-
rule const *item_rule (item_number const *item);
240+
static inline rule const *
241+
item_rule (item_number const *item)
242+
{
243+
item_number const *sp = item;
244+
while (!item_number_is_rule_number (*sp))
245+
++sp;
246+
rule_number r = item_number_as_rule_number (*sp);
247+
return &rules[r];
248+
}
241249

242250
/* Pretty-print this ITEM (as in the report). ITEM points inside
243251
RITEM. PREVIOUS_RULE is used to see if the lhs is common, in which

src/ielr.c

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -418,14 +418,7 @@ ielr_item_has_lookahead (state *s, symbol_number lhs, size_t item,
418418
/* If the LHS symbol of this item isn't known (because this is a
419419
top-level invocation), go get it. */
420420
if (!lhs)
421-
{
422-
int i;
423-
for (i = s->items[item];
424-
!item_number_is_rule_number (ritem[i]);
425-
++i)
426-
continue;
427-
lhs = rules[item_number_as_rule_number (ritem[i])].lhs->number;
428-
}
421+
lhs = item_rule (&ritem[s->items[item]])->lhs->number;
429422
/* If this kernel item is next to the beginning of the RHS, then
430423
check all predecessors' goto follows for the LHS. */
431424
if (item_number_is_rule_number (ritem[s->items[item] - 2]))
@@ -633,17 +626,10 @@ ielr_compute_lookaheads (bitsetv follow_kernel_items, bitsetv always_follows,
633626
&& !bitset_empty_p (lookahead_filter[t_item]))
634627
{
635628
if (item_number_is_rule_number (ritem[t->items[t_item] - 2]))
636-
{
637-
int rule_item;
638-
for (rule_item = t->items[t_item];
639-
!item_number_is_rule_number (ritem[rule_item]);
640-
++rule_item)
641-
;
642-
ielr_compute_goto_follow_set (
643-
follow_kernel_items, always_follows, s,
644-
rules[item_number_as_rule_number (ritem[rule_item])].lhs,
645-
lookaheads[t_item]);
646-
}
629+
ielr_compute_goto_follow_set (
630+
follow_kernel_items, always_follows, s,
631+
item_rule (&ritem[t->items[t_item]])->lhs,
632+
lookaheads[t_item]);
647633
else if (s->lookaheads)
648634
{
649635
/* We don't have to start the s item search at the beginning

0 commit comments

Comments
 (0)