1 /*******************************************************************************
3 * !!!!! Do NOT edit this file directly! -- Edit PPPort_xs.PL instead. !!!!!
5 ********************************************************************************
7 * Perl/Pollution/Portability
9 ********************************************************************************
13 * $Date: 2006/01/14 18:07:55 +0100 $
15 ********************************************************************************
17 * Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz.
18 * Version 2.x, Copyright (C) 2001, Paul Marquess.
19 * Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
21 * This program is free software; you can redistribute it and/or
22 * modify it under the same terms as Perl itself.
24 *******************************************************************************/
26 /* ========== BEGIN XSHEAD ================================================== */
30 /* =========== END XSHEAD =================================================== */
36 /* ========== BEGIN XSINIT ================================================== */
38 /* ---- from parts/inc/call ---- */
41 /* ---- from parts/inc/grok ---- */
42 #define NEED_grok_number
43 #define NEED_grok_numeric_radix
48 /* ---- from parts/inc/newCONSTSUB ---- */
49 #define NEED_newCONSTSUB
51 /* ---- from parts/inc/newRV ---- */
52 #define NEED_newRV_noinc
54 /* ---- from parts/inc/sv_xpvf ---- */
55 #define NEED_vnewSVpvf
56 #define NEED_sv_catpvf_mg
57 #define NEED_sv_catpvf_mg_nocontext
58 #define NEED_sv_setpvf_mg
59 #define NEED_sv_setpvf_mg_nocontext
61 /* ---- from parts/inc/SvPV ---- */
62 #define NEED_sv_2pv_nolen
63 #define NEED_sv_2pvbyte
65 /* ---- from parts/inc/variables ---- */
66 #define NEED_PL_signals
68 /* =========== END XSINIT =================================================== */
72 /* ========== BEGIN XSMISC ================================================== */
74 /* ---- from parts/inc/exception ---- */
75 /* defined in module3.c */
76 int exception(int throw_e);
78 /* ---- from parts/inc/misc ---- */
79 XS(XS_Devel__PPPort_dXSTARG); /* prototype */
80 XS(XS_Devel__PPPort_dXSTARG)
91 XS(XS_Devel__PPPort_dAXMARK); /* prototype */
92 XS(XS_Devel__PPPort_dAXMARK)
100 PUSHs(sv_2mortal(newSViv(iv)));
104 /* ---- from parts/inc/MY_CXT ---- */
105 #define MY_CXT_KEY "Devel::PPPort::_guts" XS_VERSION
108 /* Put Global Data in here */
114 /* ---- from parts/inc/newCONSTSUB ---- */
115 void call_newCONSTSUB_1(void)
117 #ifdef PERL_NO_GET_CONTEXT
120 newCONSTSUB(gv_stashpv("Devel::PPPort", FALSE), "test_value_1", newSViv(1));
123 extern void call_newCONSTSUB_2(void);
124 extern void call_newCONSTSUB_3(void);
126 /* ---- from parts/inc/sv_xpvf ---- */
127 static SV * test_vnewSVpvf(pTHX_ const char *pat, ...)
132 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
133 sv = vnewSVpvf(pat, &args);
135 sv = newSVpv(pat, 0);
141 static void test_sv_vcatpvf(pTHX_ SV *sv, const char *pat, ...)
145 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
146 sv_vcatpvf(sv, pat, &args);
153 static void test_sv_vsetpvf(pTHX_ SV *sv, const char *pat, ...)
157 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
158 sv_vsetpvf(sv, pat, &args);
165 /* ---- from parts/inc/variables ---- */
166 U32 get_PL_signals_1(void)
171 extern U32 get_PL_signals_2(void);
172 extern U32 get_PL_signals_3(void);
174 /* =========== END XSMISC =================================================== */
176 MODULE = Devel::PPPort PACKAGE = Devel::PPPort
179 /* ---- from parts/inc/misc ---- */
180 newXS("Devel::PPPort::dXSTARG", XS_Devel__PPPort_dXSTARG, file);
181 newXS("Devel::PPPort::dAXMARK", XS_Devel__PPPort_dAXMARK, file);
183 /* ---- from parts/inc/MY_CXT ---- */
186 /* If any of the fields in the my_cxt_t struct need
187 * to be initialised, do it here.
193 ##----------------------------------------------------------------------
194 ## XSUBs from parts/inc/call
195 ##----------------------------------------------------------------------
226 i = eval_sv(sv, flags);
229 PUSHs(sv_2mortal(newSViv(i)));
232 eval_pv(p, croak_on_error)
238 PUSHs(eval_pv(p, croak_on_error));
241 call_sv(sv, flags, ...)
247 for (i=0; i<items-2; i++)
248 ST(i) = ST(i+2); /* pop first two args */
252 i = call_sv(sv, flags);
255 PUSHs(sv_2mortal(newSViv(i)));
258 call_pv(subname, flags, ...)
264 for (i=0; i<items-2; i++)
265 ST(i) = ST(i+2); /* pop first two args */
269 i = call_pv(subname, flags);
272 PUSHs(sv_2mortal(newSViv(i)));
275 call_argv(subname, flags, ...)
282 if (items > 8) /* play safe */
284 for (i=2; i<items; i++)
285 args[i-2] = SvPV_nolen(ST(i));
286 args[items-2] = NULL;
288 i = call_argv(subname, flags, args);
291 PUSHs(sv_2mortal(newSViv(i)));
294 call_method(methname, flags, ...)
300 for (i=0; i<items-2; i++)
301 ST(i) = ST(i+2); /* pop first two args */
305 i = call_method(methname, flags);
308 PUSHs(sv_2mortal(newSViv(i)));
310 ##----------------------------------------------------------------------
311 ## XSUBs from parts/inc/cop
312 ##----------------------------------------------------------------------
317 RETVAL = CopSTASHPV(PL_curcop);
324 RETVAL = CopFILE(PL_curcop);
328 ##----------------------------------------------------------------------
329 ## XSUBs from parts/inc/exception
330 ##----------------------------------------------------------------------
338 ##----------------------------------------------------------------------
339 ## XSUBs from parts/inc/grok
340 ##----------------------------------------------------------------------
349 pv = SvPV(string, len);
350 if (!grok_number(pv, len, &RETVAL))
363 pv = SvPV(string, len);
364 RETVAL = grok_bin(pv, &len, &flags, NULL);
376 pv = SvPV(string, len);
377 RETVAL = grok_hex(pv, &len, &flags, NULL);
389 pv = SvPV(string, len);
390 RETVAL = grok_oct(pv, &len, &flags, NULL);
395 Perl_grok_number(string)
401 pv = SvPV(string, len);
402 if (!Perl_grok_number(aTHX_ pv, len, &RETVAL))
408 Perl_grok_bin(string)
415 pv = SvPV(string, len);
416 RETVAL = Perl_grok_bin(aTHX_ pv, &len, &flags, NULL);
421 Perl_grok_hex(string)
428 pv = SvPV(string, len);
429 RETVAL = Perl_grok_hex(aTHX_ pv, &len, &flags, NULL);
434 Perl_grok_oct(string)
441 pv = SvPV(string, len);
442 RETVAL = Perl_grok_oct(aTHX_ pv, &len, &flags, NULL);
446 ##----------------------------------------------------------------------
447 ## XSUBs from parts/inc/limits
448 ##----------------------------------------------------------------------
453 RETVAL = IVSIZE == sizeof(IV);
460 RETVAL = UVSIZE == sizeof(UV);
467 RETVAL = sizeof(IVTYPE) == sizeof(IV);
474 RETVAL = sizeof(UVTYPE) == sizeof(UV);
478 ##----------------------------------------------------------------------
479 ## XSUBs from parts/inc/magic
480 ##----------------------------------------------------------------------
483 sv_catpv_mg(sv, string)
487 sv_catpv_mg(sv, string);
490 sv_catpvn_mg(sv, sv2)
497 str = SvPV(sv2, len);
498 sv_catpvn_mg(sv, str, len);
505 sv_catsv_mg(sv, sv2);
529 sv_setpvn_mg(sv, sv2)
536 str = SvPV(sv2, len);
537 sv_setpvn_mg(sv, str, len);
544 sv_setsv_mg(sv, sv2);
554 sv_usepvn_mg(sv, sv2)
561 str = SvPV(sv2, len);
562 New(42, copy, len+1, char);
563 Copy(str, copy, len+1, char);
564 sv_usepvn_mg(sv, copy, len);
566 ##----------------------------------------------------------------------
567 ## XSUBs from parts/inc/memory
568 ##----------------------------------------------------------------------
578 CopyD("Hello", p, 6, char);
579 if (memEQ(p, "Hello", 6))
582 if (memEQ(p, "\0\0\0\0\0\0", 6))
585 if (memNE(p, "\0\0\0\0\0\0", 6))
590 if (memEQ(p, "\0\0\0\0\0\0", 6))
594 Newxc(p, 3, short, char);
600 ##----------------------------------------------------------------------
601 ## XSUBs from parts/inc/misc
602 ##----------------------------------------------------------------------
605 gv_stashpvn(name, create)
609 RETVAL = gv_stashpvn(name, strlen(name), create) != NULL;
618 RETVAL = get_sv(name, create) != NULL;
627 RETVAL = get_av(name, create) != NULL;
636 RETVAL = get_hv(name, create) != NULL;
645 RETVAL = get_cv(name, create) != NULL;
652 XPUSHs(newSVpvn("test", 4));
653 XPUSHs(newSVpvn("test", 2));
654 XPUSHs(newSVpvn("test", 0));
655 XPUSHs(newSVpvn(NULL, 2));
656 XPUSHs(newSVpvn(NULL, 0));
663 XPUSHs(newSVpvn("test1", 5));
665 XPUSHs(newSVpvn("test2", 5));
674 RETVAL = newSVsv(&PL_sv_undef);
681 RETVAL = newSVsv(&PL_sv_yes);
688 RETVAL = newSVsv(&PL_sv_no);
696 PL_na = strlen(string);
705 RETVAL = newSVsv(boolSV(value));
712 RETVAL = newSVsv(DEFSV);
719 RETVAL = SvTRUE(ERRSV);
728 RETVAL = newSVsv(UNDERBAR);
743 ##----------------------------------------------------------------------
744 ## XSUBs from parts/inc/mPUSH
745 ##----------------------------------------------------------------------
815 ##----------------------------------------------------------------------
816 ## XSUBs from parts/inc/MY_CXT
817 ##----------------------------------------------------------------------
823 RETVAL = MY_CXT.dummy == 42;
832 RETVAL = MY_CXT.dummy == 43;
844 ##----------------------------------------------------------------------
845 ## XSUBs from parts/inc/newCONSTSUB
846 ##----------------------------------------------------------------------
857 ##----------------------------------------------------------------------
858 ## XSUBs from parts/inc/newRV
859 ##----------------------------------------------------------------------
869 RETVAL = SvREFCNT(sv);
880 rv = newRV_noinc(sv);
881 RETVAL = SvREFCNT(sv);
886 ##----------------------------------------------------------------------
887 ## XSUBs from parts/inc/Sv_set
888 ##----------------------------------------------------------------------
891 TestSvUV_set(sv, val)
896 RETVAL = SvUVX(sv) == val ? 42 : -1;
904 RETVAL = strEQ(SvPVX_const(sv), "mhx") ? 43 : -1;
909 TestSvPVX_mutable(sv)
912 RETVAL = strEQ(SvPVX_mutable(sv), "mhx") ? 44 : -1;
916 ##----------------------------------------------------------------------
917 ## XSUBs from parts/inc/sv_xpvf
918 ##----------------------------------------------------------------------
923 RETVAL = test_vnewSVpvf(aTHX_ "%s-%d", "Perl", 42);
931 RETVAL = newSVsv(sv);
932 test_sv_vcatpvf(aTHX_ RETVAL, "%s-%d", "Perl", 42);
940 RETVAL = newSVsv(sv);
941 test_sv_vsetpvf(aTHX_ RETVAL, "%s-%d", "Perl", 42);
949 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
950 sv_catpvf_mg(sv, "%s-%d", "Perl", 42);
954 Perl_sv_catpvf_mg(sv)
957 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
958 Perl_sv_catpvf_mg(aTHX_ sv, "%s-%d", "-Perl", 43);
962 sv_catpvf_mg_nocontext(sv)
965 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
966 #ifdef PERL_IMPLICIT_CONTEXT
967 sv_catpvf_mg_nocontext(sv, "%s-%d", "-Perl", 44);
969 sv_catpvf_mg(sv, "%s-%d", "-Perl", 44);
977 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
978 sv_setpvf_mg(sv, "%s-%d", "mhx", 42);
982 Perl_sv_setpvf_mg(sv)
985 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
986 Perl_sv_setpvf_mg(aTHX_ sv, "%s-%d", "foo", 43);
990 sv_setpvf_mg_nocontext(sv)
993 #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0)))
994 #ifdef PERL_IMPLICIT_CONTEXT
995 sv_setpvf_mg_nocontext(sv, "%s-%d", "bar", 44);
997 sv_setpvf_mg(sv, "%s-%d", "bar", 44);
1001 ##----------------------------------------------------------------------
1002 ## XSUBs from parts/inc/SvPV
1003 ##----------------------------------------------------------------------
1012 str = SvPVbyte(sv, len);
1013 RETVAL = strEQ(str, "mhx") ? (IV) len : (IV) -1;
1023 str = SvPV_nolen(sv);
1024 RETVAL = strEQ(str, "mhx") ? 42 : 0;
1028 ##----------------------------------------------------------------------
1029 ## XSUBs from parts/inc/threads
1030 ##----------------------------------------------------------------------
1036 RETVAL = 1 + sv_2iv(sv);
1044 Perl_croak(aTHX_ "%s", error);
1046 ##----------------------------------------------------------------------
1047 ## XSUBs from parts/inc/uv
1048 ##----------------------------------------------------------------------
1054 RETVAL = newSViv(1);
1055 sv_setuv(RETVAL, uv);
1063 RETVAL = newSVuv(uv);
1071 RETVAL = sv_2uv(sv);
1080 RETVAL = SvUVx(++sv);
1094 TARG = sv_newmortal();
1104 TARG = sv_newmortal();
1108 ##----------------------------------------------------------------------
1109 ## XSUBs from parts/inc/variables
1110 ##----------------------------------------------------------------------
1113 compare_PL_signals()
1116 U32 ref = get_PL_signals_1();
1117 RETVAL = ref == get_PL_signals_2() && ref == get_PL_signals_3();