[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
24-fyi-new-bitset-features.patch
From: |
Akim Demaille |
Subject: |
24-fyi-new-bitset-features.patch |
Date: |
Mon, 04 Mar 2002 13:06:56 +0100 |
Index: ChangeLog
from Akim Demaille <address@hidden>
* src/conflicts.c (set_conflicts): Use bitset_disjoint_p.
(count_sr_conflicts): Use bitset_count.
* src/reduce.c (inaccessable_symbols): Ditto.
(bits_size): Remove.
* src/warshall.h, src/warshall.c: Convert to bitsetv.
Index: src/closure.c
--- src/closure.c Sun, 03 Mar 2002 11:53:42 +0100 akim
+++ src/closure.c Sun, 03 Mar 2002 12:08:09 +0100 akim
@@ -1,5 +1,5 @@
/* Subroutines for bison
- Copyright 1984, 1989, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -19,13 +19,14 @@
02111-1307, USA. */
#include "system.h"
+#include "bitset.h"
+#include "bitsetv.h"
#include "getargs.h"
#include "symtab.h"
#include "gram.h"
#include "reader.h"
#include "closure.h"
#include "derives.h"
-#include "bitset.h"
#include "warshall.h"
/* NITEMSET is the size of the array ITEMSET. */
@@ -35,8 +36,8 @@
static bitset ruleset;
/* internal data. See comments before set_fderives and set_firsts. */
-static bitset *fderives = NULL;
-static bitset *firsts = NULL;
+static bitsetv fderives = NULL;
+static bitsetv firsts = NULL;
/* Retrieve the FDERIVES/FIRSTS sets of the nonterminals numbered Var. */
#define FDERIVES(Var) fderives[(Var) - ntokens]
@@ -120,19 +121,17 @@
{
int i, j;
- firsts = XCALLOC (bitset, nvars);
+ firsts = bitsetv_create (nvars, nvars, BITSET_FIXED);
+
for (i = ntokens; i < nsyms; i++)
- {
- FIRSTS (i) = bitset_create (nvars, BITSET_FIXED);
- for (j = 0; derives[i][j] >= 0; ++j)
- {
- int symbol = ritem[rules[derives[i][j]].rhs];
- if (ISVAR (symbol))
- bitset_set (FIRSTS (i), symbol - ntokens);
- }
- }
+ for (j = 0; derives[i][j] >= 0; ++j)
+ {
+ int symbol = ritem[rules[derives[i][j]].rhs];
+ if (ISVAR (symbol))
+ bitset_set (FIRSTS (i), symbol - ntokens);
+ }
- RTC (firsts, nvars);
+ RTC (firsts);
if (trace_flag)
print_firsts ();
@@ -153,10 +152,7 @@
{
int i, j, k;
- fderives = XCALLOC (bitset, nvars);
- bitset_stats_init ();
- for (i = 0 ; i < nvars; ++i)
- fderives[i] = bitset_create (nrules + 1, BITSET_FIXED);
+ fderives = bitsetv_create (nvars, nrules + 1, BITSET_FIXED);
set_firsts ();
@@ -169,9 +165,7 @@
if (trace_flag)
print_fderives ();
- for (i = ntokens; i < nsyms; ++i)
- bitset_free (FIRSTS (i));
- XFREE (firsts);
+ bitsetv_free (firsts);
}
@@ -243,12 +237,7 @@
void
free_closure (void)
{
- int i;
XFREE (itemset);
-
bitset_free (ruleset);
-
- for (i = 0 ; i < nvars; ++i)
- bitset_free (fderives[i]);
- free (fderives);
+ bitsetv_free (fderives);
}
Index: src/conflicts.c
--- src/conflicts.c Sun, 03 Mar 2002 11:53:42 +0100 akim
+++ src/conflicts.c Sun, 03 Mar 2002 12:15:49 +0100 akim
@@ -155,7 +155,7 @@
static void
set_conflicts (state_t *state)
{
- int i, j;
+ int i;
shifts *shiftp;
if (state->consistent)
@@ -172,25 +172,19 @@
check for shift-reduce conflict, and try to resolve using
precedence */
for (i = 0; i < state->nlookaheads; ++i)
- if (rules[LAruleno[state->lookaheadsp + i]].prec)
- for (j = 0; j < ntokens; ++j)
- if (bitset_test (LA[state->lookaheadsp + i], j)
- && bitset_test (lookaheadset, j))
- {
- resolve_sr_conflict (state, state->lookaheadsp + i);
- break;
- }
-
+ if (rules[LAruleno[state->lookaheadsp + i]].prec
+ && !bitset_disjoint_p (LA[state->lookaheadsp + i], lookaheadset))
+ {
+ resolve_sr_conflict (state, state->lookaheadsp + i);
+ break;
+ }
/* Loop over all rules which require lookahead in this state. Check
for conflicts not resolved above. */
for (i = 0; i < state->nlookaheads; ++i)
{
- /* FIXME: Here, I need something like `bitset_disjoint_p'. */
- for (j = 0; j < ntokens; ++j)
- if (bitset_test (LA[state->lookaheadsp + i], j)
- && bitset_test (lookaheadset, j))
- conflicts[state->number] = 1;
+ if (!bitset_disjoint_p (LA[state->lookaheadsp + i], lookaheadset))
+ conflicts[state->number] = 1;
bitset_or (lookaheadset, lookaheadset, LA[state->lookaheadsp + i]);
}
@@ -236,9 +230,7 @@
bitset_and (lookaheadset, lookaheadset, shiftset);
- for (i = 0; i < ntokens; i++)
- if (bitset_test (lookaheadset, i))
- src_count++;
+ src_count = bitset_count (lookaheadset);
return src_count;
}
Index: src/lalr.c
--- src/lalr.c Sun, 03 Mar 2002 11:53:42 +0100 akim
+++ src/lalr.c Sun, 03 Mar 2002 12:01:53 +0100 akim
@@ -25,6 +25,7 @@
#include "system.h"
#include "bitset.h"
+#include "bitsetv.h"
#include "reader.h"
#include "types.h"
#include "LR0.h"
@@ -40,7 +41,7 @@
state_t **states = NULL;
short *LAruleno = NULL;
-bitset *LA = NULL;
+bitsetv LA = NULL;
size_t nLA;
static int ngotos;
@@ -50,7 +51,7 @@
/* And for the famous F variable, which name is so descriptive that a
comment is hardly needed. <grin>. */
-static bitset *F = NULL;
+static bitsetv F = NULL;
static short **includes;
static shorts **lookback;
@@ -139,9 +140,7 @@
if (!nLA)
nLA = 1;
- LA = XCALLOC (bitset, nLA);
- for (i = 0; i < nLA; ++i)
- LA[i] = bitset_create (ntokens, BITSET_FIXED);
+ LA = bitsetv_create (nLA, ntokens, BITSET_FIXED);
LAruleno = XCALLOC (short, nLA);
lookback = XCALLOC (shorts *, nLA);
@@ -253,9 +252,7 @@
int i;
- F = XCALLOC (bitset, ngotos);
- for (i = 0; i < ngotos; ++i)
- F[i] = bitset_create (ntokens, BITSET_FIXED);
+ F = bitsetv_create (ngotos, ntokens, BITSET_FIXED);
for (i = 0; i < ngotos; i++)
{
@@ -500,9 +497,7 @@
LIST_FREE (shorts, lookback[i]);
XFREE (lookback);
- for (i = 0; i < (unsigned) ngotos; ++i)
- bitset_free (F[i]);
- XFREE (F);
+ bitsetv_free (F);
}
Index: src/main.c
--- src/main.c Sun, 03 Mar 2002 11:27:12 +0100 akim
+++ src/main.c Sun, 03 Mar 2002 11:54:42 +0100 akim
@@ -50,6 +50,8 @@
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
+ bitset_stats_init ();
+
lineno = 0;
getargs (argc, argv);
Index: src/output.c
--- src/output.c Sun, 03 Mar 2002 11:27:12 +0100 akim
+++ src/output.c Sun, 03 Mar 2002 12:01:13 +0100 akim
@@ -89,6 +89,7 @@
negative short int. Used to flag ?? */
#include "system.h"
+#include "bitsetv.h"
#include "quotearg.h"
#include "error.h"
#include "getargs.h"
@@ -921,7 +922,7 @@
width = XCALLOC (short, nvectors);
token_actions ();
- XFREE (LA);
+ bitsetv_free (LA);
XFREE (LAruleno);
goto_actions ();
Index: src/reduce.c
--- src/reduce.c Sun, 03 Mar 2002 11:53:42 +0100 akim
+++ src/reduce.c Sun, 03 Mar 2002 12:10:01 +0100 akim
@@ -57,15 +57,6 @@
static int nuseful_nonterminals;
int nuseless_nonterminals;
-static int
-bits_size (bitset S)
-{
- int i, count = 0;
-
- BITSET_EXECUTE (S, 0, i, { ++count; });
- return count;
-}
-
/*-------------------------------------------------------------------.
| Another way to do this would be with a set for each production and |
| then do subset tests against N0, but even for the C grammar the |
@@ -82,9 +73,8 @@
in the set of useful nonterminals. */
for (r = &ritem[rules[i].rhs]; *r >= 0; r++)
- if (ISVAR (n = *r))
- if (!bitset_test (N0, n - ntokens))
- return FALSE;
+ if (ISVAR (n = *r) && !bitset_test (N0, n - ntokens))
+ return FALSE;
return TRUE;
}
@@ -215,7 +205,7 @@
bitset_free (P);
P = Pp;
- nuseful_productions = bits_size (P);
+ nuseful_productions = bitset_count (P);
nuseless_productions = nrules - nuseful_productions;
nuseful_nonterminals = 0;
Index: src/warshall.c
--- src/warshall.c Fri, 01 Mar 2002 16:04:26 +0100 akim
+++ src/warshall.c Sun, 03 Mar 2002 12:08:07 +0100 akim
@@ -21,7 +21,7 @@
#include "system.h"
#include "getargs.h"
-#include "bitset.h"
+#include "bitsetv.h"
#include "warshall.h"
/*--------------------------------------------------------.
@@ -29,9 +29,10 @@
`--------------------------------------------------------*/
static void
-bitmatrix_print (const char *title, bitset *matrix, size_t size)
+bitmatrix_print (const char *title, bitsetv matrix)
{
size_t i, j;
+ size_t size = bitset_size (matrix[0]);
/* Title. */
fprintf (stderr, "%s BEGIN\n", title);
@@ -77,23 +78,23 @@
`-------------------------------------------------------------------*/
static void
-TC (bitset *matrix, int n)
+TC (bitsetv matrix)
{
int i, j;
if (trace_flag)
- bitmatrix_print ("TC: Input", matrix, n);
+ bitmatrix_print ("TC: Input", matrix);
/* R (J, I) && R (I, K) => R (J, K).
I *must* be the outter loop. */
- for (i = 0; i < n; ++i)
- for (j = 0; j < n; ++j)
+ for (i = 0; matrix[i]; ++i)
+ for (j = 0; matrix[j]; ++j)
if (bitset_test (matrix[j], i))
bitset_or (matrix[j], matrix[j], matrix[i]);
if (trace_flag)
- bitmatrix_print ("TC: Output", matrix, n);
+ bitmatrix_print ("TC: Output", matrix);
}
@@ -103,11 +104,11 @@
`---------------------------------------------------------------*/
void
-RTC (bitset *matrix, int n)
+RTC (bitsetv matrix)
{
int i;
- TC (matrix, n);
- for (i = 0; i < n; ++i)
+ TC (matrix);
+ for (i = 0; matrix[i]; ++i)
bitset_set (matrix[i], i);
}
Index: src/warshall.h
--- src/warshall.h Fri, 01 Mar 2002 14:02:26 +0100 akim
+++ src/warshall.h Sun, 03 Mar 2002 12:07:58 +0100 akim
@@ -1,5 +1,5 @@
/* Generate transitive closure of a matrix,
- Copyright 1984, 1989, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -21,5 +21,5 @@
#ifndef WARSHALL_H_
# define WARSHALL_H_
-void RTC PARAMS ((bitset *, int));
+void RTC PARAMS ((bitsetv));
#endif /* !WARSHALL_H_ */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- 24-fyi-new-bitset-features.patch,
Akim Demaille <=