1 /* IELR's inadequacy list.
3 Copyright (C) 2009 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/>. */
23 #include "InadequacyList.h"
25 ContributionIndex
const ContributionIndex__none
= -1;
26 ContributionIndex
const ContributionIndex__error_action
= -2;
29 InadequacyList__new_conflict (state
*manifesting_state
, symbol
*token
,
32 InadequacyList
*result
= xmalloc (sizeof *result
);
34 result
->manifestingState
= manifesting_state
;
35 result
->contributionCount
= bitset_count (actions
);
36 result
->inadequacy
.conflict
.token
= token
;
37 result
->inadequacy
.conflict
.actions
= actions
;
42 InadequacyList__delete (InadequacyList
*self
)
46 InadequacyList
*node
= self
;
48 bitset_free (node
->inadequacy
.conflict
.actions
);
54 InadequacyList__getShiftContributionIndex (InadequacyList
const *self
)
56 if (!bitset_test (self
->inadequacy
.conflict
.actions
,
57 self
->manifestingState
->reductions
->num
))
58 return ContributionIndex__none
;
59 return self
->contributionCount
- 1;
63 InadequacyList__getContributionToken (InadequacyList
const *self
,
66 aver (0 <= i
&& i
< self
->contributionCount
);
67 return self
->inadequacy
.conflict
.token
;
71 InadequacyList__prependTo (InadequacyList
*self
, InadequacyList
**list
)
73 InadequacyList
*head_old
= *list
;
75 self
->next
= head_old
;