diff -burN Devel-PPPort-3.17/PPPort_pm.PL Devel-PPPort/PPPort_pm.PL
--- Devel-PPPort-3.17/PPPort_pm.PL 2009-03-16 00:43:37.000000000 +0900
+++ Devel-PPPort/PPPort_pm.PL 2009-06-10 15:05:59.221744000 +0900
@@ -628,6 +628,8 @@
%include SvREFCNT
+%include newSV_type
+
%include newSVpv
%include SvPV
@@ -638,6 +640,10 @@
%include shared_pv
+%include HvNAME
+
+%include gv
+
%include warn
%include pvs
diff -burN Devel-PPPort-3.17/parts/inc/HvNAME Devel-PPPort/parts/inc/HvNAME
--- Devel-PPPort-3.17/parts/inc/HvNAME 1970-01-01 09:00:00.000000000 +0900
+++ Devel-PPPort/parts/inc/HvNAME 2009-06-10 10:29:30.000000000 +0900
@@ -0,0 +1,27 @@
+
+=provides
+
+__UNDEFINED__
+
+=implementation
+
+__UNDEFINED__ HvNAME_get(hv) HvNAME(hv)
+
+__UNDEFINED__ HvNAMELEN_get(hv) (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0)
+
+=xsubs
+
+const char*
+HvNAME_get(HV* hv)
+
+int
+HvNAMELEN_get(HV* hv)
+
+=tests plan => 4
+
+ok(Devel::PPPort::HvNAME_get(\%Devel::PPPort::), 'Devel::PPPort');
+ok(Devel::PPPort::HvNAME_get({}), undef);
+
+ok(Devel::PPPort::HvNAMELEN_get(\%Devel::PPPort::), length('Devel::PPPort'));
+ok(Devel::PPPort::HvNAMELEN_get({}), 0);
+
diff -burN Devel-PPPort-3.17/parts/inc/gv Devel-PPPort/parts/inc/gv
--- Devel-PPPort-3.17/parts/inc/gv 1970-01-01 09:00:00.000000000 +0900
+++ Devel-PPPort/parts/inc/gv 2009-06-10 15:07:30.345463000 +0900
@@ -0,0 +1,47 @@
+
+=provides
+
+__UNDEFINED__
+
+=implementation
+
+__UNDEFINED__ GvSVn(gv) GvSV(gv)
+__UNDEFINED__ isGV_with_GP(gv) isGV(gv)
+
+=xsubs
+
+int
+GvSVn()
+ PREINIT:
+ GV* gv;
+ CODE:
+ RETVAL = 0;
+ gv = gv_fetchpvs("Devel::PPPort::GvTest", GV_ADDMULTI, SVt_PVGV);
+ if(GvSVn(gv) != NULL){
+ RETVAL++;
+ }
+ OUTPUT:
+ RETVAL
+
+int
+isGV_with_GP()
+ PREINIT:
+ GV* gv;
+ CODE:
+ RETVAL = 0;
+ gv = gv_fetchpvs("Devel::PPPort::GvTest", GV_ADDMULTI, SVt_PVGV);
+ if(isGV_with_GP(gv)){
+ RETVAL++;
+ }
+ if(!isGV(&PL_sv_undef)){
+ RETVAL++;
+ }
+ OUTPUT:
+ RETVAL
+
+
+=tests plan => 2
+
+ok(Devel::PPPort::GvSVn(), 1);
+
+ok(Devel::PPPort::isGV_with_GP(), 2)
diff -burN Devel-PPPort-3.17/parts/inc/newSV_type Devel-PPPort/parts/inc/newSV_type
--- Devel-PPPort-3.17/parts/inc/newSV_type 1970-01-01 09:00:00.000000000 +0900
+++ Devel-PPPort/parts/inc/newSV_type 2009-06-10 10:27:18.000000000 +0900
@@ -0,0 +1,65 @@
+
+=provides
+
+newSV_type
+
+=implementation
+
+#ifndef newSV_type
+
+#if { NEED newSV_type }
+
+SV*
+newSV_type(pTHX_ svtype const t){
+ SV* const sv = newSV(0);
+ sv_upgrade(sv, t);
+ return sv;
+}
+
+#endif
+
+#endif
+
+=xsinit
+
+#define NEED_newSV_type
+
+=xsubs
+
+int
+newSV_type()
+ PREINIT:
+ SV* sv;
+ CODE:
+ RETVAL = 0;
+ sv = newSV_type(SVt_NULL);
+ if(SvTYPE(sv) == SVt_NULL){
+ RETVAL++;
+ }
+ SvREFCNT_dec(sv);
+
+ sv = newSV_type(SVt_PVIV);
+ if(SvTYPE(sv) == SVt_PVIV){
+ RETVAL++;
+ }
+ SvREFCNT_dec(sv);
+
+ sv = newSV_type(SVt_PVHV);
+ if(SvTYPE(sv) == SVt_PVHV){
+ RETVAL++;
+ }
+ SvREFCNT_dec(sv);
+
+ sv = newSV_type(SVt_PVAV);
+ if(SvTYPE(sv) == SVt_PVAV){
+ RETVAL++;
+ }
+ SvREFCNT_dec(sv);
+ OUTPUT:
+ RETVAL
+
+
+=tests plan => 1
+
+ok(Devel::PPPort::newSV_type(), 4);
+
diff -burN Devel-PPPort-3.17/parts/inc/pvs Devel-PPPort/parts/inc/pvs
--- Devel-PPPort-3.17/parts/inc/pvs 2009-03-16 00:43:40.000000000 +0900
+++ Devel-PPPort/parts/inc/pvs 2009-06-10 10:19:20.000000000 +0900
@@ -35,6 +35,10 @@
__UNDEFINED__ hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval)
__UNDEFINED__ hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0)
+__UNDEFINED__ gv_fetchpvn_flags(name, len, flags, svt) gv_fetchpv(name, flags, svt)
+__UNDEFINED__ gv_fetchpvs(name, flags, svt) gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt)
+__UNDEFINED__ gv_stashpvs(name, flags) gv_stashpvn(name "", sizeof(name) - 1, flags)
+
=xsubs
void
@@ -78,7 +82,29 @@
PPCODE:
(void) hv_stores((HV *) SvRV(hv), "hv_stores", SvREFCNT_inc_simple(sv));
-=tests plan => 8
+SV*
+gv_fetchpvn_flags()
+ CODE:
+ RETVAL = newRV_inc((SV*)gv_fetchpvn_flags("Devel::PPPort::VERSION", sizeof("Devel::PPPort::VERSION")-1, 0, SVt_PV));
+ OUTPUT:
+ RETVAL
+
+SV*
+gv_fetchpvs()
+ CODE:
+ RETVAL = newRV_inc((SV*)gv_fetchpvs("Devel::PPPort::VERSION", 0, SVt_PV));
+ OUTPUT:
+ RETVAL
+
+SV*
+gv_stashpvs()
+ CODE:
+ RETVAL = newRV_inc((SV*)gv_stashpvs("Devel::PPPort", 0));
+ OUTPUT:
+ RETVAL
+
+
+=tests plan => 11
my $x = 'foo';
@@ -97,3 +123,7 @@
ok(exists $h{'hv_stores'});
ok($h{'hv_stores'}, 4711);
ok(Devel::PPPort::hv_fetchs(\%h), 42);
+
+ok(Devel::PPPort::gv_fetchpvn_flags(), \*Devel::PPPort::VERSION);
+ok(Devel::PPPort::gv_fetchpvs(), \*Devel::PPPort::VERSION);
+ok(Devel::PPPort::gv_stashpvs(), \%Devel::PPPort::);
diff -burN Devel-PPPort-3.17/parts/inc/variables Devel-PPPort/parts/inc/variables
--- Devel-PPPort-3.17/parts/inc/variables 2009-03-16 00:43:40.000000000 +0900
+++ Devel-PPPort/parts/inc/variables 2009-06-10 14:50:35.638701000 +0900
@@ -60,6 +60,9 @@
PL_tainted
PL_tainting
PL_tokenbuf
+PL_in_my
+PL_in_my_stash
+PL_error_count
PL_signals
PERL_SIGNALS_UNSAFE_FLAG
@@ -190,6 +193,10 @@
# define PL_lex_state D_PPP_my_PL_parser_var(lex_state)
# define PL_lex_stuff D_PPP_my_PL_parser_var(lex_stuff)
# define PL_tokenbuf D_PPP_my_PL_parser_var(tokenbuf)
+# define PL_in_my D_PPP_my_PL_parser_var(in_my)
+# define PL_in_my_stash D_PPP_my_PL_parser_var(in_my_stash)
+# define PL_error_count D_PPP_my_PL_parser_var(error_count)
+
#else
@@ -249,6 +256,20 @@
# define ppp_lex_state_t U8
#endif
+#if { VERSION < 5.6.0 }
+# define ppp_in_my_t bool
+#elif { VERSION < 5.9.5 }
+# define ppp_in_my_t I32
+#else
+# define ppp_in_my_t U16
+#endif
+
+#if { VERSION < 5.9.5 }
+# define ppp_error_count_t I32
+#else
+# define ppp_error_count_t U8
+#endif
+
=xsubs
int
@@ -379,6 +400,9 @@
ppp_PARSERVAR(char *, PL_bufend);
ppp_PARSERVAR(ppp_lex_state_t, PL_lex_state);
ppp_PARSERVAR(SV *, PL_lex_stuff);
+ ppp_PARSERVAR(ppp_in_my_t, PL_in_my);
+ ppp_PARSERVAR(HV*, PL_in_my_stash);
+ ppp_PARSERVAR(ppp_error_count_t, PL_error_count);
XSRETURN(count);
@@ -389,7 +413,7 @@
int
dummy_parser_warning()
-=tests plan => 49
+=tests plan => 52
ok(Devel::PPPort::compare_PL_signals());