Sync regex code with Tcl 8.5.11.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 18 Feb 2012 00:44:26 +0000 (19:44 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 18 Feb 2012 00:44:26 +0000 (19:44 -0500)
Sync our regex code with upstream changes since last time we did this,
which was Tcl 8.5.0 (see commit df1e965e12cdd48c11057ee6e15346ee2b8b02f5).

There are no functional changes here; the main point is just to lay down
a commit-log marker that somebody has looked at this recently, and to do
what we can to keep the two codebases comparable.

src/backend/regex/regc_locale.c
src/backend/regex/rege_dfa.c
src/backend/regex/regexec.c

index 0f70931b13edfef77b6a4908e3b038aa5542153d..6cf27958b1545a61fba01e76dc4d37aca32789dc 100644 (file)
@@ -499,7 +499,7 @@ cclass(struct vars * v,                     /* context */
 {
        size_t          len;
        struct cvec *cv = NULL;
-       const char **namePtr;
+       const char * const *namePtr;
        int                     i,
                                index;
 
@@ -507,7 +507,7 @@ cclass(struct vars * v,                     /* context */
         * The following arrays define the valid character class names.
         */
 
-       static const char *classNames[] = {
+       static const char * const classNames[] = {
                "alnum", "alpha", "ascii", "blank", "cntrl", "digit", "graph",
                "lower", "print", "punct", "space", "upper", "xdigit", NULL
        };
index e521261a57192fd08e1482f8ccdd99eda3e4ff70..f4fd41458bd4677196412e6e8d58d982fe97a125 100644 (file)
@@ -272,36 +272,35 @@ static struct dfa *
 newdfa(struct vars * v,
           struct cnfa * cnfa,
           struct colormap * cm,
-          struct smalldfa * small) /* preallocated space, may be NULL */
+          struct smalldfa * sml) /* preallocated space, may be NULL */
 {
        struct dfa *d;
        size_t          nss = cnfa->nstates * 2;
        int                     wordsper = (cnfa->nstates + UBITS - 1) / UBITS;
-       struct smalldfa *smallwas = small;
+       struct smalldfa *smallwas = sml;
 
        assert(cnfa != NULL && cnfa->nstates != 0);
 
        if (nss <= FEWSTATES && cnfa->ncolors <= FEWCOLORS)
        {
                assert(wordsper == 1);
-               if (small == NULL)
+               if (sml == NULL)
                {
-                       small = (struct smalldfa *) MALLOC(
-                                                                                          sizeof(struct smalldfa));
-                       if (small == NULL)
+                       sml = (struct smalldfa *) MALLOC(sizeof(struct smalldfa));
+                       if (sml == NULL)
                        {
                                ERR(REG_ESPACE);
                                return NULL;
                        }
                }
-               d = &small->dfa;
-               d->ssets = small->ssets;
-               d->statesarea = small->statesarea;
+               d = &sml->dfa;
+               d->ssets = sml->ssets;
+               d->statesarea = sml->statesarea;
                d->work = &d->statesarea[nss];
-               d->outsarea = small->outsarea;
-               d->incarea = small->incarea;
+               d->outsarea = sml->outsarea;
+               d->incarea = sml->incarea;
                d->cptsmalloced = 0;
-               d->mallocarea = (smallwas == NULL) ? (char *) small : NULL;
+               d->mallocarea = (smallwas == NULL) ? (char *) sml : NULL;
        }
        else
        {
index 7dc0ddba29ef2f785050ee3fc3677708fcdcb16a..f8e31f8f4ade89d9a4bec2ab8287b4689c1d082b 100644 (file)
@@ -141,7 +141,6 @@ static int  dissect(struct vars *, struct subre *, chr *, chr *);
 static int     condissect(struct vars *, struct subre *, chr *, chr *);
 static int     altdissect(struct vars *, struct subre *, chr *, chr *);
 static int     cdissect(struct vars *, struct subre *, chr *, chr *);
-static int     ccaptdissect(struct vars *, struct subre *, chr *, chr *);
 static int     ccondissect(struct vars *, struct subre *, chr *, chr *);
 static int     crevdissect(struct vars *, struct subre *, chr *, chr *);
 static int     cbrdissect(struct vars *, struct subre *, chr *, chr *);
@@ -708,6 +707,8 @@ cdissect(struct vars * v,
                 chr *begin,                    /* beginning of relevant substring */
                 chr *end)                              /* end of same */
 {
+       int                     er;
+
        assert(t != NULL);
        MDEBUG(("cdissect %ld-%ld %c\n", LOFF(begin), LOFF(end), t->op));
 
@@ -727,31 +728,16 @@ cdissect(struct vars * v,
                        return ccondissect(v, t, begin, end);
                case '(':                               /* capturing */
                        assert(t->left != NULL && t->right == NULL);
-                       return ccaptdissect(v, t, begin, end);
+                       assert(t->subno > 0);
+                       er = cdissect(v, t->left, begin, end);
+                       if (er == REG_OKAY)
+                               subset(v, t, begin, end);
+                       return er;
                default:
                        return REG_ASSERT;
        }
 }
 
-/*
- * ccaptdissect - capture subexpression matches (with complications)
- */
-static int                                             /* regexec return code */
-ccaptdissect(struct vars * v,
-                        struct subre * t,
-                        chr *begin,            /* beginning of relevant substring */
-                        chr *end)                      /* end of same */
-{
-       int                     er;
-
-       assert(t->subno > 0);
-
-       er = cdissect(v, t->left, begin, end);
-       if (er == REG_OKAY)
-               subset(v, t, begin, end);
-       return er;
-}
-
 /*
  * ccondissect - concatenation subexpression matches (with complications)
  * The retry memory stores the offset of the trial midpoint from begin,