mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-11 05:13:04 +00:00
portability: <' and >' are not always defined on addresses.
Specifically, don't sort objects by their memory addresses when they're not allocated in the same array or other object. Though I haven't found a test case where that fails on my platform, C says the behavior is undefined. * src/AnnotationList.c (AnnotationList__insertInto): Remove FIXME. Use new id field of InadequacyList nodes rather than their memory addresses when sorting. (AnnotationList__compute_from_inadequacies): Add inadequacy_list_node_count argument to pass to InadequacyList__new_conflict. * src/AnnotationList.h (AnnotationList__compute_from_inadequacies): Update prototype and documentation for new argument. * src/InadequacyList.c (InadequacyList__new_conflict): Add node_count argument and use it to assign a unique ID. * src/InadequacyList.h (InadequacyListNodeCount): New typedef. (InadequacyList): Add id field. (InadequacyList__new_conflict): Update prototype and documentation for new argument. * src/ielr.c (ielr_compute_annotation_lists): Update AnnotationList__compute_from_inadequacies invocation.
This commit is contained in:
@@ -82,6 +82,15 @@ typedef struct AnnotationList
|
||||
* computed by \c ielr_compute_auxiliary_tables.
|
||||
* - The size of each of \c annotation_lists and \c annotation_counts is
|
||||
* \c ::nstates.
|
||||
* - If no \c InadequacyList nodes are currently allocated for the
|
||||
* parser tables to which \c s belongs, then it is best if
|
||||
* <tt>*inadequacy_list_node_count</tt> is zero to avoid overflow.
|
||||
* Otherwise, <tt>*inadequacy_list_node_count</tt> has not been
|
||||
* modified by any function except
|
||||
* \c AnnotationList__compute_from_inadequacies since the invocation
|
||||
* of \c AnnotationList__compute_from_inadequacies that constructed
|
||||
* the first of the \c InadequacyList nodes currently allocated for
|
||||
* those parser tables.
|
||||
* \post
|
||||
* - <tt>inadequacy_lists[s->number]</tt> now describes all inadequacies that
|
||||
* manifest in \c s.
|
||||
@@ -97,18 +106,14 @@ typedef struct AnnotationList
|
||||
* \c annotations_obstackp.
|
||||
*/
|
||||
void
|
||||
AnnotationList__compute_from_inadequacies (state *s,
|
||||
bitsetv follow_kernel_items,
|
||||
bitsetv always_follows,
|
||||
state ***predecessors,
|
||||
bitset **item_lookahead_sets,
|
||||
InadequacyList **inadequacy_lists,
|
||||
AnnotationList **annotation_lists,
|
||||
AnnotationIndex *annotation_counts,
|
||||
ContributionIndex
|
||||
*max_contributionsp,
|
||||
struct obstack
|
||||
*annotations_obstackp);
|
||||
AnnotationList__compute_from_inadequacies (
|
||||
state *s, bitsetv follow_kernel_items, bitsetv always_follows,
|
||||
state ***predecessors, bitset **item_lookahead_sets,
|
||||
InadequacyList **inadequacy_lists, AnnotationList **annotation_lists,
|
||||
AnnotationIndex *annotation_counts,
|
||||
ContributionIndex *max_contributionsp,
|
||||
struct obstack *annotations_obstackp,
|
||||
InadequacyListNodeCount *inadequacy_list_node_count);
|
||||
|
||||
/**
|
||||
* \pre
|
||||
|
||||
Reference in New Issue
Block a user