From 744aaba0598b45009977ebe8c7d6dc376288e2e4 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 4 Nov 2010 11:39:19 +0000 Subject: [PATCH] Avoid needing to stub B::OPf_KIDS by loading the XS earlier. This will also inline the constant in the code of walkoptree_slow(). Things are complicated by the fact that B's BOOT code needs $VERSION set, and pushes to @EXPORT_OK. Move the 'use strict' much earlier. --- ext/B/B.pm | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/ext/B/B.pm b/ext/B/B.pm index 3747de7..4cd5545 100644 --- a/ext/B/B.pm +++ b/ext/B/B.pm @@ -6,28 +6,36 @@ # License or the Artistic License, as specified in the README file. # package B; +use strict; -our $VERSION = '1.25'; - -require XSLoader; require Exporter; -@ISA = qw(Exporter); +@B::ISA = qw(Exporter); # walkoptree_slow comes from B.pm (you are there), # walkoptree comes from B.xs -@EXPORT_OK = qw(minus_c ppname save_BEGINs - class peekop cast_I32 cstring cchar hash threadsv_names - main_root main_start main_cv svref_2object opnumber - sub_generation amagic_generation perlstring - walkoptree_slow walkoptree walkoptree_exec walksymtable - parents comppadlist sv_undef compile_stats timing_info - begin_av init_av check_av end_av regex_padav dowarn defstash - curstash warnhook diehook inc_gv @optype @specialsv_name - ); -push @EXPORT_OK, qw(unitcheck_av) if $] > 5.009; - -sub OPf_KIDS (); -use strict; + +BEGIN { + $B::VERSION = '1.25'; + + @B::EXPORT_OK = qw(minus_c ppname save_BEGINs + class peekop cast_I32 cstring cchar hash threadsv_names + main_root main_start main_cv svref_2object opnumber + sub_generation amagic_generation perlstring + walkoptree_slow walkoptree walkoptree_exec walksymtable + parents comppadlist sv_undef compile_stats timing_info + begin_av init_av check_av end_av regex_padav dowarn + defstash curstash warnhook diehook inc_gv @optype + @specialsv_name + ); + push @B::EXPORT_OK, qw(unitcheck_av) if $] > 5.009; + + # All the above in this BEGIN, because our BOOT code needs $VERSION set, + # and will append to @EXPORT_OK. And we need to run the BOOT code before + # we see OPf_KIDS below. + require XSLoader; + XSLoader::load(); +} + @B::SV::ISA = 'B::OBJECT'; @B::NULL::ISA = 'B::SV'; @B::PV::ISA = 'B::SV'; @@ -315,8 +323,6 @@ sub walksymtable { } } -XSLoader::load(); - 1; __END__ -- 2.7.4