+3.10_01 - 2006-12-02
+
+ * fix cpan #21239: Signals safe in Perl 5.8.0
+ * fix PL_ppaddr and PL_no_modify support 5.005 perls
+ * added dTHXR, aTHXR and aTHXR_ for API that need
+ the context argument in pre-5.6.0 perls
+ * added support for the following API
+ PL_DBsignal
+ PL_DBtrace
+ PL_laststatval
+ PL_statcache
+ * added tests for all PL_* variables
+ * added progress indicator to soak script
+ * added --test-archives option to buildperl.pl script
+ * added comments to all autogenerated files that
+ clearly indicate their purpose and origin
+
3.10 - 2006-08-14
* remove timestamp from generated ppport.h
#
################################################################################
#
-# $Revision: 49 $
+# $Revision: 50 $
# $Author: mhx $
-# $Date: 2006/08/14 21:26:31 +0200 $
+# $Date: 2006/12/01 13:13:28 +0100 $
#
################################################################################
#
#
# !!!!! Do NOT edit this file directly! -- Edit PPPort_pm.PL instead. !!!!!
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by PPPort_pm.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
#
# Perl/Pollution/Portability
#
################################################################################
#
-# $Revision: 49 $
+# $Revision: 50 $
# $Author: mhx $
-# $Date: 2006/08/14 21:26:31 +0200 $
+# $Date: 2006/12/01 13:13:28 +0100 $
#
################################################################################
#
use strict;
use vars qw($VERSION $data);
-$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.10 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' };
+$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.10_01 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' };
sub _init_data
{
#
################################################################################
#
-# $Revision: 11 $
+# $Revision: 12 $
# $Author: mhx $
-# $Date: 2006/07/21 19:21:40 +0200 $
+# $Date: 2006/12/01 13:13:28 +0100 $
#
################################################################################
#
require "parts/ppptools.pl";
my %SECTION = (
- xshead => { code => '', header => "/* ---- from __FILE__ ---- */" },
- xsinit => { code => '', header => "/* ---- from __FILE__ ---- */" },
- xsmisc => { code => '', header => "/* ---- from __FILE__ ---- */" },
- xsboot => { code => '', header => "/* ---- from __FILE__ ---- */", indent => "\t" },
- xsubs => { code => '', header => "##".('-' x 70)."\n## XSUBs from __FILE__\n##".('-' x 70)."\n" },
+ xshead => { code => '', header => "/* ---- code from __FILE__ ---- */" },
+ xsinit => { code => '', header => "/* ---- code from __FILE__ ---- */" },
+ xsmisc => { code => '', header => "/* ---- code from __FILE__ ---- */" },
+ xsboot => { code => '', header => "/* ---- code from __FILE__ ---- */", indent => "\t" },
+ xsubs => { code => '', header => <<ENDHEADER },
+##----------------------------------------------------------------------
+## XSUBs for testing the implementation in __FILE__
+##----------------------------------------------------------------------
+ENDHEADER
);
if (exists $ENV{PERL_NO_GET_CONTEXT} && $ENV{PERL_NO_GET_CONTEXT}) {
*
* !!!!! Do NOT edit this file directly! -- Edit PPPort_xs.PL instead. !!!!!
*
+* This file was automatically generated from the definition files in the
+* parts/inc/ subdirectory by PPPort_xs.PL. To learn more about how all this
+* works, please read the F<HACKERS> file that came with this distribution.
+*
********************************************************************************
*
* Perl/Pollution/Portability
*
********************************************************************************
*
-* $Revision: 11 $
+* $Revision: 12 $
* $Author: mhx $
-* $Date: 2006/07/21 19:21:40 +0200 $
+* $Date: 2006/12/01 13:13:28 +0100 $
*
********************************************************************************
*
TODO:
+* check which of the following we need to support:
+
+ amagic_generation
+ AMG_names
+ an
+ Argv
+ argvgv
+ argvoutgv
+ basetime
+ beginav
+ block_type
+ bodytarget
+ bufend
+ bufptr
+ check
+ chopset
+ Cmd
+ compcv
+ compiling
+ comppad
+ comppad_name
+ comppad_name_fill
+ copline
+ cop_seqmax
+ cryptseen
+ cshlen
+ cshname
+ curcop
+ curinterp
+ curpad
+ curpm
+ curstash
+ curstname
+ dbargs
+ DBgv
+ DBline
+ DBsignal
+ DBsingle
+ DBsub
+ DBtrace
+ debstash
+ debug
+ defgv
+ defoutgv
+ defstash
+ delaymagic
+ diehook
+ dirty
+ doextract
+ doswitches
+ do_undump
+ dowarn
+ egid
+ encoding
+ endav
+ envgv
+ errgv
+ error_count
+ errors
+ euid
+ eval_root
+ evalseq
+ eval_start
+ expect
+ fdpid
+ filemode
+ firstgv
+ fold
+ forkprocess
+ formfeed
+ formtarget
+ freq
+ generation
+ gensym
+ gid
+ hexdigit
+ hints
+ incgv
+ in_eval
+ in_my
+ inplace
+ lastfd
+ last_in_gv
+ last_lop
+ last_lop_op
+ lastscream
+ laststatval
+ laststype
+ last_uni
+ lex_brackets
+ lex_brackstack
+ lex_casemods
+ lex_casestack
+ lex_defer
+ lex_dojoin
+ lex_expect
+ lex_formbrack
+ lex_inpat
+ lex_inwhat
+ lex_op
+ lex_repl
+ lex_starts
+ lex_state
+ lex_stuff
+ lineary
+ linestr
+ localizing
+ main_cv
+ main_root
+ mainstack
+ main_start
+ markstack
+ markstack_max
+ markstack_ptr
+ max_intro_pending
+ maxo
+ maxscream
+ maxsysfd
+ min_intro_pending
+ minus_a
+ minus_c
+ minus_F
+ minus_l
+ minus_n
+ minus_p
+ multi_close
+ multi_end
+ multi_open
+ multi_start
+ na
+ nexttoke
+ nexttype
+ nextval
+ nice_chunk
+ nice_chunk_size
+ No
+ no_aelem
+ no_dir_func
+ no_func
+ no_mem
+ nomemok
+ no_modify
+ no_myglob
+ no_security
+ no_sock_func
+ no_symref
+ no_usym
+ no_wrongref
+ nrs
+ oldbufptr
+ oldname
+ oldoldbufptr
+ op
+ opargs
+ op_desc
+ op_mask
+ op_name
+ op_seq
+ origalen
+ origargc
+ origargv
+ origenviron
+ origfilename
+ osname
+ padix
+ padix_floor
+ pad_reset_pending
+ patchlevel
+ patleave
+ perldb
+ perl_destruct_level
+ pidstatus
+ ppaddr
+ preambleav
+ preambled
+ preprocess
+ profiledata
+ regdummy
+ regendp
+ regeol
+ reginput
+ regkind
+ reglastparen
+ regsize
+ regstartp
+ restartop
+ rs
+ rsfp
+ rsfp_filters
+ runops
+ savestack
+ savestack_ix
+ savestack_max
+ sawampersand
+ scopestack
+ scopestack_ix
+ scopestack_max
+ screamfirst
+ screamnext
+ secondgv
+ signals
+ sig_name
+ sig_num
+ simple
+ sortcop
+ sortstash
+ splitstr
+ stack_base
+ stack_max
+ stack_sp
+ statbuf
+ statcache
+ statgv
+ statname
+ statusvalue
+ stdingv
+ sub_generation
+ subline
+ subname
+ Sv
+ sv_arenaroot
+ sv_count
+ sv_no
+ sv_objcount
+ sv_root
+ sv_undef
+ sv_yes
+ tainted
+ tainting
+ timesbuf
+ tmps_floor
+ tmps_ix
+ tmps_max
+ tmps_stack
+ tokenbuf
+ top_env
+ toptarget
+ uid
+ unsafe
+ varies
+ vtbl_amagic
+ vtbl_amagicelem
+ vtbl_arylen
+ vtbl_bm
+ vtbl_dbline
+ vtbl_env
+ vtbl_envelem
+ vtbl_glob
+ vtbl_isa
+ vtbl_isaelem
+ vtbl_mglob
+ vtbl_pack
+ vtbl_packelem
+ vtbl_pos
+ vtbl_sig
+ vtbl_sigelem
+ vtbl_substr
+ vtbl_sv
+ vtbl_taint
+ vtbl_uvar
+ vtbl_vec
+ warnhook
+ warn_nl
+ warn_nosemi
+ warn_reserved
+ warn_uninit
+ watchaddr
+ watchok
+ Xpv
+ Yes
+
+* have an --env option for soak to set env variable combinations
+
+* only overwrite generated files if they actually changed
+
* try to make parts/apicheck.pl automatically find NEED_ #defines
* implement snprintf with newSVpvf for >= 5.004, which is safer?
#
################################################################################
#
-# $Revision: 9 $
+# $Revision: 10 $
# $Author: mhx $
-# $Date: 2006/05/28 20:42:53 +0200 $
+# $Date: 2006/12/02 09:58:34 +0100 $
#
################################################################################
#
force => 0,
test => 0,
install => 1,
+ 'test-archives' => 0,
);
my %config = (
force
test
install!
+ test-archives+
)) or pod2usage(2);
if (exists $opt{config}) {
@perls = sort keys %perl;
}
+if ($opt{'test-archives'}) {
+ my $test = 'test';
+ my $cwd = cwd;
+ -d $test or mkpath($test);
+ chdir $test or die "chdir $test: $!\n";
+ for my $perl (@perls) {
+ eval {
+ my $d = extract_source($perl{$perl});
+ rmtree($d) if -e $d;
+ };
+ warn $@ if $@;
+ }
+ chdir $cwd or die "chdir $cwd: $!\n";
+ print STDERR "cleaning up\n";
+ rmtree($test);
+ exit 0;
+}
+
my %current;
for my $cfg (@{$opt{config}}) {
{
my $perl = shift;
- print "reading $perl->{source}\n";
+ my $what = $opt{'test-archives'} ? 'test' : 'read';
+ print "${what}ing $perl->{source}\n";
my $target;
$target = $t;
}
- if (-d $target) {
- print "removing old build directory $target\n";
- rmtree($target);
- }
+ if ($opt{'test-archives'} == 0 || $opt{'test-archives'} > 1) {
+ if (-d $target) {
+ print "removing old build directory $target\n";
+ rmtree($target);
+ }
- print "extracting $perl->{source}\n";
+ print "extracting $perl->{source}\n";
- Archive::Tar->extract_archive($perl->{source})
- or die "extract failed: " . Archive::Tar->error() . "\n";
+ Archive::Tar->extract_archive($perl->{source})
+ or die "extract failed: " . Archive::Tar->error() . "\n";
- -d $target or die "oooops, $target not found\n";
+ -d $target or die "oooops, $target not found\n";
+ }
return $target;
}
#
################################################################################
#
-# $Revision: 26 $
+# $Revision: 27 $
# $Author: mhx $
-# $Date: 2006/07/21 19:21:39 +0200 $
+# $Date: 2006/12/01 13:13:26 +0100 $
#
################################################################################
#
#
# Edit mktests.PL and/or __SOURCE__ instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
END_EXTERN_C # added by devel/scanprov
EXTERN_C # added by devel/scanprov
NOOP # added by devel/scanprov
+PL_DBsignal # added by devel/scanprov
PL_Sv # added by devel/scanprov
PL_copline # added by devel/scanprov
PL_hexdigit # added by devel/scanprov
PL_hints # added by devel/scanprov
+PL_laststatval # added by devel/scanprov
+PL_statcache # added by devel/scanprov
START_EXTERN_C # added by devel/scanprov
PERL_MAGIC_envelem # added by devel/scanprov
PERL_MAGIC_ext # added by devel/scanprov
PERL_MAGIC_fm # added by devel/scanprov
-PERL_MAGIC_glob # added by devel/scanprov
PERL_MAGIC_isa # added by devel/scanprov
PERL_MAGIC_isaelem # added by devel/scanprov
PERL_MAGIC_mutex # added by devel/scanprov
5.009001
SvIV_nomg # U
SvUV_nomg # U
-hv_assert # U
hv_clear_placeholders # U
hv_scalar # U
scan_version # E (Perl_scan_version)
5.009004
-MULTICALL # E
-POP_MULTICALL # E
-PUSH_MULTICALL # E
PerlIO_context_layers # U
PoisonFree # E
PoisonNew # E
my_strlcpy # U
my_vsnprintf # U
newXS_flags # U
-pad_sv # U
pv_escape # U
pv_pretty # U
regclass_swash # E (Perl_regclass_swash)
-stashpv_hvname_match # U
sv_does # U
sv_setpvs # U
sv_usepvn_flags # U
-PERL_BCDVERSION # added by devel/scanprov
PERL_UNUSED_CONTEXT # added by devel/scanprov
PERL_USE_GCC_BRACE_GROUPS # added by devel/scanprov
SvVSTRING_mg # added by devel/scanprov
p |bool |do_aexec5 |NULLOK SV* really|NN SV** mark|NN SV** sp|int fd|int do_report
Ap |int |do_binmode |NN PerlIO *fp|int iotype|int mode
p |void |do_chop |NN SV* asv|NN SV* sv
-Ap |bool |do_close |NN GV* gv|bool not_implicit
+Ap |bool |do_close |NULLOK GV* gv|bool not_implicit
p |bool |do_eof |NN GV* gv
#ifdef PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
ApR |bool |is_utf8_xdigit |NN const U8 *p
ApR |bool |is_utf8_mark |NN const U8 *p
p |OP* |jmaybe |NN OP* arg
-pP |I32 |keyword |NN const char* d|I32 len
+pP |I32 |keyword |NN const char* d|I32 len|bool all_keywords
Ap |void |leave_scope |I32 base
p |void |lex_end
p |void |lex_start |NN SV* line
|NN char* strend|NN char* strbeg|I32 minend \
|NN SV* screamer|U32 nosave
Ap |void |pregfree |NULLOK struct regexp* r
+p |char * |reg_stringify |NN MAGIC *mg|NULLOK STRLEN *lp|NULLOK U32 *flags|NULLOK I32 *haseval
+#if defined(USE_ITHREADS)
+Ap |regexp*|regdupe |NN const regexp* r|NN CLONE_PARAMS* param
+#endif
Ap |regexp*|pregcomp |NN char* exp|NN char* xend|NN PMOP* pm
Ap |char* |re_intuit_start|NN regexp* prog|NULLOK SV* sv|NN char* strpos \
|NN char* strend|U32 flags \
|NN char* strend|NN char* strbeg|I32 minend \
|NN SV* screamer|NULLOK void* data|U32 flags
ApR |regnode*|regnext |NN regnode* p
+Ep |SV*|reg_named_buff_sv |NN SV* namesv
Ep |void |regprop |NULLOK const regexp *prog|NN SV* sv|NN const regnode* o
Ap |void |repeatcpy |NN char* to|NN const char* from|I32 len|I32 count
ApP |char* |rninstr |NN const char* big|NN const char* bigend \
Apd |char* |sv_recode_to_utf8 |NN SV* sv|NN SV *encoding
Apd |bool |sv_cat_decode |NN SV* dsv|NN SV *encoding|NN SV *ssv|NN int *offset \
|NN char* tstr|int tlen
-ApdR |char* |sv_reftype |NN const SV* sv|int ob
+ApdR |const char* |sv_reftype |NN const SV* sv|int ob
Apd |void |sv_replace |NN SV* sv|NN SV* nsv
Apd |void |sv_report_used
Apd |void |sv_reset |NN const char* s|NULLOK HV* stash
pR |OP* |ck_rfun |NN OP *o
pR |OP* |ck_rvconst |NN OP *o
pR |OP* |ck_sassign |NN OP *o
-pR |OP* |ck_say |NN OP *o
pR |OP* |ck_select |NN OP *o
pR |OP* |ck_shift |NN OP *o
pR |OP* |ck_sort |NN OP *o
Es |regnode*|regclass |NN struct RExC_state_t *state|U32 depth
ERsn |I32 |regcurly |NN const char *
Es |regnode*|reg_node |NN struct RExC_state_t *state|U8 op
+Es |UV |reg_recode |const char value|NULLOK SV **encp
Es |regnode*|regpiece |NN struct RExC_state_t *state|NN I32 *flagp|U32 depth
-Es |void |reginsert |NN struct RExC_state_t *state|U8 op|NN regnode *opnd
+Es |regnode*|reg_namedseq |NN struct RExC_state_t *state|NULLOK UV *valuep
+Es |void |reginsert |NN struct RExC_state_t *state|U8 op|NN regnode *opnd|U32 depth
Es |void |regtail |NN struct RExC_state_t *state|NN regnode *p|NN const regnode *val|U32 depth
+Es |SV * |reg_scan_name |NN struct RExC_state_t *state|U32 flags
Es |U32 |join_exact |NN struct RExC_state_t *state|NN regnode *scan|NN I32 *min|U32 flags|NULLOK regnode *val|U32 depth
EsRn |char* |regwhite |NN char *p|NN const char *e
Es |char* |nextchar |NN struct RExC_state_t *state
-Es |void |scan_commit |NN const struct RExC_state_t* state|NN struct scan_data_t *data
+Es |void |scan_commit |NN const struct RExC_state_t* state|NN struct scan_data_t *data|NN I32 *minlenp
Esn |void |cl_anything |NN const struct RExC_state_t* state|NN struct regnode_charclass_class *cl
EsRn |int |cl_is_anything |NN const struct regnode_charclass_class *cl
Esn |void |cl_init |NN const struct RExC_state_t* state|NN struct regnode_charclass_class *cl
Esn |void |cl_or |NN const struct RExC_state_t* state|NN struct regnode_charclass_class *cl \
|NN const struct regnode_charclass_class *or_with
Es |I32 |study_chunk |NN struct RExC_state_t* state|NN regnode **scanp \
- |NN I32 *deltap|NN regnode *last|NULLOK struct scan_data_t *data \
+ |NN I32 *minlenp|NN I32 *deltap \
+ |NN regnode *last|NULLOK struct scan_data_t *data \
+ |I32 stopparen|NULLOK U8* recursed \
+ |NULLOK struct regnode_charclass_class *and_withp \
|U32 flags|U32 depth
-EsRn |I32 |add_data |NN struct RExC_state_t* state|I32 n|NN const char *s
+EsRn |U32 |add_data |NN struct RExC_state_t* state|U32 n|NN const char *s
rs |void |re_croak2 |NN const char* pat1|NN const char* pat2|...
Es |I32 |regpposixcc |NN struct RExC_state_t* state|I32 value
Es |void |checkposixcc |NN struct RExC_state_t* state
Es |I32 |make_trie |NN struct RExC_state_t* state|NN regnode *startbranch \
|NN regnode *first|NN regnode *last|NN regnode *tail \
- |U32 flags|U32 depth
+ |U32 word_count|U32 flags|U32 depth
Es |void |make_trie_failtable |NN struct RExC_state_t* state \
|NN regnode *source|NN regnode *node|U32 depth
# ifdef DEBUGGING
Es |const regnode*|dumpuntil|NN const regexp *r|NN const regnode *start \
|NN const regnode *node \
- |NULLOK const regnode *last|NN SV* sv|I32 l
+ |NULLOK const regnode *last \
+ |NULLOK const regnode *plast \
+ |NN SV* sv|I32 indent|U32 depth
Es |void |put_byte |NN SV* sv|int c
-Es |void |dump_trie |NN const struct _reg_trie_data *trie|U32 depth
-Es |void |dump_trie_interim_list|NN const struct _reg_trie_data *trie|U32 next_alloc|U32 depth
-Es |void |dump_trie_interim_table|NN const struct _reg_trie_data *trie|U32 next_alloc|U32 depth
+Es |void |dump_trie |NN const struct _reg_trie_data *trie\
+ |NULLOK HV* widecharmap|NN AV *revcharmap\
+ |U32 depth
+Es |void |dump_trie_interim_list|NN const struct _reg_trie_data *trie\
+ |NULLOK HV* widecharmap|NN AV *revcharmap\
+ |U32 next_alloc|U32 depth
+Es |void |dump_trie_interim_table|NN const struct _reg_trie_data *trie\
+ |NULLOK HV* widecharmap|NN AV *revcharmap\
+ |U32 next_alloc|U32 depth
Es |U8 |regtail_study |NN struct RExC_state_t *state|NN regnode *p|NN const regnode *val|U32 depth
# endif
#endif
#if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
-ERs |I32 |regmatch |NN const regmatch_info *reginfo|NN regnode *prog
-ERs |I32 |regrepeat |NN const regexp *prog|NN const regnode *p|I32 max
-ERs |I32 |regtry |NN const regmatch_info *reginfo|NN char *startpos
+ERs |I32 |regmatch |NN regmatch_info *reginfo|NN regnode *prog
+ERs |I32 |regrepeat |NN const regexp *prog|NN const regnode *p|I32 max|int depth
+ERs |I32 |regtry |NN regmatch_info *reginfo|NN char **startpos
ERs |bool |reginclass |NULLOK const regexp *prog|NN const regnode *n|NN const U8 *p|NULLOK STRLEN *lenp\
|bool do_utf8sv_is_utf8
Es |CHECKPOINT|regcppush |I32 parenfloor
Es |char* |regcppop |NN const regexp *rex
ERsn |U8* |reghop3 |NN U8 *pos|I32 off|NN const U8 *lim
+#ifdef XXX_dmq
+ERsn |U8* |reghop4 |NN U8 *pos|I32 off|NN const U8 *llim|NN const U8 *rlim
+#endif
ERsn |U8* |reghopmaybe3 |NN U8 *pos|I32 off|NN const U8 *lim
-ERs |char* |find_byclass |NN regexp * prog|NN const regnode *c|NN char *s|NN const char *strend|NULLOK const regmatch_info *reginfo
+ERs |char* |find_byclass |NN regexp * prog|NN const regnode *c|NN char *s|NN const char *strend|NULLOK regmatch_info *reginfo
Es |void |to_utf8_substr |NN regexp * prog
Es |void |to_byte_substr |NN regexp * prog
+ERs |I32 |reg_check_named_buff_matched |NN const regexp *rex|NN const regnode *prog
# ifdef DEBUGGING
-Es |void |dump_exec_pos |NN const char *locinput|NN const regnode *scan|const bool do_utf8
+Es |void |dump_exec_pos |NN const char *locinput|NN const regnode *scan|NN const char *loc_regeol\
+ |NN const char *loc_bostr|NN const char *loc_reg_starttry|const bool do_utf8
Es |void |debug_start_match|NN const regexp *prog|const bool do_utf8|NN const char *start|NN const char *end|NN const char *blurb
# endif
#endif
|STRLEN uoffset|STRLEN uoffset0|STRLEN boffset0
s |void |utf8_mg_pos_cache_update|NN SV *sv|NN MAGIC **mgp \
|STRLEN byte|STRLEN utf8|STRLEN blen
-s |STRLEN |sv_pos_b2u_forwards|NN const U8 *s|NN const U8 *const target
s |STRLEN |sv_pos_b2u_midway|NN const U8 *s|NN const U8 *const target \
|NN const U8 *end|STRLEN endu
-s |char * |stringify_regexp|NN SV *sv|NN MAGIC *mg|NULLOK STRLEN *lp
sn |char * |F0convert |NV nv|NN char *endbuf|NN STRLEN *len
# if defined(PERL_OLD_COPY_ON_WRITE)
sM |void |sv_release_COW |NN SV *sv|NN const char *pvx|STRLEN len|NN SV *after
# if defined(USE_ITHREADS)
sRn |PTR_TBL_ENT_t *|ptr_table_find|NN PTR_TBL_t *tbl|NN const void *sv
# endif
-s |SV * |find_hash_subscript|NULLOK HV *hv|NN SV *val
-s |I32 |find_array_subscript|NULLOK AV *av|NN SV *val
-s |SV * |find_uninit_var|NULLOK OP *obase|NULLOK SV *uninit_sv|bool match
#endif
#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
|int allow_pack|int allow_tick
s |SV* |tokeq |NN SV *sv
s |int |pending_ident
+s |void |readpipe_override|
sR |char* |scan_const |NN char *start
sR |char* |scan_formline |NN char *s
sR |char* |scan_heredoc |NN char *s
Apo |void |hv_placeholders_set |NN HV* hv|I32 ph
p |SV* |magic_scalarpack|NN HV* hv|NN MAGIC* mg
-#ifdef PERL_IN_SV_C
+
+#if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT)
+s |SV * |find_hash_subscript|NULLOK HV *hv|NN SV *val
+s |I32 |find_array_subscript|NULLOK AV *av|NN SV *val
sMd |SV* |find_uninit_var|NULLOK OP* obase|NULLOK SV* uninit_sv|bool top
#endif
################################################################################
##
-## $Revision: 36 $
+## $Revision: 37 $
## $Author: mhx $
-## $Date: 2006/05/22 00:51:01 +0200 $
+## $Date: 2006/12/02 13:49:03 +0100 $
##
################################################################################
##
STMT_START
STMT_END
XSRETURN
-/PL_\w+/
=implementation
-#if { VERSION <= 5.004_05 }
-/* Replace: 1 */
-# define PL_DBsingle DBsingle
-# define PL_DBsub DBsub
-# define PL_Sv Sv
-# define PL_compiling compiling
-# define PL_copline copline
-# define PL_curcop curcop
-# define PL_curstash curstash
-# define PL_debstash debstash
-# define PL_defgv defgv
-# define PL_diehook diehook
-# define PL_dirty dirty
-# define PL_dowarn dowarn
-# define PL_errgv errgv
-# define PL_hexdigit hexdigit
-# define PL_hints hints
-# define PL_na na
-# define PL_no_modify no_modify
-# define PL_perl_destruct_level perl_destruct_level
-# define PL_perldb perldb
-# define PL_ppaddr ppaddr
-# define PL_rsfp_filters rsfp_filters
-# define PL_rsfp rsfp
-# define PL_stack_base stack_base
-# define PL_stack_sp stack_sp
-# define PL_stdingv stdingv
-# define PL_sv_arenaroot sv_arenaroot
-# define PL_sv_no sv_no
-# define PL_sv_undef sv_undef
-# define PL_sv_yes sv_yes
-# define PL_tainted tainted
-# define PL_tainting tainting
-/* Replace: 0 */
-#endif
-
#ifndef PERL_UNUSED_DECL
# ifdef HASATTRIBUTE
# if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER)
else
XSRETURN(1);
-SV *
-PL_sv_undef()
- CODE:
- RETVAL = newSVsv(&PL_sv_undef);
- OUTPUT:
- RETVAL
-
-SV *
-PL_sv_yes()
- CODE:
- RETVAL = newSVsv(&PL_sv_yes);
- OUTPUT:
- RETVAL
-
-SV *
-PL_sv_no()
- CODE:
- RETVAL = newSVsv(&PL_sv_no);
- OUTPUT:
- RETVAL
-
-int
-PL_na(string)
- char *string
- CODE:
- PL_na = strlen(string);
- RETVAL = PL_na;
- OUTPUT:
- RETVAL
-
SV*
boolSV(value)
int value
XPUSHs(x);
XSRETURN(1);
-=tests plan => 42
+=tests plan => 38
use vars qw($my_sv @my_av %my_hv);
ok(!defined($s[3]));
ok(!defined($s[4]));
-ok(!defined(&Devel::PPPort::PL_sv_undef()));
-ok(&Devel::PPPort::PL_sv_yes());
-ok(!&Devel::PPPort::PL_sv_no());
-ok(&Devel::PPPort::PL_na("abcd"), 4);
-
ok(&Devel::PPPort::boolSV(1));
ok(!&Devel::PPPort::boolSV(0));
################################################################################
##
-## $Revision: 5 $
+## $Revision: 7 $
## $Author: mhx $
-## $Date: 2006/01/14 18:08:00 +0100 $
+## $Date: 2006/12/02 14:19:29 +0100 $
##
################################################################################
##
=provides
__UNDEFINED__
+aTHXR
+aTHXR_
+dTHXR
=implementation
__UNDEFINED__ aTHX
__UNDEFINED__ aTHX_
+#if { VERSION < 5.6.0 }
+# ifdef USE_THREADS
+# define aTHXR thr
+# define aTHXR_ thr,
+# else
+# define aTHXR
+# define aTHXR_
+# endif
+# define dTHXR dTHR
+#else
+# define aTHXR aTHX
+# define aTHXR_ aTHX_
+# define dTHXR dTHX
+#endif
+
__UNDEFINED__ dTHXoa(x) dTHXa(x)
=xsubs
################################################################################
##
-## $Revision: 4 $
+## $Revision: 6 $
## $Author: mhx $
-## $Date: 2006/01/14 18:07:58 +0100 $
+## $Date: 2006/12/02 14:01:23 +0100 $
##
################################################################################
##
=provides
-PL_signals
+/PL_\w+/
PERL_SIGNALS_UNSAFE_FLAG
+=dontwarn
+
+D_PPP_PERL_SIGNALS_INIT
+
=implementation
#ifndef PERL_SIGNALS_UNSAFE_FLAG
#define PERL_SIGNALS_UNSAFE_FLAG 0x0001
-__NEED_VAR__ U32 PL_signals = PERL_SIGNALS_UNSAFE_FLAG;
+#if { VERSION < 5.8.0 }
+# define D_PPP_PERL_SIGNALS_INIT PERL_SIGNALS_UNSAFE_FLAG
+#else
+# define D_PPP_PERL_SIGNALS_INIT 0
+#endif
+
+__NEED_VAR__ U32 PL_signals = D_PPP_PERL_SIGNALS_INIT;
+
+#endif
+/* Hint: PL_ppaddr
+ * Calling an op via PL_ppaddr requires passing a context argument
+ * for threaded builds. Since the context argument is different for
+ * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will
+ * automatically be defined as the correct argument.
+ */
+
+#if { VERSION <= 5.005_04 }
+/* Replace: 1 */
+# define PL_ppaddr ppaddr
+# define PL_no_modify no_modify
+/* Replace: 0 */
+#endif
+
+#if { VERSION <= 5.004_05 }
+/* Replace: 1 */
+# define PL_DBsignal DBsignal
+# define PL_DBsingle DBsingle
+# define PL_DBsub DBsub
+# define PL_DBtrace DBtrace
+# define PL_Sv Sv
+# define PL_compiling compiling
+# define PL_copline copline
+# define PL_curcop curcop
+# define PL_curstash curstash
+# define PL_debstash debstash
+# define PL_defgv defgv
+# define PL_diehook diehook
+# define PL_dirty dirty
+# define PL_dowarn dowarn
+# define PL_errgv errgv
+# define PL_hexdigit hexdigit
+# define PL_hints hints
+# define PL_laststatval laststatval
+# define PL_na na
+# define PL_perl_destruct_level perl_destruct_level
+# define PL_perldb perldb
+# define PL_rsfp_filters rsfp_filters
+# define PL_rsfp rsfp
+# define PL_stack_base stack_base
+# define PL_stack_sp stack_sp
+# define PL_statcache statcache
+# define PL_stdingv stdingv
+# define PL_sv_arenaroot sv_arenaroot
+# define PL_sv_no sv_no
+# define PL_sv_undef sv_undef
+# define PL_sv_yes sv_yes
+# define PL_tainted tainted
+# define PL_tainting tainting
+/* Replace: 0 */
#endif
=xsinit
extern U32 get_PL_signals_2(void);
extern U32 get_PL_signals_3(void);
+#define ppp_TESTVAR(var) STMT_START { XPUSHs(newSViv(&var != NULL)); count++; } STMT_END
+
=xsubs
int
OUTPUT:
RETVAL
-=tests plan => 1
+SV *
+PL_sv_undef()
+ CODE:
+ RETVAL = newSVsv(&PL_sv_undef);
+ OUTPUT:
+ RETVAL
+
+SV *
+PL_sv_yes()
+ CODE:
+ RETVAL = newSVsv(&PL_sv_yes);
+ OUTPUT:
+ RETVAL
+
+SV *
+PL_sv_no()
+ CODE:
+ RETVAL = newSVsv(&PL_sv_no);
+ OUTPUT:
+ RETVAL
+
+int
+PL_na(string)
+ char *string
+ CODE:
+ PL_na = strlen(string);
+ RETVAL = PL_na;
+ OUTPUT:
+ RETVAL
+
+SV *
+PL_Sv()
+ CODE:
+ PL_Sv = newSVpv("mhx", 0);
+ RETVAL = PL_Sv;
+ OUTPUT:
+ RETVAL
+
+SV *
+PL_copline()
+ CODE:
+ RETVAL = newSViv((IV) PL_copline);
+ OUTPUT:
+ RETVAL
+
+SV *
+PL_hexdigit()
+ CODE:
+ RETVAL = newSVpv(PL_hexdigit, 0);
+ OUTPUT:
+ RETVAL
+
+SV *
+PL_hints()
+ CODE:
+ RETVAL = newSViv((IV) PL_hints);
+ OUTPUT:
+ RETVAL
+
+void
+PL_ppaddr(string)
+ char *string
+ PPCODE:
+ PUSHMARK(SP);
+ XPUSHs(sv_2mortal(newSVpv(string, 0)));
+ PUTBACK;
+ ENTER;
+ (void)*(PL_ppaddr[OP_UC])(aTHXR);
+ SPAGAIN;
+ LEAVE;
+ XSRETURN(1);
+
+void
+other_variables()
+ PREINIT:
+ int count = 0;
+ PPCODE:
+ ppp_TESTVAR(PL_DBsignal);
+ ppp_TESTVAR(PL_DBsingle);
+ ppp_TESTVAR(PL_DBsub);
+ ppp_TESTVAR(PL_DBtrace);
+ ppp_TESTVAR(PL_compiling);
+ ppp_TESTVAR(PL_curcop);
+ ppp_TESTVAR(PL_curstash);
+ ppp_TESTVAR(PL_debstash);
+ ppp_TESTVAR(PL_defgv);
+ ppp_TESTVAR(PL_diehook);
+ ppp_TESTVAR(PL_dirty);
+ ppp_TESTVAR(PL_dowarn);
+ ppp_TESTVAR(PL_errgv);
+ ppp_TESTVAR(PL_laststatval);
+ ppp_TESTVAR(PL_no_modify);
+ ppp_TESTVAR(PL_perl_destruct_level);
+ ppp_TESTVAR(PL_perldb);
+ ppp_TESTVAR(PL_rsfp_filters);
+ ppp_TESTVAR(PL_rsfp);
+ ppp_TESTVAR(PL_stack_base);
+ ppp_TESTVAR(PL_stack_sp);
+ ppp_TESTVAR(PL_statcache);
+ ppp_TESTVAR(PL_stdingv);
+ ppp_TESTVAR(PL_sv_arenaroot);
+ ppp_TESTVAR(PL_tainted);
+ ppp_TESTVAR(PL_tainting);
+ XSRETURN(count);
+
+=tests plan => 36
ok(Devel::PPPort::compare_PL_signals());
+ok(!defined(&Devel::PPPort::PL_sv_undef()));
+ok(&Devel::PPPort::PL_sv_yes());
+ok(!&Devel::PPPort::PL_sv_no());
+ok(&Devel::PPPort::PL_na("abcd"), 4);
+ok(&Devel::PPPort::PL_Sv(), "mhx");
+ok(defined &Devel::PPPort::PL_copline());
+ok(&Devel::PPPort::PL_hexdigit() =~ /^[0-9a-zA-Z]+$/);
+ok(defined &Devel::PPPort::PL_hints());
+ok(&Devel::PPPort::PL_ppaddr("mhx"), "MHX");
+
+for (&Devel::PPPort::other_variables()) {
+ ok($_ != 0);
+}
5.009001
-hv_assert # U
hv_clear_placeholders # U
hv_scalar # U
scan_version # E (Perl_scan_version)
5.009004
-MULTICALL # E
-POP_MULTICALL # E
-PUSH_MULTICALL # E
PerlIO_context_layers # U
gv_name_set # U
my_vsnprintf # U
newXS_flags # U
-pad_sv # U
pv_escape # U
pv_pretty # U
regclass_swash # E (Perl_regclass_swash)
-stashpv_hvname_match # U
sv_does # U
sv_usepvn_flags # U
#
################################################################################
#
-# $Revision: 13 $
+# $Revision: 14 $
# $Author: mhx $
-# $Date: 2006/07/08 16:58:56 +0200 $
+# $Date: 2006/12/02 13:31:24 +0100 $
#
################################################################################
#
use List::Util qw(max);
use Config;
-my $VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.10 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' };
+my $VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.10_01 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' };
$| = 1;
my %OPT = (
runit("$^X Makefile.PL") && runit("$OPT{make} realclean")
or $rep->die("Cannot run $^X Makefile.PL && $OPT{make} realclean\n");
+my $tot = @GoodPerls*@{$OPT{mmargs}};
+
+$rep->set(tests => $tot);
+
$rep->status(sprintf("Testing %d version%s / %d configuration%s (%d combination%s)...\n",
- cs(@GoodPerls), cs(@{$OPT{mmargs}}), cs(@GoodPerls*@{$OPT{mmargs}})));
+ cs(@GoodPerls), cs(@{$OPT{mmargs}}), cs($tot)));
for my $perl (@GoodPerls) {
for my $mm (@{$OPT{mmargs}}) {
{
my $class = shift;
bless {
+ tests => undef,
color => 1,
verbose => 0,
@_,
+ _cur => 0,
_atbol => 1,
_total => 0,
_good => [],
return $self->{config} =~ /\S+/ ? " ($self->{config})" : '';
}
+sub _progress
+{
+ my $self = shift;
+ return '' unless defined $self->{tests};
+ my $tlen = length $self->{tests};
+ my $text = sprintf "[%${tlen}d/%${tlen}d] ", $self->{_cur}, $self->{tests};
+ return $self->colored($text, 'bold');
+}
+
sub _test
{
my $self = shift;
- return "Testing "
+ return $self->_progress . "Testing "
. $self->colored($self->{perl}, 'blue')
. $self->colored($self->_config, 'green');
}
sub test
{
my $self = shift;
+ $self->{_cur}++;
$self->_vsep($self->_testlen);
$self->print($self->_test, $self->{verbose} ? "\n" : ' ' . $self->_dots . ' ');
$self->_vsep($self->_testlen);
#
# Edit mktests.PL and/or parts/inc/MY_CXT instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/SvPV instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/SvREFCNT instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/Sv_set instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/call instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/cop instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/exception instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/grok instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/limits instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/mPUSH instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/magic instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/memory instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/misc instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
require 'testutil.pl' if $@;
}
- if (42) {
+ if (38) {
load();
- plan(tests => 42);
+ plan(tests => 38);
}
}
ok(!defined($s[3]));
ok(!defined($s[4]));
-ok(!defined(&Devel::PPPort::PL_sv_undef()));
-ok(&Devel::PPPort::PL_sv_yes());
-ok(!&Devel::PPPort::PL_sv_no());
-ok(&Devel::PPPort::PL_na("abcd"), 4);
-
ok(&Devel::PPPort::boolSV(1));
ok(!&Devel::PPPort::boolSV(0));
#
# Edit mktests.PL and/or parts/inc/newCONSTSUB instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/newRV instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/podtest instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/ppphtest instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/pvs instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/snprintf instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/strlfuncs instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/sv_xpvf instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/threads instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/uv instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
#
# Edit mktests.PL and/or parts/inc/variables instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {
require 'testutil.pl' if $@;
}
- if (1) {
+ if (36) {
load();
- plan(tests => 1);
+ plan(tests => 36);
}
}
ok(Devel::PPPort::compare_PL_signals());
+ok(!defined(&Devel::PPPort::PL_sv_undef()));
+ok(&Devel::PPPort::PL_sv_yes());
+ok(!&Devel::PPPort::PL_sv_no());
+ok(&Devel::PPPort::PL_na("abcd"), 4);
+ok(&Devel::PPPort::PL_Sv(), "mhx");
+ok(defined &Devel::PPPort::PL_copline());
+ok(&Devel::PPPort::PL_hexdigit() =~ /^[0-9a-zA-Z]+$/);
+ok(defined &Devel::PPPort::PL_hints());
+ok(&Devel::PPPort::PL_ppaddr("mhx"), "MHX");
+
+for (&Devel::PPPort::other_variables()) {
+ ok($_ != 0);
+}
+
#
# Edit mktests.PL and/or parts/inc/warn instead.
#
+# This file was automatically generated from the definition files in the
+# parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+# works, please read the F<HACKERS> file that came with this distribution.
+#
################################################################################
BEGIN {