/******************************************************************************* * * !!!!! Do NOT edit this file directly! -- Edit PPPort_xs.PL instead. !!!!! * ******************************************************************************** * * Perl/Pollution/Portability * ******************************************************************************** * * $Revision: 8 $ * $Author: mhx $ * $Date: 2005/01/31 08:10:55 +0100 $ * ******************************************************************************** * * Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. * Version 2.x, Copyright (C) 2001, Paul Marquess. * Version 1.x, Copyright (C) 1999, Kenneth Albanowski. * * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. * *******************************************************************************/ /* ========== BEGIN XSHEAD ================================================== */ /* =========== END XSHEAD =================================================== */ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" /* ========== BEGIN XSINIT ================================================== */ /* ---- from parts/inc/call ---- */ #define NEED_eval_pv /* ---- from parts/inc/grok ---- */ #define NEED_grok_number #define NEED_grok_numeric_radix #define NEED_grok_bin #define NEED_grok_hex #define NEED_grok_oct /* ---- from parts/inc/newCONSTSUB ---- */ #define NEED_newCONSTSUB /* ---- from parts/inc/newRV ---- */ #define NEED_newRV_noinc /* ---- from parts/inc/sv_xpvf ---- */ #define NEED_vnewSVpvf #define NEED_sv_catpvf_mg #define NEED_sv_catpvf_mg_nocontext #define NEED_sv_setpvf_mg #define NEED_sv_setpvf_mg_nocontext /* ---- from parts/inc/SvPV ---- */ #define NEED_sv_2pv_nolen #define NEED_sv_2pvbyte /* =========== END XSINIT =================================================== */ #include "ppport.h" /* ========== BEGIN XSMISC ================================================== */ /* ---- from parts/inc/exception ---- */ static void throws_exception(int throw_e) { if (throw_e) croak("boo\n"); } static int exception(int throw_e) { dTHR; dXCPT; SV *caught = get_sv("Devel::PPPort::exception_caught", 0); XCPT_TRY_START { throws_exception(throw_e); } XCPT_TRY_END XCPT_CATCH { sv_setiv(caught, 1); XCPT_RETHROW; } sv_setiv(caught, 0); return 42; } /* ---- 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); } /* ---- from parts/inc/MY_CXT ---- */ #define MY_CXT_KEY "Devel::PPPort::_guts" XS_VERSION typedef struct { /* Put Global Data in here */ int dummy; } my_cxt_t; START_MY_CXT /* ---- from parts/inc/newCONSTSUB ---- */ void call_newCONSTSUB_1(void) { #ifdef PERL_NO_GET_CONTEXT dTHX; #endif newCONSTSUB(gv_stashpv("Devel::PPPort", FALSE), "test_value_1", newSViv(1)); } extern void call_newCONSTSUB_2(void); extern void call_newCONSTSUB_3(void); /* ---- from parts/inc/sv_xpvf ---- */ static SV * test_vnewSVpvf(pTHX_ const char *pat, ...) { SV *sv; va_list args; va_start(args, pat); #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) sv = vnewSVpvf(pat, &args); #else sv = newSVpv(pat, 0); #endif va_end(args); return sv; } static void test_sv_vcatpvf(pTHX_ SV *sv, const char *pat, ...) { va_list args; va_start(args, pat); #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) sv_vcatpvf(sv, pat, &args); #else sv_catpv(sv, pat); #endif va_end(args); } static void test_sv_vsetpvf(pTHX_ SV *sv, const char *pat, ...) { va_list args; va_start(args, pat); #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) sv_vsetpvf(sv, pat, &args); #else sv_setpv(sv, pat); #endif va_end(args); } /* =========== END XSMISC =================================================== */ MODULE = Devel::PPPort PACKAGE = Devel::PPPort BOOT: /* ---- from parts/inc/misc ---- */ newXS("Devel::PPPort::dXSTARG", XS_Devel__PPPort_dXSTARG, file); /* ---- from parts/inc/MY_CXT ---- */ { MY_CXT_INIT; /* If any of the fields in the my_cxt_t struct need * to be initialised, do it here. */ MY_CXT.dummy = 42; } ##---------------------------------------------------------------------- ## XSUBs from parts/inc/call ##---------------------------------------------------------------------- I32 G_SCALAR() CODE: RETVAL = G_SCALAR; OUTPUT: RETVAL I32 G_ARRAY() CODE: RETVAL = G_ARRAY; OUTPUT: RETVAL I32 G_DISCARD() CODE: RETVAL = G_DISCARD; OUTPUT: RETVAL void eval_sv(sv, flags) SV* sv I32 flags PREINIT: I32 i; PPCODE: PUTBACK; i = eval_sv(sv, flags); SPAGAIN; EXTEND(SP, 1); PUSHs(sv_2mortal(newSViv(i))); void eval_pv(p, croak_on_error) char* p I32 croak_on_error PPCODE: PUTBACK; EXTEND(SP, 1); PUSHs(eval_pv(p, croak_on_error)); void call_sv(sv, flags, ...) SV* sv I32 flags PREINIT: I32 i; PPCODE: for (i=0; i 8) /* play safe */ XSRETURN_UNDEF; for (i=2; i 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) sv_catpvf_mg(sv, "%s-%d", "Perl", 42); #endif void Perl_sv_catpvf_mg(sv) SV *sv CODE: #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) Perl_sv_catpvf_mg(aTHX_ sv, "%s-%d", "-Perl", 43); #endif void sv_catpvf_mg_nocontext(sv) SV *sv CODE: #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) #ifdef PERL_IMPLICIT_CONTEXT sv_catpvf_mg_nocontext(sv, "%s-%d", "-Perl", 44); #else sv_catpvf_mg(sv, "%s-%d", "-Perl", 44); #endif #endif void sv_setpvf_mg(sv) SV *sv CODE: #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) sv_setpvf_mg(sv, "%s-%d", "mhx", 42); #endif void Perl_sv_setpvf_mg(sv) SV *sv CODE: #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) Perl_sv_setpvf_mg(aTHX_ sv, "%s-%d", "foo", 43); #endif void sv_setpvf_mg_nocontext(sv) SV *sv CODE: #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) #ifdef PERL_IMPLICIT_CONTEXT sv_setpvf_mg_nocontext(sv, "%s-%d", "bar", 44); #else sv_setpvf_mg(sv, "%s-%d", "bar", 44); #endif #endif ##---------------------------------------------------------------------- ## XSUBs from parts/inc/SvPV ##---------------------------------------------------------------------- IV SvPVbyte(sv) SV *sv PREINIT: STRLEN len; const char *str; CODE: str = SvPVbyte(sv, len); RETVAL = strEQ(str, "mhx") ? len : -1; OUTPUT: RETVAL IV SvPV_nolen(sv) SV *sv PREINIT: const char *str; CODE: str = SvPV_nolen(sv); RETVAL = strEQ(str, "mhx") ? 42 : 0; OUTPUT: RETVAL ##---------------------------------------------------------------------- ## XSUBs from parts/inc/threads ##---------------------------------------------------------------------- IV no_THX_arg(sv) SV *sv CODE: RETVAL = 1 + sv_2iv(sv); OUTPUT: RETVAL void with_THX_arg(error) char *error PPCODE: Perl_croak(aTHX_ "%s", error); ##---------------------------------------------------------------------- ## XSUBs from parts/inc/uv ##---------------------------------------------------------------------- SV * sv_setuv(uv) UV uv CODE: RETVAL = newSViv(1); sv_setuv(RETVAL, uv); OUTPUT: RETVAL SV * newSVuv(uv) UV uv CODE: RETVAL = newSVuv(uv); OUTPUT: RETVAL UV sv_2uv(sv) SV *sv CODE: RETVAL = sv_2uv(sv); OUTPUT: RETVAL UV SvUVx(sv) SV *sv CODE: sv--; RETVAL = SvUVx(++sv); OUTPUT: RETVAL void XSRETURN_UV() PPCODE: XSRETURN_UV(42); void PUSHu() PREINIT: dTARG; PPCODE: TARG = sv_newmortal(); EXTEND(SP, 1); PUSHu(42); XSRETURN(1); void XPUSHu() PREINIT: dTARG; PPCODE: TARG = sv_newmortal(); XPUSHu(43); XSRETURN(1);