in reply to Re: Writing to Pointer Values (PV) in XS
in thread Writing to Pointer Values (PV) in XS

Moreover when you do:

/* Something Perl shouldn't free */ static char s[4] = "\x11\x11\x11\x11"; SV* fetch() { SV* sv = newSV_type(SVt_PV); SvPV_set(sv, s); SvPOK_on(sv); SvLEN_set(sv, 0); SvCUR_set(sv, 4); return newRV_noinc(sv); }

The Devel::Peek::Dump shows:

SV = IV(0x8add89c) at 0x8add8a0 REFCNT = 1 FLAGS = (PADMY,ROK) RV = 0x8abf520 SV = PV(0x8abc700) at 0x8abf520 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0xb7d0e06c "\21\21\21\21" CUR = 4 LEN = 0

However for my set of

SV * sv = newSV_type(SVt_PV); SvPV_set(sv, surface->pixels); SvPOK_on(sv); SvLEN_set(sv, 0); SvCUR_set(sv, surface->format->BytesPerPixel * surface->w * +surface->h); RETVAL = newRV_noinc(sv);

The surface Devel::Peek::Dump has different types:

SV = RV(0x142b330) at 0x142b324 REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x3e90fc SV = PV(0x1287a9c) at 0x3e90fc REFCNT = 1 FLAGS = (POK,pPOK) PV = 0xcea408 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" CUR = 16 LEN = 0

Why is the type a RV and not IV?

Replies are listed 'Best First'.
Re^3: Writing to Pointer Values (PV) in XS
by ikegami (Patriarch) on Jun 27, 2010 at 07:27 UTC

    What's important is that it's ROK, and it is. The RV type doesn't even exist anymore because it got merged with IV type, so don't worry about it.