#define gv_stashsvpvn_cached(a,b,c,d) S_gv_stashsvpvn_cached(aTHX_ a,b,c,d)
#define maybe_multimagic_gv(a,b,c) S_maybe_multimagic_gv(aTHX_ a,b,c)
#define parse_gv_stash_name(a,b,c,d,e,f,g,h) S_parse_gv_stash_name(aTHX_ a,b,c,d,e,f,g,h)
-#define require_tie_mod(a,b,c,d) S_require_tie_mod(aTHX_ a,b,c,d)
+#define require_tie_mod(a,b,c,d,e) S_require_tie_mod(aTHX_ a,b,c,d,e)
# endif
# if defined(PERL_IN_HV_C)
#define clear_placeholders(a,b) S_clear_placeholders(aTHX_ a,b)
* 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;
/* 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 '-': /* $- */
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;
}
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;
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 */
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 '`':
STATIC bool S_parse_gv_stash_name(pTHX_ HV **stash, GV **gv, const char **name, STRLEN *len, const char *nambeg, STRLEN full_len, const U32 is_utf8, const I32 add);
#define PERL_ARGS_ASSERT_PARSE_GV_STASH_NAME \
assert(stash); assert(gv); assert(name); assert(len); assert(nambeg)
-STATIC void S_require_tie_mod(pTHX_ GV *gv, const char *varpv, SV* namesv, const U32 flags);
+STATIC void S_require_tie_mod(pTHX_ GV *gv, const char *varpv, const char * name, STRLEN len, const U32 flags);
#define PERL_ARGS_ASSERT_REQUIRE_TIE_MOD \
- assert(gv); assert(varpv); assert(namesv)
+ assert(gv); assert(varpv); assert(name)
#endif
#if defined(PERL_IN_GV_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_PAD_C) || defined(PERL_IN_OP_C)
PERL_CALLCONV void Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv);