when we use a character as a subscript we must make it unsigned.  */
 #ifndef TRANSLATE
 #define TRANSLATE(d) \
-  (translate ? (unsigned char) translate[(unsigned char) (d)] : (d))
+  (translate ? (unsigned char) RE_TRANSLATE (translate, (unsigned char) (d)) : (d))
 #endif
 
 
              if (translate)
                while (range > lim
                       && !fastmap[(unsigned char)
-                                  translate[(unsigned char) *d++]])
+                                  RE_TRANSLATE (translate, (unsigned char) *d++)])
                  range--;
              else
                while (range > lim && !fastmap[(unsigned char) *d++])
              do
                {
                  PREFETCH ();
-                 if ((unsigned char) translate[(unsigned char) *d++]
+                 if ((unsigned char) RE_TRANSLATE (translate, (unsigned char) *d++)
                      != (unsigned char) *p++)
                    goto fail;
                }
   register unsigned char *p1 = s1, *p2 = s2;
   while (len)
     {
-      if (translate[*p1++] != translate[*p2++]) return 1;
+      if (RE_TRANSLATE (translate, *p1++) != RE_TRANSLATE (translate, *p2++))
+       return 1;
       len--;
     }
   return 0;