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 ################################################################################
18 #if { VERSION >= 5.9.2 } && { VERSION <= 5.9.3 } /* 5.9.2 and 5.9.3 ignore the length param */
19 #undef gv_fetchpvn_flags
23 # define D_PPP_GV_NOADD_MASK GV_NOADD_MASK
25 # define D_PPP_GV_NOADD_MASK 0xE0
28 __UNDEFINED__ gv_fetchpvn_flags(name, len, flags, sv_type) gv_fetchpv(SvPVX(sv_2mortal(newSVpvn((name), (len)))), ((flags) & D_PPP_GV_NOADD_MASK) ? FALSE : TRUE, (I32)(sv_type))
30 __UNDEFINED__ GvSVn(gv) GvSV(gv)
31 __UNDEFINED__ isGV_with_GP(gv) isGV(gv)
32 __UNDEFINED__ gv_fetchsv(name, flags, svt) gv_fetchpv(SvPV_nolen_const(name), flags, svt)
34 __UNDEFINED__ get_cvn_flags(name, namelen, flags) get_cv(name, flags)
35 __UNDEFINED__ gv_init_pvn(gv, stash, ptr, len, flags) gv_init(gv, stash, ptr, len, flags & GV_ADDMULTI ? TRUE : FALSE)
45 gv = gv_fetchpvs("Devel::PPPort::GvTest", GV_ADDMULTI, SVt_PVGV);
46 if (GvSVn(gv) != NULL)
59 gv = gv_fetchpvs("Devel::PPPort::GvTest", GV_ADDMULTI, SVt_PVGV);
64 if (!isGV(&PL_sv_undef))
77 xv = get_cvn_flags("Devel::PPPort::foobar", sizeof("Devel::PPPort::foobar")-1, 0);
78 if(xv == NULL) RETVAL++;
79 xv = get_cvn_flags("Devel::PPPort::foobar", sizeof("Devel::PPPort::foobar")-1, GV_ADDMULTI);
80 if(xv && SvTYPE(xv) == SVt_PVCV) RETVAL++;
81 xv = get_cvn_flags("Devel::PPPort::get_cvn_flags", sizeof("Devel::PPPort::get_cvn_flags")-1, 0);
82 if(xv && SvTYPE(xv) == SVt_PVCV) RETVAL++;
89 RETVAL = newRV_inc((SV*)gv_fetchpvn_flags("Devel::PPPort::VERSIONFAKE", sizeof("Devel::PPPort::VERSIONFAKE")-5, 0, SVt_PV));
97 RETVAL = newRV_inc((SV*)gv_fetchsv(name, 0, SVt_PV));
102 gv_init_type(namesv, multi, flags)
107 HV *defstash = gv_stashpv("main", 0);
109 const char * const name = SvPV_const(namesv, len);
110 GV *gv = *(GV**)hv_fetch(defstash, name, len, TRUE);
112 if (SvTYPE(gv) == SVt_PVGV)
113 Perl_croak(aTHX_ "GV is already a PVGV");
114 if (multi) flags |= GV_ADDMULTI;
115 gv_init_pvn(gv, defstash, name, len, flags);
116 XPUSHs( gv ? (SV*)gv : &PL_sv_undef);
120 is(Devel::PPPort::GvSVn(), 1);
122 is(Devel::PPPort::isGV_with_GP(), 2);
124 is(Devel::PPPort::get_cvn_flags(), 3);
126 is(Devel::PPPort::gv_fetchpvn_flags(), \*Devel::PPPort::VERSION);
128 is(Devel::PPPort::gv_fetchsv("Devel::PPPort::VERSION"), \*Devel::PPPort::VERSION);
130 is(Devel::PPPort::gv_init_type("sanity_check", 0, 0), "*main::sanity_check");
131 ok($::{sanity_check});