+/*----------------------------------------------------.
+| Count the number of lookahead tokens required for S |
+| (N_LOOKAHEAD_TOKENS member). |
+`----------------------------------------------------*/
+
+static int
+state_lookahead_tokens_count (state *s, bool default_reduction_only_for_accept)
+{
+ int n_lookahead_tokens = 0;
+ reductions *rp = s->reductions;
+ transitions *sp = s->transitions;
+
+ /* Transitions are only disabled during conflict resolution, and that
+ hasn't happened yet, so there should be no need to check that
+ transition 0 hasn't been disabled before checking if it is a shift.
+ However, this check was performed at one time, so we leave it as an
+ aver. */
+ aver (sp->num == 0 || !TRANSITION_IS_DISABLED (sp, 0));
+
+ /* We need a lookahead either to distinguish different reductions
+ (i.e., there are two or more), or to distinguish a reduction from a
+ shift. Otherwise, it is straightforward, and the state is
+ `consistent'. However, treat only the accepting state as
+ consistent (because there is never a lookahead token that makes
+ sense there, and so no lookahead token should be read) if the user
+ has otherwise disabled default reductions. */
+ if (rp->num > 1
+ || (rp->num == 1 && sp->num && TRANSITION_IS_SHIFT (sp, 0))
+ || (rp->num == 1 && rp->rules[0]->number != 0
+ && default_reduction_only_for_accept))
+ n_lookahead_tokens += rp->num;
+ else
+ s->consistent = 1;
+
+ return n_lookahead_tokens;
+}
+
+
+/*----------------------------------------------------.
+| Compute LA, NLA, and the lookahead_tokens members. |
+`----------------------------------------------------*/
+