c: improve port of stdint.h usage to pre-C99
[bison.git] / src / InadequacyList.c
blobac608afa62a1e753a29a1e64f2e5563afc6e3ff5
1 /* IELR's inadequacy list.
3 Copyright (C) 2009-2015, 2018-2019 Free Software Foundation, Inc.
5 This file is part of Bison, the GNU Compiler Compiler.
7 This program is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 #include <config.h>
21 #include "system.h"
23 #include "InadequacyList.h"
25 #include <intprops.h>
27 ContributionIndex const ContributionIndex__none = -1;
28 ContributionIndex const ContributionIndex__error_action = -2;
30 InadequacyList *
31 InadequacyList__new_conflict (state *manifesting_state, symbol *token,
32 bitset actions,
33 InadequacyListNodeCount *node_count)
35 InadequacyList *result = xmalloc (sizeof *result);
36 result->id = *node_count;
37 if (INT_ADD_WRAPV (*node_count, 1, node_count))
38 aver (false);
39 result->next = NULL;
40 result->manifestingState = manifesting_state;
41 result->contributionCount = bitset_count (actions);
42 result->inadequacy.conflict.token = token;
43 result->inadequacy.conflict.actions = actions;
44 return result;
47 void
48 InadequacyList__delete (InadequacyList *self)
50 while (self)
52 InadequacyList *node = self;
53 self = self->next;
54 bitset_free (node->inadequacy.conflict.actions);
55 free (node);
59 ContributionIndex
60 InadequacyList__getShiftContributionIndex (InadequacyList const *self)
62 if (!bitset_test (self->inadequacy.conflict.actions,
63 self->manifestingState->reductions->num))
64 return ContributionIndex__none;
65 return self->contributionCount - 1;
68 symbol *
69 InadequacyList__getContributionToken (InadequacyList const *self,
70 ContributionIndex i)
72 aver (0 <= i && i < self->contributionCount); (void) i;
73 return self->inadequacy.conflict.token;
76 void
77 InadequacyList__prependTo (InadequacyList *self, InadequacyList **list)
79 InadequacyList *head_old = *list;
80 *list = self;
81 self->next = head_old;