summaryrefslogtreecommitdiff
path: root/ext/B/B.xs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/B/B.xs')
-rw-r--r--ext/B/B.xs32
1 files changed, 26 insertions, 6 deletions
diff --git a/ext/B/B.xs b/ext/B/B.xs
index a4c6731683..9afc50071c 100644
--- a/ext/B/B.xs
+++ b/ext/B/B.xs
@@ -1167,12 +1167,12 @@ BOOT:
# if PERL_VERSION < 17 || defined(CopSTASH_len)
cv = newXS("B::COP::stashpv", XS_B__OP_next, __FILE__);
XSANY.any_i32 = COP_stashpv_ix;
- cv = newXS("B::COP::file", XS_B__OP_next, __FILE__);
- XSANY.any_i32 = COP_file_ix;
# else
cv = newXS("B::COP::stashoff", XS_B__OP_next, __FILE__);
XSANY.any_i32 = COP_stashoff_ix;
# endif
+ cv = newXS("B::COP::file", XS_B__OP_next, __FILE__);
+ XSANY.any_i32 = COP_file_ix;
#else
cv = newXS("B::COP::stash", XS_B__OP_next, __FILE__);
XSANY.any_i32 = COP_stash_ix;
@@ -1256,17 +1256,37 @@ COP_stash(o)
PUSHs(make_sv_object(aTHX_
ix ? (SV *)CopFILEGV(o) : (SV *)CopSTASH(o)));
+#else
+
+char *
+COP_file(o)
+ B::COP o
+ CODE:
+ RETVAL = CopFILE(o);
+ OUTPUT:
+ RETVAL
+
#endif
-#if !defined(USE_ITHREADS) || (PERL_VERSION > 16 && !defined(CopSTASH_len))
+#if PERL_VERSION >= 10
+
+SV *
+COP_stashpv(o)
+ B::COP o
+ CODE:
+ RETVAL = CopSTASH(o) && SvTYPE(CopSTASH(o)) == SVt_PVHV
+ ? newSVhek(HvNAME_HEK(CopSTASH(o)))
+ : &PL_sv_undef;
+ OUTPUT:
+ RETVAL
+
+#else
char *
COP_stashpv(o)
B::COP o
- ALIAS:
- file = 1
CODE:
- RETVAL = ix ? CopFILE(o) : CopSTASHPV(o);
+ RETVAL = CopSTASHPV(o);
OUTPUT:
RETVAL