X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/166366b28f579dfb991f8f6fca323847bcc1eb65..72cd9a913f6d282c5e24990505c2c820bda2bf1b:/src/InadequacyList.h?ds=sidebyside
diff --git a/src/InadequacyList.h b/src/InadequacyList.h
index 5770f994..0d00c5cb 100644
--- a/src/InadequacyList.h
+++ b/src/InadequacyList.h
@@ -1,6 +1,6 @@
/* IELR's inadequacy list.
- Copyright (C) 2009 Free Software Foundation, Inc.
+ Copyright (C) 2009-2012 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -25,6 +25,14 @@
#include "state.h"
#include "symtab.h"
+/**
+ * A unique ID assigned to every \c InadequacyList node.
+ *
+ * This must remain unsigned so that the overflow check in
+ * \c InadequacyList__new_conflict works properly.
+ */
+typedef unsigned long long int InadequacyListNodeCount;
+
/**
* For a conflict, each rule in the grammar can have at most one contributing
* reduction except that rule 0 cannot have any because the reduction on rule 0
@@ -66,6 +74,7 @@ typedef struct {
*/
typedef struct InadequacyList {
struct InadequacyList *next;
+ InadequacyListNodeCount id;
state *manifestingState;
ContributionIndex contributionCount;
union {
@@ -79,6 +88,14 @@ typedef struct InadequacyList {
* - \c token is a token.
* - The size of \c actions is
* manifesting_state->reductions->num + 1.
+ * - If the set of all \c InadequacyList nodes with which the new
+ * \c InadequacyList node might be compared is currently empty, then
+ * it is best if *node_count is zero so that the node count
+ * does not eventually overflow. However, if that set is not
+ * currently empty, then *node_count has not been modified
+ * by any function except \c InadequacyList__new_conflict since the
+ * invocation of \c InadequacyList__new_conflict that constructed
+ * the first existing member of that set.
* \post
* - \c result is a new \c InadequacyList with one node indicating that, in
* \c manifesting_state, the following actions are in conflict on \c token:
@@ -88,10 +105,14 @@ typedef struct InadequacyList {
* 0 <= i < manifesting_state->reductions->num, the reduction
* for the rule manifesting_state->reductions->rules[i] iff
* actions[i] is set.
+ * - Given any node \c n from the set of all existing
+ * \c InadequacyList nodes with which \c result might be compared
+ * such that n != result, then n->id < result->id.
* - \c result assumes responsibility for the memory of \c actions.
*/
-InadequacyList *InadequacyList__new_conflict (state *manifesting_state,
- symbol *token, bitset actions);
+InadequacyList *InadequacyList__new_conflict (
+ state *manifesting_state, symbol *token, bitset actions,
+ InadequacyListNodeCount *node_count);
/**
* \post