Blame parts/inc/shared_pv

Packit 7d6a7d
################################################################################
Packit 7d6a7d
##
Packit 7d6a7d
##  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
Packit 7d6a7d
##  Version 2.x, Copyright (C) 2001, Paul Marquess.
Packit 7d6a7d
##  Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
Packit 7d6a7d
##
Packit 7d6a7d
##  This program is free software; you can redistribute it and/or
Packit 7d6a7d
##  modify it under the same terms as Perl itself.
Packit 7d6a7d
##
Packit 7d6a7d
################################################################################
Packit 7d6a7d
Packit 7d6a7d
=provides
Packit 7d6a7d
Packit 7d6a7d
newSVpvn_share
Packit 7d6a7d
__UNDEFINED__
Packit 7d6a7d
Packit 7d6a7d
=implementation
Packit 7d6a7d
Packit 7d6a7d
/* Hint: newSVpvn_share
Packit 7d6a7d
 * The SVs created by this function only mimic the behaviour of
Packit 7d6a7d
 * shared PVs without really being shared. Only use if you know
Packit 7d6a7d
 * what you're doing.
Packit 7d6a7d
 */
Packit 7d6a7d
Packit 7d6a7d
#ifndef newSVpvn_share
Packit 7d6a7d
Packit 7d6a7d
#if { NEED newSVpvn_share }
Packit 7d6a7d
Packit 7d6a7d
SV *
Packit 7d6a7d
newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
Packit 7d6a7d
{
Packit 7d6a7d
  SV *sv;
Packit 7d6a7d
  if (len < 0)
Packit 7d6a7d
    len = -len;
Packit 7d6a7d
  if (!hash)
Packit 7d6a7d
    PERL_HASH(hash, (char*) src, len);
Packit 7d6a7d
  sv = newSVpvn((char *) src, len);
Packit 7d6a7d
  sv_upgrade(sv, SVt_PVIV);
Packit 7d6a7d
  SvIVX(sv) = hash;
Packit 7d6a7d
  SvREADONLY_on(sv);
Packit 7d6a7d
  SvPOK_on(sv);
Packit 7d6a7d
  return sv;
Packit 7d6a7d
}
Packit 7d6a7d
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
__UNDEFINED__ SvSHARED_HASH(sv) (0 + SvUVX(sv))
Packit 7d6a7d
Packit 7d6a7d
=xsinit
Packit 7d6a7d
Packit 7d6a7d
#define NEED_newSVpvn_share
Packit 7d6a7d
Packit 7d6a7d
=xsubs
Packit 7d6a7d
Packit 7d6a7d
int
Packit 7d6a7d
newSVpvn_share()
Packit 7d6a7d
        PREINIT:
Packit 7d6a7d
                const char *s;
Packit 7d6a7d
                SV *sv;
Packit 7d6a7d
                STRLEN len;
Packit 7d6a7d
                U32 hash;
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                RETVAL = 0;
Packit 7d6a7d
                s = "mhx";
Packit 7d6a7d
                len = 3;
Packit 7d6a7d
                PERL_HASH(hash, (char *) s, len);
Packit 7d6a7d
                sv = newSVpvn_share(s, len, 0);
Packit 7d6a7d
                s = 0;
Packit 7d6a7d
                RETVAL += strEQ(SvPV_nolen_const(sv), "mhx");
Packit 7d6a7d
                RETVAL += SvCUR(sv) == len;
Packit 7d6a7d
                RETVAL += SvSHARED_HASH(sv) == hash;
Packit 7d6a7d
                SvREFCNT_dec(sv);
Packit 7d6a7d
                s = "foobar";
Packit 7d6a7d
                len = 6;
Packit 7d6a7d
                PERL_HASH(hash, (char *) s, len);
Packit 7d6a7d
                sv = newSVpvn_share(s, -(I32) len, hash);
Packit 7d6a7d
                s = 0;
Packit 7d6a7d
                RETVAL += strEQ(SvPV_nolen_const(sv), "foobar");
Packit 7d6a7d
                RETVAL += SvCUR(sv) == len;
Packit 7d6a7d
                RETVAL += SvSHARED_HASH(sv) == hash;
Packit 7d6a7d
                SvREFCNT_dec(sv);
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
Packit 7d6a7d
=tests plan => 1
Packit 7d6a7d
Packit 7d6a7d
ok(&Devel::PPPort::newSVpvn_share(), 6);