This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
sv_setuv_mg is so rarely called that the IV optimisation test is not
[perl5.git] / util.c
diff --git a/util.c b/util.c
index fb7108f..6ef7a01 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1376,6 +1376,58 @@ Perl_vwarner(pTHX_ U32  err, const char* pat, va_list* args)
     }
 }
 
+/* implements the ckWARN? macros */
+
+bool
+Perl_ckwarn(pTHX_ U32 w)
+{
+    return
+       (
+              isLEXWARN_on
+           && PL_curcop->cop_warnings != pWARN_NONE
+           && (
+                  PL_curcop->cop_warnings == pWARN_ALL
+               || isWARN_on(PL_curcop->cop_warnings, unpackWARN1(w))
+               || (unpackWARN2(w) &&
+                    isWARN_on(PL_curcop->cop_warnings, unpackWARN2(w)))
+               || (unpackWARN3(w) &&
+                    isWARN_on(PL_curcop->cop_warnings, unpackWARN3(w)))
+               || (unpackWARN4(w) &&
+                    isWARN_on(PL_curcop->cop_warnings, unpackWARN4(w)))
+               )
+       )
+       ||
+       (
+           isLEXWARN_off && PL_dowarn & G_WARN_ON
+       )
+       ;
+}
+
+/* implements the ckWARN?_d macro */
+
+bool
+Perl_ckwarn_d(pTHX_ U32 w)
+{
+    return
+          isLEXWARN_off
+       || PL_curcop->cop_warnings == pWARN_ALL
+       || (
+             PL_curcop->cop_warnings != pWARN_NONE 
+          && (
+                  isWARN_on(PL_curcop->cop_warnings, unpackWARN1(w))
+             || (unpackWARN2(w) &&
+                  isWARN_on(PL_curcop->cop_warnings, unpackWARN2(w)))
+             || (unpackWARN3(w) &&
+                  isWARN_on(PL_curcop->cop_warnings, unpackWARN3(w)))
+             || (unpackWARN4(w) &&
+                  isWARN_on(PL_curcop->cop_warnings, unpackWARN4(w)))
+             )
+          )
+       ;
+}
+
+
+
 /* since we've already done strlen() for both nam and val
  * we can use that info to make things faster than
  * sprintf(s, "%s=%s", nam, val)
@@ -2959,8 +3011,7 @@ Perl_find_script(pTHX_ const char *scriptname, bool dosearch, const char **searc
            }
            scriptname = Nullch;
        }
-       if (xfailed)
-           Safefree(xfailed);
+       Safefree(xfailed);
        scriptname = xfound;
     }
     return (scriptname ? savepv(scriptname) : Nullch);
@@ -4032,8 +4083,9 @@ Perl_new_version(pTHX_ SV *ver)
     if ( SvVOK(ver) ) { /* already a v-string */
        char *version;
        MAGIC* mg = mg_find(ver,PERL_MAGIC_vstring);
-       version = savepvn( (const char*)mg->mg_ptr,mg->mg_len );
-       sv_setpv(rv,version);
+       const STRLEN len = mg->mg_len;
+       version = savepvn( (const char*)mg->mg_ptr, len);
+       sv_setpvn(rv,version,len);
        Safefree(version);
     }
     else {