warn on C<my($foo,$foo)>
[p5sagit/p5-mst-13.2.git] / util.c
diff --git a/util.c b/util.c
index 3788de2..5be4969 100644 (file)
--- a/util.c
+++ b/util.c
@@ -900,10 +900,11 @@ fbm_compile(SV *sv, U32 flags /* not used yet */)
     register unsigned char *s;
     register unsigned char *table;
     register U32 i;
-    register U32 len = SvCUR(sv);
+    STRLEN len;
     I32 rarest = 0;
     U32 frequency = 256;
 
+    s = SvPV_force(sv, len);
     sv_upgrade(sv, SVt_PVBM);
     if (len > 255 || len == 0) /* TAIL might be on on a zero-length string. */
        return;                 /* can't have offsets that big */
@@ -1410,6 +1411,7 @@ warn(const char* pat,...)
 void
 warner(U32  err, const char* pat,...)
 {
+    dTHR;
     va_list args;
     char *message;
     HV *stash;
@@ -1422,7 +1424,7 @@ warner(U32  err, const char* pat,...)
 
     if (ckDEAD(err)) {
 #ifdef USE_THREADS
-        DEBUG_L(PerlIO_printf(PerlIO_stderr(), "croak: 0x%lx %s", (unsigned long) thr, message));
+        DEBUG_S(PerlIO_printf(PerlIO_stderr(), "croak: 0x%lx %s", (unsigned long) thr, message));
 #endif /* USE_THREADS */
         if (PL_diehook) {
             /* sv_2cv might call croak() */
@@ -2428,8 +2430,11 @@ scan_oct(char *start, I32 len, I32 *retlen)
        retval = n | (*s++ - '0');
        len--;
     }
-    if (len && (*s == '8' || *s == '9') && ckWARN(WARN_OCTAL))
-       warner(WARN_OCTAL, "Illegal octal digit ignored");
+    if (len && (*s == '8' || *s == '9')) {
+       dTHR;
+       if (ckWARN(WARN_OCTAL))
+           warner(WARN_OCTAL, "Illegal octal digit ignored");
+    }
     *retlen = s - start;
     return retval;
 }
@@ -2449,6 +2454,7 @@ scan_hex(char *start, I32 len, I32 *retlen)
            if (*s == '_')
                continue;
            else {
+               dTHR;
                --s;
                if (ckWARN(WARN_UNSAFE))
                    warner(WARN_UNSAFE,"Illegal hex digit ignored");