This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Cast to signed before negating, to avoid compiler warnings
[perl5.git] / ext / mro / mro.xs
index 618260e..7b5a86d 100644 (file)
@@ -45,8 +45,8 @@ S_mro_get_linear_isa_c3(pTHX_ HV* stash, U32 level)
       Perl_croak(aTHX_ "Can't linearize anonymous symbol table");
 
     if (level > 100)
-        Perl_croak(aTHX_ "Recursive inheritance detected in package '%s'",
-                  HEK_KEY(stashhek));
+        Perl_croak(aTHX_ "Recursive inheritance detected in package '%"SVf"'",
+                  SVfARG(sv_2mortal(newSVhek(stashhek))));
 
     meta = HvMROMETA(stash);
 
@@ -253,8 +253,10 @@ S_mro_get_linear_isa_c3(pTHX_ HV* stash, U32 level)
                 SV *errmsg;
                 I32 i;
 
-                errmsg = newSVpvf("Inconsistent hierarchy during C3 merge of class '%s':\n\t"
-                                  "current merge results [\n", HEK_KEY(stashhek));
+                errmsg = newSVpvf(
+                            "Inconsistent hierarchy during C3 merge of class '%"SVf"':\n\t"
+                            "current merge results [\n",
+                                            SVfARG(sv_2mortal(newSVhek(stashhek))));
                 for (i = 0; i <= av_len(retval); i++) {
                     SV **elem = av_fetch(retval, i, 0);
                     sv_catpvf(errmsg, "\t\t%"SVf",\n", SVfARG(*elem));
@@ -585,7 +587,10 @@ mro__nextcan(...)
            SV* const val = HeVAL(cache_entry);
            if(val == &PL_sv_undef) {
                if(throw_nomethod)
-                   Perl_croak(aTHX_ "No next::method '%s' found for %s", subname, hvname);
+                   Perl_croak(aTHX_ "No next::method '%"SVf"' found for %"SVf,
+                        SVfARG(newSVpvn_flags(subname, subname_len,
+                                SVs_TEMP | ( subname_utf8 ? SVf_UTF8 : 0 ) )),
+                        SVfARG(sv_2mortal(newSVhek( HvNAME_HEK(selfstash) ))));
                 XSRETURN_EMPTY;
            }
            mXPUSHs(newRV_inc(val));
@@ -629,15 +634,16 @@ mro__nextcan(...)
 
             if (!curstash) {
                 if (ckWARN(WARN_SYNTAX))
-                    Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Can't locate package %"SVf" for @%s::ISA",
-                        (void*)linear_sv, hvname);
+                    Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Can't locate package %"SVf" for @%"SVf"::ISA",
+                        (void*)linear_sv,
+                        SVfARG(sv_2mortal(newSVhek( HvNAME_HEK(selfstash) ))));
                 continue;
             }
 
             assert(curstash);
 
             gvp = (GV**)hv_fetch(curstash, subname,
-                                    subname_utf8 ? -subname_len : subname_len, 0);
+                                    subname_utf8 ? -(I32)subname_len : (I32)subname_len, 0);
             if (!gvp) continue;
 
             candidate = *gvp;
@@ -661,7 +667,10 @@ mro__nextcan(...)
 
     (void)hv_store_ent(nmcache, sv, &PL_sv_undef, 0);
     if(throw_nomethod)
-        Perl_croak(aTHX_ "No next::method '%s' found for %s", subname, hvname);
+        Perl_croak(aTHX_ "No next::method '%"SVf"' found for %"SVf,
+                         SVfARG(newSVpvn_flags(subname, subname_len,
+                                SVs_TEMP | ( subname_utf8 ? SVf_UTF8 : 0 ) )),
+                        SVfARG(sv_2mortal(newSVhek( HvNAME_HEK(selfstash) ))));
     XSRETURN_EMPTY;
 
 BOOT: