[win32] add archname to *sitearch in config.{b,g,v}c
[p5sagit/p5-mst-13.2.git] / regcomp.c
index 6489b78..9039797 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -60,9 +60,9 @@
 #define REG_COMP_C
 #include "regcomp.h"
 
-#ifdef USE_THREADS
+#ifdef op
 #undef op
-#endif /* USE_THREADS */
+#endif /* op */
 
 static regnode regdummy;
 static char *  regparse;       /* Input-scan pointer. */
@@ -372,7 +372,7 @@ study_chunk(regnode **scanp, I32 *deltap, regnode *last, scan_data_t *data, U32
                    data->last_start_max = is_inf
                        ? I32_MAX : data->pos_min + data->pos_delta; 
                }
-               sv_catpvn(data->last_found, OPERAND(scan)+1, l);
+               sv_catpvn(data->last_found, (char *)(OPERAND(scan)+1), l);
                data->last_end = data->pos_min + l;
                data->pos_min += l; /* As in the first entry. */
                data->flags &= ~SF_BEFORE_EOL;
@@ -815,6 +815,7 @@ pregcomp(char *exp, char *xend, PMOP *pm)
     if (OP(scan) != BRANCH) {  /* Only one top-level choice. */
        scan_data_t data;
        I32 fake;
+       STRLEN longest_float_length, longest_fixed_length;
 
        StructCopy(&zero_scan_data, &data, scan_data_t);
        first = scan;
@@ -893,7 +894,8 @@ pregcomp(char *exp, char *xend, PMOP *pm)
        scan_commit(&data);
        SvREFCNT_dec(data.last_found);
 
-       if (SvCUR(data.longest_float)
+       longest_float_length = SvCUR(data.longest_float);
+       if (longest_float_length
            || (data.flags & SF_FL_BEFORE_EOL
                && (!(data.flags & SF_FL_BEFORE_MEOL)
                    || (regflags & PMf_MULTILINE)))) {
@@ -914,9 +916,11 @@ pregcomp(char *exp, char *xend, PMOP *pm)
          remove:
            r->float_substr = Nullsv;
            SvREFCNT_dec(data.longest_float);
+           longest_float_length = 0;
        }
 
-       if (SvCUR(data.longest_fixed)
+       longest_fixed_length = SvCUR(data.longest_fixed);
+       if (longest_fixed_length
            || (data.flags & SF_FIX_BEFORE_EOL /* Cannot have SEOL and MULTI */
                && (!(data.flags & SF_FIX_BEFORE_MEOL)
                    || (regflags & PMf_MULTILINE)))) {
@@ -931,10 +935,11 @@ pregcomp(char *exp, char *xend, PMOP *pm)
        } else {
            r->anchored_substr = Nullsv;
            SvREFCNT_dec(data.longest_fixed);
+           longest_fixed_length = 0;
        }
 
        /* A temporary algorithm prefers floated substr to fixed one to dig more info. */
-       if (SvCUR(data.longest_fixed) > SvCUR(data.longest_float)) {
+       if (longest_fixed_length > longest_float_length) {
            r->check_substr = r->anchored_substr;
            r->check_offset_min = r->check_offset_max = r->anchored_offset;
            if (r->reganch & ROPT_ANCH_SINGLE)
@@ -1668,7 +1673,7 @@ tryagain:
            ret = reg_node((regflags & PMf_FOLD)
                          ? ((regflags & PMf_LOCALE) ? EXACTFL : EXACTF)
                          : EXACT);
-           s = OPERAND(ret);
+           s = (char *) OPERAND(ret);
            regc(0, s++);               /* save spot for len */
            for (len = 0, p = regparse - 1;
              len < 127 && p < regxend;
@@ -1836,7 +1841,7 @@ regclass(void)
     register I32 def;
     I32 numlen;
 
-    s = opnd = OPERAND(regcode);
+    s = opnd = (char *) OPERAND(regcode);
     ret = reg_node(ANYOF);
     for (Class = 0; Class < 33; Class++)
        regc(0, s++);
@@ -2657,3 +2662,5 @@ re_croak2(const char* pat1,const char* pat2, va_alist)
     croak("%s", buf);
 }
 
+
+