gv.c:require_tie_mod: Accept pvn params
[perl.git] / gv.c
diff --git a/gv.c b/gv.c
index cd1c32d..7fd41f0 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -1305,12 +1305,14 @@ Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags)
  * the sv slot must already be magicalized.
  */
 STATIC void
-S_require_tie_mod(pTHX_ GV *gv, const char *varpv, SV* namesv, const U32 flags)
+S_require_tie_mod(pTHX_ GV *gv, const char *varpv, const char * name,
+                        STRLEN len, const U32 flags)
 {
     const char varname = *varpv; /* varpv might be clobbered by
                                     load_module, so save it.  For the
                                     moment it’s always a single char.  */
     const SV * const target = varname == '[' ? GvSV(gv) : (SV *)GvHV(gv);
+    SV * const namesv = newSVpvn(name, len);
 
     PERL_ARGS_ASSERT_REQUIRE_TIE_MOD;
 
@@ -2082,7 +2084,7 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
 
             /* magicalization must be done before require_tie_mod is called */
            if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
-               require_tie_mod(gv, "!", newSVpvs("Errno"), 1);
+               require_tie_mod(gv, "!", "Errno", 5, 1);
 
            break;
        case '-':               /* $- */
@@ -2099,7 +2101,7 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
             SvREADONLY_on(av);
 
             if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
-                require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), 0);
+                require_tie_mod(gv, name, "Tie::Hash::NamedCapture",23, 0);
 
             break;
        }
@@ -2119,7 +2121,7 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
        case '[':               /* $[ */
            if ((sv_type == SVt_PV || sv_type == SVt_PVGV)
             && FEATURE_ARYBASE_IS_ENABLED) {
-               require_tie_mod(gv,name,newSVpvs("arybase"),0);
+               require_tie_mod(gv,name,"arybase",7,0);
            }
            else goto magicalize;
             break;
@@ -2207,9 +2209,9 @@ S_maybe_multimagic_gv(pTHX_ GV *gv, const char *name, const svtype sv_type)
 
     if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) {
         if (*name == '!')
-            require_tie_mod(gv, "!", newSVpvs("Errno"), 1);
+            require_tie_mod(gv, "!", "Errno", 5, 1);
         else if (*name == '-' || *name == '+')
-            require_tie_mod(gv, name, newSVpvs("Tie::Hash::NamedCapture"), 0);
+            require_tie_mod(gv, name, "Tie::Hash::NamedCapture", 23, 0);
     } else if (sv_type == SVt_PV) {
         if (*name == '*' || *name == '#') {
             /* diag_listed_as: $* is no longer supported */
@@ -2221,7 +2223,7 @@ S_maybe_multimagic_gv(pTHX_ GV *gv, const char *name, const svtype sv_type)
     if (sv_type==SVt_PV || sv_type==SVt_PVGV) {
       switch (*name) {
       case '[':
-          require_tie_mod(gv,name,newSVpvs("arybase"),0);
+          require_tie_mod(gv,name,"arybase",7,0);
           break;
 #ifdef PERL_SAWAMPERSAND
       case '`':