mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Miscellaneous cleanup of regular-expression compiler.
Revert our previous addition of "all" flags to copyins() and copyouts(); they're no longer needed, and were never anything but an unsightly hack. Improve a couple of infelicities in the REG_DEBUG code for dumping the NFA data structure, including adding code to count the total number of states and arcs. Add a couple of missed error checks. Add some more documentation in the README file, and some regression tests illustrating cases that exceeded the state-count limit and/or took unreasonable amounts of time before this set of patches. Back-patch to all supported branches.
This commit is contained in:
		@@ -136,10 +136,10 @@ static int	sortins_cmp(const void *, const void *);
 | 
			
		||||
static void sortouts(struct nfa *, struct state *);
 | 
			
		||||
static int	sortouts_cmp(const void *, const void *);
 | 
			
		||||
static void moveins(struct nfa *, struct state *, struct state *);
 | 
			
		||||
static void copyins(struct nfa *, struct state *, struct state *, int);
 | 
			
		||||
static void copyins(struct nfa *, struct state *, struct state *);
 | 
			
		||||
static void mergeins(struct nfa *, struct state *, struct arc **, int);
 | 
			
		||||
static void moveouts(struct nfa *, struct state *, struct state *);
 | 
			
		||||
static void copyouts(struct nfa *, struct state *, struct state *, int);
 | 
			
		||||
static void copyouts(struct nfa *, struct state *, struct state *);
 | 
			
		||||
static void cloneouts(struct nfa *, struct state *, struct state *, struct state *, int);
 | 
			
		||||
static void delsub(struct nfa *, struct state *, struct state *);
 | 
			
		||||
static void deltraverse(struct nfa *, struct state *, struct state *);
 | 
			
		||||
@@ -181,7 +181,6 @@ static void dumpnfa(struct nfa *, FILE *);
 | 
			
		||||
#ifdef REG_DEBUG
 | 
			
		||||
static void dumpstate(struct state *, FILE *);
 | 
			
		||||
static void dumparcs(struct state *, FILE *);
 | 
			
		||||
static int	dumprarcs(struct arc *, struct state *, FILE *, int);
 | 
			
		||||
static void dumparc(struct arc *, struct state *, FILE *);
 | 
			
		||||
static void dumpcnfa(struct cnfa *, FILE *);
 | 
			
		||||
static void dumpcstate(int, struct cnfa *, FILE *);
 | 
			
		||||
@@ -614,7 +613,9 @@ makesearch(struct vars * v,
 | 
			
		||||
	for (s = slist; s != NULL; s = s2)
 | 
			
		||||
	{
 | 
			
		||||
		s2 = newstate(nfa);
 | 
			
		||||
		copyouts(nfa, s, s2, 1);
 | 
			
		||||
		NOERR();
 | 
			
		||||
		copyouts(nfa, s, s2);
 | 
			
		||||
		NOERR();
 | 
			
		||||
		for (a = s->ins; a != NULL; a = b)
 | 
			
		||||
		{
 | 
			
		||||
			b = a->inchain;
 | 
			
		||||
@@ -2014,7 +2015,7 @@ dump(regex_t *re,
 | 
			
		||||
	dumpcolors(&g->cmap, f);
 | 
			
		||||
	if (!NULLCNFA(g->search))
 | 
			
		||||
	{
 | 
			
		||||
		printf("\nsearch:\n");
 | 
			
		||||
		fprintf(f, "\nsearch:\n");
 | 
			
		||||
		dumpcnfa(&g->search, f);
 | 
			
		||||
	}
 | 
			
		||||
	for (i = 1; i < g->nlacons; i++)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user