Upgrade to Devel::PPPort 3.08_02
[p5sagit/p5-mst-13.2.git] / ext / Devel / PPPort / PPPort.xs
index 4cee9d0..4757b56 100644 (file)
@@ -8,13 +8,13 @@
 *
 ********************************************************************************
 *
-*  $Revision: 7 $
+*  $Revision: 9 $
 *  $Author: mhx $
-*  $Date: 2004/08/13 12:49:19 +0200 $
+*  $Date: 2006/01/14 18:07:55 +0100 $
 *
 ********************************************************************************
 *
-*  Version 3.x, Copyright (C) 2004, Marcus Holland-Moritz.
+*  Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz.
 *  Version 2.x, Copyright (C) 2001, Paul Marquess.
 *  Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
 *
@@ -51,6 +51,9 @@
 /* ---- from parts/inc/newRV ---- */
 #define NEED_newRV_noinc
 
+/* ---- from parts/inc/snprintf ---- */
+#define NEED_my_snprintf
+
 /* ---- from parts/inc/sv_xpvf ---- */
 #define NEED_vnewSVpvf
 #define NEED_sv_catpvf_mg
 #define NEED_sv_2pv_nolen
 #define NEED_sv_2pvbyte
 
+/* ---- from parts/inc/variables ---- */
+#define NEED_PL_signals
+
+/* ---- from parts/inc/warn ---- */
+#define NEED_warner
+
 /* =========== END XSINIT =================================================== */
 
 #include "ppport.h"
 
 /* ========== BEGIN XSMISC ================================================== */
 
+/* ---- from parts/inc/exception ---- */
+/* defined in module3.c */
+int exception(int throw_e);
+
+/* ---- from parts/inc/misc ---- */
+XS(XS_Devel__PPPort_dXSTARG);  /* prototype */
+XS(XS_Devel__PPPort_dXSTARG)
+{
+  dXSARGS;
+  dXSTARG;
+  IV iv;
+  SP -= items;
+  iv = SvIV(ST(0)) + 1;
+  PUSHi(iv);
+  XSRETURN(1);
+}
+
+XS(XS_Devel__PPPort_dAXMARK);  /* prototype */
+XS(XS_Devel__PPPort_dAXMARK)
+{
+  dSP;
+  dAXMARK;
+  dITEMS;
+  IV iv;
+  SP -= items;
+  iv = SvIV(ST(0)) - 1;
+  PUSHs(sv_2mortal(newSViv(iv)));
+  XSRETURN(1);
+}
+
 /* ---- from parts/inc/MY_CXT ---- */
 #define MY_CXT_KEY "Devel::PPPort::_guts" XS_VERSION
+
 typedef struct {
   /* Put Global Data in here */
-  int dummy;          
+  int dummy;
 } my_cxt_t;
-START_MY_CXT     
+
+START_MY_CXT
 
 /* ---- from parts/inc/newCONSTSUB ---- */
 void call_newCONSTSUB_1(void)
@@ -129,11 +168,24 @@ static void test_sv_vsetpvf(pTHX_ SV *sv, const char *pat, ...)
   va_end(args);
 }
 
+/* ---- from parts/inc/variables ---- */
+U32 get_PL_signals_1(void)
+{
+  return PL_signals;
+}
+
+extern U32 get_PL_signals_2(void);
+extern U32 get_PL_signals_3(void);
+
 /* =========== END XSMISC =================================================== */
 
 MODULE = Devel::PPPort         PACKAGE = Devel::PPPort
 
 BOOT:
+       /* ---- from parts/inc/misc ---- */
+       newXS("Devel::PPPort::dXSTARG", XS_Devel__PPPort_dXSTARG, file);
+       newXS("Devel::PPPort::dAXMARK", XS_Devel__PPPort_dAXMARK, file);
+       
        /* ---- from parts/inc/MY_CXT ---- */
        {
          MY_CXT_INIT;
@@ -280,6 +332,16 @@ CopFILE()
                RETVAL
 
 ##----------------------------------------------------------------------
+##  XSUBs from parts/inc/exception
+##----------------------------------------------------------------------
+
+int
+exception(throw_e)
+  int throw_e
+  OUTPUT:
+    RETVAL
+
+##----------------------------------------------------------------------
 ##  XSUBs from parts/inc/grok
 ##----------------------------------------------------------------------
 
@@ -507,6 +569,48 @@ sv_usepvn_mg(sv, sv2)
                Copy(str, copy, len+1, char);
                sv_usepvn_mg(sv, copy, len);
 
+int
+SvVSTRING_mg(sv)
+       SV *sv;
+       CODE:
+               RETVAL = SvVSTRING_mg(sv) != NULL;
+       OUTPUT:
+               RETVAL
+
+##----------------------------------------------------------------------
+##  XSUBs from parts/inc/memory
+##----------------------------------------------------------------------
+
+int
+checkmem()
+  PREINIT:
+    char *p;
+
+  CODE:
+    RETVAL = 0;
+    Newx(p, 6, char);
+    CopyD("Hello", p, 6, char);
+    if (memEQ(p, "Hello", 6))
+      RETVAL++;
+    ZeroD(p, 6, char);
+    if (memEQ(p, "\0\0\0\0\0\0", 6))
+      RETVAL++;
+    Poison(p, 6, char);
+    if (memNE(p, "\0\0\0\0\0\0", 6))
+      RETVAL++;
+    Safefree(p);
+
+    Newxz(p, 6, char);
+    if (memEQ(p, "\0\0\0\0\0\0", 6))
+      RETVAL++;
+    Safefree(p);
+
+    Newxc(p, 3, short, char);
+    Safefree(p);
+
+  OUTPUT:
+    RETVAL
+
 ##----------------------------------------------------------------------
 ##  XSUBs from parts/inc/misc
 ##----------------------------------------------------------------------
@@ -566,6 +670,18 @@ newSVpvn()
                XPUSHs(newSVpvn(NULL, 0));
                XSRETURN(5);
 
+void
+xsreturn(two)
+       int two
+       PPCODE:
+               XPUSHs(newSVpvn("test1", 5));
+               if (two)
+                 XPUSHs(newSVpvn("test2", 5));
+               if (two)
+                 XSRETURN(2);
+               else
+                 XSRETURN(1);
+
 SV *
 PL_sv_undef()
        CODE:
@@ -628,6 +744,30 @@ UNDERBAR()
        OUTPUT:
                RETVAL
 
+void
+prepush()
+       CODE:
+               {
+                 dXSTARG;
+                 XSprePUSH;
+                 PUSHi(42);
+                 XSRETURN(1);
+               }
+
+int
+PERL_ABS(a)
+       int a
+
+void
+SVf(x)
+       SV *x
+       PPCODE:
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
+               x = newSVpvf("[%"SVf"]", x);
+#endif
+               XPUSHs(x);
+               XSRETURN(1);
+
 ##----------------------------------------------------------------------
 ##  XSUBs from parts/inc/mPUSH
 ##----------------------------------------------------------------------
@@ -721,6 +861,14 @@ MY_CXT_2()
        OUTPUT:
                RETVAL
 
+int
+MY_CXT_CLONE()
+       CODE:
+               MY_CXT_CLONE;
+               RETVAL = 42;
+       OUTPUT:
+               RETVAL
+
 ##----------------------------------------------------------------------
 ##  XSUBs from parts/inc/newCONSTSUB
 ##----------------------------------------------------------------------
@@ -764,6 +912,99 @@ newRV_noinc_REFCNT()
                RETVAL
 
 ##----------------------------------------------------------------------
+##  XSUBs from parts/inc/pvs
+##----------------------------------------------------------------------
+
+void
+newSVpvs()
+       PPCODE:
+               XPUSHs(newSVpvs("newSVpvs"));
+               XSRETURN(1);
+
+void
+sv_catpvs(sv)
+       SV *sv
+       PPCODE:
+               sv_catpvs(sv, "sv_catpvs");
+
+void
+sv_setpvs(sv)
+       SV *sv
+       PPCODE:
+               sv_setpvs(sv, "sv_setpvs");
+
+void
+hv_fetchs(hv)
+       SV *hv
+       PREINIT:
+               SV **s;
+       PPCODE:
+               s = hv_fetchs((HV *) SvRV(hv), "hv_fetchs", 0);
+               XPUSHs(sv_mortalcopy(*s));
+               XSRETURN(1);
+
+void
+hv_stores(hv, sv)
+       SV *hv
+       SV *sv
+       PPCODE:
+               hv_stores((HV *) SvRV(hv), "hv_stores", SvREFCNT_inc(sv));
+
+##----------------------------------------------------------------------
+##  XSUBs from parts/inc/snprintf
+##----------------------------------------------------------------------
+
+void
+my_snprintf()
+       PREINIT:
+               char buf[128];
+               int len;
+       PPCODE:
+               len = my_snprintf(buf, sizeof buf, "foo%s%d", "bar", 42);
+               XPUSHs(newSViv(len));
+               XPUSHs(newSVpv(buf, 0));
+               XSRETURN(2);
+
+##----------------------------------------------------------------------
+##  XSUBs from parts/inc/Sv_set
+##----------------------------------------------------------------------
+
+IV
+TestSvUV_set(sv, val)
+       SV *sv
+       UV val
+       CODE:
+               SvUV_set(sv, val);
+               RETVAL = SvUVX(sv) == val ? 42 : -1;
+       OUTPUT:
+               RETVAL
+
+IV
+TestSvPVX_const(sv)
+        SV *sv
+        CODE:
+                RETVAL = strEQ(SvPVX_const(sv), "mhx") ? 43 : -1;
+        OUTPUT:
+                RETVAL
+
+IV
+TestSvPVX_mutable(sv)
+        SV *sv
+        CODE:
+                RETVAL = strEQ(SvPVX_mutable(sv), "mhx") ? 44 : -1;
+        OUTPUT:
+                RETVAL
+
+void
+TestSvSTASH_set(sv, name)
+        SV *sv
+       char *name
+        CODE:
+               sv = SvRV(sv);
+               SvREFCNT_dec(SvSTASH(sv));
+                SvSTASH_set(sv, (HV*) SvREFCNT_inc(gv_stashpv(name, 0)));
+
+##----------------------------------------------------------------------
 ##  XSUBs from parts/inc/sv_xpvf
 ##----------------------------------------------------------------------
 
@@ -860,7 +1101,7 @@ SvPVbyte(sv)
                const char *str;
        CODE:
                str = SvPVbyte(sv, len);
-               RETVAL = strEQ(str, "mhx") ? len : -1;
+               RETVAL = strEQ(str, "mhx") ? (IV) len : (IV) -1;
        OUTPUT:
                RETVAL
 
@@ -871,11 +1112,48 @@ SvPV_nolen(sv)
                const char *str;
        CODE:
                str = SvPV_nolen(sv);
-               RETVAL = strEQ(str, "mhx") ? 3 : 0;
+               RETVAL = strEQ(str, "mhx") ? 42 : 0;
        OUTPUT:
                RETVAL
 
 ##----------------------------------------------------------------------
+##  XSUBs from parts/inc/SvREFCNT
+##----------------------------------------------------------------------
+
+void
+SvREFCNT()
+       PREINIT:
+               SV *sv, *svr;
+       PPCODE:
+               sv = newSV(0);
+               XPUSHs(newSViv(SvREFCNT(sv) == 1));
+               svr = SvREFCNT_inc(sv);
+               XPUSHs(newSViv(sv == svr));
+               XPUSHs(newSViv(SvREFCNT(sv) == 2));
+               svr = SvREFCNT_inc_simple(sv);
+               XPUSHs(newSViv(sv == svr));
+               XPUSHs(newSViv(SvREFCNT(sv) == 3));
+               svr = SvREFCNT_inc_NN(sv);
+               XPUSHs(newSViv(sv == svr));
+               XPUSHs(newSViv(SvREFCNT(sv) == 4));
+               svr = SvREFCNT_inc_simple_NN(sv);
+               XPUSHs(newSViv(sv == svr));
+               XPUSHs(newSViv(SvREFCNT(sv) == 5));
+               SvREFCNT_inc_void(sv);
+               XPUSHs(newSViv(SvREFCNT(sv) == 6));
+               SvREFCNT_inc_simple_void(sv);
+               XPUSHs(newSViv(SvREFCNT(sv) == 7));
+               SvREFCNT_inc_void_NN(sv);
+               XPUSHs(newSViv(SvREFCNT(sv) == 8));
+               SvREFCNT_inc_simple_void_NN(sv);
+               XPUSHs(newSViv(SvREFCNT(sv) == 9));
+               while (SvREFCNT(sv) > 1)
+                 SvREFCNT_dec(sv);
+               XPUSHs(newSViv(SvREFCNT(sv) == 1));
+               SvREFCNT_dec(sv);
+               XSRETURN(14);
+
+##----------------------------------------------------------------------
 ##  XSUBs from parts/inc/threads
 ##----------------------------------------------------------------------
 
@@ -954,3 +1232,50 @@ XPUSHu()
                TARG = sv_newmortal();
                XPUSHu(43);
                XSRETURN(1);
+
+##----------------------------------------------------------------------
+##  XSUBs from parts/inc/variables
+##----------------------------------------------------------------------
+
+int
+compare_PL_signals()
+       CODE:
+               {
+                 U32 ref = get_PL_signals_1();
+                 RETVAL = ref == get_PL_signals_2() && ref == get_PL_signals_3();
+               }
+       OUTPUT:
+               RETVAL
+
+##----------------------------------------------------------------------
+##  XSUBs from parts/inc/warn
+##----------------------------------------------------------------------
+
+void
+warner()
+       CODE:
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
+               warner(packWARN(WARN_MISC), "warner %s:%d", "bar", 42);
+#endif
+
+void
+Perl_warner()
+       CODE:
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
+               Perl_warner(aTHX_ packWARN(WARN_MISC), "Perl_warner %s:%d", "bar", 42);
+#endif
+
+void
+Perl_warner_nocontext()
+       CODE:
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
+               Perl_warner_nocontext(packWARN(WARN_MISC), "Perl_warner_nocontext %s:%d", "bar", 42);
+#endif
+
+void
+ckWARN()
+       CODE:
+#if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
+               if (ckWARN(WARN_MISC))
+                 Perl_warner_nocontext(packWARN(WARN_MISC), "ckWARN %s:%d", "bar", 42);
+#endif