1 ################################################################################
3 ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
4 ## Version 2.x, Copyright (C) 2001, Paul Marquess.
5 ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
7 ## This program is free software; you can redistribute it and/or
8 ## modify it under the same terms as Perl itself.
10 ################################################################################
19 #if { VERSION < 5.6.0 }
20 # define D_PPP_CONSTPV_ARG(x) ((char *) (x))
22 # define D_PPP_CONSTPV_ARG(x) (x)
25 __UNDEFINED__ newSVpvn(data,len) ((data) \
26 ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \
29 __UNDEFINED__ newSVpvn_utf8(s, len, u) newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
31 __UNDEFINED__ SVf_UTF8 0
33 #ifndef newSVpvn_flags
34 # if defined(PERL_USE_GCC_BRACE_GROUPS)
35 # define newSVpvn_flags(s, len, flags) \
37 SV * sv = newSVpvn(D_PPP_CONSTPV_ARG(s), (len)); \
38 SvFLAGS(sv) |= ((flags) & SVf_UTF8); \
39 if ((flags) & SVs_TEMP) sv = sv_2mortal(sv); \
43 PERL_STATIC_INLINE SV* D_PPP_newSVpvn_flags(const char *const s, const STRLEN len, const U32 flags)
46 SV * sv = newSVpvn(s, len);
47 SvFLAGS(sv) |= (flags & SVf_UTF8);
48 if (flags & SVs_TEMP) return sv_2mortal(sv);
51 # define newSVpvn_flags(s, len, flags) D_PPP_newSVpvn_flags((s), (len), (flags))
60 mXPUSHs(newSVpvn("test", 4));
61 mXPUSHs(newSVpvn("test", 2));
62 mXPUSHs(newSVpvn("test", 0));
63 mXPUSHs(newSVpvn(NULL, 2));
64 mXPUSHs(newSVpvn(NULL, 0));
70 XPUSHs(newSVpvn_flags("test", 4, SVs_TEMP));
71 XPUSHs(newSVpvn_flags("test", 2, SVs_TEMP));
72 XPUSHs(newSVpvn_flags("test", 0, SVs_TEMP));
73 XPUSHs(newSVpvn_flags(NULL, 2, SVs_TEMP));
74 XPUSHs(newSVpvn_flags(NULL, 0, SVs_TEMP));
80 XPUSHs(newSVpvn_flags("test", 4, SVs_TEMP|SVf_UTF8));
85 my @s = &Devel::PPPort::newSVpvn();
93 @s = &Devel::PPPort::newSVpvn_flags();
101 @s = &Devel::PPPort::newSVpvn_utf8();
105 if (ivers($]) >= ivers("5.008001")) {
107 ok(utf8::is_utf8($s[0]));
110 skip("skip: no is_utf8()", 1);