Make dumpcolors() have tolerable performance when using 32-bit chr,
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 6 Oct 2007 16:18:09 +0000 (16:18 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 6 Oct 2007 16:18:09 +0000 (16:18 +0000)
as we do (and upstream Tcl doesn't).  The loop limit might be subject
to negotiation if anyone ever tries to do regex debugging in Far
Eastern languages, but for now 1000 seems plenty.  CHR_MAX was right out :-(

src/backend/regex/regc_color.c

index 4e5a776ee5f6f9d0726f5e742658dc5589f37a4e..3810f53376aebda3b24e25ca700b08f6d53de869 100644 (file)
@@ -722,13 +722,17 @@ dumpcolors(struct colormap * cm,
                        else
                                fprintf(f, "#%2ld%s(%2d): ", (long) co,
                                                has, cd->nchrs);
-                       /* it's hard to do this more efficiently */
-                       for (c = CHR_MIN; c < CHR_MAX; c++)
+                       /*
+                        * Unfortunately, it's hard to do this next bit more efficiently.
+                        *
+                        * Spencer's original coding has the loop iterating from CHR_MIN
+                        * to CHR_MAX, but that's utterly unusable for 32-bit chr.
+                        * For debugging purposes it seems fine to print only chr
+                        * codes up to 1000 or so.
+                        */
+                       for (c = CHR_MIN; c < 1000; c++)
                                if (GETCOLOR(cm, c) == co)
                                        dumpchr(c, f);
-                       assert(c == CHR_MAX);
-                       if (GETCOLOR(cm, c) == co)
-                               dumpchr(c, f);
                        fprintf(f, "\n");
                }
 }