Blame parts/inc/newSVpv

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
__UNDEFINED__
Packit 7d6a7d
newSVpvn_flags
Packit 7d6a7d
Packit 7d6a7d
=implementation
Packit 7d6a7d
Packit 7d6a7d
#if { VERSION < 5.6.0 }
Packit 7d6a7d
# define D_PPP_CONSTPV_ARG(x)  ((char *) (x))
Packit 7d6a7d
#else
Packit 7d6a7d
# define D_PPP_CONSTPV_ARG(x)  (x)
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
__UNDEFINED__  newSVpvn(data,len)  ((data)                                              \
Packit 7d6a7d
                                    ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \
Packit 7d6a7d
                                    : newSV(0))
Packit 7d6a7d
Packit 7d6a7d
__UNDEFINED__  newSVpvn_utf8(s, len, u)  newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
Packit 7d6a7d
Packit 7d6a7d
__UNDEFINED__  SVf_UTF8  0
Packit 7d6a7d
Packit 7d6a7d
#ifndef newSVpvn_flags
Packit 7d6a7d
Packit 7d6a7d
#if { NEED newSVpvn_flags }
Packit 7d6a7d
Packit 7d6a7d
SV *
Packit 7d6a7d
newSVpvn_flags(pTHX_ const char *s, STRLEN len, U32 flags)
Packit 7d6a7d
{
Packit 7d6a7d
  SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len);
Packit 7d6a7d
  SvFLAGS(sv) |= (flags & SVf_UTF8);
Packit 7d6a7d
  return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv;
Packit 7d6a7d
}
Packit 7d6a7d
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
=xsinit
Packit 7d6a7d
Packit 7d6a7d
#define NEED_newSVpvn_flags
Packit 7d6a7d
Packit 7d6a7d
=xsubs
Packit 7d6a7d
Packit 7d6a7d
void
Packit 7d6a7d
newSVpvn()
Packit 7d6a7d
        PPCODE:
Packit 7d6a7d
                mXPUSHs(newSVpvn("test", 4));
Packit 7d6a7d
                mXPUSHs(newSVpvn("test", 2));
Packit 7d6a7d
                mXPUSHs(newSVpvn("test", 0));
Packit 7d6a7d
                mXPUSHs(newSVpvn(NULL, 2));
Packit 7d6a7d
                mXPUSHs(newSVpvn(NULL, 0));
Packit 7d6a7d
                XSRETURN(5);
Packit 7d6a7d
Packit 7d6a7d
void
Packit 7d6a7d
newSVpvn_flags()
Packit 7d6a7d
        PPCODE:
Packit 7d6a7d
                XPUSHs(newSVpvn_flags("test", 4, SVs_TEMP));
Packit 7d6a7d
                XPUSHs(newSVpvn_flags("test", 2, SVs_TEMP));
Packit 7d6a7d
                XPUSHs(newSVpvn_flags("test", 0, SVs_TEMP));
Packit 7d6a7d
                XPUSHs(newSVpvn_flags(NULL, 2, SVs_TEMP));
Packit 7d6a7d
                XPUSHs(newSVpvn_flags(NULL, 0, SVs_TEMP));
Packit 7d6a7d
                XSRETURN(5);
Packit 7d6a7d
Packit 7d6a7d
void
Packit 7d6a7d
newSVpvn_utf8()
Packit 7d6a7d
        PPCODE:
Packit 7d6a7d
                XPUSHs(newSVpvn_flags("test", 4, SVs_TEMP|SVf_UTF8));
Packit 7d6a7d
                XSRETURN(1);
Packit 7d6a7d
Packit 7d6a7d
=tests plan => 15
Packit 7d6a7d
Packit 7d6a7d
my @s = &Devel::PPPort::newSVpvn();
Packit 7d6a7d
ok(@s == 5);
Packit 7d6a7d
ok($s[0], "test");
Packit 7d6a7d
ok($s[1], "te");
Packit 7d6a7d
ok($s[2], "");
Packit 7d6a7d
ok(!defined($s[3]));
Packit 7d6a7d
ok(!defined($s[4]));
Packit 7d6a7d
Packit 7d6a7d
@s = &Devel::PPPort::newSVpvn_flags();
Packit 7d6a7d
ok(@s == 5);
Packit 7d6a7d
ok($s[0], "test");
Packit 7d6a7d
ok($s[1], "te");
Packit 7d6a7d
ok($s[2], "");
Packit 7d6a7d
ok(!defined($s[3]));
Packit 7d6a7d
ok(!defined($s[4]));
Packit 7d6a7d
Packit 7d6a7d
@s = &Devel::PPPort::newSVpvn_utf8();
Packit 7d6a7d
ok(@s == 1);
Packit 7d6a7d
ok($s[0], "test");
Packit 7d6a7d
Packit 7d6a7d
if ($] >= 5.008001) {
Packit 7d6a7d
  require utf8;
Packit 7d6a7d
  ok(utf8::is_utf8($s[0]));
Packit 7d6a7d
}
Packit 7d6a7d
else {
Packit 7d6a7d
  skip("skip: no is_utf8()", 0);
Packit 7d6a7d
}