SvPVX_const() triggers an assertion that when the sv isn't a PV.
[p5sagit/p5-mst-13.2.git] / ext / B / B.xs
index c09ddc3..aa02d54 100644 (file)
@@ -26,7 +26,9 @@ static const char* const svclassnames[] = {
 #endif
     "B::IV",
     "B::NV",
+#if PERL_VERSION <= 10
     "B::RV",
+#endif
     "B::PV",
     "B::PVIV",
     "B::PVNV",
@@ -34,6 +36,9 @@ static const char* const svclassnames[] = {
 #if PERL_VERSION <= 8
     "B::BM",
 #endif
+#if PERL_VERSION >= 11
+    "B::ORANGE",
+#endif
 #if PERL_VERSION >= 9
     "B::GV",
 #endif
@@ -597,7 +602,6 @@ BOOT:
     specialsv_list[5] = (SV *) pWARN_NONE;
     specialsv_list[6] = (SV *) pWARN_STD;
 #if PERL_VERSION <= 8
-#  define CVf_ASSERTION        0
 #  define OPpPAD_STATE 0
 #endif
 #include "defsubs.h"
@@ -846,7 +850,6 @@ threadsv_names()
 #define OP_type(o)     o->op_type
 #if PERL_VERSION >= 9
 #  define OP_opt(o)    o->op_opt
-#  define OP_static(o) o->op_static
 #else
 #  define OP_seq(o)    o->op_seq
 #endif
@@ -913,10 +916,6 @@ U8
 OP_opt(o)
        B::OP           o
 
-U8
-OP_static(o)
-       B::OP           o
-
 #else
 
 U16
@@ -990,6 +989,8 @@ LISTOP_children(o)
 #  define PMOP_pmreplstart(o)  o->op_pmstashstartu.op_pmreplstart
 #else
 #  define PMOP_pmreplstart(o)  o->op_pmreplstart
+#  define PMOP_pmpermflags(o)  o->op_pmpermflags
+#  define PMOP_pmdynflags(o)      o->op_pmdynflags
 #endif
 #define PMOP_pmnext(o)         o->op_pmnext
 #define PMOP_pmregexp(o)       PM_GETRE(o)
@@ -1085,6 +1086,18 @@ U32
 PMOP_pmflags(o)
        B::PMOP         o
 
+#if PERL_VERSION < 9
+
+U32
+PMOP_pmpermflags(o)
+       B::PMOP         o
+
+U8
+PMOP_pmdynflags(o)
+        B::PMOP         o
+
+#endif
+
 void
 PMOP_precomp(o)
        B::PMOP         o
@@ -1095,6 +1108,8 @@ PMOP_precomp(o)
        if (rx)
            sv_setpvn(ST(0), rx->precomp, rx->prelen);
 
+#if PERL_VERSION >= 9
+
 void
 PMOP_reflags(o)
        B::PMOP         o
@@ -1105,6 +1120,8 @@ PMOP_reflags(o)
        if (rx)
            sv_setuv(ST(0), rx->extflags);
 
+#endif
+
 #define SVOP_sv(o)     cSVOPo->op_sv
 #define SVOP_gv(o)     ((GV*)cSVOPo->op_sv)
 
@@ -1354,6 +1371,24 @@ packiv(sv)
            ST(0) = sv_2mortal(newSVpvn((char *)&w, 4));
        }
 
+
+#if PERL_VERSION >= 11
+
+B::SV
+RV(sv)
+        B::IV   sv
+    CODE:
+        if( SvROK(sv) ) {
+            RETVAL = SvRV(sv);
+        }
+        else {
+            croak( "argument is not SvROK" );
+        }
+    OUTPUT:
+        RETVAL
+
+#endif
+
 MODULE = B     PACKAGE = B::NV         PREFIX = Sv
 
 NV
@@ -1380,12 +1415,16 @@ U32
 PARENT_FAKELEX_FLAGS(sv)
        B::NV   sv
 
+#if PERL_VERSION < 11
+
 MODULE = B     PACKAGE = B::RV         PREFIX = Sv
 
 B::SV
 SvRV(sv)
        B::RV   sv
 
+#endif
+
 MODULE = B     PACKAGE = B::PV         PREFIX = Sv
 
 char*
@@ -1608,6 +1647,18 @@ is_empty(gv)
     OUTPUT:
         RETVAL
 
+bool
+isGV_with_GP(gv)
+       B::GV   gv
+    CODE:
+#if PERL_VERSION >= 9
+       RETVAL = isGV_with_GP(gv) ? TRUE : FALSE;
+#else
+       RETVAL = TRUE; /* In 5.8 and earlier they all are.  */
+#endif
+    OUTPUT:
+       RETVAL
+
 void*
 GvGP(gv)
        B::GV   gv
@@ -1716,10 +1767,14 @@ B::GV
 IoBOTTOM_GV(io)
        B::IO   io
 
+#if PERL_VERSION <= 8
+
 short
 IoSUBPROCESS(io)
        B::IO   io
 
+#endif
+
 bool
 IsSTD(io,name)
        B::IO   io