(!NILP (table) ? TRT_TABLE_OF (table, (Emchar) pos) : pos)
\f
#include "elhash.h"
+/* Make sure these are ALWAYS powers of 2 */
#define REGEXP_CACHE_SIZE 0x80
#define REGEXP_CACHE_HASH_MASK (REGEXP_CACHE_SIZE-1)
#define REGEXP_FASTMAP_SIZE 0400
+#define REGEXP_FASTMAP_MASK (REGEXP_FASTMAP_SIZE-1)
#define __REGEXP_DEBUG__(args...) fprintf(stderr, "REGEXP " args)
#ifndef REGEXP_DEBUG_FLAG
static void
compre_prfun(Lisp_Object obj, Lisp_Object pcfun, int escflag)
{
- write_fmt_str(pcfun, "#<compiled regexp %lx",
+ write_fmt_str(pcfun, "#<compiled regexp %lx",
(long unsigned int)((COMPRE_GET(obj))->buffer));
if (escflag);
}
fixup_internal_substring(nonreloc, reloc, offset, &length);
-
+
if (!NILP(reloc)) {
if (no_quit) {
newnonreloc = XSTRING_DATA(reloc);
return with failure...
*/
return -1;
- newnonreloc = alloca(length);
- memcpy((void*)newnonreloc, (void*)XSTRING_DATA(reloc), length);
+ Bufbyte *copy = alloca(length);
+ memcpy((void*)copy,
+ (const void*)XSTRING_DATA(reloc),
+ length);
+ newnonreloc = copy;
}
}
this_translated = 0;
}
if (ch > REGEXP_FASTMAP_SIZE)
- j = ((unsigned char)ch | 0200);
+ j = ((unsigned char)(ch & REGEXP_FASTMAP_MASK)| 0200);
else
- j = (unsigned char)ch;
+ j = (unsigned char)(ch & REGEXP_FASTMAP_MASK);
if (i == infinity)
stride_for_teases = BM_tab[j];
while (1) {
ch = TRANSLATE(inverse_trt, ch);
if (ch > REGEXP_FASTMAP_SIZE)
- j = ((unsigned char)ch | 0200);
+ j = ((unsigned char)(ch & REGEXP_FASTMAP_MASK) | 0200);
else
- j = (unsigned char)ch;
+ j = (unsigned char)(ch & REGEXP_FASTMAP_MASK);
/* For all the characters that map into CH,
set up simple_translate to map the last byte