The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

__UNDEFINED__

/* concatenating with "" ensures that only literal strings are accepted as argument * note that STR_WITH_LEN() can't be used as argument to macros or functions that * under some configurations might be macros */

__UNDEFINED__ STR_WITH_LEN(s) (s ""), (sizeof(s)-1)

__UNDEFINED__ newSVpvs(str) newSVpvn(str "", sizeof(str) - 1) __UNDEFINED__ newSVpvs_flags(str, flags) newSVpvn_flags(str "", sizeof(str) - 1, flags) __UNDEFINED__ newSVpvs_share(str) newSVpvn_share(str "", sizeof(str) - 1, 0) __UNDEFINED__ sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1) __UNDEFINED__ sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1) __UNDEFINED__ hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval) __UNDEFINED__ hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0)

__UNDEFINED__ gv_fetchpvs(name, flags, svt) gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt) __UNDEFINED__ gv_stashpvs(name, flags) gv_stashpvn(name "", sizeof(name) - 1, flags)

__UNDEFINED__ get_cvs(name, flags) get_cvn_flags(name "", sizeof(name)-1, flags)

#define NEED_newSVpvn_share

void newSVpvs() PPCODE: mXPUSHs(newSVpvs("newSVpvs")); XSRETURN(1);

void newSVpvs_flags() PPCODE: XPUSHs(newSVpvs_flags("newSVpvs_flags", SVs_TEMP)); XSRETURN(1);

int newSVpvs_share() PREINIT: SV *sv; U32 hash; CODE: RETVAL = 0; PERL_HASH(hash, "pvs", 3); sv = newSVpvs_share("pvs"); RETVAL += strEQ(SvPV_nolen_const(sv), "pvs"); RETVAL += SvCUR(sv) == 3; RETVAL += SvSHARED_HASH(sv) == hash; SvREFCNT_dec(sv); OUTPUT: RETVAL

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: (void) hv_stores((HV *) SvRV(hv), "hv_stores", SvREFCNT_inc_simple(sv));

SV* gv_fetchpvs() CODE: RETVAL = newRV_inc((SV*)gv_fetchpvs("Devel::PPPort::VERSION", 0, SVt_PV)); OUTPUT: RETVAL

SV* gv_stashpvs() CODE: RETVAL = newRV_inc((SV*)gv_stashpvs("Devel::PPPort", 0)); OUTPUT: RETVAL

int get_cvs() PREINIT: CV* xv; CODE: RETVAL = 0; xv = get_cvs("Devel::PPPort::foobar", 0); if(xv == NULL) RETVAL++; xv = get_cvs("Devel::PPPort::foobar", GV_ADDMULTI); if(xv && SvTYPE(xv) == SVt_PVCV) RETVAL++; xv = get_cvs("Devel::PPPort::get_cvs", 0); if(xv && SvTYPE(xv) == SVt_PVCV) RETVAL++; OUTPUT: RETVAL

my $x = 'foo';

ok(Devel::PPPort::newSVpvs(), "newSVpvs"); ok(Devel::PPPort::newSVpvs_flags(), "newSVpvs_flags"); ok(Devel::PPPort::newSVpvs_share(), 3);

Devel::PPPort::sv_catpvs($x); ok($x, "foosv_catpvs");

Devel::PPPort::sv_setpvs($x); ok($x, "sv_setpvs");

my %h = ('hv_fetchs' => 42); Devel::PPPort::hv_stores(\%h, 4711); ok(scalar keys %h, 2); ok(exists $h{'hv_stores'}); ok($h{'hv_stores'}, 4711); ok(Devel::PPPort::hv_fetchs(\%h), 42); ok(Devel::PPPort::gv_fetchpvs(), \*Devel::PPPort::VERSION); ok(Devel::PPPort::gv_stashpvs(), \%Devel::PPPort::);

ok(Devel::PPPort::get_cvs(), 3);

5 POD Errors

The following errors were encountered while parsing the POD:

Around line 12:

Unknown directive: =provides

Around line 16:

Unknown directive: =implementation

Around line 38:

Unknown directive: =xsinit

Around line 42:

Unknown directive: =xsubs

Around line 131:

Unknown directive: =tests