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,