From acad74ad9dedd627acc10569a429ca3271de29c9 Mon Sep 17 00:00:00 2001 From: "H.Merijn Brand" Date: Sun, 31 Jul 2011 11:39:37 +0200 Subject: Add --list to checkcfgvar.pl --- Porting/checkcfgvar.pl | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/Porting/checkcfgvar.pl b/Porting/checkcfgvar.pl index 0ee7ddbf76..60348855e6 100755 --- a/Porting/checkcfgvar.pl +++ b/Porting/checkcfgvar.pl @@ -1,6 +1,5 @@ -#!/usr/bin/perl -w +#!/usr/bin/perl -# # Check that the various config.sh-clones have (at least) all the # same symbols as the top-level config_h.SH so that the (potentially) # needed symbols are not lagging after how Configure thinks the world @@ -11,10 +10,26 @@ # use strict; +use warnings; + +sub usage +{ + my $err = shift and select STDERR; + print "usage: $0 [--list]\n"; + exit $err; + } # usage + +use Getopt::Long; +my $opt_l = 0; +GetOptions ( + "help|?" => sub { usage (0); }, + "l|list!" => \$opt_l, + ) or usage (1); my $MASTER_CFG = "config_h.SH"; my %MASTER_CFG; +my %lst; my @CFG = ( # This list contains both 5.8.x and 5.9.x files, # we check from MANIFEST whether they are expected to be present. @@ -77,7 +92,13 @@ my @MASTER_CFG = sort keys %MASTER_CFG; sub check_cfg { my ($fn, $cfg) = @_; for my $v (@MASTER_CFG) { - print "$fn: missing '$v'\n" unless exists $cfg->{$v}; + exists $cfg->{$v} and next; + if ($opt_l) { + $lst{$fn}{$v}++; + } + else { + print "$fn: missing '$v'\n"; + } } } @@ -115,3 +136,5 @@ for my $cfg (@CFG) { } check_cfg($cfg, \%cfg); } + +$opt_l and print "$_\n" for sort keys %lst; -- cgit v1.2.1 From dd35fa16610ef2fa0d46f5129e626b99cf350d77 Mon Sep 17 00:00:00 2001 From: "H.Merijn Brand" Date: Sun, 31 Jul 2011 12:11:21 +0200 Subject: Chainsaw out the possibility to disable useperlio This work was actually committed to metaconfig on 16 Feb 2011 --- Configure | 147 ++++++++++++++------------------------------------------------ 1 file changed, 32 insertions(+), 115 deletions(-) diff --git a/Configure b/Configure index d9911f941b..f68f0e79e1 100755 --- a/Configure +++ b/Configure @@ -28,7 +28,7 @@ # See Porting/pumpkin.pod for more information on metaconfig. # -# Generated on Mon Feb 14 23:00:18 CET 2011 [metaconfig 3.5 PL0] +# Generated on Sun Jul 31 12:06:46 CEST 2011 [metaconfig 3.5 PL0] # (with additional metaconfig patches by perlbug@perl.org) cat >c1$$ <. Versions 5.003_02 and later of $package allow -alternate IO mechanisms via the PerlIO abstraction layer, but the -stdio mechanism is still available if needed. The abstraction layer -can use AT&T's sfio (if you already have sfio installed) or regular stdio. -Using PerlIO with sfio may cause problems with some extension modules. - -If this doesn't make any sense to you, just accept the default '$dflt'. -EOM -rp='Use the PerlIO abstraction layer?' -. ./myread -case "$ans" in -y|Y) - val="$define" - ;; -*) - echo "Ok, doing things the stdio way." - val="$undef" - ;; -esac -set useperlio -eval $setvar - -case "$usesocks" in -$define|true|[yY]*) - case "$useperlio" in - $define|true|[yY]*) ;; - *) cat >&4 <&4 @@ -4201,13 +4130,8 @@ $define|true|[yY]*) dflt='y';; *) # Catch case where user specified ithreads or 5005threads but # forgot -Dusethreads (A.D. 4/2002) case "$useithreads$use5005threads" in - *$define*) - case "$useperlio" in - "$define") dflt='y' ;; - *) dflt='n' ;; - esac - ;; - *) dflt='n';; + *$define*) dflt='y';; + *) dflt='n';; esac ;; esac @@ -4309,16 +4233,6 @@ EOM useithreads="$usethreads" fi -if test X"$usethreads" = "X$define" -a "X$useperlio" = "Xundef"; then - cat >&4 <&4 - ;; -*) - echo "Perlio not selected, using stdio." >&4 - case "$archname" in - *-stdio*) echo "...and architecture name already has -stdio." >&4 - ;; - *) archname="$archname-stdio" - echo "...setting architecture name to $archname." >&4 - ;; - esac - ;; -esac if $test -f archname.cbu; then echo "Your platform has some specific hints for architecture name, using them..." . ./archname.cbu @@ -9410,6 +9331,9 @@ EOCP ;; esac +: Check if we want perlio +useperlio="$define" + : Set the vendorbin variables case "$vendorprefix" in '') d_vendorbin="$undef" @@ -17364,17 +17288,10 @@ $define) *) dflt='n';; esac echo "$package can use the sfio library, but it is experimental." - case "$useperlio" in - "$undef") - echo "For sfio also the PerlIO abstraction layer is needed." - echo "Earlier you said you wouldn't want that." - ;; - esac rp="You seem to have sfio available, do you want to try using it?" . ./myread case "$ans" in - y|Y) echo "Ok, turning on both sfio and PerlIO, then." - useperlio="$define" + y|Y) echo "Ok, turning on sfio then." val="$define" ;; *) echo "Ok, avoiding sfio this time. I'll use stdio instead." @@ -23485,16 +23402,16 @@ if $test -f UU/config.sh; then $sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' \ config.sh config.sh UU/oldconfig.sh |\ $sort | $uniq -u >UU/oldsyms - set X `cat UU/oldsyms` + set X `$cat UU/oldsyms` shift case $# in 0) ;; *) - cat <>config.sh - for sym in `cat UU/oldsyms`; do + for sym in `$cat UU/oldsyms`; do echo " Propagating $hint variable "'$'"$sym..." eval 'tmp="$'"${sym}"'"' echo "$tmp" | \ -- cgit v1.2.1 From 668fdbe135fd76c7a654bedba52770966925f562 Mon Sep 17 00:00:00 2001 From: "H.Merijn Brand" Date: Sun, 31 Jul 2011 12:15:23 +0200 Subject: Add st_ino size/sign probes Work initiated by Tony Cook --- Configure | 74 ++++++++++++++++++++++++++++++++++++++++++++++- Cross/config.sh-arm-linux | 2 ++ NetWare/config.wc | 2 ++ Porting/Glossary | 7 +++++ Porting/config.sh | 2 ++ config_h.SH | 10 +++++++ epoc/config.sh | 2 ++ metaconfig.h | 2 ++ plan9/config_sh.sample | 2 ++ symbian/config.sh | 2 ++ uconfig.sh | 2 ++ win32/config.bc | 2 ++ win32/config.ce | 2 ++ win32/config.gc | 2 ++ win32/config.gc64 | 2 ++ win32/config.gc64nox | 2 ++ win32/config.vc | 2 ++ win32/config.vc64 | 2 ++ 18 files changed, 120 insertions(+), 1 deletion(-) diff --git a/Configure b/Configure index f68f0e79e1..74450a95e6 100755 --- a/Configure +++ b/Configure @@ -28,7 +28,7 @@ # See Porting/pumpkin.pod for more information on metaconfig. # -# Generated on Sun Jul 31 12:06:46 CEST 2011 [metaconfig 3.5 PL0] +# Generated on Sun Jul 31 12:11:29 CEST 2011 [metaconfig 3.5 PL0] # (with additional metaconfig patches by perlbug@perl.org) cat >c1$$ <&4 +$cat > try.c < +#include +#$i_stdlib I_STDLIB +#ifdef I_STDLIB +#include +#endif +int main() { + struct stat st; + printf("%d\n", (int)sizeof(st.st_ino)); + exit(0); +} +EOCP +set try +if eval $compile_ok; then + val=`$run ./try` + case "$val" in + '') st_ino_size=4 + $echo "(I can't execute the test program--guessing $st_ino_size.)" >&4 + ;; + *) st_ino_size=$val + $echo "Your st_ino is $st_ino_size bytes long." + ;; + esac +else + st_ino_size=4 + $echo "(I can't compile the test program--guessing $st_ino_size.)" >&4 +fi +$rm_try + +: Check if st_ino is signed +$echo " " +$echo "Checking the sign of st_ino..." >&4 +$cat > try.c < +#include +int main() { + struct stat foo; + foo.st_ino = -1; + if (foo.st_ino < 0) + printf("-1\n"); + else + printf("1\n"); +} +EOCP +set try +if eval $compile; then + val=`$run ./try` + case "$val" in + '') st_ino_sign=1 + $echo "(I can't execute the test program--guessing unsigned.)" >&4 + ;; + *) st_ino_sign=$val + case "$st_ino_sign" in + 1) $echo "Your st_ino is unsigned." ;; + -1) $echo "Your st_ino is signed." ;; + esac + ;; + esac +else + st_ino_sign=1 + $echo "(I can't compile the test program--guessing unsigned.)" >&4 +fi +$rm_try + : see what type of char stdio uses. echo " " echo '#include ' | $cppstdin $cppminus > stdioh @@ -23277,6 +23347,8 @@ srand48_r_proto='$srand48_r_proto' srandom_r_proto='$srandom_r_proto' src='$src' ssizetype='$ssizetype' +st_ino_sign='$st_ino_sign' +st_ino_size='$st_ino_size' startperl='$startperl' startsh='$startsh' static_ext='$static_ext' diff --git a/Cross/config.sh-arm-linux b/Cross/config.sh-arm-linux index 8e72449a02..04624202a7 100644 --- a/Cross/config.sh-arm-linux +++ b/Cross/config.sh-arm-linux @@ -977,6 +977,8 @@ stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' stdio_filbuf='' stdio_ptr='((fp)->_IO_read_ptr)' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='4' strerror_r_proto='0' strings='/usr/include/string.h' submit='' diff --git a/NetWare/config.wc b/NetWare/config.wc index 2c2d1aafa4..e0cd3005d9 100644 --- a/NetWare/config.wc +++ b/NetWare/config.wc @@ -942,6 +942,8 @@ stdio_cnt='((fp)->_cnt)' stdio_filbuf='' stdio_ptr='((fp)->_ptr)' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='4' strerror_r_proto='0' strings='/usr/include/string.h' submit='' diff --git a/Porting/Glossary b/Porting/Glossary index 1826f818c6..9134dfa1b6 100644 --- a/Porting/Glossary +++ b/Porting/Glossary @@ -4750,6 +4750,13 @@ ssizetype (ssizetype.U): of bytes or an error condition. It must be a signed type. We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). +st_ino_sign (st_ino_def.U): + This variable contains the signedness of struct stat's st_ino. + 1 for unsigned, -1 for signed. + +st_ino_size (st_ino_def.U): + This variable contains the size of struct stat's st_ino in bytes. + startperl (startperl.U): This variable contains the string to put on the front of a perl script to make sure (hopefully) that it runs with perl and not some diff --git a/Porting/config.sh b/Porting/config.sh index 4e3c8d3b13..99a909722f 100644 --- a/Porting/config.sh +++ b/Porting/config.sh @@ -999,6 +999,8 @@ stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' stdio_filbuf='' stdio_ptr='((fp)->_IO_read_ptr)' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='4' strerror_r_proto='0' strings='/usr/include/string.h' submit='' diff --git a/config_h.SH b/config_h.SH index 2f3e5bdcb3..2903587a8e 100755 --- a/config_h.SH +++ b/config_h.SH @@ -4387,6 +4387,16 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #define SELECT_MIN_BITS $selectminbits /**/ +/* ST_INO_SIZE: + * This variable contains the size of struct stat's st_ino in bytes. + */ +/* ST_INO_SIGN: + * This symbol holds the signedess of struct stat's st_ino. + * 1 for unsigned, -1 for signed. + */ +#define ST_INO_SIGN $st_ino_sign /* st_ino sign */ +#define ST_INO_SIZE $st_ino_size /* st_ino size */ + /* STARTPERL: * This variable contains the string to put in front of a perl * script to make sure (one hopes) that it runs with perl and not diff --git a/epoc/config.sh b/epoc/config.sh index eedc6a8b23..5c7f6d51f1 100644 --- a/epoc/config.sh +++ b/epoc/config.sh @@ -858,6 +858,8 @@ stdio_cnt='' stdio_filbuf='' stdio_ptr='' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='4' strerror_r_proto='0' strings='' submit='' diff --git a/metaconfig.h b/metaconfig.h index 95aba26b87..d445b34391 100644 --- a/metaconfig.h +++ b/metaconfig.h @@ -35,6 +35,8 @@ * LOCALTIME_MAX * LOCALTIME_MIN * LOCALTIME_R_NEEDS_TZSET + * ST_INO_SIGN + * ST_INO_SIZE * U16SIZE * U32SIZE * U64SIZE diff --git a/plan9/config_sh.sample b/plan9/config_sh.sample index 79d8f555f5..f560115b3e 100644 --- a/plan9/config_sh.sample +++ b/plan9/config_sh.sample @@ -948,6 +948,8 @@ stdio_cnt='((fp)->_cnt)' stdio_filbuf='' stdio_ptr='((fp)->_ptr)' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='4' strerror_r_proto='0' strings='/sys/include/ape/string.h' submit='' diff --git a/symbian/config.sh b/symbian/config.sh index 7e47f6232a..2e531ae34d 100644 --- a/symbian/config.sh +++ b/symbian/config.sh @@ -779,6 +779,8 @@ stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' stdio_filbuf='' stdio_ptr='((fp)->_IO_read_ptr)' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='4' strerror_r_proto='0' targetarch='thumb-symbian' timetype=time_t diff --git a/uconfig.sh b/uconfig.sh index 5fb50a01a8..1798d0d6d4 100644 --- a/uconfig.sh +++ b/uconfig.sh @@ -745,6 +745,8 @@ stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' stdio_filbuf='' stdio_ptr='((fp)->_IO_read_ptr)' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='4' strerror_r_proto='0' targetarch='' timetype=time_t diff --git a/win32/config.bc b/win32/config.bc index fe74f6834c..2dc5063838 100644 --- a/win32/config.bc +++ b/win32/config.bc @@ -973,6 +973,8 @@ stdio_cnt='((fp)->level)' stdio_filbuf='' stdio_ptr='((fp)->curp)' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='4' strerror_r_proto='0' strings='/usr/include/string.h' submit='' diff --git a/win32/config.ce b/win32/config.ce index 5f87f64b16..47eeb71968 100644 --- a/win32/config.ce +++ b/win32/config.ce @@ -934,6 +934,8 @@ stdio_cnt='' stdio_filbuf='' stdio_ptr='' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='4' strerror_r_proto='0' strings='/usr/include/string.h' submit='' diff --git a/win32/config.gc b/win32/config.gc index 2c3f9e6b6b..c49a27bfca 100644 --- a/win32/config.gc +++ b/win32/config.gc @@ -973,6 +973,8 @@ stdio_cnt='((fp)->_cnt)' stdio_filbuf='' stdio_ptr='((fp)->_ptr)' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='4' strerror_r_proto='0' strings='/usr/include/string.h' submit='' diff --git a/win32/config.gc64 b/win32/config.gc64 index 876bcda720..c883708be8 100644 --- a/win32/config.gc64 +++ b/win32/config.gc64 @@ -974,6 +974,8 @@ stdio_cnt='((fp)->_cnt)' stdio_filbuf='' stdio_ptr='((fp)->_ptr)' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='8' strerror_r_proto='0' strings='/usr/include/string.h' submit='' diff --git a/win32/config.gc64nox b/win32/config.gc64nox index c70aa96f34..0fe790490d 100644 --- a/win32/config.gc64nox +++ b/win32/config.gc64nox @@ -974,6 +974,8 @@ stdio_cnt='((fp)->_cnt)' stdio_filbuf='' stdio_ptr='((fp)->_ptr)' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='8' strerror_r_proto='0' strings='/usr/include/string.h' submit='' diff --git a/win32/config.vc b/win32/config.vc index 6f4ddace40..3495a2369c 100644 --- a/win32/config.vc +++ b/win32/config.vc @@ -973,6 +973,8 @@ stdio_cnt='((fp)->_cnt)' stdio_filbuf='' stdio_ptr='((fp)->_ptr)' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='4' strerror_r_proto='0' strings='/usr/include/string.h' submit='' diff --git a/win32/config.vc64 b/win32/config.vc64 index fd903894da..c9b1cb77cb 100644 --- a/win32/config.vc64 +++ b/win32/config.vc64 @@ -973,6 +973,8 @@ stdio_cnt='((fp)->_cnt)' stdio_filbuf='' stdio_ptr='((fp)->_ptr)' stdio_stream_array='' +st_ino_sign='1' +st_ino_size='8' strerror_r_proto='0' strings='/usr/include/string.h' submit='' -- cgit v1.2.1 From dcfe4a1a1f7d8d2807eecaeae5cb1d84d060af3c Mon Sep 17 00:00:00 2001 From: "H.Merijn Brand" Date: Sun, 31 Jul 2011 12:52:13 +0200 Subject: regen perl regen/uconfig_h.pl is NOT done in "make regen" :( --- uconfig.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/uconfig.h b/uconfig.h index c17d9233f4..c8eeed00c7 100644 --- a/uconfig.h +++ b/uconfig.h @@ -4354,6 +4354,16 @@ */ #define SELECT_MIN_BITS 32 /**/ +/* ST_INO_SIZE: + * This variable contains the size of struct stat's st_ino in bytes. + */ +/* ST_INO_SIGN: + * This symbol holds the signedess of struct stat's st_ino. + * 1 for unsigned, -1 for signed. + */ +#define ST_INO_SIGN 1 /* st_ino sign */ +#define ST_INO_SIZE 4 /* st_ino size */ + /* STARTPERL: * This variable contains the string to put in front of a perl * script to make sure (one hopes) that it runs with perl and not @@ -4686,6 +4696,6 @@ #endif /* Generated from: - * 323778627146f2762cd41f4dd1db6659f59006ec9bcaaf6bcc645d0380dda938 config_h.SH - * 0af1263ef6eca52a40334d5df3744c198c20b7f8d4b087dbf445e2e387459eeb uconfig.sh + * 0f70463fec894befd8b575cde82695d5f1ad41a02f78afd34357a24f7b069d05 config_h.SH + * 9ea5c7e8b0b32c76caab5a89a371b8cdce6efcf690a5a74962b9b856fab49fed uconfig.sh * ex: set ro: */ -- cgit v1.2.1 From 7698aede74509727f7bca31c58fc7a53b182315d Mon Sep 17 00:00:00 2001 From: Keith Thompson Date: Fri, 29 Jul 2011 17:17:00 -0700 Subject: Fix typos in several pod/perl*.pod files --- pod/perlfunc.pod | 8 ++++---- pod/perlglossary.pod | 10 +++++----- pod/perlmod.pod | 4 ++-- pod/perlretut.pod | 6 +++--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index 5255c4183a..f73026b78d 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -4014,7 +4014,7 @@ count. A numeric repeat count may optionally be enclosed in brackets, as in C. The repeat count gobbles that many values from the LIST when used with all format types other than C, C, C, C, C, C, C, C<@>, C<.>, C, C, and C

, where it means -something else, dscribed below. Supplying a C<*> for the repeat count +something else, described below. Supplying a C<*> for the repeat count instead of a number means to use however many items are left, except for: =over @@ -6006,7 +6006,7 @@ sometimes saying the opposite, for example) the results are not well-defined. Because C<< <=> >> returns C when either operand is C -(not-a-number), and laso because C raises an exception unless the +(not-a-number), and also because C raises an exception unless the result of a comparison is defined, be careful when sorting with a comparison function like C<< $a <=> $b >> any lists that might contain a C. The following example takes advantage that C to @@ -6094,7 +6094,7 @@ specified. A pattern matching the empty string (not to be confused with an empty pattern C, which is just one member of the set of patterns -matching the epmty string), splits EXPR into individual +matching the empty string), splits EXPR into individual characters. For example: print join(':', split(/ */, 'hi there')), "\n"; @@ -6358,7 +6358,7 @@ For example: printf '<%.1e>', 10; # prints "<1.0e+01>" For "g" and "G", this specifies the maximum number of digits to show, -including thoe prior to the decimal point and those after it; for +including those prior to the decimal point and those after it; for example: # These examples are subject to system-specific variation. diff --git a/pod/perlglossary.pod b/pod/perlglossary.pod index 2389872ca1..4d8bf00e44 100644 --- a/pod/perlglossary.pod +++ b/pod/perlglossary.pod @@ -507,7 +507,7 @@ the class (its L). See also L. =item class method -A L whose L is a L name, not an +A L whose L is a L name, not an L reference. A method associated with the class as a whole. =item client @@ -1470,7 +1470,7 @@ Perl, C can be understood as "verb indirect-object object" where L is the recipient of the L action, and C<"$foo"> is the object being printed. Similarly, when invoking a L, you might place the -invocand between the method and its arguments: +invocant between the method and its arguments: $gollum = new Pathetic::Creature "Smeagol"; give $gollum "Fisssssh!"; @@ -1548,11 +1548,11 @@ of compiler that takes a program and turns it into a more executable form (L) within the I process itself, which the Perl L system then interprets. -=item invocand +=item invocant The agent on whose behalf a L is invoked. In a L -method, the invocand is a package name. In an L method, -the invocand is an object reference. +method, the invocant is a package name. In an L method, +the invocant is an object reference. =item invocation diff --git a/pod/perlmod.pod b/pod/perlmod.pod index eb66216916..f02193324f 100644 --- a/pod/perlmod.pod +++ b/pod/perlmod.pod @@ -575,7 +575,7 @@ like for example handle the cloning of non-Perl data, if necessary. C will be called once as a class method for every package that has it defined (or inherits it). It will be called in the context of the new thread, so all modifications are made in the new area. Currently CLONE is called with -no parameters other than the invocand package name, but code should not assume +no parameters other than the invocant package name, but code should not assume that this will remain unchanged, as it is likely that in future extra parameters will be passed in to give more information about the state of cloning. @@ -597,7 +597,7 @@ to make use of the objects, then a more sophisticated approach is needed. Like C, C is currently called with no parameters other -than the invocand package name, although that may change. Similarly, to +than the invocant package name, although that may change. Similarly, to allow for future expansion, the return value should be a single C<0> or C<1> value. diff --git a/pod/perlretut.pod b/pod/perlretut.pod index af7ac32836..928dfb5732 100644 --- a/pod/perlretut.pod +++ b/pod/perlretut.pod @@ -781,7 +781,7 @@ so may lead to surprising and unsatisfactory results. =head2 Relative backreferences Counting the opening parentheses to get the correct number for a -backreference is errorprone as soon as there is more than one +backreference is error-prone as soon as there is more than one capturing group. A more convenient technique became available with Perl 5.10: relative backreferences. To refer to the immediately preceding capture group one now may write C<\g{-1}>, the next but @@ -1537,7 +1537,7 @@ the regexp in the I is used instead. So we have =head3 Global matching -The final two modifiers we will disccuss here, +The final two modifiers we will discuss here, C and C, concern multiple matches. The modifier C stands for global matching and allows the matching operator to match within a string as many times as possible. @@ -1870,7 +1870,7 @@ substituted. C<\Q>, C<\L>, C<\l>, C<\U>, C<\u> and C<\E> are actually part of double-quotish syntax, and not part of regexp syntax proper. They will -work if they appear in a regular expression embeddded directly in a +work if they appear in a regular expression embedded directly in a program, but not when contained in a string that is interpolated in a pattern. -- cgit v1.2.1 From 1cecf2c07f6a6e8177808fa5946a6ba12a5f52cf Mon Sep 17 00:00:00 2001 From: Keith Thompson Date: Sat, 30 Jul 2011 19:16:52 -0700 Subject: More typo fixes in pod/perl*.pod files --- pod/perl5100delta.pod | 2 +- pod/perl51311delta.pod | 2 +- pod/perl5140delta.pod | 2 +- pod/perl5150delta.pod | 2 +- pod/perl5151delta.pod | 2 +- pod/perl595delta.pod | 2 +- pod/perldiag.pod | 2 +- pod/perlhack.pod | 2 +- pod/perlperf.pod | 2 +- pod/perlpod.pod | 2 +- pod/perlreapi.pod | 2 +- pod/perlrecharclass.pod | 2 +- pod/perlvms.pod | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pod/perl5100delta.pod b/pod/perl5100delta.pod index e93c316954..4e5c6d3a2b 100644 --- a/pod/perl5100delta.pod +++ b/pod/perl5100delta.pod @@ -844,7 +844,7 @@ of C. =item * C is a generic archive extraction mechanism -for F<.tar> (plain, gziped or bzipped) or F<.zip> files. +for F<.tar> (plain, gzipped or bzipped) or F<.zip> files. =item * diff --git a/pod/perl51311delta.pod b/pod/perl51311delta.pod index 976eba3fcf..812af75134 100644 --- a/pod/perl51311delta.pod +++ b/pod/perl51311delta.pod @@ -233,7 +233,7 @@ C has been upgraded from version 0.97_01 to 0.98 C has been upgraded from version 0.07 to 0.08. -Some of the Perl code has been converted to XS for efficency's sake. +Some of the Perl code has been converted to XS for efficiency's sake. =item * diff --git a/pod/perl5140delta.pod b/pod/perl5140delta.pod index 17faea868c..51060aca52 100644 --- a/pod/perl5140delta.pod +++ b/pod/perl5140delta.pod @@ -2888,7 +2888,7 @@ When C became the default and C became the default bottom layer, the most common path for creating files from Perl became C, which has always explicitly used C<0666> as the permission mask. This prevents inheriting permissions from RMS defaults and ACLs, so to avoid that problem, -we now pass C<0777> to open(). In theVMS CRTL, C<0777> has a special +we now pass C<0777> to open(). In the VMS CRTL, C<0777> has a special meaning over and above intersecting with the current umask; specifically, it allows Unix syscalls to preserve native default permissions (5.12.3). diff --git a/pod/perl5150delta.pod b/pod/perl5150delta.pod index c783b495a9..4966207c1d 100644 --- a/pod/perl5150delta.pod +++ b/pod/perl5150delta.pod @@ -1184,7 +1184,7 @@ L has (undiagnosed) test failures. =head1 Acknowledgements -Perl 5.15.0 represents approximatly five weeks of development since Perl +Perl 5.15.0 represents approximately five weeks of development since Perl 5.14.0 and contains approximately 54,000 lines of changes across 618 files from 57 authors. diff --git a/pod/perl5151delta.pod b/pod/perl5151delta.pod index 861f5cf662..f9ae49f399 100644 --- a/pod/perl5151delta.pod +++ b/pod/perl5151delta.pod @@ -430,7 +430,7 @@ L. =item * -The expermental C function has been renamed to +The experimental C function has been renamed to C. =item * diff --git a/pod/perl595delta.pod b/pod/perl595delta.pod index 246b2cc747..097b6b4dc7 100644 --- a/pod/perl595delta.pod +++ b/pod/perl595delta.pod @@ -362,7 +362,7 @@ of C. =item * C is a generic archive extraction mechanism -for F<.tar> (plain, gziped or bzipped) or F<.zip> files. +for F<.tar> (plain, gzipped or bzipped) or F<.zip> files. =item * diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 2c675fdc94..f508db8c38 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -104,7 +104,7 @@ really meant to multiply a glob by the result of calling a function. (W ambiguous) You wrote something like C<@{foo}>, which might be asking for the variable C<@foo>, or it might be calling a function named foo, and dereferencing it as an array reference. If you wanted -the varable, you can just write C<@foo>. If you wanted to call the +the variable, you can just write C<@foo>. If you wanted to call the function, write C<@{foo()}> ... or you could just not have a variable and a function with the same name, and save yourself a lot of trouble. diff --git a/pod/perlhack.pod b/pod/perlhack.pod index 3364d3259d..1bf2b882b8 100644 --- a/pod/perlhack.pod +++ b/pod/perlhack.pod @@ -1080,7 +1080,7 @@ each file's purpose. Perl instead begins each with a literary allusion to that file's purpose. Like chapters in many books, all top-level Perl source files (along -with a few others here and there) begin with an epigramic inscription +with a few others here and there) begin with an epigrammatic inscription that alludes, indirectly and metaphorically, to the material you're about to read. diff --git a/pod/perlperf.pod b/pod/perlperf.pod index 4751e3591c..007a02bc87 100644 --- a/pod/perlperf.pod +++ b/pod/perlperf.pod @@ -597,7 +597,7 @@ the code. C will generate a report database into the file F by default. Human readable reports can be generated from here by using the supplied C (HTML output) and C (CSV output) programs. -We've used the Unix sytem C utility to convert the +We've used the Unix system C utility to convert the F file for convenience here. $> html2text nytprof/index.html diff --git a/pod/perlpod.pod b/pod/perlpod.pod index 068afe4177..0491dec1b7 100644 --- a/pod/perlpod.pod +++ b/pod/perlpod.pod @@ -238,7 +238,7 @@ region. That is, with "=for", you can have only one paragraph's worth of text (i.e., the text in "=foo targetname text..."), but with "=begin targetname" ... "=end targetname", you can have any amount -of stuff inbetween. (Note that there still must be a blank line +of stuff in between. (Note that there still must be a blank line after the "=begin" command and a blank line before the "=end" command. diff --git a/pod/perlreapi.pod b/pod/perlreapi.pod index be75c84a06..e2a48e34d3 100644 --- a/pod/perlreapi.pod +++ b/pod/perlreapi.pod @@ -586,7 +586,7 @@ Substring data about strings that must appear in the final match. This is currently only used internally by perl's engine for but might be used in the future for all engines for optimisations. -=head2 C, C, and C +=head2 C, C, and C These fields are used to keep track of how many paren groups could be matched in the pattern, which was the last open paren to be entered, and which was diff --git a/pod/perlrecharclass.pod b/pod/perlrecharclass.pod index c79d1e6505..0e583fd902 100644 --- a/pod/perlrecharclass.pod +++ b/pod/perlrecharclass.pod @@ -423,7 +423,7 @@ Examples: ------- * There is an exception to a bracketed character class matching a -single character only. When the class is to match caselessely under C +single character only. When the class is to match caselessly under C matching rules, and a character inside the class matches a multiple-character sequence caselessly under Unicode rules, the class (when not L) will also match that sequence. For diff --git a/pod/perlvms.pod b/pod/perlvms.pod index 241a66c39a..d88e6b14be 100644 --- a/pod/perlvms.pod +++ b/pod/perlvms.pod @@ -409,7 +409,7 @@ internal Perl problems that would cause such a condition. This allows the programmer to look at the execution stack and variables to find out the cause of the exception. As the debugger is being invoked as the Perl interpreter is about to do a fatal exit, continuing the execution -in debug mode is usally not practical. +in debug mode is usually not practical. Starting Perl in the VMS debugger may change the program execution profile in a way that such problems are not reproduced. -- cgit v1.2.1 From 7bac4ce875653e750e72aa5038f1e68d9d52e2e9 Mon Sep 17 00:00:00 2001 From: Gerard Goossen Date: Sat, 11 Jun 2011 22:14:03 +0200 Subject: inifinite loop breaking some strict checking, TODO test. --- t/lib/strict/subs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/t/lib/strict/subs b/t/lib/strict/subs index 87311f8a16..394c8d1390 100644 --- a/t/lib/strict/subs +++ b/t/lib/strict/subs @@ -432,3 +432,13 @@ ret foo: ret bar +######## +# TODO infinite loop breaks some strict checking +use strict 'subs'; +sub foo { + 1 while 1; + kill FOO, 1; +} +EXPECT +Bareword "FOO" not allowed while "strict subs" in use at - line 5. +Execution of - aborted due to compilation errors. -- cgit v1.2.1 From aee4f0726bf1b8c07328b3ce48d9d32383d4ae2c Mon Sep 17 00:00:00 2001 From: Gerard Goossen Date: Sun, 31 Jul 2011 13:46:34 +0200 Subject: Call finalize_optree on optree generated by newFORM. finalize_optree should be called on all optrees, thus also on optrees generated by newFORM. I don't really understand why this doesn't cause any problems. --- op.c | 1 + 1 file changed, 1 insertion(+) diff --git a/op.c b/op.c index 915dd78907..68aa1a7b1d 100644 --- a/op.c +++ b/op.c @@ -6998,6 +6998,7 @@ Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block) CvSTART(cv) = LINKLIST(CvROOT(cv)); CvROOT(cv)->op_next = 0; CALL_PEEP(CvSTART(cv)); + finalize_optree(CvROOT(cv)); #ifdef PERL_MAD op_getmad(o,pegop,'n'); op_getmad_weak(block, pegop, 'b'); -- cgit v1.2.1 From 9cc672d43dc2542ea8342fe09009861906e034e7 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Sun, 31 Jul 2011 14:44:41 -0700 Subject: =?UTF-8?q?perlfunc:=20Note=20that=20eval=20"last"=20doesn?= =?UTF-8?q?=E2=80=99t=20set=20$@?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This resolves perl #86140 by making the docs match the longstanding behaviour. --- pod/perlfunc.pod | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index f73026b78d..8e5bd663b6 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -1656,8 +1656,9 @@ or an empty list--or, for syntax errors, a list containing a single undefined value--in list context, and C<$@> is set to the error message. The discrepancy in the return values in list context is considered a bug by some, and will probably be fixed in a future -release. If there was no error, C<$@> is guaranteed to be the empty -string. Beware that using C neither silences Perl from printing +release. If there was no error, C<$@> is set to the empty string. A +control flow operator like C or C can bypass the setting of +C<$@>. Beware that using C neither silences Perl from printing warnings to STDERR, nor does it stuff the text of warning messages into C<$@>. To do either of those, you have to use the C<$SIG{__WARN__}> facility, or turn off warnings inside the BLOCK or EXPR using S>. -- cgit v1.2.1 From df4833a805257d77e95c7fd839a7761a513edcb3 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Sun, 31 Jul 2011 14:48:24 -0700 Subject: Consistency tweaks in perlfunc/eval --- pod/perlfunc.pod | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index 8e5bd663b6..062f0f2bee 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -1625,7 +1625,7 @@ In the first form, the return value of EXPR is parsed and executed as if it were a little Perl program. The value of the expression (which is itself determined within scalar context) is first parsed, and if there were no errors, executed as a block within the lexical context of the current Perl -program. This means, that in particular, any outer lexical variables are +program. This means, that in particular, any outer lexical variables are visible to it, and any package variable settings or subroutine and format definitions remain afterwards. @@ -1671,7 +1671,7 @@ the die operator is used to raise exceptions. If you want to trap errors when loading an XS module, some problems with the binary interface (such as Perl version skew) may be fatal even with -C unless C<$ENV{PERL_DL_NONLAZY}> is set. See L. +C unless C<$ENV{PERL_DL_NONLAZY}> is set. See L. If the code to be executed doesn't vary, you may use the eval-BLOCK form to trap run-time errors without incurring the penalty of @@ -1759,7 +1759,7 @@ C, C, or C cannot be used to leave or restart the block. An C executed within the C package doesn't see the usual surrounding lexical scope, but rather the scope of the first non-DB piece -of code that called it. You don't normally need to worry about this unless +of code that called it. You don't normally need to worry about this unless you are writing a Perl debugger. =item exec LIST -- cgit v1.2.1 From adf2bd28379ca9e5a3b5fa0aad7afb4d9a42e5ea Mon Sep 17 00:00:00 2001 From: "Craig A. Berry" Date: Sun, 31 Jul 2011 17:13:00 -0500 Subject: st_ino settings for configure.com. Follow-up to 668fdbe135fd76c7a654bedba52770966925f562. --- configure.com | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/configure.com b/configure.com index 642d0bbc8b..d87ef18e67 100644 --- a/configure.com +++ b/configure.com @@ -6746,6 +6746,13 @@ $ WC "src='" + src + "'" $ WC "ssizetype='int'" $ WC "startperl=" + startperl ! This one's special--no enclosing single quotes $ WC "static_ext='" + static_ext + "'" +$ IF uselargefiles .OR. uselargefiles .eqs. "define" +$ THEN +$ WC "st_ino_size='sizeof(__ino64_t)'" +$ ELSE +$ WC "st_ino_size='(sizeof(unsigned short)*3)'" +$ ENDIF +$ WC "st_ino_sign='1'" $ WC "stdchar='" + stdchar + "'" $ WC "stdio_base='((*fp)->_base)'" $ WC "stdio_bufsiz='((*fp)->_cnt + (*fp)->_ptr - (*fp)->_base)'" -- cgit v1.2.1 From 712b953a2cdbb6f01a4a7bc669341e1afb80324c Mon Sep 17 00:00:00 2001 From: "Craig A. Berry" Date: Sun, 31 Jul 2011 17:23:19 -0500 Subject: Weld switch in on position for useperlio in configure.com. Follow-up to dd35fa16610ef2fa0d46f5129e626b99cf350d77. --- configure.com | 43 +++---------------------------------------- 1 file changed, 3 insertions(+), 40 deletions(-) diff --git a/configure.com b/configure.com index d87ef18e67..b298ffa764 100644 --- a/configure.com +++ b/configure.com @@ -928,7 +928,7 @@ $ config_symbols0 ="|archlib|archlibexp|bin|binexp|builddir|cf_email|config_sh $ config_symbols1 ="|installprivlib|installscript|installsitearch|installsitelib|most|oldarchlib|oldarchlibexp|osname|pager|perl_symbol|perl_verb|" $ config_symbols2 ="|prefix|privlib|privlibexp|scriptdir|sitearch|sitearchexp|sitebin|sitelib|sitelib_stem|sitelibexp|try_cxx|use64bitall|use64bitint|" $ config_symbols3 ="|usecasesensitive|usedefaulttypes|usedevel|useieee|useithreads|uselongdouble|usemultiplicity|usemymalloc|usedebugging_perl|" -$ config_symbols4 ="|useperlio|usesecurelog|usethreads|usevmsdebug|usefaststdio|usemallocwrap|unlink_all_versions|uselargefiles|usesitecustomize|" +$ config_symbols4 ="|usesecurelog|usethreads|usevmsdebug|usefaststdio|usemallocwrap|unlink_all_versions|uselargefiles|usesitecustomize|" $ config_symbols5 ="|buildmake|builder|usethreadupcalls|usekernelthreads|useshortenedsymbols" $! $ open/read CONFIG 'config_sh' @@ -3133,37 +3133,6 @@ $ GOTO Clean_up $ ENDIF $ ENDIF $! -$! PerlIO abstraction -$! -$ bool_dflt = "y" -$ IF F$TYPE(useperlio) .NES. "" -$ then -$ if .not. useperlio .or. useperlio .eqs. "undef" then bool_dflt = "n" -$ endif -$ IF .NOT. silent -$ THEN -$ echo "Previous versions of ''package' used the standard IO mechanisms as" -$ TYPE SYS$INPUT: -$ DECK -defined in . Versions 5.003_02 and later of perl allow -alternate IO mechanisms via the PerlIO abstraction layer, but the -stdio mechanism is still available if needed. The abstraction layer -can use AT&T's sfio (if you already have sfio installed) or regular stdio. -Using PerlIO with sfio may cause problems with some extension modules. - -$ EOD -$ echo "If this does not make any sense to you, just accept the default '" + bool_dflt + "'." -$ ENDIF -$ rp = "Use the PerlIO abstraction layer? [''bool_dflt'] " -$ GOSUB myread -$ IF ans -$ THEN -$ useperlio = "define" -$ ELSE -$ echo "Ok, doing things the stdio way." -$ useperlio = "undef" -$ ENDIF -$! $ echo "" $ echo4 "Checking the C run-time library." $! @@ -4523,18 +4492,12 @@ $! THEN dflt = "y" $! ELSE dflt = "n" $! ENDIF $! echo "''package' can use the sfio library, but it is experimental." -$! IF useperlio .EQS. "undef" -$! THEN -$! echo "For sfio also the PerlIO abstraction layer is needed." -$! echo "Earlier you said you would not want that." -$! ENDIF $! rp="You seem to have sfio available, do you want to try using it? [''dflt'] " $! GOSUB myread $! IF ans .EQS. "" THEN ans = dflt $! IF ans $! THEN -$! echo "Ok, turning on both sfio and PerlIO, then." -$! useperlio="define" +$! echo "Ok, turning on sfio then." $! val="define" $! ELSE $! echo "Ok, avoiding sfio this time. I'll use stdio instead." @@ -6794,7 +6757,7 @@ $ WC "uselongdouble='" + uselongdouble + "'" $ WC "usemorebits='" + usemorebits + "'" $ WC "usemultiplicity='" + usemultiplicity + "'" $ WC "usemymalloc='" + usemymalloc + "'" -$ WC "useperlio='" + useperlio + "'" +$ WC "useperlio='define'" $ WC "useposix='false'" $ WC "usereentrant='undef'" $ WC "userelocatableinc='undef'" -- cgit v1.2.1 From 2cd46bfd6d03cd8826c5e968efdd36416191bc8f Mon Sep 17 00:00:00 2001 From: Karl Williamson Date: Sun, 31 Jul 2011 16:51:04 -0600 Subject: podcheck.t: Correctly count columns The comment being removed that justified the +1 also being removed is specious; it did not consider the size of the line being output. --- t/porting/known_pod_issues.dat | 137 ++++++++++++++++++----------------------- t/porting/podcheck.t | 7 +-- 2 files changed, 62 insertions(+), 82 deletions(-) diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index 6d58627466..afc179c07e 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -132,7 +132,7 @@ Win32::Locale YAML YAML::Syck YAML::Tiny -dist/attribute-handlers/lib/attribute/handlers.pm Verbatim line length including indents exceeds 80 by 19 +dist/attribute-handlers/lib/attribute/handlers.pm Verbatim line length including indents exceeds 80 by 17 dist/base/lib/fields.pm Verbatim line length including indents exceeds 80 by 1 dist/bignum/lib/bigint.pm Apparent broken link 1 dist/bignum/lib/bigint.pm Verbatim line length including indents exceeds 80 by 1 @@ -146,155 +146,148 @@ dist/cwd/lib/file/spec/unix.pm Verbatim line length including indents exceeds 80 dist/cwd/lib/file/spec/vms.pm Verbatim line length including indents exceeds 80 by 1 dist/cwd/lib/file/spec/win32.pm Verbatim line length including indents exceeds 80 by 1 dist/data-dumper/dumper.pm ? Should you be using L<...> instead of 1 -dist/data-dumper/dumper.pm Verbatim line length including indents exceeds 80 by 2 +dist/data-dumper/dumper.pm Verbatim line length including indents exceeds 80 by 1 dist/extutils-install/lib/extutils/installed.pm Verbatim line length including indents exceeds 80 by 2 dist/extutils-parsexs/lib/extutils/typemaps.pm Verbatim line length including indents exceeds 80 by 4 dist/extutils-parsexs/lib/extutils/typemaps/outputmap.pm Verbatim line length including indents exceeds 80 by 1 dist/extutils-parsexs/lib/perlxs.pod Verbatim line length including indents exceeds 80 by 4 -dist/extutils-parsexs/lib/perlxstut.pod Verbatim line length including indents exceeds 80 by 10 +dist/extutils-parsexs/lib/perlxstut.pod Verbatim line length including indents exceeds 80 by 9 dist/filter-simple/lib/filter/simple.pm Verbatim paragraph in NAME section 1 dist/i18n-langtags/lib/i18n/langtags.pm Verbatim line length including indents exceeds 80 by 2 dist/io/io.pm Verbatim line length including indents exceeds 80 by 1 -dist/io/lib/io/socket/inet.pm Verbatim line length including indents exceeds 80 by 5 +dist/io/lib/io/socket/inet.pm Verbatim line length including indents exceeds 80 by 3 dist/locale-maketext/lib/locale/maketext.pod No items in =over / =back list 1 dist/locale-maketext/lib/locale/maketext.pod Verbatim line length including indents exceeds 80 by 1 dist/locale-maketext/lib/locale/maketext/tpj13.pod No items in =over / =back list 3 dist/math-bigint/lib/math/bigfloat.pm Apparent broken link 7 dist/math-bigint/lib/math/bigfloat.pm Apparent internal link is missing its forward slash 6 -dist/math-bigint/lib/math/bigfloat.pm Verbatim line length including indents exceeds 80 by 28 +dist/math-bigint/lib/math/bigfloat.pm Verbatim line length including indents exceeds 80 by 25 dist/math-bigint/lib/math/bigint.pm Apparent broken link 5 dist/math-bigint/lib/math/bigint.pm Apparent internal link is missing its forward slash 7 -dist/math-bigint/lib/math/bigint.pm Verbatim line length including indents exceeds 80 by 122 +dist/math-bigint/lib/math/bigint.pm Verbatim line length including indents exceeds 80 by 109 dist/math-bigint/lib/math/bigint.pm empty section in previous paragraph 1 dist/math-bigint/lib/math/bigint/calcemu.pm Apparent broken link 1 dist/math-bigint/lib/math/bigint/calcemu.pm empty section in previous paragraph 3 dist/math-bigrat/lib/math/bigrat.pm Apparent broken link 3 dist/math-bigrat/lib/math/bigrat.pm Apparent internal link is missing its forward slash 1 -dist/math-bigrat/lib/math/bigrat.pm Verbatim line length including indents exceeds 80 by 7 -dist/module-corelist/blib/script/corelist Verbatim line length including indents exceeds 80 by 1 +dist/math-bigrat/lib/math/bigrat.pm Verbatim line length including indents exceeds 80 by 5 dist/module-corelist/lib/module/corelist.pm Verbatim line length including indents exceeds 80 by 4 dist/net-ping/lib/net/ping.pm Verbatim line length including indents exceeds 80 by 2 -dist/perlfaq/lib/perlfaq2.pod Verbatim line length including indents exceeds 80 by 1 -dist/perlfaq/lib/perlfaq4.pod Verbatim line length including indents exceeds 80 by 16 -dist/perlfaq/lib/perlfaq5.pod Verbatim line length including indents exceeds 80 by 40 -dist/perlfaq/lib/perlfaq6.pod Verbatim line length including indents exceeds 80 by 36 +dist/perlfaq/lib/perlfaq4.pod Verbatim line length including indents exceeds 80 by 14 +dist/perlfaq/lib/perlfaq5.pod Verbatim line length including indents exceeds 80 by 32 +dist/perlfaq/lib/perlfaq6.pod Verbatim line length including indents exceeds 80 by 34 dist/perlfaq/lib/perlfaq7.pod Verbatim line length including indents exceeds 80 by 7 dist/perlfaq/lib/perlfaq8.pod Verbatim line length including indents exceeds 80 by 20 dist/perlfaq/lib/perlfaq9.pod Verbatim line length including indents exceeds 80 by 7 -dist/safe/safe.pm Verbatim line length including indents exceeds 80 by 1 dist/safe/safe.pm empty section in previous paragraph 1 -dist/selfloader/lib/selfloader.pm Verbatim line length including indents exceeds 80 by 14 -dist/storable/storable.pm Verbatim line length including indents exceeds 80 by 4 +dist/selfloader/lib/selfloader.pm Verbatim line length including indents exceeds 80 by 10 +dist/storable/storable.pm Verbatim line length including indents exceeds 80 by 3 dist/term-readline/lib/term/readline.pm Verbatim line length including indents exceeds 80 by 1 dist/thread-queue/lib/thread/queue.pm Verbatim line length including indents exceeds 80 by 4 dist/threads/lib/threads.pm Verbatim line length including indents exceeds 80 by 3 -ext/b/b.pm Verbatim line length including indents exceeds 80 by 1 ext/b/b/concise.pm Verbatim line length including indents exceeds 80 by 1 ext/devel-peek/peek.pm ? Should you be using L<...> instead of 2 ext/devel-peek/peek.pm Verbatim line length including indents exceeds 80 by 2 ext/dynaloader/dynaloader.pm Verbatim line length including indents exceeds 80 by 1 -ext/file-glob/glob.pm Verbatim line length including indents exceeds 80 by 15 +ext/file-glob/glob.pm Verbatim line length including indents exceeds 80 by 12 ext/hash-util-fieldhash/lib/hash/util/fieldhash.pm Verbatim line length including indents exceeds 80 by 2 ext/i18n-langinfo/langinfo.pm Verbatim line length including indents exceeds 80 by 1 -ext/opcode/opcode.pm Verbatim line length including indents exceeds 80 by 10 -ext/posix/lib/posix.pod Verbatim line length including indents exceeds 80 by 29 +ext/opcode/opcode.pm Verbatim line length including indents exceeds 80 by 7 +ext/posix/lib/posix.pod Verbatim line length including indents exceeds 80 by 28 ext/re/re.pm Verbatim line length including indents exceeds 80 by 6 ext/vms-dclsym/dclsym.pm ? Should you be using L<...> instead of 1 ext/vms-dclsym/dclsym.pm Verbatim line length including indents exceeds 80 by 1 ext/vms-stdio/stdio.pm Verbatim line length including indents exceeds 80 by 1 ext/xs-apitest/apitest.pm Verbatim line length including indents exceeds 80 by 1 install ? Should you be using F<...> or maybe L<...> instead of 1 -install Verbatim line length including indents exceeds 80 by 10 +install Verbatim line length including indents exceeds 80 by 8 installhtml Verbatim line length including indents exceeds 80 by 5 os2/os2/os2-extattr/extattr.pm ? Should you be using F<...> or maybe L<...> instead of 1 -os2/os2/os2-process/process.pm Verbatim line length including indents exceeds 80 by 27 +os2/os2/os2-process/process.pm Verbatim line length including indents exceeds 80 by 20 os2/os2/os2-rexx/dll/dll.pm Verbatim line length including indents exceeds 80 by 2 os2/os2/os2-rexx/rexx.pm Verbatim line length including indents exceeds 80 by 1 -pod/perl.pod Verbatim line length including indents exceeds 80 by 9 -pod/perlaix.pod Verbatim line length including indents exceeds 80 by 11 +pod/perl.pod Verbatim line length including indents exceeds 80 by 7 +pod/perlaix.pod Verbatim line length including indents exceeds 80 by 6 pod/perlapi.pod ? Should you be using L<...> instead of 86 -pod/perlapi.pod Verbatim line length including indents exceeds 80 by 24 +pod/perlapi.pod Verbatim line length including indents exceeds 80 by 6 pod/perlapi.pod unresolved internal link 3 pod/perlapio.pod Verbatim line length including indents exceeds 80 by 5 pod/perlbook.pod Verbatim line length including indents exceeds 80 by 1 pod/perlcall.pod Verbatim line length including indents exceeds 80 by 2 pod/perlce.pod Verbatim line length including indents exceeds 80 by 2 pod/perlclib.pod Verbatim line length including indents exceeds 80 by 3 -pod/perlcygwin.pod Verbatim line length including indents exceeds 80 by 27 +pod/perlcygwin.pod Verbatim line length including indents exceeds 80 by 22 pod/perldbmfilter.pod Verbatim line length including indents exceeds 80 by 1 -pod/perldebguts.pod Verbatim line length including indents exceeds 80 by 68 -pod/perldebtut.pod Verbatim line length including indents exceeds 80 by 22 +pod/perldebguts.pod Verbatim line length including indents exceeds 80 by 55 +pod/perldebtut.pod Verbatim line length including indents exceeds 80 by 20 pod/perldebug.pod Verbatim line length including indents exceeds 80 by 3 pod/perldiag.pod =item type mismatch 1 -pod/perldiag.pod Verbatim line length including indents exceeds 80 by 2 -pod/perldsc.pod Verbatim line length including indents exceeds 80 by 4 -pod/perldtrace.pod Verbatim line length including indents exceeds 80 by 22 -pod/perlebcdic.pod Verbatim line length including indents exceeds 80 by 273 -pod/perlembed.pod Verbatim line length including indents exceeds 80 by 27 +pod/perldiag.pod Verbatim line length including indents exceeds 80 by 1 +pod/perldsc.pod Verbatim line length including indents exceeds 80 by 3 +pod/perldtrace.pod Verbatim line length including indents exceeds 80 by 21 +pod/perlebcdic.pod Verbatim line length including indents exceeds 80 by 272 +pod/perlembed.pod Verbatim line length including indents exceeds 80 by 14 pod/perlfunc.pod There is more than one target 1 -pod/perlfunc.pod Verbatim line length including indents exceeds 80 by 168 -pod/perlgit.pod Verbatim line length including indents exceeds 80 by 14 -pod/perlgpl.pod Verbatim line length including indents exceeds 80 by 50 +pod/perlfunc.pod Verbatim line length including indents exceeds 80 by 157 +pod/perlgit.pod Verbatim line length including indents exceeds 80 by 13 +pod/perlgpl.pod Verbatim line length including indents exceeds 80 by 31 pod/perlguts.pod ? Should you be using F<...> or maybe L<...> instead of 2 pod/perlguts.pod ? Should you be using L<...> instead of 1 -pod/perlguts.pod Verbatim line length including indents exceeds 80 by 25 +pod/perlguts.pod Verbatim line length including indents exceeds 80 by 23 pod/perlhack.pod ? Should you be using L<...> instead of 1 -pod/perlhack.pod Verbatim line length including indents exceeds 80 by 1 pod/perlhacktips.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlhist.pod Verbatim line length including indents exceeds 80 by 2 +pod/perlhist.pod Verbatim line length including indents exceeds 80 by 1 pod/perlhpux.pod Verbatim line length including indents exceeds 80 by 2 pod/perlhurd.pod Verbatim line length including indents exceeds 80 by 2 pod/perlintern.pod ? Should you be using L<...> instead of 5 -pod/perlintern.pod Verbatim line length including indents exceeds 80 by 2 pod/perlinterp.pod ? Should you be using L<...> instead of 1 pod/perlinterp.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlintro.pod Verbatim line length including indents exceeds 80 by 11 -pod/perliol.pod Verbatim line length including indents exceeds 80 by 8 -pod/perlipc.pod Verbatim line length including indents exceeds 80 by 21 +pod/perlintro.pod Verbatim line length including indents exceeds 80 by 8 +pod/perliol.pod Verbatim line length including indents exceeds 80 by 7 +pod/perlipc.pod Verbatim line length including indents exceeds 80 by 18 pod/perlirix.pod Verbatim line length including indents exceeds 80 by 4 pod/perllocale.pod Verbatim line length including indents exceeds 80 by 4 pod/perllol.pod Verbatim line length including indents exceeds 80 by 4 pod/perlmacosx.pod Verbatim line length including indents exceeds 80 by 3 -pod/perlmod.pod Verbatim line length including indents exceeds 80 by 3 +pod/perlmod.pod Verbatim line length including indents exceeds 80 by 2 pod/perlmodlib.pod Verbatim line length including indents exceeds 80 by 3 pod/perlmodstyle.pod Verbatim line length including indents exceeds 80 by 2 pod/perlmpeix.pod Verbatim line length including indents exceeds 80 by 2 pod/perlmroapi.pod ? Should you be using L<...> instead of 1 pod/perlnetware.pod Verbatim line length including indents exceeds 80 by 4 pod/perlnewmod.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlop.pod Verbatim line length including indents exceeds 80 by 30 +pod/perlop.pod Verbatim line length including indents exceeds 80 by 26 pod/perlos2.pod ? Should you be using L<...> instead of 2 -pod/perlos2.pod Verbatim line length including indents exceeds 80 by 22 +pod/perlos2.pod Verbatim line length including indents exceeds 80 by 21 pod/perlos390.pod Verbatim line length including indents exceeds 80 by 11 -pod/perlpacktut.pod Verbatim line length including indents exceeds 80 by 6 -pod/perlperf.pod Verbatim line length including indents exceeds 80 by 154 -pod/perlpodspec.pod Verbatim line length including indents exceeds 80 by 9 +pod/perlpacktut.pod Verbatim line length including indents exceeds 80 by 4 +pod/perlperf.pod Verbatim line length including indents exceeds 80 by 151 +pod/perlpodspec.pod Verbatim line length including indents exceeds 80 by 1 pod/perlpodstyle.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlreapi.pod Verbatim line length including indents exceeds 80 by 17 +pod/perlreapi.pod Verbatim line length including indents exceeds 80 by 16 pod/perlrebackslash.pod Verbatim line length including indents exceeds 80 by 1 pod/perlref.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlreguts.pod Verbatim line length including indents exceeds 80 by 17 +pod/perlreguts.pod Verbatim line length including indents exceeds 80 by 13 pod/perlrequick.pod Verbatim line length including indents exceeds 80 by 3 -pod/perlretut.pod Verbatim line length including indents exceeds 80 by 13 +pod/perlretut.pod Verbatim line length including indents exceeds 80 by 11 pod/perlrun.pod Verbatim line length including indents exceeds 80 by 2 -pod/perlsec.pod Verbatim line length including indents exceeds 80 by 1 pod/perlsolaris.pod Verbatim line length including indents exceeds 80 by 14 pod/perlsource.pod ? Should you be using F<...> or maybe L<...> instead of 1 pod/perlsub.pod ? Should you be using F<...> or maybe L<...> instead of 3 -pod/perlsub.pod Verbatim line length including indents exceeds 80 by 4 -pod/perlsymbian.pod Verbatim line length including indents exceeds 80 by 20 -pod/perlsyn.pod Verbatim line length including indents exceeds 80 by 7 -pod/perlthrtut.pod Verbatim line length including indents exceeds 80 by 5 -pod/perltie.pod Verbatim line length including indents exceeds 80 by 13 -pod/perltodo.pod Verbatim line length including indents exceeds 80 by 7 +pod/perlsub.pod Verbatim line length including indents exceeds 80 by 1 +pod/perlsymbian.pod Verbatim line length including indents exceeds 80 by 15 +pod/perlsyn.pod Verbatim line length including indents exceeds 80 by 6 +pod/perlthrtut.pod Verbatim line length including indents exceeds 80 by 4 +pod/perltie.pod Verbatim line length including indents exceeds 80 by 10 +pod/perltodo.pod Verbatim line length including indents exceeds 80 by 5 pod/perltodo.pod empty section in previous paragraph 2 pod/perltoot.pod Verbatim line length including indents exceeds 80 by 1 pod/perltrap.pod ? Should you be using F<...> or maybe L<...> instead of 1 -pod/perltrap.pod Verbatim line length including indents exceeds 80 by 15 +pod/perltrap.pod Verbatim line length including indents exceeds 80 by 14 pod/perltru64.pod ? Should you be using F<...> or maybe L<...> instead of 1 pod/perltru64.pod Verbatim line length including indents exceeds 80 by 4 pod/perlunifaq.pod empty section in previous paragraph 1 -pod/perluniintro.pod Verbatim line length including indents exceeds 80 by 3 +pod/perluniintro.pod Verbatim line length including indents exceeds 80 by 1 pod/perluniprops.pod =item type mismatch 6 pod/perlvar.pod Verbatim line length including indents exceeds 80 by 9 pod/perlvms.pod ? Should you be using F<...> or maybe L<...> instead of 1 @@ -304,12 +297,12 @@ porting/epigraphs.pod Verbatim line length including indents exceeds 80 by 3 porting/expand-macro.pl Verbatim line length including indents exceeds 80 by 2 porting/how_to_write_a_perldelta.pod There is no NAME 1 porting/how_to_write_a_perldelta.pod Verbatim line length including indents exceeds 80 by 3 -porting/pumpkin.pod Verbatim line length including indents exceeds 80 by 9 -porting/release_managers_guide.pod Verbatim line length including indents exceeds 80 by 9 +porting/pumpkin.pod Verbatim line length including indents exceeds 80 by 6 +porting/release_managers_guide.pod Verbatim line length including indents exceeds 80 by 7 porting/release_managers_guide.pod Verbatim paragraph in NAME section 1 porting/release_schedule.pod There is no NAME 1 -symbian/perlutil.pod Verbatim line length including indents exceeds 80 by 4 -utils/c2ph Verbatim line length including indents exceeds 80 by 44 +symbian/perlutil.pod Verbatim line length including indents exceeds 80 by 3 +utils/c2ph Verbatim line length including indents exceeds 80 by 42 utils/libnetcfg Apparent broken link 1 vms/ext/filespec.pm Verbatim line length including indents exceeds 80 by 1 x2p/a2p.pod empty section in previous paragraph 2 @@ -317,26 +310,18 @@ lib/benchmark.pm Verbatim line length including indents exceeds 80 by 4 lib/cpan/debug.pm There is no NAME 1 lib/cpan/handleconfig.pm =head2 without preceding higher level 1 lib/cpan/handleconfig.pm There is no NAME 1 -lib/class/struct.pm Verbatim line length including indents exceeds 80 by 7 +lib/class/struct.pm Verbatim line length including indents exceeds 80 by 6 lib/config.pod ? Should you be using L<...> instead of -1 lib/config.pod nested commands F<...F<...>...> 3 lib/db.pm Verbatim line length including indents exceeds 80 by 2 -lib/dbm_filter.pm Verbatim line length including indents exceeds 80 by 1 -lib/dbm_filter/compress.pm Verbatim line length including indents exceeds 80 by 1 -lib/dbm_filter/encode.pm Verbatim line length including indents exceeds 80 by 1 -lib/dbm_filter/int32.pm Verbatim line length including indents exceeds 80 by 1 -lib/dbm_filter/null.pm Verbatim line length including indents exceeds 80 by 1 -lib/dbm_filter/utf8.pm Verbatim line length including indents exceeds 80 by 1 lib/english.pm Verbatim line length including indents exceeds 80 by 1 lib/exporter.pm Verbatim line length including indents exceeds 80 by 2 -lib/extutils/embed.pm Verbatim line length including indents exceeds 80 by 2 +lib/extutils/embed.pm Verbatim line length including indents exceeds 80 by 1 lib/extutils/xssymset.pm Verbatim line length including indents exceeds 80 by 1 lib/file/basename.pm Verbatim line length including indents exceeds 80 by 2 lib/file/find.pm Verbatim line length including indents exceeds 80 by 1 lib/getopt/std.pm Verbatim line length including indents exceeds 80 by 1 -lib/perlio.pm Verbatim line length including indents exceeds 80 by 2 -lib/pod/text/overstrike.pm Verbatim line length including indents exceeds 80 by 1 -lib/tie/array.pm Verbatim line length including indents exceeds 80 by 1 +lib/perlio.pm Verbatim line length including indents exceeds 80 by 1 lib/tie/hash.pm Verbatim line length including indents exceeds 80 by 3 lib/tie/scalar.pm Verbatim line length including indents exceeds 80 by 1 lib/unicode/ucd.pm Verbatim line length including indents exceeds 80 by 1 @@ -346,7 +331,7 @@ lib/overload.pm Verbatim line length including indents exceeds 80 by 1 lib/perl5db.pl ? Should you be using L<...> instead of 1 lib/perl5db.pl Verbatim line length including indents exceeds 80 by 1 lib/strict.pm Verbatim line length including indents exceeds 80 by 1 -lib/utf8.pm Verbatim line length including indents exceeds 80 by 4 +lib/utf8.pm Verbatim line length including indents exceeds 80 by 3 lib/version.pod Verbatim line length including indents exceeds 80 by 2 lib/version/internals.pod Verbatim line length including indents exceeds 80 by 2 lib/vmsish.pm Verbatim line length including indents exceeds 80 by 1 diff --git a/t/porting/podcheck.t b/t/porting/podcheck.t index 1830410553..85076d2294 100644 --- a/t/porting/podcheck.t +++ b/t/porting/podcheck.t @@ -672,12 +672,7 @@ package My::Pod::Checker { # Extend Pod::Checker $lines[$i] =~ s/\s+$//; my $indent = $self->get_current_indent; my $exceeds = length(Text::Tabs::expand($lines[$i])) - - # To see why the +1 is needed, consider - # $MAX_LINE_LENGTH == 80, with an $indent also of - # 80. Then, any text starts in column 81, and so - # a line with length 1 exceeds 80 by 1. - + $indent - $MAX_LINE_LENGTH + 1; + + $indent - $MAX_LINE_LENGTH; next unless $exceeds > 0; my ($file, $line) = $pod_para->file_line; $self->poderror({ -line => $line + $i, -file => $file, -- cgit v1.2.1 From ed7422811df45bc27a3ad79b1478ba6440c189ba Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Sun, 31 Jul 2011 21:15:26 -0700 Subject: Attribute::Handlers: re-indent verbatim pod This commit re-indents the code examples in Attribute::Handlers to make things more consistent overall and to prevent long lines from wrapping in 80-column terminals. --- dist/Attribute-Handlers/lib/Attribute/Handlers.pm | 493 +++++++++++----------- t/porting/known_pod_issues.dat | 1 - 2 files changed, 248 insertions(+), 246 deletions(-) diff --git a/dist/Attribute-Handlers/lib/Attribute/Handlers.pm b/dist/Attribute-Handlers/lib/Attribute/Handlers.pm index 4333155a80..60b61ac1d3 100644 --- a/dist/Attribute-Handlers/lib/Attribute/Handlers.pm +++ b/dist/Attribute-Handlers/lib/Attribute/Handlers.pm @@ -4,7 +4,7 @@ use Carp; use warnings; use strict; use vars qw($VERSION $AUTOLOAD); -$VERSION = '0.91'; # remember to update version in POD! +$VERSION = '0.92'; # remember to update version in POD! # $DB::single=1; my %symcache; @@ -266,68 +266,68 @@ Attribute::Handlers - Simpler definition of attribute handlers =head1 VERSION -This document describes version 0.91 of Attribute::Handlers, -released May 20, 2011. +This document describes version 0.92 of Attribute::Handlers, +released August 20, 2011. =head1 SYNOPSIS - package MyClass; - require 5.006; - use Attribute::Handlers; - no warnings 'redefine'; + package MyClass; + require 5.006; + use Attribute::Handlers; + no warnings 'redefine'; - sub Good : ATTR(SCALAR) { - my ($package, $symbol, $referent, $attr, $data) = @_; + sub Good : ATTR(SCALAR) { + my ($package, $symbol, $referent, $attr, $data) = @_; - # Invoked for any scalar variable with a :Good attribute, - # provided the variable was declared in MyClass (or - # a derived class) or typed to MyClass. + # Invoked for any scalar variable with a :Good attribute, + # provided the variable was declared in MyClass (or + # a derived class) or typed to MyClass. - # Do whatever to $referent here (executed in CHECK phase). - ... - } + # Do whatever to $referent here (executed in CHECK phase). + ... + } - sub Bad : ATTR(SCALAR) { - # Invoked for any scalar variable with a :Bad attribute, - # provided the variable was declared in MyClass (or - # a derived class) or typed to MyClass. - ... - } + sub Bad : ATTR(SCALAR) { + # Invoked for any scalar variable with a :Bad attribute, + # provided the variable was declared in MyClass (or + # a derived class) or typed to MyClass. + ... + } - sub Good : ATTR(ARRAY) { - # Invoked for any array variable with a :Good attribute, - # provided the variable was declared in MyClass (or - # a derived class) or typed to MyClass. - ... - } + sub Good : ATTR(ARRAY) { + # Invoked for any array variable with a :Good attribute, + # provided the variable was declared in MyClass (or + # a derived class) or typed to MyClass. + ... + } - sub Good : ATTR(HASH) { - # Invoked for any hash variable with a :Good attribute, - # provided the variable was declared in MyClass (or - # a derived class) or typed to MyClass. - ... - } + sub Good : ATTR(HASH) { + # Invoked for any hash variable with a :Good attribute, + # provided the variable was declared in MyClass (or + # a derived class) or typed to MyClass. + ... + } - sub Ugly : ATTR(CODE) { - # Invoked for any subroutine declared in MyClass (or a - # derived class) with an :Ugly attribute. - ... - } + sub Ugly : ATTR(CODE) { + # Invoked for any subroutine declared in MyClass (or a + # derived class) with an :Ugly attribute. + ... + } - sub Omni : ATTR { - # Invoked for any scalar, array, hash, or subroutine - # with an :Omni attribute, provided the variable or - # subroutine was declared in MyClass (or a derived class) - # or the variable was typed to MyClass. - # Use ref($_[2]) to determine what kind of referent it was. - ... - } + sub Omni : ATTR { + # Invoked for any scalar, array, hash, or subroutine + # with an :Omni attribute, provided the variable or + # subroutine was declared in MyClass (or a derived class) + # or the variable was typed to MyClass. + # Use ref($_[2]) to determine what kind of referent it was. + ... + } - use Attribute::Handlers autotie => { Cycle => Tie::Cycle }; + use Attribute::Handlers autotie => { Cycle => Tie::Cycle }; - my $next : Cycle(['A'..'Z']); + my $next : Cycle(['A'..'Z']); =head1 DESCRIPTION @@ -349,7 +349,8 @@ attribute C<:ATTR>. For example: use Attribute::Handlers; sub Loud :ATTR { - my ($package, $symbol, $referent, $attr, $data, $phase, $filename, $linenum) = @_; + my ($package, $symbol, $referent, $attr, $data, $phase, + $filename, $linenum) = @_; print STDERR ref($referent), " ", *{$symbol}{NAME}, " ", @@ -364,9 +365,9 @@ This creates a handler for the attribute C<:Loud> in the class LoudDecl. Thereafter, any subroutine declared with a C<:Loud> attribute in the class LoudDecl: - package LoudDecl; - - sub foo: Loud {...} + package LoudDecl; + + sub foo: Loud {...} causes the above handler to be invoked, and passed: @@ -409,11 +410,11 @@ the line number in this file. Likewise, declaring any variables with the C<:Loud> attribute within the package: - package LoudDecl; + package LoudDecl; - my $foo :Loud; - my @foo :Loud; - my %foo :Loud; + my $foo :Loud; + my @foo :Loud; + my %foo :Loud; will cause the handler to be called with a similar argument list (except, of course, that C<$_[2]> will be a reference to the variable). @@ -474,11 +475,11 @@ Regardless of the package in which it is declared, if a lexical variable is ascribed an attribute, the handler that is invoked is the one belonging to the package to which it is typed. For example, the following declarations: - package OtherClass; + package OtherClass; - my LoudDecl $loudobj : Loud; - my LoudDecl @loudobjs : Loud; - my LoudDecl %loudobjex : Loud; + my LoudDecl $loudobj : Loud; + my LoudDecl @loudobjs : Loud; + my LoudDecl %loudobjex : Loud; causes the LoudDecl::Loud handler to be invoked (even if OtherClass also defines a handler for C<:Loud> attributes). @@ -491,40 +492,40 @@ given the name of a built-in type (C, C, C, or C), the handler is only applied to declarations of that type. For example, the following definition: - package LoudDecl; + package LoudDecl; - sub RealLoud :ATTR(SCALAR) { print "Yeeeeow!" } + sub RealLoud :ATTR(SCALAR) { print "Yeeeeow!" } creates an attribute handler that applies only to scalars: - package Painful; - use base LoudDecl; + package Painful; + use base LoudDecl; - my $metal : RealLoud; # invokes &LoudDecl::RealLoud - my @metal : RealLoud; # error: unknown attribute - my %metal : RealLoud; # error: unknown attribute - sub metal : RealLoud {...} # error: unknown attribute + my $metal : RealLoud; # invokes &LoudDecl::RealLoud + my @metal : RealLoud; # error: unknown attribute + my %metal : RealLoud; # error: unknown attribute + sub metal : RealLoud {...} # error: unknown attribute You can, of course, declare separate handlers for these types as well (but you'll need to specify C to do it quietly): - package LoudDecl; - use Attribute::Handlers; - no warnings 'redefine'; + package LoudDecl; + use Attribute::Handlers; + no warnings 'redefine'; - sub RealLoud :ATTR(SCALAR) { print "Yeeeeow!" } - sub RealLoud :ATTR(ARRAY) { print "Urrrrrrrrrr!" } - sub RealLoud :ATTR(HASH) { print "Arrrrrgggghhhhhh!" } - sub RealLoud :ATTR(CODE) { croak "Real loud sub torpedoed" } + sub RealLoud :ATTR(SCALAR) { print "Yeeeeow!" } + sub RealLoud :ATTR(ARRAY) { print "Urrrrrrrrrr!" } + sub RealLoud :ATTR(HASH) { print "Arrrrrgggghhhhhh!" } + sub RealLoud :ATTR(CODE) { croak "Real loud sub torpedoed" } You can also explicitly indicate that a single handler is meant to be used for all types of referents like so: - package LoudDecl; - use Attribute::Handlers; + package LoudDecl; + use Attribute::Handlers; - sub SeriousLoud :ATTR(ANY) { warn "Hearing loss imminent" } + sub SeriousLoud :ATTR(ANY) { warn "Hearing loss imminent" } (I.e. C is a synonym for C<:ATTR>). @@ -538,14 +539,14 @@ the handler get in the way. You can turn off that eagerness-to-help by declaring an attribute handler with the keyword C. For example: - sub Raw : ATTR(RAWDATA) {...} - sub Nekkid : ATTR(SCALAR,RAWDATA) {...} - sub Au::Naturale : ATTR(RAWDATA,ANY) {...} + sub Raw : ATTR(RAWDATA) {...} + sub Nekkid : ATTR(SCALAR,RAWDATA) {...} + sub Au::Naturale : ATTR(RAWDATA,ANY) {...} Then the handler makes absolutely no attempt to interpret the data it receives and simply passes it as a string: - my $power : Raw(1..100); # handlers receives "1..100" + my $power : Raw(1..100); # handlers receives "1..100" =head2 Phase-specific attribute handlers @@ -559,11 +560,11 @@ other points in the program's compilation or execution, by explicitly stating the phase (or phases) in which you wish the attribute handler to be called. For example: - sub Early :ATTR(SCALAR,BEGIN) {...} - sub Normal :ATTR(SCALAR,CHECK) {...} - sub Late :ATTR(SCALAR,INIT) {...} - sub Final :ATTR(SCALAR,END) {...} - sub Bookends :ATTR(SCALAR,BEGIN,END) {...} + sub Early :ATTR(SCALAR,BEGIN) {...} + sub Normal :ATTR(SCALAR,CHECK) {...} + sub Late :ATTR(SCALAR,INIT) {...} + sub Final :ATTR(SCALAR,END) {...} + sub Bookends :ATTR(SCALAR,BEGIN,END) {...} As the last example indicates, a handler may be set up to be (re)called in two or more phases. The phase name is passed as the handler's final argument. @@ -578,24 +579,24 @@ subsequently defined C blocks are executed). Attributes make an excellent and intuitive interface through which to tie variables. For example: - use Attribute::Handlers; - use Tie::Cycle; - - sub UNIVERSAL::Cycle : ATTR(SCALAR) { - my ($package, $symbol, $referent, $attr, $data, $phase) = @_; - $data = [ $data ] unless ref $data eq 'ARRAY'; - tie $$referent, 'Tie::Cycle', $data; - } - - # and thereafter... - - package main; + use Attribute::Handlers; + use Tie::Cycle; + + sub UNIVERSAL::Cycle : ATTR(SCALAR) { + my ($package, $symbol, $referent, $attr, $data, $phase) = @_; + $data = [ $data ] unless ref $data eq 'ARRAY'; + tie $$referent, 'Tie::Cycle', $data; + } - my $next : Cycle('A'..'Z'); # $next is now a tied variable + # and thereafter... - while (<>) { - print $next; - } + package main; + + my $next : Cycle('A'..'Z'); # $next is now a tied variable + + while (<>) { + print $next; + } Note that, because the C attribute receives its arguments in the C<$data> variable, if the attribute is given a list of arguments, C<$data> @@ -604,16 +605,16 @@ single argument directly. Since Tie::Cycle requires its cycling values to be passed as an array reference, this means that we need to wrap non-array-reference arguments in an array constructor: - $data = [ $data ] unless ref $data eq 'ARRAY'; + $data = [ $data ] unless ref $data eq 'ARRAY'; Typically, however, things are the other way around: the tieable class expects its arguments as a flattened list, so the attribute looks like: - sub UNIVERSAL::Cycle : ATTR(SCALAR) { - my ($package, $symbol, $referent, $attr, $data, $phase) = @_; - my @data = ref $data eq 'ARRAY' ? @$data : $data; - tie $$referent, 'Tie::Whatever', @data; - } + sub UNIVERSAL::Cycle : ATTR(SCALAR) { + my ($package, $symbol, $referent, $attr, $data, $phase) = @_; + my @data = ref $data eq 'ARRAY' ? @$data : $data; + tie $$referent, 'Tie::Whatever', @data; + } This software pattern is so widely applicable that Attribute::Handlers @@ -621,16 +622,17 @@ provides a way to automate it: specifying C<'autotie'> in the C statement. So, the cycling example, could also be written: - use Attribute::Handlers autotie => { Cycle => 'Tie::Cycle' }; + use Attribute::Handlers autotie => { Cycle => 'Tie::Cycle' }; - # and thereafter... + # and thereafter... - package main; + package main; - my $next : Cycle(['A'..'Z']); # $next is now a tied variable + my $next : Cycle(['A'..'Z']); # $next is now a tied variable - while (<>) { - print $next; + while (<>) { + print $next; + } Note that we now have to pass the cycling values as an array reference, since the C mechanism passes C a list of arguments as a list @@ -646,28 +648,29 @@ Attribute::Handlers takes care of that automagically. You can even pass arguments to the module's C subroutine, by appending them to the class name. For example: - use Attribute::Handlers - autotie => { Dir => 'Tie::Dir qw(DIR_UNLINK)' }; + use Attribute::Handlers + autotie => { Dir => 'Tie::Dir qw(DIR_UNLINK)' }; If the attribute name is unqualified, the attribute is installed in the current package. Otherwise it is installed in the qualifier's package: - package Here; - - use Attribute::Handlers autotie => { - Other::Good => Tie::SecureHash, # tie attr installed in Other:: - Bad => Tie::Taxes, # tie attr installed in Here:: - UNIVERSAL::Ugly => Software::Patent # tie attr installed everywhere - }; + package Here; + + use Attribute::Handlers autotie => { + Other::Good => Tie::SecureHash, # tie attr installed in Other:: + Bad => Tie::Taxes, # tie attr installed in Here:: + UNIVERSAL::Ugly => Software::Patent # tie attr installed everywhere + }; Autoties are most commonly used in the module to which they actually tie, and need to export their attributes to any module that calls them. To facilitate this, Attribute::Handlers recognizes a special "pseudo-class" -- C<__CALLER__>, which may be specified as the qualifier of an attribute: - package Tie::Me::Kangaroo:Down::Sport; - - use Attribute::Handlers autotie => { '__CALLER__::Roo' => __PACKAGE__ }; + package Tie::Me::Kangaroo:Down::Sport; + + use Attribute::Handlers autotie => + { '__CALLER__::Roo' => __PACKAGE__ }; This causes Attribute::Handlers to define the C attribute in the package that imports the Tie::Me::Kangaroo:Down::Sport module. @@ -682,22 +685,22 @@ to the TIESCALAR, TIEHASH, etc. that ties it. The C mechanism supports this too. The following code: - use Attribute::Handlers autotieref => { Selfish => Tie::Selfish }; - my $var : Selfish(@args); + use Attribute::Handlers autotieref => { Selfish => Tie::Selfish }; + my $var : Selfish(@args); has the same effect as: - tie my $var, 'Tie::Selfish', @args; + tie my $var, 'Tie::Selfish', @args; But when C<"autotieref"> is used instead of C<"autotie">: - use Attribute::Handlers autotieref => { Selfish => Tie::Selfish }; - my $var : Selfish(@args); + use Attribute::Handlers autotieref => { Selfish => Tie::Selfish }; + my $var : Selfish(@args); the effect is to pass the C call an extra reference to the variable being tied: - tie my $var, 'Tie::Selfish', \$var, @args; + tie my $var, 'Tie::Selfish', \$var, @args; @@ -706,142 +709,142 @@ being tied: If the class shown in L were placed in the MyClass.pm module, then the following code: - package main; - use MyClass; + package main; + use MyClass; - my MyClass $slr :Good :Bad(1**1-1) :Omni(-vorous); + my MyClass $slr :Good :Bad(1**1-1) :Omni(-vorous); - package SomeOtherClass; - use base MyClass; + package SomeOtherClass; + use base MyClass; - sub tent { 'acle' } + sub tent { 'acle' } - sub fn :Ugly(sister) :Omni('po',tent()) {...} - my @arr :Good :Omni(s/cie/nt/); - my %hsh :Good(q/bye/) :Omni(q/bus/); + sub fn :Ugly(sister) :Omni('po',tent()) {...} + my @arr :Good :Omni(s/cie/nt/); + my %hsh :Good(q/bye/) :Omni(q/bus/); would cause the following handlers to be invoked: - # my MyClass $slr :Good :Bad(1**1-1) :Omni(-vorous); - - MyClass::Good:ATTR(SCALAR)( 'MyClass', # class - 'LEXICAL', # no typeglob - \$slr, # referent - 'Good', # attr name - undef # no attr data - 'CHECK', # compiler phase - ); - - MyClass::Bad:ATTR(SCALAR)( 'MyClass', # class - 'LEXICAL', # no typeglob - \$slr, # referent - 'Bad', # attr name - 0 # eval'd attr data - 'CHECK', # compiler phase - ); - - MyClass::Omni:ATTR(SCALAR)( 'MyClass', # class - 'LEXICAL', # no typeglob - \$slr, # referent - 'Omni', # attr name - '-vorous' # eval'd attr data - 'CHECK', # compiler phase - ); - - - # sub fn :Ugly(sister) :Omni('po',tent()) {...} - - MyClass::UGLY:ATTR(CODE)( 'SomeOtherClass', # class - \*SomeOtherClass::fn, # typeglob - \&SomeOtherClass::fn, # referent - 'Ugly', # attr name - 'sister' # eval'd attr data - 'CHECK', # compiler phase - ); - - MyClass::Omni:ATTR(CODE)( 'SomeOtherClass', # class - \*SomeOtherClass::fn, # typeglob - \&SomeOtherClass::fn, # referent - 'Omni', # attr name - ['po','acle'] # eval'd attr data - 'CHECK', # compiler phase - ); - - - # my @arr :Good :Omni(s/cie/nt/); - - MyClass::Good:ATTR(ARRAY)( 'SomeOtherClass', # class - 'LEXICAL', # no typeglob - \@arr, # referent - 'Good', # attr name - undef # no attr data - 'CHECK', # compiler phase - ); - - MyClass::Omni:ATTR(ARRAY)( 'SomeOtherClass', # class - 'LEXICAL', # no typeglob - \@arr, # referent - 'Omni', # attr name - "" # eval'd attr data - 'CHECK', # compiler phase - ); - - - # my %hsh :Good(q/bye) :Omni(q/bus/); - - MyClass::Good:ATTR(HASH)( 'SomeOtherClass', # class - 'LEXICAL', # no typeglob - \%hsh, # referent - 'Good', # attr name - 'q/bye' # raw attr data - 'CHECK', # compiler phase - ); - - MyClass::Omni:ATTR(HASH)( 'SomeOtherClass', # class - 'LEXICAL', # no typeglob - \%hsh, # referent - 'Omni', # attr name - 'bus' # eval'd attr data - 'CHECK', # compiler phase - ); + # my MyClass $slr :Good :Bad(1**1-1) :Omni(-vorous); + + MyClass::Good:ATTR(SCALAR)( 'MyClass', # class + 'LEXICAL', # no typeglob + \$slr, # referent + 'Good', # attr name + undef # no attr data + 'CHECK', # compiler phase + ); + + MyClass::Bad:ATTR(SCALAR)( 'MyClass', # class + 'LEXICAL', # no typeglob + \$slr, # referent + 'Bad', # attr name + 0 # eval'd attr data + 'CHECK', # compiler phase + ); + + MyClass::Omni:ATTR(SCALAR)( 'MyClass', # class + 'LEXICAL', # no typeglob + \$slr, # referent + 'Omni', # attr name + '-vorous' # eval'd attr data + 'CHECK', # compiler phase + ); + + + # sub fn :Ugly(sister) :Omni('po',tent()) {...} + + MyClass::UGLY:ATTR(CODE)( 'SomeOtherClass', # class + \*SomeOtherClass::fn, # typeglob + \&SomeOtherClass::fn, # referent + 'Ugly', # attr name + 'sister' # eval'd attr data + 'CHECK', # compiler phase + ); + + MyClass::Omni:ATTR(CODE)( 'SomeOtherClass', # class + \*SomeOtherClass::fn, # typeglob + \&SomeOtherClass::fn, # referent + 'Omni', # attr name + ['po','acle'] # eval'd attr data + 'CHECK', # compiler phase + ); + + + # my @arr :Good :Omni(s/cie/nt/); + + MyClass::Good:ATTR(ARRAY)( 'SomeOtherClass', # class + 'LEXICAL', # no typeglob + \@arr, # referent + 'Good', # attr name + undef # no attr data + 'CHECK', # compiler phase + ); + + MyClass::Omni:ATTR(ARRAY)( 'SomeOtherClass', # class + 'LEXICAL', # no typeglob + \@arr, # referent + 'Omni', # attr name + "" # eval'd attr data + 'CHECK', # compiler phase + ); + + + # my %hsh :Good(q/bye) :Omni(q/bus/); + + MyClass::Good:ATTR(HASH)( 'SomeOtherClass', # class + 'LEXICAL', # no typeglob + \%hsh, # referent + 'Good', # attr name + 'q/bye' # raw attr data + 'CHECK', # compiler phase + ); + + MyClass::Omni:ATTR(HASH)( 'SomeOtherClass', # class + 'LEXICAL', # no typeglob + \%hsh, # referent + 'Omni', # attr name + 'bus' # eval'd attr data + 'CHECK', # compiler phase + ); Installing handlers into UNIVERSAL, makes them...err..universal. For example: - package Descriptions; - use Attribute::Handlers; + package Descriptions; + use Attribute::Handlers; - my %name; - sub name { return $name{$_[2]}||*{$_[1]}{NAME} } + my %name; + sub name { return $name{$_[2]}||*{$_[1]}{NAME} } - sub UNIVERSAL::Name :ATTR { - $name{$_[2]} = $_[4]; - } + sub UNIVERSAL::Name :ATTR { + $name{$_[2]} = $_[4]; + } - sub UNIVERSAL::Purpose :ATTR { - print STDERR "Purpose of ", &name, " is $_[4]\n"; - } + sub UNIVERSAL::Purpose :ATTR { + print STDERR "Purpose of ", &name, " is $_[4]\n"; + } - sub UNIVERSAL::Unit :ATTR { - print STDERR &name, " measured in $_[4]\n"; - } + sub UNIVERSAL::Unit :ATTR { + print STDERR &name, " measured in $_[4]\n"; + } Let's you write: - use Descriptions; + use Descriptions; - my $capacity : Name(capacity) - : Purpose(to store max storage capacity for files) - : Unit(Gb); + my $capacity : Name(capacity) + : Purpose(to store max storage capacity for files) + : Unit(Gb); - package Other; + package Other; - sub foo : Purpose(to foo all data before barring it) { } + sub foo : Purpose(to foo all data before barring it) { } - # etc. + # etc. =head1 UTILITY FUNCTIONS @@ -851,7 +854,7 @@ This module offers a single utility function, C. =item findsym - my $symbol = Attribute::Handlers::findsym($package, $referent); + my $symbol = Attribute::Handlers::findsym($package, $referent); The function looks in the symbol table of C<$package> for the typeglob for C<$referent>, which is a reference to a variable or subroutine (SCALAR, ARRAY, diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index afc179c07e..a9eca83c5c 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -132,7 +132,6 @@ Win32::Locale YAML YAML::Syck YAML::Tiny -dist/attribute-handlers/lib/attribute/handlers.pm Verbatim line length including indents exceeds 80 by 17 dist/base/lib/fields.pm Verbatim line length including indents exceeds 80 by 1 dist/bignum/lib/bigint.pm Apparent broken link 1 dist/bignum/lib/bigint.pm Verbatim line length including indents exceeds 80 by 1 -- cgit v1.2.1 From 8965f5324ad556c313c9a4251014e73c99f1614d Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Sun, 31 Jul 2011 22:21:42 -0700 Subject: Make verbatim pod in fields.pm fit in 80 columns MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (actually 79, so ‘comfortably within’ 80 columns) --- dist/base/lib/fields.pm | 6 +++--- t/porting/known_pod_issues.dat | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/dist/base/lib/fields.pm b/dist/base/lib/fields.pm index de6f379d9f..fd59b6a465 100644 --- a/dist/base/lib/fields.pm +++ b/dist/base/lib/fields.pm @@ -11,7 +11,7 @@ unless( eval q{require warnings::register; warnings::register->import; 1} ) { } use vars qw(%attr $VERSION); -$VERSION = '2.15'; +$VERSION = '2.16'; # constant.pm is slow sub PUBLIC () { 2**0 } @@ -278,8 +278,8 @@ This makes it possible to write a constructor like this: sub new { my $self = shift; $self = fields::new($self) unless ref $self; - $self->{cat} = 'meow'; # scalar element - @$self{'dog','bird'} = ('bark','tweet'); # slice + $self->{cat} = 'meow'; # scalar element + @$self{'dog','bird'} = ('bark','tweet'); # slice return $self; } diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index a9eca83c5c..dea7c8ea2d 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -132,7 +132,6 @@ Win32::Locale YAML YAML::Syck YAML::Tiny -dist/base/lib/fields.pm Verbatim line length including indents exceeds 80 by 1 dist/bignum/lib/bigint.pm Apparent broken link 1 dist/bignum/lib/bigint.pm Verbatim line length including indents exceeds 80 by 1 dist/bignum/lib/bignum.pm Apparent broken link 1 -- cgit v1.2.1 From ba048c2476d2ae91d15aad15f8e9369dce2d7b1b Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Sun, 31 Jul 2011 22:25:47 -0700 Subject: Make verbatim pod in bigint.pm fit in 80 columns --- dist/bignum/lib/bigint.pm | 8 ++++---- t/porting/known_pod_issues.dat | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/dist/bignum/lib/bigint.pm b/dist/bignum/lib/bigint.pm index e0fcf73c1a..926742ac31 100644 --- a/dist/bignum/lib/bigint.pm +++ b/dist/bignum/lib/bigint.pm @@ -1,7 +1,7 @@ package bigint; use 5.006; -$VERSION = '0.28'; +$VERSION = '0.29'; use Exporter; @ISA = qw( Exporter ); @EXPORT_OK = qw( PI e bpi bexp ); @@ -353,10 +353,10 @@ In practice this makes seldom a difference as B of expressions will be truncated anyway, but this can, for instance, affect the return value of subroutines: - sub three_integer { use integer; return 3.2; } - sub three_bigint { use bigint; return 3.2; } + sub three_integer { use integer; return 3.2; } + sub three_bigint { use bigint; return 3.2; } - print three_integer(), " ", three_bigint(),"\n"; # prints "3.2 3" + print three_integer(), " ", three_bigint(),"\n"; # prints "3.2 3" =head2 Options diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index dea7c8ea2d..77a211e1f0 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -133,7 +133,6 @@ YAML YAML::Syck YAML::Tiny dist/bignum/lib/bigint.pm Apparent broken link 1 -dist/bignum/lib/bigint.pm Verbatim line length including indents exceeds 80 by 1 dist/bignum/lib/bignum.pm Apparent broken link 1 dist/bignum/lib/bignum.pm Verbatim line length including indents exceeds 80 by 1 dist/bignum/lib/bigrat.pm Apparent broken link 1 -- cgit v1.2.1 From e95aa0cbf5ce7c39ec487bb798ee06d4732fe257 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 17 Jul 2011 08:59:27 +0100 Subject: Add a utility to help test makedef.pl The output of makedef.pl varies too much based on local configuration to allow us to generate any useful pre-canned expectations of correctness. Hence the only real option left is to generate "Golden" results for the local platform prior to any modification, and then compare post modification output with them, to see that nothing (unexpected) changed. exercise_makedef.pl captures all output for (currently) 576 permutations of command line parameters, to enable this testing. --- MANIFEST | 1 + Porting/exercise_makedef.pl | 92 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 Porting/exercise_makedef.pl diff --git a/MANIFEST b/MANIFEST index d3e5632e0a..e304e9eb26 100644 --- a/MANIFEST +++ b/MANIFEST @@ -4524,6 +4524,7 @@ Porting/corelist.pl Generates data for Module::CoreList Porting/curliff.pl Curliff or liff your curliffable files. Porting/epigraphs.pod the release epigraphs used over the years Porting/exec-bit.txt List of files that get +x in release tarball +Porting/exercise_makedef.pl Brute force testing for makedef.pl Porting/expand-macro.pl A tool to expand C macro definitions in the Perl source Porting/findrfuncs Find reentrant variants of functions used in an executable Porting/findvars Find occurrences of words diff --git a/Porting/exercise_makedef.pl b/Porting/exercise_makedef.pl new file mode 100644 index 0000000000..35881920d5 --- /dev/null +++ b/Porting/exercise_makedef.pl @@ -0,0 +1,92 @@ +#!./miniperl -w +use strict; +use Config; +use 5.012; +die "Can't fork" unless $Config{d_fork}; + +# Brute force testing for makedef.pl +# +# To use this... +# +# Before modifying makedef.pl, create your golden results: +# +# $ mkdir Gold +# $ ./perl -Ilib Porting/exercise_makedef.pl Gold/ +# $ chmod -R -w Gold/ +# $ mkdr Test +# +# then modify makedef.pl +# +# then test +# +# $ ./perl -Ilib Porting/exercise_makedef.pl Test +# $ diff -rpu Gold Test + +my $prefix = shift; +die "$0 prefix" unless $prefix; +die "No such directory $prefix" unless -d $prefix; + +my @unlink; +sub END { + unlink @unlink; +} + +$SIG{INT} = sub { die }; # Trigger END processing + +{ + # needed for OS/2, so fake one up + my $mpm = 'miniperl.map'; + + die "$mpm exists" if -e $mpm; + + open my $in, '<', 'av.c' or die "Can't open av.c: $!"; + push @unlink, $mpm; + open my $out, '>', $mpm or die "Can't open $mpm: $!"; + while (<$in>) { + print $out "f $1\n" if /^(Perl_[A-Za-z_0-9]+)\(pTHX/; + } + close $out or die "Can't close $mpm: $!"; +} + +my @args = (platform => [map {"PLATFORM=$_"} qw(aix win32 wince os2 netware vms)], + cflags => ['', 'CCFLAGS=-Dperl=rules -Dzzz'], + Deq => ['', '-Dbeer=foamy'], + D => ['', '-DPERL_IMPLICIT_SYS'], + cctype => ['', map {"CCTYPE=$_"} qw (MSVC60 GCC BORLAND)], + filetype => ['', 'FILETYPE=def', 'FILETYPE=imp'], + ); + +sub expand { + my ($names, $args, $key, $vals, @rest) = @_; + if (defined $key) { + my $bad; + while (my ($i, $v) = each @$vals) { + $bad += expand([@$names, "$key=$i"], [@$args, $v], @rest); + } + return $bad; + } + # time to process something: + my $name = join ',', @$names; + my @args = grep {length} @$args; + + $ENV{PERL5LIB} = join $Config{path_sep}, @INC; + my $pid = fork; + unless ($pid) { + open STDOUT, '>', "$prefix/$name.out" + or die "Can't open $prefix/$name.out: $!"; + open STDERR, '>', "$prefix/$name.err" + or die "Can't open $prefix/$name.err: $!"; + exec $^X, 'makedef.pl', @args; + die "Something went horribly wrong: $!"; + } + die "Bad waitpid: $!" unless waitpid $pid, 0 == $pid; + if ($?) { + print STDERR "`$^X makedef.pl @args` failed with $?\n"; + print STDERR "See output in $prefix/$name.err\n"; + return 1; + } + return 0; +} + +my $bad = expand([], [], @args); +exit($bad > 255 ? 255 : $bad); -- cgit v1.2.1 From e9cefc111f9de79d56470a93e2665790775a1a3a Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 17 Jul 2011 11:18:53 +0100 Subject: No need for makedef.pl to invoke $^X -V to get 'Compile-time options'. Config now exposes this as Config::bincompat_options() and Config::non_bincompat_options(). Change WinCE to invoke makedef.pl with -MCross, which it should have been using all along, as the values it wants are from the host config, not the target config. [Not tested on WinCE]. Previously makedef.pl would have been loading the target config, but as it was only using $Config{path_sep}, this would not have mattered. --- makedef.pl | 17 +++++------------ win32/Makefile.ce | 2 +- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/makedef.pl b/makedef.pl index c69589d124..b69ad71680 100644 --- a/makedef.pl +++ b/makedef.pl @@ -77,18 +77,11 @@ if ($PLATFORM eq 'win32' or $PLATFORM eq 'wince' or $PLATFORM eq "aix") { # source files and header files and don't include any BUILDOPT's that # the user might have chosen to disable because the canned configs are # minimal configs that don't include any of those options. - my $opts = ($PLATFORM eq 'wince' ? '-MCross' : ''); # for wince need Cross.pm to get Config.pm - - $ENV{PERL5LIB} = join $Config{path_sep}, @INC; - my $cmd = "$^X $opts -V"; - my $config = `$cmd` - or die "Couldn't run [$cmd]: $!"; - my($options) = $config =~ /^ Compile-time options: (.*?)\n^ \S/ms; - $options =~ s/\s+/ /g; - print STDERR "Options: ($options)\n"; - foreach (split /\s+/, $options) { - $define{$_} = 1; - } + + my @options + = sort(Config::bincompat_options(), Config::non_bincompat_options()); + print STDERR "Options: (@options)\n"; + $define{$_} = 1 foreach @options; } my %exportperlmalloc = diff --git a/win32/Makefile.ce b/win32/Makefile.ce index b1bf152611..39a6b585cc 100644 --- a/win32/Makefile.ce +++ b/win32/Makefile.ce @@ -847,7 +847,7 @@ $(DLLDIR)\perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h perldll.def : $(HPERL) $(CONFIGPM) ..\global.sym ..\makedef.pl create_perllibst_h.pl $(HPERL) -MCross -I..\lib create_perllibst_h.pl - $(HPERL) -w ..\makedef.pl PLATFORM=wince $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \ + $(HPERL) -MCross -w ..\makedef.pl PLATFORM=wince $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \ CCTYPE=$(CCTYPE) -DPERL_DLL=$(PERLDLL) TARG_DIR=..\ > perldll.def $(PERLDLL) : $(DLLDIR) perldll.def $(XDLLOBJS) $(PERLDLL_RES) -- cgit v1.2.1 From 8643a234afa372748fea38e5fb64f637e33cbdc7 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 17 Jul 2011 12:40:36 +0100 Subject: In makedef.pl use %export instead of output_symbol() for platform specific code. Previously Win32, WinCE and NetWare were calling output_symbol() directly in platform specific code blocks, instead of using the general-purpose emit_symbol(). export_symbol() does nothing other than add keys to %export, which is already manipulated directly in other parts of the code, so inline it. --- makedef.pl | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/makedef.pl b/makedef.pl index b69ad71680..541eebdbab 100644 --- a/makedef.pl +++ b/makedef.pl @@ -103,6 +103,9 @@ my $globvar_sym = "globvar.sym"; my $perlio_sym = "perlio.sym"; my $static_ext = ""; +my %skip; +my %export; + if ($PLATFORM eq 'aix') { # Nothing for now. } @@ -190,11 +193,10 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { } print "EXPORTS\n"; if ($define{PERL_IMPLICIT_SYS}) { - output_symbol("perl_get_host_info"); - output_symbol("perl_alloc_override"); + ++$export{$_} foreach qw(perl_get_host_info perl_alloc_override); } if ($define{USE_ITHREADS} and $define{PERL_IMPLICIT_SYS}) { - output_symbol("perl_clone_host"); + ++$export{perl_clone_host}; } } elsif ($PLATFORM eq 'os2') { @@ -242,15 +244,11 @@ elsif ($PLATFORM eq 'netware') { print "EXPORTS\n"; } if ($define{PERL_IMPLICIT_SYS}) { - output_symbol("perl_get_host_info"); - output_symbol("perl_alloc_override"); - output_symbol("perl_clone_host"); + ++$export{$_} + foreach qw(perl_get_host_info perl_alloc_override perl_clone_host); } } -my %skip; -my %export; - sub skip_symbols { my $list = shift; foreach my $symbol (@$list) { -- cgit v1.2.1 From ca51b52ded736c6c185eb39fefcc6691c3826c49 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 17 Jul 2011 15:56:27 +0100 Subject: In makedef.pl, default $CCTYPE early, and process $TARG_DIR unconditionally. $TARG_DIR is only passed in on Win32, WinCE and NetWare, so it doesn't need to protected by conditional code. $CCTYPE is only meaningful on Win32 and WinCE, so there's no harm in defaulting it to 'MSVC' everywhere. (Strictly, defaulting it to anything that isn't 'GCC' as there is a non-platform protected check for that) --- makedef.pl | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/makedef.pl b/makedef.pl index 541eebdbab..d70f113917 100644 --- a/makedef.pl +++ b/makedef.pl @@ -38,6 +38,7 @@ use strict; use vars qw($PLATFORM $CCTYPE $FILETYPE $CONFIG_ARGS $ARCHNAME $PATCHLEVEL $TARG_DIR); +$CCTYPE = 'MSVC'; $TARG_DIR = ''; my (%define, %ordinal); @@ -106,16 +107,8 @@ my $static_ext = ""; my %skip; my %export; -if ($PLATFORM eq 'aix') { - # Nothing for now. -} -elsif ($PLATFORM =~ /^win(?:32|ce)$/ || $PLATFORM eq 'netware') { - $CCTYPE = "MSVC" unless defined $CCTYPE; - foreach ($intrpvar_h, $perlvars_h, $global_sym, $globvar_sym, $perlio_sym, - $config_sh) { - s!^!$TARG_DIR!; - } -} +s/^/$TARG_DIR/ foreach($intrpvar_h, $perlvars_h, $global_sym, $globvar_sym, + $perlio_sym, $config_sh); unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'netware') { open(CFG,$config_sh) || die "Cannot open $config_sh: $!\n"; -- cgit v1.2.1 From d4cceec78ea646189841eed31846df7c75778a7f Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 17 Jul 2011 16:15:14 +0100 Subject: All of makedef.pl's PLATFORMS always export boot_DynaLoader. No platform has code to add it to %skip, hence it can be unconditionally added to %export. --- makedef.pl | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/makedef.pl b/makedef.pl index d70f113917..508a85e3fa 100644 --- a/makedef.pl +++ b/makedef.pl @@ -105,7 +105,8 @@ my $perlio_sym = "perlio.sym"; my $static_ext = ""; my %skip; -my %export; +# All platforms export boot_DynaLoader unconditionally. +my %export = ( boot_DynaLoader => 1 ); s/^/$TARG_DIR/ foreach($intrpvar_h, $perlvars_h, $global_sym, $globvar_sym, $perlio_sym, $config_sh); @@ -420,9 +421,6 @@ elsif ($PLATFORM eq 'aix') { Perl_signbit )]) if $define{'HAS_SIGNBIT'}; - emit_symbols([qw( - boot_DynaLoader - )]); } elsif ($PLATFORM eq 'os2') { emit_symbols([qw( @@ -577,7 +575,6 @@ elsif ($PLATFORM eq 'netware') { } elsif ($PLATFORM eq 'vms') { emit_symbols([qw( - boot_DynaLoader Perl_cando Perl_cando_by_name Perl_closedir @@ -1327,7 +1324,6 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { foreach my $symbol (qw( setuid setgid - boot_DynaLoader Perl_init_os_extras Perl_thread_create Perl_win32_init @@ -1507,7 +1503,6 @@ elsif ($PLATFORM eq 'os2') { } elsif ($PLATFORM eq 'netware') { foreach my $symbol (qw( - boot_DynaLoader Perl_init_os_extras Perl_thread_create Perl_nw5_init -- cgit v1.2.1 From 3ea85c23a10977f72683311b3d29ca7d14fce0f7 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 17 Jul 2011 16:26:19 +0100 Subject: In makedef.pl, process FILETYPE on all platforms. It's only used on NetWare, but there's no harm in processing it on all platforms, as this eliminates some platform specific code. --- makedef.pl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/makedef.pl b/makedef.pl index 508a85e3fa..0d207a3a3d 100644 --- a/makedef.pl +++ b/makedef.pl @@ -56,9 +56,7 @@ while (@ARGV) { $define{$1} = $2 if ($flag =~ /^-D(\w+)=(.+)$/); $CCTYPE = $1 if ($flag =~ /^CCTYPE=(\w+)$/); $PLATFORM = $1 if ($flag =~ /^PLATFORM=(\w+)$/); - if ($PLATFORM eq 'netware') { - $FILETYPE = $1 if ($flag =~ /^FILETYPE=(\w+)$/); - } + $FILETYPE = $1 if ($flag =~ /^FILETYPE=(\w+)$/); $TARG_DIR = $1 if $flag =~ /^TARG_DIR=(.+)$/; } -- cgit v1.2.1 From f4df7b62d11b45ae31f2ab4d9926559f7d7986ef Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 17 Jul 2011 16:29:28 +0100 Subject: In makedef.pl, set $CONFIG_ARGS, $ARCHNAME and $PATCHLEVEL on all platforms. They are only used on OS/2, but there's no harm in processing them on all platforms, as this eliminates some platform specific code. --- makedef.pl | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/makedef.pl b/makedef.pl index 0d207a3a3d..cc5fc34788 100644 --- a/makedef.pl +++ b/makedef.pl @@ -119,11 +119,9 @@ unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'netware') if (/^(d_(?:mmap|sigaction))='(.+)'$/) { $define{$1} = $2; } - if ($PLATFORM eq 'os2') { - $CONFIG_ARGS = $1 if /^config_args='(.+)'$/; - $ARCHNAME = $1 if /^archname='(.+)'$/; - $PATCHLEVEL = $1 if /^perl_patchlevel='(.+)'$/; - } + $CONFIG_ARGS = $1 if /^config_args='(.+)'$/; + $ARCHNAME = $1 if /^archname='(.+)'$/; + $PATCHLEVEL = $1 if /^perl_patchlevel='(.+)'$/; if ($PLATFORM eq 'vms') { $define{DEBUGGING} = 1 if /^usedebugging_perl='Y'$/; $define{UNLINK_ALL_VERSIONS} = 1 if /^d_unlink_all_versions='define'$/; -- cgit v1.2.1 From c85dd27b1a77d54fa54564d9f0c5fb16964ef9d3 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 17 Jul 2011 16:49:39 +0100 Subject: In makedef.pl, replace $CONFIG_ARGS, $ARCHNAME, $PATCHLEVEL with keys in %define --- makedef.pl | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/makedef.pl b/makedef.pl index cc5fc34788..029afd0639 100644 --- a/makedef.pl +++ b/makedef.pl @@ -36,7 +36,7 @@ BEGIN { unshift @INC, "lib" } use Config; use strict; -use vars qw($PLATFORM $CCTYPE $FILETYPE $CONFIG_ARGS $ARCHNAME $PATCHLEVEL $TARG_DIR); +use vars qw($PLATFORM $CCTYPE $FILETYPE $TARG_DIR); $CCTYPE = 'MSVC'; $TARG_DIR = ''; @@ -119,9 +119,9 @@ unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'netware') if (/^(d_(?:mmap|sigaction))='(.+)'$/) { $define{$1} = $2; } - $CONFIG_ARGS = $1 if /^config_args='(.+)'$/; - $ARCHNAME = $1 if /^archname='(.+)'$/; - $PATCHLEVEL = $1 if /^perl_patchlevel='(.+)'$/; + $define{config_args} = $1 if /^config_args='(.+)'$/; + $define{archname} = $1 if /^archname='(.+)'$/; + $define{perl_patchlevel} = $1 if /^perl_patchlevel='(.+)'$/; if ($PLATFORM eq 'vms') { $define{DEBUGGING} = 1 if /^usedebugging_perl='Y'$/; $define{UNLINK_ALL_VERSIONS} = 1 if /^d_unlink_all_versions='define'$/; @@ -202,10 +202,10 @@ elsif ($PLATFORM eq 'os2') { $sym_ord < $_ and $sym_ord = $_ for values %ordinal; # Take the max } (my $v = $]) =~ s/(\d\.\d\d\d)(\d\d)$/$1_$2/; - $v .= '-thread' if $ARCHNAME =~ /-thread/; + $v .= '-thread' if $define{archname} =~ /-thread/; (my $dll = $define{PERL_DLL}) =~ s/\.dll$//i; - $v .= "\@$PATCHLEVEL" if $PATCHLEVEL; - my $d = "DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter, configured as $CONFIG_ARGS'"; + $v .= "\@$define{perl_patchlevel}" if $define{perl_patchlevel}; + my $d = "DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter, configured as $define{config_args}'"; $d = substr($d, 0, 249) . "...'" if length $d > 253; print <<"---EOP---"; LIBRARY '$dll' INITINSTANCE TERMINSTANCE -- cgit v1.2.1 From bd1ae5d27dcecc224f46af9ab8eaa96b84cbf333 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 28 Jul 2011 11:40:48 +0200 Subject: In makedef.pl, use HAS_{MMAP,SIGACTION} instead of d_{mmap,sigaction}. All defines matching /^HAS_/ are read from config.h, so no need for special code to read the corresponding variables from config.sh. --- makedef.pl | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/makedef.pl b/makedef.pl index 029afd0639..561b211645 100644 --- a/makedef.pl +++ b/makedef.pl @@ -116,9 +116,6 @@ unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'netware') $_ = $1; $define{$1} = 1 while /-D(\w+)/g; } - if (/^(d_(?:mmap|sigaction))='(.+)'$/) { - $define{$1} = $2; - } $define{config_args} = $1 if /^config_args='(.+)'$/; $define{archname} = $1 if /^archname='(.+)'$/; $define{perl_patchlevel} = $1 if /^perl_patchlevel='(.+)'$/; @@ -1015,13 +1012,13 @@ unless ($define{'PERL_GLOBAL_STRUCT_PRIVATE'}) { )]; } -unless ($define{'d_mmap'}) { +unless ($define{HAS_MMAP}) { skip_symbols [qw( PL_mmap_page_size )]; } -if ($define{'d_sigaction'}) { +if ($define{HAS_SIGACTION}) { skip_symbols [qw( PL_sig_trapped )]; -- cgit v1.2.1 From 8a7bc875f0cf5d643b3624a8d1f599f9d0e8aaac Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 17 Jul 2011 23:16:59 +0200 Subject: In makedef.pl, merge the regexs that parse config.sh on non-dosish platforms. Use a plain alternation, instead of trying to "optimise", as the trie compiler can do a much better job than a human. --- makedef.pl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/makedef.pl b/makedef.pl index 561b211645..13943d850b 100644 --- a/makedef.pl +++ b/makedef.pl @@ -116,9 +116,8 @@ unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'netware') $_ = $1; $define{$1} = 1 while /-D(\w+)/g; } - $define{config_args} = $1 if /^config_args='(.+)'$/; - $define{archname} = $1 if /^archname='(.+)'$/; - $define{perl_patchlevel} = $1 if /^perl_patchlevel='(.+)'$/; + $define{$1} = $2 + if /^(config_args|archname|perl_patchlevel)='(.+)'$/; if ($PLATFORM eq 'vms') { $define{DEBUGGING} = 1 if /^usedebugging_perl='Y'$/; $define{UNLINK_ALL_VERSIONS} = 1 if /^d_unlink_all_versions='define'$/; -- cgit v1.2.1 From 1f0041edd52930e9e23d72abc1e7bd24c6c0ff9c Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 17 Jul 2011 23:29:42 +0200 Subject: In makedef.pl, merge the regexs that parse config.h. --- makedef.pl | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/makedef.pl b/makedef.pl index 13943d850b..279659ad84 100644 --- a/makedef.pl +++ b/makedef.pl @@ -135,11 +135,8 @@ if ($PLATFORM eq 'win32' || $PLATFORM eq 'wince') { open(CFG,$config_h) || die "Cannot open $config_h: $!\n"; while () { - $define{$1} = 1 if /^\s*#\s*define\s+(MYMALLOC)\b/; - $define{$1} = 1 if /^\s*#\s*define\s+(MULTIPLICITY)\b/; - $define{$1} = 1 if /^\s*#\s*define\s+(PERL_\w+)\b/; - $define{$1} = 1 if /^\s*#\s*define\s+(USE_\w+)\b/; - $define{$1} = 1 if /^\s*#\s*define\s+(HAS_\w+)\b/; + $define{$1} = 1 if /^\s*\#\s*define\s+(MYMALLOC|MULTIPLICITY + |(?:PERL|USE|HAS)_\w+)\b/x; } close(CFG); -- cgit v1.2.1 From f2921293911cd9923a9f19fa47b8be73df28701a Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 18 Jul 2011 10:54:33 +0200 Subject: In makedef.pl, all platforms other than OS/2 share 12 common "skip_symbols". --- makedef.pl | 77 ++++++++++++++------------------------------------------------ 1 file changed, 17 insertions(+), 60 deletions(-) diff --git a/makedef.pl b/makedef.pl index 279659ad84..4638201ae8 100644 --- a/makedef.pl +++ b/makedef.pl @@ -251,11 +251,27 @@ sub emit_symbols { } } +if ($PLATFORM ne 'os2') { + skip_symbols [qw( + PL_cryptseen + PL_opsave + Perl_GetVars + Perl_dump_fds + Perl_my_bcopy + Perl_my_bzero + Perl_my_chsize + Perl_my_htonl + Perl_my_memcmp + Perl_my_memset + Perl_my_ntohl + Perl_my_swap + )]; +} + if ($PLATFORM eq 'win32') { skip_symbols [qw( PL_statusvalue_vms PL_archpat_auto - PL_cryptseen PL_DBcv PL_generation PL_lastgotoprobe @@ -266,7 +282,6 @@ if ($PLATFORM eq 'win32') { PL_timesbuf main Perl_ErrorNo - Perl_GetVars Perl_do_exec3 Perl_do_ipcctl Perl_do_ipcget @@ -274,14 +289,7 @@ if ($PLATFORM eq 'win32') { Perl_do_msgsnd Perl_do_semop Perl_do_shmio - Perl_dump_fds Perl_init_thread_intern - Perl_my_bzero - Perl_my_bcopy - Perl_my_htonl - Perl_my_ntohl - Perl_my_swap - Perl_my_chsize Perl_same_dirent Perl_setenv_getix Perl_unlnk @@ -290,11 +298,8 @@ if ($PLATFORM eq 'win32') { Perl_safexmalloc Perl_safexfree Perl_safexrealloc - Perl_my_memcmp - Perl_my_memset PL_cshlen PL_cshname - PL_opsave Perl_do_exec Perl_getenv_len Perl_my_pclose @@ -313,7 +318,6 @@ if ($PLATFORM eq 'wince') { skip_symbols [qw( PL_statusvalue_vms PL_archpat_auto - PL_cryptseen PL_DBcv PL_generation PL_lastgotoprobe @@ -342,7 +346,6 @@ if ($PLATFORM eq 'wince') { win32_spawnvp main Perl_ErrorNo - Perl_GetVars Perl_do_exec3 Perl_do_ipcctl Perl_do_ipcget @@ -350,14 +353,7 @@ if ($PLATFORM eq 'wince') { Perl_do_msgsnd Perl_do_semop Perl_do_shmio - Perl_dump_fds Perl_init_thread_intern - Perl_my_bzero - Perl_my_bcopy - Perl_my_htonl - Perl_my_ntohl - Perl_my_swap - Perl_my_chsize Perl_same_dirent Perl_setenv_getix Perl_unlnk @@ -366,11 +362,8 @@ if ($PLATFORM eq 'wince') { Perl_safexmalloc Perl_safexfree Perl_safexrealloc - Perl_my_memcmp - Perl_my_memset PL_cshlen PL_cshname - PL_opsave Perl_do_exec Perl_getenv_len Perl_my_pclose @@ -380,17 +373,7 @@ if ($PLATFORM eq 'wince') { } elsif ($PLATFORM eq 'aix') { skip_symbols([qw( - Perl_dump_fds Perl_ErrorNo - Perl_GetVars - Perl_my_bcopy - Perl_my_bzero - Perl_my_chsize - Perl_my_htonl - Perl_my_memcmp - Perl_my_memset - Perl_my_ntohl - Perl_my_swap Perl_safexcalloc Perl_safexfree Perl_safexmalloc @@ -401,8 +384,6 @@ elsif ($PLATFORM eq 'aix') { Perl_sys_intern_dup Perl_sys_intern_init Perl_my_sprintf - PL_cryptseen - PL_opsave PL_statusvalue_vms PL_sys_intern )]); @@ -490,7 +471,6 @@ elsif ($PLATFORM eq 'netware') { skip_symbols [qw( PL_statusvalue_vms PL_archpat_auto - PL_cryptseen PL_DBcv PL_generation PL_lastgotoprobe @@ -501,7 +481,6 @@ elsif ($PLATFORM eq 'netware') { PL_timesbuf main Perl_ErrorNo - Perl_GetVars Perl_do_exec3 Perl_do_ipcctl Perl_do_ipcget @@ -509,13 +488,7 @@ elsif ($PLATFORM eq 'netware') { Perl_do_msgsnd Perl_do_semop Perl_do_shmio - Perl_dump_fds Perl_init_thread_intern - Perl_my_bzero - Perl_my_htonl - Perl_my_ntohl - Perl_my_swap - Perl_my_chsize Perl_same_dirent Perl_setenv_getix Perl_unlnk @@ -524,11 +497,8 @@ elsif ($PLATFORM eq 'netware') { Perl_safexmalloc Perl_safexfree Perl_safexrealloc - Perl_my_memcmp - Perl_my_memset PL_cshlen PL_cshname - PL_opsave Perl_do_exec Perl_getenv_len Perl_my_pclose @@ -536,7 +506,6 @@ elsif ($PLATFORM eq 'netware') { Perl_sys_intern_init Perl_sys_intern_dup Perl_sys_intern_clear - Perl_my_bcopy Perl_PerlIO_write Perl_PerlIO_unread Perl_PerlIO_tell @@ -648,19 +617,7 @@ elsif ($PLATFORM eq 'vms') { )]); skip_symbols([qw( PL_statusvalue_posix - PL_cryptseen - PL_opsave - Perl_GetVars - Perl_dump_fds - Perl_my_bzero - Perl_my_bcopy - Perl_my_chsize - Perl_my_htonl - Perl_my_memcmp - Perl_my_memset - Perl_my_ntohl Perl_my_sprintf - Perl_my_swap )]); skip_symbols([qw( Perl_signbit -- cgit v1.2.1 From 918a61c764f12d63d7778bc630c6fd106b03253c Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 18 Jul 2011 12:31:42 +0200 Subject: In makedef.pl, extract SPRINTF_RETURNS_STRLEN from config.h This allows its removal from platform specific skip lists. --- makedef.pl | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/makedef.pl b/makedef.pl index 4638201ae8..65318ba135 100644 --- a/makedef.pl +++ b/makedef.pl @@ -136,6 +136,7 @@ if ($PLATFORM eq 'win32' || $PLATFORM eq 'wince') { open(CFG,$config_h) || die "Cannot open $config_h: $!\n"; while () { $define{$1} = 1 if /^\s*\#\s*define\s+(MYMALLOC|MULTIPLICITY + |SPRINTF_RETURNS_STRLEN |(?:PERL|USE|HAS)_\w+)\b/x; } close(CFG); @@ -304,7 +305,6 @@ if ($PLATFORM eq 'win32') { Perl_getenv_len Perl_my_pclose Perl_my_popen - Perl_my_sprintf )]; } elsif ($PLATFORM ne 'vms') { @@ -368,7 +368,6 @@ if ($PLATFORM eq 'wince') { Perl_getenv_len Perl_my_pclose Perl_my_popen - Perl_my_sprintf )]; } elsif ($PLATFORM eq 'aix') { @@ -383,7 +382,6 @@ elsif ($PLATFORM eq 'aix') { Perl_sys_intern_clear Perl_sys_intern_dup Perl_sys_intern_init - Perl_my_sprintf PL_statusvalue_vms PL_sys_intern )]); @@ -617,7 +615,6 @@ elsif ($PLATFORM eq 'vms') { )]); skip_symbols([qw( PL_statusvalue_posix - Perl_my_sprintf )]); skip_symbols([qw( Perl_signbit -- cgit v1.2.1 From 19875b014794275d3090d0f14f4c979135aacc93 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 18 Jul 2011 13:10:22 +0200 Subject: In makedef.pl, remove unneeded PerlIO* skips from the NetWare platform list. 011f1a1a00b94fe9 added, among other things, 23 PerlIO symbols to the list to skip on NetWare on 2002/04/22. On 2002/05/01, ad6971c848a6c9ab added PerlIO_perlio to the main list of symbols to skip if PerlIO was deconfigured. On 2002/05/02, 1e8a8f599308436d added the other 22 there. NetWare's configuration (config.wc) has perlio=undef. Hence the latter 2 commits were the correct fix, and the 23 symbols can be removed from the NetWare platform list with no difference in makedef.pl's output. --- makedef.pl | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/makedef.pl b/makedef.pl index 65318ba135..8c42a22638 100644 --- a/makedef.pl +++ b/makedef.pl @@ -504,29 +504,6 @@ elsif ($PLATFORM eq 'netware') { Perl_sys_intern_init Perl_sys_intern_dup Perl_sys_intern_clear - Perl_PerlIO_write - Perl_PerlIO_unread - Perl_PerlIO_tell - Perl_PerlIO_stdout - Perl_PerlIO_stdin - Perl_PerlIO_stderr - Perl_PerlIO_setlinebuf - Perl_PerlIO_set_ptrcnt - Perl_PerlIO_set_cnt - Perl_PerlIO_seek - Perl_PerlIO_read - Perl_PerlIO_get_ptr - Perl_PerlIO_get_cnt - Perl_PerlIO_get_bufsiz - Perl_PerlIO_get_base - Perl_PerlIO_flush - Perl_PerlIO_fill - Perl_PerlIO_fileno - Perl_PerlIO_error - Perl_PerlIO_eof - Perl_PerlIO_close - Perl_PerlIO_clearerr - PerlIO_perlio )]; } elsif ($PLATFORM eq 'vms') { -- cgit v1.2.1 From 646ffc275163232ffff0282d5e887ac0bd3eaaab Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 18 Jul 2011 14:19:42 +0200 Subject: In makedef.pl, remove PL_numeric_compat1 from the WinCE skip list. e0a47c36269dd7ce removed PL_numeric_compat1 from the interpreter structure, but missed the reference to it here. --- makedef.pl | 1 - 1 file changed, 1 deletion(-) diff --git a/makedef.pl b/makedef.pl index 8c42a22638..cf595e244b 100644 --- a/makedef.pl +++ b/makedef.pl @@ -331,7 +331,6 @@ if ($PLATFORM eq 'wince') { PL_collation_standard PL_collxfrm_base PL_collxfrm_mult - PL_numeric_compat1 PL_numeric_local PL_numeric_name PL_numeric_radix_sv -- cgit v1.2.1 From bdcba273c1a481a43024460a6f6a42837356aff5 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 18 Jul 2011 15:00:53 +0200 Subject: In makedef.pl, skip relevant symbols when USE_LOCALE_COLLATE is not defined. Previously these symbols were only listed as platform specific exceptions for WinCE. config.ce has i_locale as undef, so is not included, so (presumably) there USE_LOCALE_COLLATE is not part of Config::bincompat_options(). --- makedef.pl | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/makedef.pl b/makedef.pl index cf595e244b..0c5ebf61b5 100644 --- a/makedef.pl +++ b/makedef.pl @@ -326,16 +326,10 @@ if ($PLATFORM eq 'wince') { PL_pending_ident PL_sublex_info PL_timesbuf - PL_collation_ix - PL_collation_name - PL_collation_standard - PL_collxfrm_base - PL_collxfrm_mult PL_numeric_local PL_numeric_name PL_numeric_radix_sv PL_numeric_standard - Perl_sv_collxfrm setgid setuid win32_free_childdir @@ -950,6 +944,18 @@ if ($define{HAS_SIGACTION}) { )]; } +unless ($define{USE_LOCALE_COLLATE}) { + skip_symbols [qw( + PL_collation_ix + PL_collation_name + PL_collation_standard + PL_collxfrm_base + PL_collxfrm_mult + Perl_sv_collxfrm + Perl_sv_collxfrm_flags + )]; +} + if ($^O ne 'vms') { # VMS does its own thing for these symbols. skip_symbols [qw(PL_sig_handlers_initted -- cgit v1.2.1 From 1f1ade4f70e175458c528bb69fde56a6611ab73e Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 18 Jul 2011 15:21:32 +0200 Subject: In makedef.pl, skip relevant symbols when USE_LOCALE_NUMERIC is not defined. Previously these symbols were only listed as platform specific exceptions for WinCE. config.ce has i_locale as undef, so is not included, so (presumably) there USE_LOCALE_NUMERIC is not part of Config::bincompat_options(). --- makedef.pl | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/makedef.pl b/makedef.pl index 0c5ebf61b5..66317fab77 100644 --- a/makedef.pl +++ b/makedef.pl @@ -326,10 +326,6 @@ if ($PLATFORM eq 'wince') { PL_pending_ident PL_sublex_info PL_timesbuf - PL_numeric_local - PL_numeric_name - PL_numeric_radix_sv - PL_numeric_standard setgid setuid win32_free_childdir @@ -956,6 +952,15 @@ unless ($define{USE_LOCALE_COLLATE}) { )]; } +unless ($define{USE_LOCALE_NUMERIC}) { + skip_symbols [qw( + PL_numeric_local + PL_numeric_name + PL_numeric_radix_sv + PL_numeric_standard + )]; +} + if ($^O ne 'vms') { # VMS does its own thing for these symbols. skip_symbols [qw(PL_sig_handlers_initted -- cgit v1.2.1 From df39eaa8a6a98e14755cb335e3b0bfdc03ae18a3 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 18 Jul 2011 15:55:52 +0200 Subject: In makedef.pl, skip Perl_unlnk on all platforms without UNLINK_ALL_VERSIONS. As only VMS sets UNLINK_ALL_VERSIONS, this permits removing Perl_unlnk from the platform specific skip lists of all the other platforms. --- makedef.pl | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/makedef.pl b/makedef.pl index 66317fab77..56e89a38cc 100644 --- a/makedef.pl +++ b/makedef.pl @@ -293,7 +293,6 @@ if ($PLATFORM eq 'win32') { Perl_init_thread_intern Perl_same_dirent Perl_setenv_getix - Perl_unlnk Perl_watch Perl_safexcalloc Perl_safexmalloc @@ -345,7 +344,6 @@ if ($PLATFORM eq 'wince') { Perl_init_thread_intern Perl_same_dirent Perl_setenv_getix - Perl_unlnk Perl_watch Perl_safexcalloc Perl_safexmalloc @@ -367,7 +365,6 @@ elsif ($PLATFORM eq 'aix') { Perl_safexmalloc Perl_safexrealloc Perl_same_dirent - Perl_unlnk Perl_sys_intern_clear Perl_sys_intern_dup Perl_sys_intern_init @@ -478,7 +475,6 @@ elsif ($PLATFORM eq 'netware') { Perl_init_thread_intern Perl_same_dirent Perl_setenv_getix - Perl_unlnk Perl_watch Perl_safexcalloc Perl_safexmalloc @@ -586,10 +582,12 @@ elsif ($PLATFORM eq 'vms') { Perl_signbit )]) if $define{'HAS_SIGNBIT'}; +} + +unless ($define{UNLINK_ALL_VERSIONS}) { skip_symbols([qw( Perl_unlnk )]) - unless $define{'UNLINK_ALL_VERSIONS'}; } unless ($define{'DEBUGGING'}) { -- cgit v1.2.1 From 1ab20eaa59b8c29998d215d86ac042936c897794 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 18 Jul 2011 21:26:20 +0200 Subject: In makedef.pl, skip relevant symbols when HAVE_INTERP_INTERN is not defined. Previously these symbols were only listed as platform specific exceptions for AIX and NetWare. NetWare actually failed to list PL_sys_intern, but this would not have mattered, as their config.wc shows that NetWare builds with -DMULTIPLICITY, and hence "PL_sys_intern" is not a real variable there, but part of the interpreter struct. --- makedef.pl | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/makedef.pl b/makedef.pl index 56e89a38cc..60222c9645 100644 --- a/makedef.pl +++ b/makedef.pl @@ -365,11 +365,7 @@ elsif ($PLATFORM eq 'aix') { Perl_safexmalloc Perl_safexrealloc Perl_same_dirent - Perl_sys_intern_clear - Perl_sys_intern_dup - Perl_sys_intern_init PL_statusvalue_vms - PL_sys_intern )]); skip_symbols([qw( Perl_signbit @@ -486,9 +482,6 @@ elsif ($PLATFORM eq 'netware') { Perl_getenv_len Perl_my_pclose Perl_my_popen - Perl_sys_intern_init - Perl_sys_intern_dup - Perl_sys_intern_clear )]; } elsif ($PLATFORM eq 'vms') { @@ -959,6 +952,15 @@ unless ($define{USE_LOCALE_NUMERIC}) { )]; } +unless ($define{HAVE_INTERP_INTERN}) { + skip_symbols [qw( + Perl_sys_intern_clear + Perl_sys_intern_dup + Perl_sys_intern_init + PL_sys_intern + )]; +} + if ($^O ne 'vms') { # VMS does its own thing for these symbols. skip_symbols [qw(PL_sig_handlers_initted -- cgit v1.2.1 From 51c93d9a89e7ff9381e13a9125c11ece2e32ec42 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 18 Jul 2011 23:28:58 +0200 Subject: In makedef.pl, remove Perl_safex{{c,m,re}alloc,free} from 4 skip lists. All 4 were part of LEAKTEST, removed in 2002 with 7bab3ede7bf671f5. --- makedef.pl | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/makedef.pl b/makedef.pl index 60222c9645..0a353c2aa9 100644 --- a/makedef.pl +++ b/makedef.pl @@ -294,10 +294,6 @@ if ($PLATFORM eq 'win32') { Perl_same_dirent Perl_setenv_getix Perl_watch - Perl_safexcalloc - Perl_safexmalloc - Perl_safexfree - Perl_safexrealloc PL_cshlen PL_cshname Perl_do_exec @@ -345,10 +341,6 @@ if ($PLATFORM eq 'wince') { Perl_same_dirent Perl_setenv_getix Perl_watch - Perl_safexcalloc - Perl_safexmalloc - Perl_safexfree - Perl_safexrealloc PL_cshlen PL_cshname Perl_do_exec @@ -360,10 +352,6 @@ if ($PLATFORM eq 'wince') { elsif ($PLATFORM eq 'aix') { skip_symbols([qw( Perl_ErrorNo - Perl_safexcalloc - Perl_safexfree - Perl_safexmalloc - Perl_safexrealloc Perl_same_dirent PL_statusvalue_vms )]); @@ -472,10 +460,6 @@ elsif ($PLATFORM eq 'netware') { Perl_same_dirent Perl_setenv_getix Perl_watch - Perl_safexcalloc - Perl_safexmalloc - Perl_safexfree - Perl_safexrealloc PL_cshlen PL_cshname Perl_do_exec -- cgit v1.2.1 From c1370ef46d9f41fedd5ecd44f19febd23dff69ab Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 19 Jul 2011 12:50:35 +0200 Subject: In makedef.pl, remove from skip lists symbols which are not in the API. The Win32 and AIX lists were created back when all symbols were exported. 954c1994944eafa7 (in January 2000) restricted exports to just API functions. The skip lists were not purged of non-API functions, and have subsequently propagated to new ports via mindless copy & paste. --- makedef.pl | 35 ----------------------------------- 1 file changed, 35 deletions(-) diff --git a/makedef.pl b/makedef.pl index 0a353c2aa9..0847664ace 100644 --- a/makedef.pl +++ b/makedef.pl @@ -283,21 +283,10 @@ if ($PLATFORM eq 'win32') { PL_timesbuf main Perl_ErrorNo - Perl_do_exec3 - Perl_do_ipcctl - Perl_do_ipcget - Perl_do_msgrcv - Perl_do_msgsnd - Perl_do_semop - Perl_do_shmio Perl_init_thread_intern - Perl_same_dirent Perl_setenv_getix - Perl_watch PL_cshlen PL_cshname - Perl_do_exec - Perl_getenv_len Perl_my_pclose Perl_my_popen )]; @@ -330,21 +319,10 @@ if ($PLATFORM eq 'wince') { win32_spawnvp main Perl_ErrorNo - Perl_do_exec3 - Perl_do_ipcctl - Perl_do_ipcget - Perl_do_msgrcv - Perl_do_msgsnd - Perl_do_semop - Perl_do_shmio Perl_init_thread_intern - Perl_same_dirent Perl_setenv_getix - Perl_watch PL_cshlen PL_cshname - Perl_do_exec - Perl_getenv_len Perl_my_pclose Perl_my_popen )]; @@ -352,7 +330,6 @@ if ($PLATFORM eq 'wince') { elsif ($PLATFORM eq 'aix') { skip_symbols([qw( Perl_ErrorNo - Perl_same_dirent PL_statusvalue_vms )]); skip_symbols([qw( @@ -449,21 +426,10 @@ elsif ($PLATFORM eq 'netware') { PL_timesbuf main Perl_ErrorNo - Perl_do_exec3 - Perl_do_ipcctl - Perl_do_ipcget - Perl_do_msgrcv - Perl_do_msgsnd - Perl_do_semop - Perl_do_shmio Perl_init_thread_intern - Perl_same_dirent Perl_setenv_getix - Perl_watch PL_cshlen PL_cshname - Perl_do_exec - Perl_getenv_len Perl_my_pclose Perl_my_popen )]; @@ -592,7 +558,6 @@ if ($define{'PERL_IMPLICIT_CONTEXT'}) { if ($define{'PERL_IMPLICIT_SYS'}) { skip_symbols [qw( - Perl_getenv_len Perl_my_popen Perl_my_pclose )]; -- cgit v1.2.1 From 5ce6bc4718156f490485636c95adf90397ad247e Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 19 Jul 2011 13:02:38 +0200 Subject: In makedef.pl, remove Perl_ErrorNo from 4 skip lists. Perl_ErrnoNo() was removed in 51371543ca1a75ed in 1999. --- makedef.pl | 4 ---- 1 file changed, 4 deletions(-) diff --git a/makedef.pl b/makedef.pl index 0847664ace..ddce97b82a 100644 --- a/makedef.pl +++ b/makedef.pl @@ -282,7 +282,6 @@ if ($PLATFORM eq 'win32') { PL_sublex_info PL_timesbuf main - Perl_ErrorNo Perl_init_thread_intern Perl_setenv_getix PL_cshlen @@ -318,7 +317,6 @@ if ($PLATFORM eq 'wince') { win32_get_childenv win32_spawnvp main - Perl_ErrorNo Perl_init_thread_intern Perl_setenv_getix PL_cshlen @@ -329,7 +327,6 @@ if ($PLATFORM eq 'wince') { } elsif ($PLATFORM eq 'aix') { skip_symbols([qw( - Perl_ErrorNo PL_statusvalue_vms )]); skip_symbols([qw( @@ -425,7 +422,6 @@ elsif ($PLATFORM eq 'netware') { PL_sublex_info PL_timesbuf main - Perl_ErrorNo Perl_init_thread_intern Perl_setenv_getix PL_cshlen -- cgit v1.2.1 From 7032c0a5a4aa2069ca10d78c9b30f9b4c1d2c43d Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 19 Jul 2011 13:46:08 +0200 Subject: In makedef.pl, remove Perl_my_p{open,close} from 3 skip lists. Both will already be correctly skipped by the existing code that handles PERL_IMPLICIT_SYS. --- makedef.pl | 6 ------ 1 file changed, 6 deletions(-) diff --git a/makedef.pl b/makedef.pl index ddce97b82a..e001066cdb 100644 --- a/makedef.pl +++ b/makedef.pl @@ -286,8 +286,6 @@ if ($PLATFORM eq 'win32') { Perl_setenv_getix PL_cshlen PL_cshname - Perl_my_pclose - Perl_my_popen )]; } elsif ($PLATFORM ne 'vms') { @@ -321,8 +319,6 @@ if ($PLATFORM eq 'wince') { Perl_setenv_getix PL_cshlen PL_cshname - Perl_my_pclose - Perl_my_popen )]; } elsif ($PLATFORM eq 'aix') { @@ -426,8 +422,6 @@ elsif ($PLATFORM eq 'netware') { Perl_setenv_getix PL_cshlen PL_cshname - Perl_my_pclose - Perl_my_popen )]; } elsif ($PLATFORM eq 'vms') { -- cgit v1.2.1 From 30244d794fe4814f8790d183064e7b393caa596b Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 19 Jul 2011 14:34:26 +0200 Subject: In makedef.pl, remove Perl_init_thread_intern from 3 skip lists. Perl_init_thread_intern has not been available for export since commit 864dbfa3ca8032ef in 1999, and was removed by 3db8f154c4c6e098 in 2002. --- makedef.pl | 3 --- 1 file changed, 3 deletions(-) diff --git a/makedef.pl b/makedef.pl index e001066cdb..d492d751ac 100644 --- a/makedef.pl +++ b/makedef.pl @@ -282,7 +282,6 @@ if ($PLATFORM eq 'win32') { PL_sublex_info PL_timesbuf main - Perl_init_thread_intern Perl_setenv_getix PL_cshlen PL_cshname @@ -315,7 +314,6 @@ if ($PLATFORM eq 'wince') { win32_get_childenv win32_spawnvp main - Perl_init_thread_intern Perl_setenv_getix PL_cshlen PL_cshname @@ -418,7 +416,6 @@ elsif ($PLATFORM eq 'netware') { PL_sublex_info PL_timesbuf main - Perl_init_thread_intern Perl_setenv_getix PL_cshlen PL_cshname -- cgit v1.2.1 From a3deb92fe77a92f9d3e29e42ca023a84b2f53d79 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 19 Jul 2011 14:56:41 +0200 Subject: In makedef.pl, remove Perl_setenv_getix from 3 skip lists. Perl_setenv_getix was never in the public API, has not been available for export since commit 954c1994944eafa7 (in January 2000) restricted exports to just API functions, and in 2008 was changed to a static function with commit 051b305ded17acbc and then eliminated by being inlined into its only caller with commit 3a9222bef66d8694. --- makedef.pl | 3 --- 1 file changed, 3 deletions(-) diff --git a/makedef.pl b/makedef.pl index d492d751ac..9f678f80f4 100644 --- a/makedef.pl +++ b/makedef.pl @@ -282,7 +282,6 @@ if ($PLATFORM eq 'win32') { PL_sublex_info PL_timesbuf main - Perl_setenv_getix PL_cshlen PL_cshname )]; @@ -314,7 +313,6 @@ if ($PLATFORM eq 'wince') { win32_get_childenv win32_spawnvp main - Perl_setenv_getix PL_cshlen PL_cshname )]; @@ -416,7 +414,6 @@ elsif ($PLATFORM eq 'netware') { PL_sublex_info PL_timesbuf main - Perl_setenv_getix PL_cshlen PL_cshname )]; -- cgit v1.2.1 From 836a2a8d03e85accc3d257e5d496fafd572180e1 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 19 Jul 2011 15:17:46 +0200 Subject: In makedef.pl, remove PL_archpat_auto from 3 skip lists. PL_archpat_auto was eliminated by commit a7cb1f9979dd83ab in 1999 - "support for v5.5.640 style version numbers". --- makedef.pl | 3 --- 1 file changed, 3 deletions(-) diff --git a/makedef.pl b/makedef.pl index 9f678f80f4..62e14a6e78 100644 --- a/makedef.pl +++ b/makedef.pl @@ -272,7 +272,6 @@ if ($PLATFORM ne 'os2') { if ($PLATFORM eq 'win32') { skip_symbols [qw( PL_statusvalue_vms - PL_archpat_auto PL_DBcv PL_generation PL_lastgotoprobe @@ -296,7 +295,6 @@ elsif ($PLATFORM ne 'vms') { if ($PLATFORM eq 'wince') { skip_symbols [qw( PL_statusvalue_vms - PL_archpat_auto PL_DBcv PL_generation PL_lastgotoprobe @@ -404,7 +402,6 @@ elsif ($PLATFORM eq 'os2') { elsif ($PLATFORM eq 'netware') { skip_symbols [qw( PL_statusvalue_vms - PL_archpat_auto PL_DBcv PL_generation PL_lastgotoprobe -- cgit v1.2.1 From cf3847c7789d796a05e4c90dbc31fbd21918e793 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 19 Jul 2011 15:53:14 +0200 Subject: In makedef.pl, remove from 3 skip lists 3 variables now in PL_parser. 199e78b72f538ce0 moved PL_pending_indent and PL_sublex_info into the PL_parser struct. f06b58485d86282d moved PL_linestart there. --- makedef.pl | 9 --------- 1 file changed, 9 deletions(-) diff --git a/makedef.pl b/makedef.pl index 62e14a6e78..8f7162244d 100644 --- a/makedef.pl +++ b/makedef.pl @@ -275,10 +275,7 @@ if ($PLATFORM eq 'win32') { PL_DBcv PL_generation PL_lastgotoprobe - PL_linestart PL_modcount - PL_pending_ident - PL_sublex_info PL_timesbuf main PL_cshlen @@ -298,10 +295,7 @@ if ($PLATFORM eq 'wince') { PL_DBcv PL_generation PL_lastgotoprobe - PL_linestart PL_modcount - PL_pending_ident - PL_sublex_info PL_timesbuf setgid setuid @@ -405,10 +399,7 @@ elsif ($PLATFORM eq 'netware') { PL_DBcv PL_generation PL_lastgotoprobe - PL_linestart PL_modcount - PL_pending_ident - PL_sublex_info PL_timesbuf main PL_cshlen -- cgit v1.2.1 From a5b12fd07d9fdc63a5a4a6a6ac9d360ecfe660df Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 19 Jul 2011 16:07:53 +0200 Subject: In makedef.pl, remove PL_csh{len,name} from 3 skip lists. PL_cshname was converted to a true global by commit 618b9757aa96db62 in 2007, and PL_cshlen to a constant macro. Effectively both were dropped from the list of exported symbols at this time, although as they were skipped on Win32, WinCE and NetWare, the only platforms which would have noticed would be AIX, OS/2 and VMS. As they've been missing in 5.10.0, 5.12.0 and 5.14.0 without any bug reports, it doesn't seem worth re-adding PL_cshname to the list of exported symbols. --- makedef.pl | 6 ------ 1 file changed, 6 deletions(-) diff --git a/makedef.pl b/makedef.pl index 8f7162244d..1cb96935ac 100644 --- a/makedef.pl +++ b/makedef.pl @@ -278,8 +278,6 @@ if ($PLATFORM eq 'win32') { PL_modcount PL_timesbuf main - PL_cshlen - PL_cshname )]; } elsif ($PLATFORM ne 'vms') { @@ -305,8 +303,6 @@ if ($PLATFORM eq 'wince') { win32_get_childenv win32_spawnvp main - PL_cshlen - PL_cshname )]; } elsif ($PLATFORM eq 'aix') { @@ -402,8 +398,6 @@ elsif ($PLATFORM eq 'netware') { PL_modcount PL_timesbuf main - PL_cshlen - PL_cshname )]; } elsif ($PLATFORM eq 'vms') { -- cgit v1.2.1 From 5581753c12db7ac3d477b2911792472def374afc Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 19 Jul 2011 16:31:23 +0200 Subject: In makedef.pl, simplify handling the 7 symbols wanted on Win32 but not WinCE. 18f68570297a0260 added WinCE, but did so by changing a block that adds symbols for Win32 to add them for both Win32 & WinCE, and simultaneously adding 7 of those symbols to the WinCE specific skip list. Much simpler is to split the list of symbols to add into one for Win32 only, and one for Win32 & WinCE, and removing the skip list. --- makedef.pl | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/makedef.pl b/makedef.pl index 1cb96935ac..ca224ba3e0 100644 --- a/makedef.pl +++ b/makedef.pl @@ -295,13 +295,6 @@ if ($PLATFORM eq 'wince') { PL_lastgotoprobe PL_modcount PL_timesbuf - setgid - setuid - win32_free_childdir - win32_free_childenv - win32_get_childdir - win32_get_childenv - win32_spawnvp main )]; } @@ -1165,10 +1158,20 @@ while () { try_symbol($_); } +if ($PLATFORM eq 'win32') { + try_symbol($_) foreach qw( + setgid + setuid + win32_free_childdir + win32_free_childenv + win32_get_childdir + win32_get_childenv + win32_spawnvp + ); +} + if ($PLATFORM =~ /^win(?:32|ce)$/) { foreach my $symbol (qw( - setuid - setgid Perl_init_os_extras Perl_thread_create Perl_win32_init @@ -1196,7 +1199,6 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { win32_isatty win32_read win32_write - win32_spawnvp win32_mkdir win32_rmdir win32_chdir @@ -1282,11 +1284,7 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { win32_getpid win32_crypt win32_dynaload - win32_get_childenv - win32_free_childenv win32_clearenv - win32_get_childdir - win32_free_childdir win32_stdin win32_stdout win32_stderr -- cgit v1.2.1 From 47e4ddfcb98385296cc88313b983e1d6457585f4 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 19 Jul 2011 16:48:07 +0200 Subject: In makedef.pl, skip Perl_signbit when HAS_SIGNBIT is defined. Previously this condition was only checked on AIX and VMS. However, as all the other platforms don't have HAS_SIGNBIT defined, this simplifies the code with no change in output. --- makedef.pl | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/makedef.pl b/makedef.pl index ca224ba3e0..2771cc173f 100644 --- a/makedef.pl +++ b/makedef.pl @@ -302,10 +302,6 @@ elsif ($PLATFORM eq 'aix') { skip_symbols([qw( PL_statusvalue_vms )]); - skip_symbols([qw( - Perl_signbit - )]) - if $define{'HAS_SIGNBIT'}; } elsif ($PLATFORM eq 'os2') { emit_symbols([qw( @@ -480,10 +476,6 @@ elsif ($PLATFORM eq 'vms') { skip_symbols([qw( PL_statusvalue_posix )]); - skip_symbols([qw( - Perl_signbit - )]) - if $define{'HAS_SIGNBIT'}; } unless ($define{UNLINK_ALL_VERSIONS}) { @@ -869,6 +861,12 @@ unless ($define{HAVE_INTERP_INTERN}) { )]; } +if ($define{HAS_SIGNBIT}) { + skip_symbols([qw( + Perl_signbit + )]) +} + if ($^O ne 'vms') { # VMS does its own thing for these symbols. skip_symbols [qw(PL_sig_handlers_initted -- cgit v1.2.1 From ed76ea85d17f2b52978e26c4baa4c2b6d78a55b7 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 19 Jul 2011 18:03:38 +0200 Subject: In makedef.pl, correct a use of $^O to $PLATFORM. --- makedef.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makedef.pl b/makedef.pl index 2771cc173f..80bc6eaea4 100644 --- a/makedef.pl +++ b/makedef.pl @@ -867,7 +867,7 @@ if ($define{HAS_SIGNBIT}) { )]) } -if ($^O ne 'vms') { +if ($PLATFORM ne 'vms') { # VMS does its own thing for these symbols. skip_symbols [qw(PL_sig_handlers_initted PL_sig_ignoring -- cgit v1.2.1 From c36317f03bed52a819c9ee2deb01ee381e22360a Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 19 Jul 2011 18:16:01 +0200 Subject: In makedef.pl, consolidate $PLATFORM specific skip logic. --- makedef.pl | 88 ++++++++++++++++++++++++-------------------------------------- 1 file changed, 34 insertions(+), 54 deletions(-) diff --git a/makedef.pl b/makedef.pl index 80bc6eaea4..3e35c1fa4e 100644 --- a/makedef.pl +++ b/makedef.pl @@ -267,43 +267,44 @@ if ($PLATFORM ne 'os2') { Perl_my_ntohl Perl_my_swap )]; + if ($PLATFORM eq 'vms') { + skip_symbols([qw( + PL_statusvalue_posix + )]); + } else { + skip_symbols([qw( + PL_statusvalue_vms + )]); + if ($PLATFORM ne 'aix') { + skip_symbols [qw( + PL_DBcv + PL_generation + PL_lastgotoprobe + PL_modcount + PL_timesbuf + main + )]; + } + } } -if ($PLATFORM eq 'win32') { - skip_symbols [qw( - PL_statusvalue_vms - PL_DBcv - PL_generation - PL_lastgotoprobe - PL_modcount - PL_timesbuf - main - )]; -} -elsif ($PLATFORM ne 'vms') { - skip_symbols [qw( - Perl_do_spawn - Perl_do_spawn_nowait - Perl_do_aspawn - )]; -} -if ($PLATFORM eq 'wince') { +if ($PLATFORM ne 'vms') { + # VMS does its own thing for these symbols. skip_symbols [qw( - PL_statusvalue_vms - PL_DBcv - PL_generation - PL_lastgotoprobe - PL_modcount - PL_timesbuf - main - )]; -} -elsif ($PLATFORM eq 'aix') { - skip_symbols([qw( - PL_statusvalue_vms - )]); + PL_sig_handlers_initted + PL_sig_ignoring + PL_sig_defaulting + )]; + if ($PLATFORM ne 'win32') { + skip_symbols [qw( + Perl_do_spawn + Perl_do_spawn_nowait + Perl_do_aspawn + )]; + } } -elsif ($PLATFORM eq 'os2') { + +if ($PLATFORM eq 'os2') { emit_symbols([qw( ctermid get_sysinfo @@ -378,17 +379,6 @@ elsif ($PLATFORM eq 'os2') { )]) if $define{'USE_5005THREADS'} or $define{'USE_ITHREADS'}; } -elsif ($PLATFORM eq 'netware') { - skip_symbols [qw( - PL_statusvalue_vms - PL_DBcv - PL_generation - PL_lastgotoprobe - PL_modcount - PL_timesbuf - main - )]; -} elsif ($PLATFORM eq 'vms') { emit_symbols([qw( Perl_cando @@ -473,9 +463,6 @@ elsif ($PLATFORM eq 'vms') { Perl_vmstrnenv PerlIO_openn )]); - skip_symbols([qw( - PL_statusvalue_posix - )]); } unless ($define{UNLINK_ALL_VERSIONS}) { @@ -867,13 +854,6 @@ if ($define{HAS_SIGNBIT}) { )]) } -if ($PLATFORM ne 'vms') { - # VMS does its own thing for these symbols. - skip_symbols [qw(PL_sig_handlers_initted - PL_sig_ignoring - PL_sig_defaulting)]; -} - sub readvar { my $file = shift; my $proc = shift || sub { "PL_$_[2]" }; -- cgit v1.2.1 From 2cea2a29b4edbbfba9bec04cb9f13035bac7da12 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Wed, 20 Jul 2011 21:39:30 +0200 Subject: In makedef.pl, remove all skips for variables now in the parser struct. Different parser variables exist when perl is compiled with/without -Dmad. Before these were moved into the parser struct, they all had to be skipped explicitly. Now the parser struct has different members depending on whether perl is MAD or not. --- makedef.pl | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/makedef.pl b/makedef.pl index 3e35c1fa4e..5190bbe709 100644 --- a/makedef.pl +++ b/makedef.pl @@ -746,28 +746,10 @@ unless ($define{'PERL_TRACK_MEMPOOL'}) { )]; } -if ($define{'PERL_MAD'}) { - skip_symbols [qw( - PL_nextval - PL_nexttype - )]; -} else { +unless ($define{PERL_MAD}) { skip_symbols [qw( PL_madskills PL_xmlfp - PL_lasttoke - PL_realtokenstart - PL_faketokens - PL_thismad - PL_thistoken - PL_thisopen - PL_thisstuff - PL_thisclose - PL_thiswhite - PL_nextwhite - PL_skipwhite - PL_endwhite - PL_curforce Perl_pad_peg Perl_xmldump_indent Perl_xmldump_vindent -- cgit v1.2.1 From 4173aa16ec996023a9a61dbd9d84be8e7660fd0d Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Wed, 20 Jul 2011 22:13:37 +0200 Subject: In makedef.pl, remove the skip for PL_curthr for FAKE_THREADS. PL_curthr was removed along with the rest of the 5.005 thread implementation in 2002. --- makedef.pl | 4 ---- 1 file changed, 4 deletions(-) diff --git a/makedef.pl b/makedef.pl index 5190bbe709..f49727d7c0 100644 --- a/makedef.pl +++ b/makedef.pl @@ -675,10 +675,6 @@ unless ($define{'PERL_IMPLICIT_SYS'}) { )]; } -unless ($define{'FAKE_THREADS'}) { - skip_symbols [qw(PL_curthr)]; -} - unless ($define{'PL_OP_SLAB_ALLOC'}) { skip_symbols [qw( PL_OpPtr -- cgit v1.2.1 From 7642645939fff69664b83de91806d368f50c9a93 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Wed, 20 Jul 2011 22:29:18 +0200 Subject: In makedef.pl, remove the skip for PL_regdupe for not-USE_ITHREADS. PL_regdupe was removed in 2006 by commit f9f4320a413e57e4. --- makedef.pl | 1 - 1 file changed, 1 deletion(-) diff --git a/makedef.pl b/makedef.pl index f49727d7c0..e3cf8da53a 100644 --- a/makedef.pl +++ b/makedef.pl @@ -609,7 +609,6 @@ unless ($define{'USE_ITHREADS'}) { PL_hints_mutex PL_my_ctx_mutex PL_perlio_mutex - PL_regdupe Perl_clone_params_del Perl_clone_params_new Perl_parser_dup -- cgit v1.2.1 From ddfcc5d92ecd20b7481acf20f75dad5c5b557ed2 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Wed, 20 Jul 2011 22:37:56 +0200 Subject: In makedef.pl, remove the skip for 9 symbols for not-USE_ITHREADS They were moved into the XS for threads::shared in 2002 by commit 68795e9367de9848. --- makedef.pl | 9 --------- 1 file changed, 9 deletions(-) diff --git a/makedef.pl b/makedef.pl index e3cf8da53a..3c1d889460 100644 --- a/makedef.pl +++ b/makedef.pl @@ -603,8 +603,6 @@ unless ($define{'USE_ITHREADS'}) { PL_op_mutex PL_regex_pad PL_regex_padav - PL_sharedsv_space - PL_sharedsv_space_mutex PL_dollarzero_mutex PL_hints_mutex PL_my_ctx_mutex @@ -630,13 +628,6 @@ unless ($define{'USE_ITHREADS'}) { Perl_sys_intern_dup perl_clone perl_clone_using - Perl_sharedsv_find - Perl_sharedsv_init - Perl_sharedsv_lock - Perl_sharedsv_new - Perl_sharedsv_thrcnt_dec - Perl_sharedsv_thrcnt_inc - Perl_sharedsv_unlock Perl_stashpv_hvname_match Perl_regdupe_internal Perl_newPADOP -- cgit v1.2.1 From c1ebb07cec97f83e2aedf9e744819b74b2cac3f1 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Wed, 20 Jul 2011 22:52:55 +0200 Subject: In makedef.pl, remove the skip for PL_sig_sv for PERL_IMPLICIT_CONTEXT. PL_sig_sv was removed in 2010 by commit 0c4d3b5ea916cf64. --- makedef.pl | 6 ------ 1 file changed, 6 deletions(-) diff --git a/makedef.pl b/makedef.pl index 3c1d889460..b5ce810c48 100644 --- a/makedef.pl +++ b/makedef.pl @@ -488,12 +488,6 @@ unless ($define{'DEBUGGING'}) { )]; } -if ($define{'PERL_IMPLICIT_CONTEXT'}) { - skip_symbols [qw( - PL_sig_sv - )]; -} - if ($define{'PERL_IMPLICIT_SYS'}) { skip_symbols [qw( Perl_my_popen -- cgit v1.2.1 From 2638deb04aa839d7f7e517765fee2c4d62688320 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 21 Jul 2011 12:04:14 +0200 Subject: In makedef.pl, remove the skip for Perl_deb_growlevel for not-DEBUGGING. Perl_deb_growlevel was removed in 199 by commit f4c556ac9d141bf8. --- makedef.pl | 1 - 1 file changed, 1 deletion(-) diff --git a/makedef.pl b/makedef.pl index b5ce810c48..f376a222cb 100644 --- a/makedef.pl +++ b/makedef.pl @@ -473,7 +473,6 @@ unless ($define{UNLINK_ALL_VERSIONS}) { unless ($define{'DEBUGGING'}) { skip_symbols [qw( - Perl_deb_growlevel Perl_debop Perl_debprofdump Perl_debstack -- cgit v1.2.1 From f28d3e18d02c4a3e87fdcee0f8f27eeead156032 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 21 Jul 2011 12:38:29 +0200 Subject: In makedef.pl, remove 15 non-API functions from the not-PERLMAD skip list. These functions have never been exported, so never needed to be added to the skip list in makedef.pl. Perl_pad_peg was added in 1dba731d9f7b0a03, the remainder in 3b721df9bf246129. --- makedef.pl | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/makedef.pl b/makedef.pl index f376a222cb..85d18347c0 100644 --- a/makedef.pl +++ b/makedef.pl @@ -729,21 +729,6 @@ unless ($define{PERL_MAD}) { skip_symbols [qw( PL_madskills PL_xmlfp - Perl_pad_peg - Perl_xmldump_indent - Perl_xmldump_vindent - Perl_xmldump_all - Perl_xmldump_packsubs - Perl_xmldump_sub - Perl_xmldump_form - Perl_xmldump_eval - Perl_sv_catxmlsv - Perl_sv_catxmlpvn - Perl_sv_xmlpeek - Perl_do_pmop_xmldump - Perl_pmop_xmldump - Perl_do_op_xmldump - Perl_op_xmldump )]; } -- cgit v1.2.1 From 07d8178fb8f2977ae91322f6d1822cdf14b7ea67 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 21 Jul 2011 12:50:28 +0200 Subject: In makedef.pl, remove Perl_malloc{ed,_good}_size from the !MYMALLOC skip list. Perl_malloced_size was never in the public API, has not been available for export since commit 954c1994944eafa7 (in January 2000) restricted exports to just API functions. Perl_malloc_good_size was added to the skip list with commit 641071807211a396, which added the (non-API) function to malloc.c --- makedef.pl | 2 -- 1 file changed, 2 deletions(-) diff --git a/makedef.pl b/makedef.pl index 85d18347c0..4da7e612f6 100644 --- a/makedef.pl +++ b/makedef.pl @@ -544,8 +544,6 @@ else { PL_malloc_mutex Perl_dump_mstats Perl_get_mstats - Perl_malloced_size - Perl_malloc_good_size MallocCfg_ptr MallocCfgP_ptr )]; -- cgit v1.2.1 From 5608440fefa3d7bd829c844893115e8edb677c10 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 21 Jul 2011 13:10:42 +0200 Subject: In makedef.pl, remove the skip for Perl_mro_meta_dup for non-ITHREADS. Perl_mro_meta_dup was removed from the public API with commit 47c9dd1447a52d20 in April 2007, and hence was never in the API for any stable release. --- makedef.pl | 1 - 1 file changed, 1 deletion(-) diff --git a/makedef.pl b/makedef.pl index 4da7e612f6..7474c5ac89 100644 --- a/makedef.pl +++ b/makedef.pl @@ -610,7 +610,6 @@ unless ($define{'USE_ITHREADS'}) { Perl_gp_dup Perl_he_dup Perl_mg_dup - Perl_mro_meta_dup Perl_re_dup_guts Perl_sv_dup Perl_sv_dup_inc -- cgit v1.2.1 From f4a67abafa1e7c5a13bff02284af8fce11f8ff4d Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 21 Jul 2011 13:49:59 +0200 Subject: In makedef.pl, remove the skip for Perl_pidgone for not-PERL_USES_PL_PIDSTATUS. The skip for Perl_pidgone was added by 0c25f67f45e5dccb in 2005, However, Perl_pidgone was never in the public API, and has not been available for export since commit 954c1994944eafa7 (in January 2000). --- makedef.pl | 1 - 1 file changed, 1 deletion(-) diff --git a/makedef.pl b/makedef.pl index 7474c5ac89..345d4c4c1c 100644 --- a/makedef.pl +++ b/makedef.pl @@ -711,7 +711,6 @@ if ($define{'SPRINTF_RETURNS_STRLEN'}) { } unless ($define{'PERL_USES_PL_PIDSTATUS'}) { skip_symbols [qw( - Perl_pidgone PL_pidstatus )]; } -- cgit v1.2.1 From c960bcfdcc7a050c40badc398476447b9c3381d1 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Fri, 22 Jul 2011 18:54:01 +0200 Subject: In makedef.pl, read Config::{,non_}bincompat_options() on all platforms. Previously makedef.pl was only taking them into account on AIX, Win32 and WinCE. This might cause more API symbols to be exported on NetWare, OS/2 and VMS. On VMS, $define{DEBUGGING} and $define{UNLINK_ALL_VERSIONS} will now be read from Config::non_bincompat_options(), so no need for special case code to read them config.sh --- makedef.pl | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/makedef.pl b/makedef.pl index 345d4c4c1c..84783903e6 100644 --- a/makedef.pl +++ b/makedef.pl @@ -67,21 +67,18 @@ my %PLATFORM; defined $PLATFORM || die "PLATFORM undefined, must be one of: @PLATFORM\n"; exists $PLATFORM{$PLATFORM} || die "PLATFORM must be one of: @PLATFORM\n"; -if ($PLATFORM eq 'win32' or $PLATFORM eq 'wince' or $PLATFORM eq "aix") { - # Add the compile-time options that miniperl was built with to %define. - # On Win32 these are not the same options as perl itself will be built - # with since miniperl is built with a canned config (one of the win32/ - # config_H.*) and none of the BUILDOPT's that are set in the makefiles, - # but they do include some #define's that are hard-coded in various - # source files and header files and don't include any BUILDOPT's that - # the user might have chosen to disable because the canned configs are - # minimal configs that don't include any of those options. - - my @options - = sort(Config::bincompat_options(), Config::non_bincompat_options()); - print STDERR "Options: (@options)\n"; - $define{$_} = 1 foreach @options; -} +# Add the compile-time options that miniperl was built with to %define. +# On Win32 these are not the same options as perl itself will be built +# with since miniperl is built with a canned config (one of the win32/ +# config_H.*) and none of the BUILDOPT's that are set in the makefiles, +# but they do include some #define's that are hard-coded in various +# source files and header files and don't include any BUILDOPT's that +# the user might have chosen to disable because the canned configs are +# minimal configs that don't include any of those options. + +my @options = sort(Config::bincompat_options(), Config::non_bincompat_options()); +print STDERR "Options: (@options)\n"; +$define{$_} = 1 foreach @options; my %exportperlmalloc = ( @@ -118,10 +115,6 @@ unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'netware') } $define{$1} = $2 if /^(config_args|archname|perl_patchlevel)='(.+)'$/; - if ($PLATFORM eq 'vms') { - $define{DEBUGGING} = 1 if /^usedebugging_perl='Y'$/; - $define{UNLINK_ALL_VERSIONS} = 1 if /^d_unlink_all_versions='define'$/; - } } close(CFG); } -- cgit v1.2.1 From ddd6f63f626d9c2ff5b343ad33e687fc4772f60a Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 25 Jul 2011 14:13:51 +0200 Subject: In makedef.pl, NetWare can't export perl_clone_host without USE_ITHREADS. NetWare/nw5.c conditionally compiles perl_clone_host only if USE_ITHREADS is defined. It can't be added to the export list if it isn't compiled. NetWare/config.wc has useithreads='define' --- makedef.pl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/makedef.pl b/makedef.pl index 84783903e6..22d989ed81 100644 --- a/makedef.pl +++ b/makedef.pl @@ -221,8 +221,10 @@ elsif ($PLATFORM eq 'netware') { print "EXPORTS\n"; } if ($define{PERL_IMPLICIT_SYS}) { - ++$export{$_} - foreach qw(perl_get_host_info perl_alloc_override perl_clone_host); + ++$export{$_} foreach qw(perl_get_host_info perl_alloc_override); + } + if ($define{USE_ITHREADS} and $define{PERL_IMPLICIT_SYS}) { + ++$export{perl_clone_host}; } } -- cgit v1.2.1 From 2c84c9190df766f333ce2d136530a799132a4b50 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 25 Jul 2011 15:00:41 +0200 Subject: In makedef.pl, consolidate all the code conditional on PERL_IMPLICIT_SYS. Previously the conditional skips were for all platforms (in two places, both added in commit 7766f1371a6d2b58, whereas the conditional additions to the export lists were in platform specific blocks for Win32, WinCE and NetWare. Given that only those 3 platforms can (currently) build with -DPERL_IMPLICIT_SYS, it's safe to implicitly remove the platform check for those export additions by moving the code. --- makedef.pl | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/makedef.pl b/makedef.pl index 22d989ed81..0a561c4031 100644 --- a/makedef.pl +++ b/makedef.pl @@ -169,12 +169,6 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { print "DESCRIPTION 'Perl interpreter'\n"; } print "EXPORTS\n"; - if ($define{PERL_IMPLICIT_SYS}) { - ++$export{$_} foreach qw(perl_get_host_info perl_alloc_override); - } - if ($define{USE_ITHREADS} and $define{PERL_IMPLICIT_SYS}) { - ++$export{perl_clone_host}; - } } elsif ($PLATFORM eq 'os2') { if (open my $fh, '<', 'perl5.def') { @@ -220,12 +214,6 @@ elsif ($PLATFORM eq 'netware') { print "DESCRIPTION 'Perl interpreter for NetWare'\n"; print "EXPORTS\n"; } - if ($define{PERL_IMPLICIT_SYS}) { - ++$export{$_} foreach qw(perl_get_host_info perl_alloc_override); - } - if ($define{USE_ITHREADS} and $define{PERL_IMPLICIT_SYS}) { - ++$export{perl_clone_host}; - } } sub skip_symbols { @@ -487,6 +475,8 @@ if ($define{'PERL_IMPLICIT_SYS'}) { Perl_my_popen Perl_my_pclose )]; + ++$export{$_} foreach qw(perl_get_host_info perl_alloc_override); + ++$export{perl_clone_host} if $define{USE_ITHREADS}; } else { skip_symbols [qw( @@ -499,6 +489,8 @@ else { PL_Dir PL_Sock PL_Proc + perl_alloc_using + perl_clone_using )]; } @@ -643,13 +635,6 @@ unless ($define{'PERL_IMPLICIT_CONTEXT'}) { )]; } -unless ($define{'PERL_IMPLICIT_SYS'}) { - skip_symbols [qw( - perl_alloc_using - perl_clone_using - )]; -} - unless ($define{'PL_OP_SLAB_ALLOC'}) { skip_symbols [qw( PL_OpPtr -- cgit v1.2.1 From bf09e1bdfd80fb7c798423e424afade62b25d72f Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 25 Jul 2011 18:07:54 +0200 Subject: In makedef.pl, move the "oddities from PerlIO" from to a data structure. At one time various categories of symbols were listed after __DATA__. All others are now dealt with elsewhere, leaving only some PerlIO symbols, at which point it becomes clearer and terser to move the list to the point in the code that previously looped over . --- makedef.pl | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/makedef.pl b/makedef.pl index 0a561c4031..9273ca7c7f 100644 --- a/makedef.pl +++ b/makedef.pl @@ -18,8 +18,7 @@ # perlio.sym # perlvars.h # -# plus long lists of function names hard-coded directly in this script and -# in the DATA section. +# plus long lists of function names hard-coded directly in this script. # # Writes the result to STDOUT. # @@ -1001,8 +1000,7 @@ if ($define{'USE_PERLIO'}) { # Also do NOT add abstraction symbols from $perlio_sym # abstraction is done as #define to stdio - # Remaining remnants that _may_ be functions - # are handled in + # Remaining remnants that _may_ be functions are handled below. } for my $syms (@syms) { @@ -1054,9 +1052,17 @@ sub try_symbol { emit_symbol($symbol); } -while () { - try_symbol($_); -} +# Oddities from PerlIO +emit_symbols([qw( + PerlIO_binmode + PerlIO_getpos + PerlIO_init + PerlIO_setpos + PerlIO_sprintf + PerlIO_sv_dup + PerlIO_tmpfile + PerlIO_vsprintf + )]); if ($PLATFORM eq 'win32') { try_symbol($_) foreach qw( @@ -1465,13 +1471,3 @@ sub output_symbol { } 1; -__DATA__ -# Oddities from PerlIO -PerlIO_binmode -PerlIO_getpos -PerlIO_init -PerlIO_setpos -PerlIO_sprintf -PerlIO_sv_dup -PerlIO_tmpfile -PerlIO_vsprintf -- cgit v1.2.1 From ac8f35e5146a73901f4984e59f2037bb8517ed9c Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 25 Jul 2011 22:59:30 +0200 Subject: In makedef.pl, readvar now returns a list, not an array reference. Convert it from a loop to a map. Refactor its callers to use its results directly, instead of assigning to a lexical variable which is used only once. --- makedef.pl | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/makedef.pl b/makedef.pl index 9273ca7c7f..45cd64e794 100644 --- a/makedef.pl +++ b/makedef.pl @@ -778,21 +778,15 @@ if ($define{HAS_SIGNBIT}) { sub readvar { my $file = shift; my $proc = shift || sub { "PL_$_[2]" }; - open(VARS,$file) || die "Cannot open $file: $!\n"; - my @syms; - while () { - # All symbols have a Perl_ prefix because that's what embed.h - # sticks in front of them. The A?I?S?C? is strictly speaking - # wrong. - push(@syms, &$proc($1,$2,$3)) if (/\bPERLVAR(A?I?S?C?)\(([IGT])(\w+)/); - } - close(VARS); - return \@syms; + open my $vars, '<', $file or die die "Cannot open $file: $!\n"; + + # All symbols have a Perl_ prefix because that's what embed.h sticks + # in front of them. The A?I?S?C? is strictly speaking wrong. + map {/\bPERLVAR(A?I?S?C?)\(([IGT])(\w+)/ ? &$proc($1,$2,$3) : ()} <$vars>; } if ($define{'PERL_GLOBAL_STRUCT'}) { - my $global = readvar($perlvars_h); - skip_symbols $global; + skip_symbols [readvar($perlvars_h)]; emit_symbol('Perl_GetVars'); emit_symbols [qw(PL_Vars PL_VarsPtr)] unless $CCTYPE eq 'GCC'; } else { @@ -1021,23 +1015,19 @@ for my $syms (@syms) { if ($define{'MULTIPLICITY'} && $define{PERL_GLOBAL_STRUCT}) { for my $f ($perlvars_h) { - my $glob = readvar($f, sub { "Perl_" . $_[1] . $_[2] . "_ptr" }); - emit_symbols $glob; + emit_symbols [readvar($f, sub { "Perl_" . $_[1] . $_[2] . "_ptr" })]; } # XXX AIX seems to want the perlvars.h symbols, for some reason if ($PLATFORM eq 'aix' or $PLATFORM eq 'os2') { # OS/2 needs PL_thr_key - my $glob = readvar($perlvars_h); - emit_symbols $glob; + emit_symbols [readvar($perlvars_h)]; } } else { unless ($define{'PERL_GLOBAL_STRUCT'}) { - my $glob = readvar($perlvars_h); - emit_symbols $glob; + emit_symbols [readvar($perlvars_h)]; } unless ($define{MULTIPLICITY}) { - my $glob = readvar($intrpvar_h); - emit_symbols $glob; + emit_symbols [readvar($intrpvar_h)]; } } -- cgit v1.2.1 From e7c4906b340e871bf1f60e8036d252e23c9d8720 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 26 Jul 2011 00:02:22 +0200 Subject: In makedef.pl, inline skip_symbols. All skip_symbols() did was add to the hash of symbols to skip the list it was passed. --- makedef.pl | 190 +++++++++++++++++++++++-------------------------------------- 1 file changed, 72 insertions(+), 118 deletions(-) diff --git a/makedef.pl b/makedef.pl index 45cd64e794..6c74d8b6a0 100644 --- a/makedef.pl +++ b/makedef.pl @@ -215,13 +215,6 @@ elsif ($PLATFORM eq 'netware') { } } -sub skip_symbols { - my $list = shift; - foreach my $symbol (@$list) { - $skip{$symbol} = 1; - } -} - sub emit_symbols { my $list = shift; foreach my $symbol (@$list) { @@ -235,7 +228,7 @@ sub emit_symbols { } if ($PLATFORM ne 'os2') { - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_cryptseen PL_opsave Perl_GetVars @@ -248,41 +241,37 @@ if ($PLATFORM ne 'os2') { Perl_my_memset Perl_my_ntohl Perl_my_swap - )]; + ); if ($PLATFORM eq 'vms') { - skip_symbols([qw( - PL_statusvalue_posix - )]); + ++$skip{PL_statusvalue_posix}; } else { - skip_symbols([qw( - PL_statusvalue_vms - )]); + ++$skip{PL_statusvalue_vms}; if ($PLATFORM ne 'aix') { - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_DBcv PL_generation PL_lastgotoprobe PL_modcount PL_timesbuf main - )]; + ); } } } if ($PLATFORM ne 'vms') { # VMS does its own thing for these symbols. - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_sig_handlers_initted PL_sig_ignoring PL_sig_defaulting - )]; + ); if ($PLATFORM ne 'win32') { - skip_symbols [qw( + ++$skip{$_} foreach qw( Perl_do_spawn Perl_do_spawn_nowait Perl_do_aspawn - )]; + ); } } @@ -448,13 +437,11 @@ elsif ($PLATFORM eq 'vms') { } unless ($define{UNLINK_ALL_VERSIONS}) { - skip_symbols([qw( - Perl_unlnk - )]) + ++$skip{Perl_unlnk}; } unless ($define{'DEBUGGING'}) { - skip_symbols [qw( + ++$skip{$_} foreach qw( Perl_debop Perl_debprofdump Perl_debstack @@ -466,19 +453,19 @@ unless ($define{'DEBUGGING'}) { PL_watchaddr PL_watchok PL_watch_pvx - )]; + ); } if ($define{'PERL_IMPLICIT_SYS'}) { - skip_symbols [qw( + ++$skip{$_} foreach qw( Perl_my_popen Perl_my_pclose - )]; + ); ++$export{$_} foreach qw(perl_get_host_info perl_alloc_override); ++$export{perl_clone_host} if $define{USE_ITHREADS}; } else { - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_Mem PL_MemShared PL_MemParse @@ -490,19 +477,15 @@ else { PL_Proc perl_alloc_using perl_clone_using - )]; + ); } unless ($define{'PERL_OLD_COPY_ON_WRITE'}) { - skip_symbols [qw( - Perl_sv_setsv_cow - )]; + ++$skip{Perl_sv_setsv_cow}; } unless ($define{'USE_REENTRANT_API'}) { - skip_symbols [qw( - PL_reentrant_buffer - )]; + ++$skip{PL_reentrant_buffer}; } if ($define{'MYMALLOC'}) { @@ -520,35 +503,29 @@ if ($define{'MYMALLOC'}) { )]; } else { - skip_symbols [qw( - PL_malloc_mutex - )]; + ++$skip{PL_malloc_mutex}; } } else { - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_malloc_mutex Perl_dump_mstats Perl_get_mstats MallocCfg_ptr MallocCfgP_ptr - )]; + ); } if ($define{'PERL_USE_SAFE_PUTENV'}) { - skip_symbols [qw( - PL_use_safe_putenv - )]; + ++$skip{PL_use_safe_putenv}; } unless ($define{'USE_ITHREADS'}) { - skip_symbols [qw( - PL_thr_key - )]; + ++$skip{PL_thr_key}; } # USE_5005THREADS symbols. Kept as reference for easier removal - skip_symbols [qw( +++$skip{$_} foreach qw( PL_sv_mutex PL_strtab_mutex PL_svref_mutex @@ -573,10 +550,10 @@ unless ($define{'USE_ITHREADS'}) { Perl_unlock_condpair Perl_magic_mutexfree Perl_sv_lock - )]; + ); unless ($define{'USE_ITHREADS'}) { - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_op_mutex PL_regex_pad PL_regex_padav @@ -607,11 +584,11 @@ unless ($define{'USE_ITHREADS'}) { Perl_stashpv_hvname_match Perl_regdupe_internal Perl_newPADOP - )]; + ); } unless ($define{'PERL_IMPLICIT_CONTEXT'}) { - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_my_cxt_index PL_my_cxt_list PL_my_cxt_size @@ -631,116 +608,97 @@ unless ($define{'PERL_IMPLICIT_CONTEXT'}) { Perl_sv_setpvf_mg_nocontext Perl_my_cxt_init Perl_my_cxt_index - )]; + ); } unless ($define{'PL_OP_SLAB_ALLOC'}) { - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_OpPtr PL_OpSlab PL_OpSpace Perl_Slab_Alloc Perl_Slab_Free - )]; + ); } unless ($define{'PERL_DEBUG_READONLY_OPS'}) { - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_slab_count PL_slabs - )]; + ); } unless ($define{'THREADS_HAVE_PIDS'}) { - skip_symbols [qw(PL_ppid)]; + ++$skip{PL_ppid}; } unless ($define{'PERL_NEED_APPCTX'}) { - skip_symbols [qw( - PL_appctx - )]; + ++$skip{PL_appctx}; } unless ($define{'PERL_NEED_TIMESBASE'}) { - skip_symbols [qw( - PL_timesbase - )]; + ++$skip{PL_timesbase}; } unless ($define{'DEBUG_LEAKING_SCALARS'}) { - skip_symbols [qw( - PL_sv_serial - )]; + ++$skip{PL_sv_serial}; } unless ($define{'DEBUG_LEAKING_SCALARS_FORK_DUMP'}) { - skip_symbols [qw( - PL_dumper_fd - )]; + ++$skip{PL_dumper_fd}; } + unless ($define{'PERL_DONT_CREATE_GVSV'}) { - skip_symbols [qw( - Perl_gv_SVadd - )]; + ++$skip{Perl_gv_SVadd}; } + if ($define{'SPRINTF_RETURNS_STRLEN'}) { - skip_symbols [qw( - Perl_my_sprintf - )]; + ++$skip{Perl_my_sprintf}; } + unless ($define{'PERL_USES_PL_PIDSTATUS'}) { - skip_symbols [qw( - PL_pidstatus - )]; + ++$skip{PL_pidstatus}; } unless ($define{'PERL_TRACK_MEMPOOL'}) { - skip_symbols [qw( - PL_memory_debug_header - )]; + ++$skip{PL_memory_debug_header}; } unless ($define{PERL_MAD}) { - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_madskills PL_xmlfp - )]; + ); } unless ($define{'MULTIPLICITY'}) { - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_interp_size PL_interp_size_5_16_0 - )]; + ); } unless ($define{'PERL_GLOBAL_STRUCT'}) { - skip_symbols [qw( - PL_global_struct_size - )]; + ++$skip{PL_global_struct_size}; } unless ($define{'PERL_GLOBAL_STRUCT_PRIVATE'}) { - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_my_cxt_keys Perl_my_cxt_index - )]; + ); } unless ($define{HAS_MMAP}) { - skip_symbols [qw( - PL_mmap_page_size - )]; + ++$skip{PL_mmap_page_size}; } if ($define{HAS_SIGACTION}) { - skip_symbols [qw( - PL_sig_trapped - )]; + ++$skip{PL_sig_trapped}; } unless ($define{USE_LOCALE_COLLATE}) { - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_collation_ix PL_collation_name PL_collation_standard @@ -748,31 +706,29 @@ unless ($define{USE_LOCALE_COLLATE}) { PL_collxfrm_mult Perl_sv_collxfrm Perl_sv_collxfrm_flags - )]; + ); } unless ($define{USE_LOCALE_NUMERIC}) { - skip_symbols [qw( + ++$skip{$_} foreach qw( PL_numeric_local PL_numeric_name PL_numeric_radix_sv PL_numeric_standard - )]; + ); } unless ($define{HAVE_INTERP_INTERN}) { - skip_symbols [qw( + ++$skip{$_} foreach qw( Perl_sys_intern_clear Perl_sys_intern_dup Perl_sys_intern_init PL_sys_intern - )]; + ); } if ($define{HAS_SIGNBIT}) { - skip_symbols([qw( - Perl_signbit - )]) + ++$skip{Perl_signbit}; } sub readvar { @@ -786,11 +742,11 @@ sub readvar { } if ($define{'PERL_GLOBAL_STRUCT'}) { - skip_symbols [readvar($perlvars_h)]; + ++$skip{$_} foreach readvar($perlvars_h); emit_symbol('Perl_GetVars'); emit_symbols [qw(PL_Vars PL_VarsPtr)] unless $CCTYPE eq 'GCC'; } else { - skip_symbols [qw(Perl_init_global_struct Perl_free_global_struct)]; + ++$skip{$_} foreach qw(Perl_init_global_struct Perl_free_global_struct); } # functions from *.sym files @@ -886,13 +842,13 @@ if ($define{'USE_PERLIO'}) { # This part is then dependent on how the abstraction is implemented if ($define{'USE_SFIO'}) { # Old legacy non-stdio "PerlIO" - skip_symbols \@layer_syms; - skip_symbols [qw(perlsio_binmode)]; + ++$skip{$_} foreach @layer_syms; + ++$skip{perlsio_binmode}; # SFIO defines most of the PerlIO routines as macros # So undo most of what $perlio_sym has just done - d'oh ! # Perhaps it would be better to list the ones which do exist # And emit them - skip_symbols [qw( + ++$skip{$_} foreach qw( PerlIO_canset_cnt PerlIO_clearerr PerlIO_close @@ -960,7 +916,7 @@ if ($define{'USE_PERLIO'}) { PL_def_layerlist PL_known_layers PL_perlio - )]; + ); } else { # PerlIO with layers - export implementation @@ -973,16 +929,14 @@ if ($define{'USE_PERLIO'}) { )]; } else { - skip_symbols [qw( - PL_perlio_mutex - )]; + ++$skip{PL_perlio_mutex}; } } else { # -Uuseperlio # Skip the PerlIO layer symbols - although # nothing should have exported them anyway. - skip_symbols \@layer_syms; - skip_symbols [qw( + ++$skip{$_} foreach @layer_syms; + ++$skip{$_} foreach qw( perlsio_binmode PL_def_layerlist PL_known_layers @@ -990,7 +944,7 @@ if ($define{'USE_PERLIO'}) { PL_perlio_debug_fd PL_perlio_fd_refcnt PL_perlio_fd_refcnt_size - )]; + ); # Also do NOT add abstraction symbols from $perlio_sym # abstraction is done as #define to stdio -- cgit v1.2.1 From d3906116bf921c970873a137d5af3a45538d625e Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 26 Jul 2011 11:16:02 +0200 Subject: In makedef.pl, eliminate now-superfluous chomp and file-content processing. emit_symbol() would chomp every symbol passed to it. The chomp was added in 3e3baf6d63945cb6, in the refactoring which replaced print statements with emit_symbol(), because its callers (still) passed it the values previously printed, values generated from the lines of files. The chomp in emit_symbol() probably should have been removed as part of 22239a37ce131e4f, which unified the code that parsed external files, adding chomp there, and added chomp to the code which read from . The chomp of added in 22239a37ce131e4f was moved wholesale with all the file-content specific processing into a new routine try_symbol() in commit 549a6b102c2ac8c4 on the cfgperl branch. That commit and subsequent commits used try_symbol() as the general-purpose routine to add symbols to the export list, even though it also had all the specific file processing code to ignore comments and other text that did not look like symbols. An analogous alternative routine to add symbols to the export list, emit_symbols(), was added to blead 6 days earlier in commit 51371543ca1a75ed. As makedef.pl no longer uses , and reading from external files is nicely encapsulated, all this vestigial code can be removed. Technical debt from 1997 and 1999 finally being eliminated. --- makedef.pl | 6 ------ 1 file changed, 6 deletions(-) diff --git a/makedef.pl b/makedef.pl index 6c74d8b6a0..a091c13ef2 100644 --- a/makedef.pl +++ b/makedef.pl @@ -987,11 +987,6 @@ else { sub try_symbol { my $symbol = shift; - - return if $symbol !~ /^[A-Za-z_]/; - return if $symbol =~ /^\#/; - $symbol =~s/\r//g; - chomp($symbol); return if exists $skip{$symbol}; emit_symbol($symbol); } @@ -1367,7 +1362,6 @@ EOP sub emit_symbol { my $symbol = shift; - chomp($symbol); $export{$symbol} = 1; } -- cgit v1.2.1 From 944921d3d5a3e81893b5456e3d606f9ee2b45ed9 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 26 Jul 2011 12:05:51 +0200 Subject: In makedef.pl, inline emit_symbol. All emit_symbol() did was add to the hash of symbols to emit the list it was passed. --- makedef.pl | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/makedef.pl b/makedef.pl index a091c13ef2..11fed4f681 100644 --- a/makedef.pl +++ b/makedef.pl @@ -223,7 +223,7 @@ sub emit_symbols { if ($define{MULTIPLICITY}) { $skipsym =~ s/^Perl_[GIT](\w+)_ptr$/PL_$1/; } - emit_symbol($symbol) unless exists $skip{$skipsym}; + ++$export{$symbol} unless exists $skip{$skipsym}; } } @@ -743,7 +743,7 @@ sub readvar { if ($define{'PERL_GLOBAL_STRUCT'}) { ++$skip{$_} foreach readvar($perlvars_h); - emit_symbol('Perl_GetVars'); + ++$export{Perl_GetVars}; emit_symbols [qw(PL_Vars PL_VarsPtr)] unless $CCTYPE eq 'GCC'; } else { ++$skip{$_} foreach qw(Perl_init_global_struct Perl_free_global_struct); @@ -960,7 +960,7 @@ for my $syms (@syms) { chomp($_); my $symbol = ($syms =~ /var\.sym$/i ? "PL_" : ""); $symbol .= $_; - emit_symbol($symbol) unless exists $skip{$symbol}; + ++$export{$symbol} unless exists $skip{$symbol}; } close(GLOBAL); } @@ -987,8 +987,7 @@ else { sub try_symbol { my $symbol = shift; - return if exists $skip{$symbol}; - emit_symbol($symbol); + ++$export{$symbol} unless $skip{$symbol}; } # Oddities from PerlIO @@ -1360,11 +1359,6 @@ if ($PLATFORM eq 'os2') { EOP } -sub emit_symbol { - my $symbol = shift; - $export{$symbol} = 1; -} - sub output_symbol { my $symbol = shift; if ($PLATFORM =~ /^win(?:32|ce)$/) { -- cgit v1.2.1 From 430d15ed6b476e71ae667436d913e7259e00fd17 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 26 Jul 2011 12:23:51 +0200 Subject: In makedef.pl, rename emit_symbols() to try_symbols(), and pass it a list. try_symbols() better describes what it does - add symbols to the list to export, unless they are in the skip list. --- makedef.pl | 47 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/makedef.pl b/makedef.pl index 11fed4f681..1827bd2d6a 100644 --- a/makedef.pl +++ b/makedef.pl @@ -215,9 +215,8 @@ elsif ($PLATFORM eq 'netware') { } } -sub emit_symbols { - my $list = shift; - foreach my $symbol (@$list) { +sub try_symbols { + foreach my $symbol (@_) { my $skipsym = $symbol; # XXX hack if ($define{MULTIPLICITY}) { @@ -276,7 +275,7 @@ if ($PLATFORM ne 'vms') { } if ($PLATFORM eq 'os2') { - emit_symbols([qw( + try_symbols(qw( ctermid get_sysinfo Perl_OS2_init @@ -342,16 +341,17 @@ if ($PLATFORM eq 'os2') { ResetWinError CroakWinError PL_do_undump - )]); - emit_symbols([qw(os2_cond_wait + )); + try_symbols(qw( + os2_cond_wait pthread_join pthread_create pthread_detach - )]) + )) if $define{'USE_5005THREADS'} or $define{'USE_ITHREADS'}; } elsif ($PLATFORM eq 'vms') { - emit_symbols([qw( + try_symbols(qw( Perl_cando Perl_cando_by_name Perl_closedir @@ -433,7 +433,7 @@ elsif ($PLATFORM eq 'vms') { Perl_vmssetuserlnm Perl_vmstrnenv PerlIO_openn - )]); + )); } unless ($define{UNLINK_ALL_VERSIONS}) { @@ -489,18 +489,18 @@ unless ($define{'USE_REENTRANT_API'}) { } if ($define{'MYMALLOC'}) { - emit_symbols [qw( + try_symbols(qw( Perl_dump_mstats Perl_get_mstats Perl_strdup Perl_putenv MallocCfg_ptr MallocCfgP_ptr - )]; + )); if ($define{'USE_ITHREADS'}) { - emit_symbols [qw( + try_symbols(qw( PL_malloc_mutex - )]; + )); } else { ++$skip{PL_malloc_mutex}; @@ -744,7 +744,7 @@ sub readvar { if ($define{'PERL_GLOBAL_STRUCT'}) { ++$skip{$_} foreach readvar($perlvars_h); ++$export{Perl_GetVars}; - emit_symbols [qw(PL_Vars PL_VarsPtr)] unless $CCTYPE eq 'GCC'; + try_symbols(qw(PL_Vars PL_VarsPtr)) unless $CCTYPE eq 'GCC'; } else { ++$skip{$_} foreach qw(Perl_init_global_struct Perl_free_global_struct); } @@ -920,13 +920,12 @@ if ($define{'USE_PERLIO'}) { } else { # PerlIO with layers - export implementation - emit_symbols \@layer_syms; - emit_symbols [qw(perlsio_binmode)]; + try_symbols(@layer_syms, 'perlsio_binmode'); } if ($define{'USE_ITHREADS'}) { - emit_symbols [qw( + try_symbols(qw( PL_perlio_mutex - )]; + )); } else { ++$skip{PL_perlio_mutex}; @@ -969,19 +968,19 @@ for my $syms (@syms) { if ($define{'MULTIPLICITY'} && $define{PERL_GLOBAL_STRUCT}) { for my $f ($perlvars_h) { - emit_symbols [readvar($f, sub { "Perl_" . $_[1] . $_[2] . "_ptr" })]; + try_symbols(readvar($f, sub { "Perl_" . $_[1] . $_[2] . "_ptr" })); } # XXX AIX seems to want the perlvars.h symbols, for some reason if ($PLATFORM eq 'aix' or $PLATFORM eq 'os2') { # OS/2 needs PL_thr_key - emit_symbols [readvar($perlvars_h)]; + try_symbols(readvar($perlvars_h)); } } else { unless ($define{'PERL_GLOBAL_STRUCT'}) { - emit_symbols [readvar($perlvars_h)]; + try_symbols(readvar($perlvars_h)); } unless ($define{MULTIPLICITY}) { - emit_symbols [readvar($intrpvar_h)]; + try_symbols(readvar($intrpvar_h)); } } @@ -991,7 +990,7 @@ sub try_symbol { } # Oddities from PerlIO -emit_symbols([qw( +try_symbols(qw( PerlIO_binmode PerlIO_getpos PerlIO_init @@ -1000,7 +999,7 @@ emit_symbols([qw( PerlIO_sv_dup PerlIO_tmpfile PerlIO_vsprintf - )]); + )); if ($PLATFORM eq 'win32') { try_symbol($_) foreach qw( -- cgit v1.2.1 From d6035849b283331f7d70a49adddb6ffa7ee8cf3f Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 26 Jul 2011 12:46:48 +0200 Subject: In makedef.pl, consolidate the actual output code in one place. Previously, the platform specific header output code was near the top of makedef.pl, before some of the emit/skip logic and some of the file reading code, and far from the rest of the output logic. --- makedef.pl | 107 ++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 59 insertions(+), 48 deletions(-) diff --git a/makedef.pl b/makedef.pl index 1827bd2d6a..e49514c51e 100644 --- a/makedef.pl +++ b/makedef.pl @@ -40,7 +40,7 @@ use vars qw($PLATFORM $CCTYPE $FILETYPE $TARG_DIR); $CCTYPE = 'MSVC'; $TARG_DIR = ''; -my (%define, %ordinal); +my %define; while (@ARGV) { my $flag = shift; @@ -155,21 +155,12 @@ if ($define{USE_ITHREADS} && $PLATFORM ne 'win32' && $^O ne 'darwin') { # perl.h logic duplication ends -my $sym_ord = 0; - print STDERR "Defines: (" . join(' ', sort keys %define) . ")\n"; -if ($PLATFORM =~ /^win(?:32|ce)$/) { - (my $dll = ($define{PERL_DLL} || "perl515")) =~ s/\.dll$//i; - print "LIBRARY $dll\n"; - # The DESCRIPTION module definition file statement is not supported - # by VC7 onwards. - if ($CCTYPE =~ /^(?:MSVC60|GCC|BORLAND)$/) { - print "DESCRIPTION 'Perl interpreter'\n"; - } - print "EXPORTS\n"; -} -elsif ($PLATFORM eq 'os2') { +my $sym_ord = 0; +my %ordinal; + +if ($PLATFORM eq 'os2') { if (open my $fh, '<', 'perl5.def') { while (<$fh>) { last if /^\s*EXPORTS\b/; @@ -181,38 +172,6 @@ elsif ($PLATFORM eq 'os2') { } $sym_ord < $_ and $sym_ord = $_ for values %ordinal; # Take the max } - (my $v = $]) =~ s/(\d\.\d\d\d)(\d\d)$/$1_$2/; - $v .= '-thread' if $define{archname} =~ /-thread/; - (my $dll = $define{PERL_DLL}) =~ s/\.dll$//i; - $v .= "\@$define{perl_patchlevel}" if $define{perl_patchlevel}; - my $d = "DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter, configured as $define{config_args}'"; - $d = substr($d, 0, 249) . "...'" if length $d > 253; - print <<"---EOP---"; -LIBRARY '$dll' INITINSTANCE TERMINSTANCE -$d -STACKSIZE 32768 -CODE LOADONCALL -DATA LOADONCALL NONSHARED MULTIPLE -EXPORTS ----EOP--- -} -elsif ($PLATFORM eq 'aix') { - my $OSVER = `uname -v`; - chop $OSVER; - my $OSREL = `uname -r`; - chop $OSREL; - if ($OSVER > 4 || ($OSVER == 4 && $OSREL >= 3)) { - print "#! ..\n"; - } else { - print "#!\n"; - } -} -elsif ($PLATFORM eq 'netware') { - if ($FILETYPE eq 'def') { - print "LIBRARY perl515\n"; - print "DESCRIPTION 'Perl interpreter for NetWare'\n"; - print "EXPORTS\n"; - } } sub try_symbols { @@ -1340,13 +1299,65 @@ foreach my $symbol (@stat_mods) try_symbol("init_Win32CORE") if $static_ext =~ /\bWin32CORE\b/; -# Now all symbols should be defined because -# next we are going to output them. +############################################################################### + +# Now all symbols should be defined because next we are going to output them. + +# Start with platform specific headers: + +if ($PLATFORM =~ /^win(?:32|ce)$/) { + (my $dll = ($define{PERL_DLL} || "perl515")) =~ s/\.dll$//i; + print "LIBRARY $dll\n"; + # The DESCRIPTION module definition file statement is not supported + # by VC7 onwards. + if ($CCTYPE =~ /^(?:MSVC60|GCC|BORLAND)$/) { + print "DESCRIPTION 'Perl interpreter'\n"; + } + print "EXPORTS\n"; +} +elsif ($PLATFORM eq 'os2') { + (my $v = $]) =~ s/(\d\.\d\d\d)(\d\d)$/$1_$2/; + $v .= '-thread' if $define{archname} =~ /-thread/; + (my $dll = $define{PERL_DLL}) =~ s/\.dll$//i; + $v .= "\@$define{perl_patchlevel}" if $define{perl_patchlevel}; + my $d = "DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter, configured as $define{config_args}'"; + $d = substr($d, 0, 249) . "...'" if length $d > 253; + print <<"---EOP---"; +LIBRARY '$dll' INITINSTANCE TERMINSTANCE +$d +STACKSIZE 32768 +CODE LOADONCALL +DATA LOADONCALL NONSHARED MULTIPLE +EXPORTS +---EOP--- +} +elsif ($PLATFORM eq 'aix') { + my $OSVER = `uname -v`; + chop $OSVER; + my $OSREL = `uname -r`; + chop $OSREL; + if ($OSVER > 4 || ($OSVER == 4 && $OSREL >= 3)) { + print "#! ..\n"; + } else { + print "#!\n"; + } +} +elsif ($PLATFORM eq 'netware') { + if ($FILETYPE eq 'def') { + print "LIBRARY perl515\n"; + print "DESCRIPTION 'Perl interpreter for NetWare'\n"; + print "EXPORTS\n"; + } +} + +# Then the symbols foreach my $symbol (sort keys %export) { output_symbol($symbol); } +# Then platform specific footers. + if ($PLATFORM eq 'os2') { print < Date: Tue, 26 Jul 2011 13:09:56 +0200 Subject: In makedef.pl, inline output_symbol() into its only caller. Remove code commented out by commit 51371543ca1a75ed in 1999 with the note "binary compatibility between compilers is an exercise in frustration". --- makedef.pl | 59 ++++++++++++++++------------------------------------------- 1 file changed, 16 insertions(+), 43 deletions(-) diff --git a/makedef.pl b/makedef.pl index e49514c51e..4d53f447a2 100644 --- a/makedef.pl +++ b/makedef.pl @@ -1353,48 +1353,9 @@ elsif ($PLATFORM eq 'netware') { # Then the symbols foreach my $symbol (sort keys %export) { - output_symbol($symbol); -} - -# Then platform specific footers. - -if ($PLATFORM eq 'os2') { - print < Date: Tue, 26 Jul 2011 14:20:25 +0200 Subject: In makedef.pl, no need to loop over a 1 item list. --- makedef.pl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/makedef.pl b/makedef.pl index 4d53f447a2..65f019d160 100644 --- a/makedef.pl +++ b/makedef.pl @@ -926,9 +926,7 @@ for my $syms (@syms) { # variables if ($define{'MULTIPLICITY'} && $define{PERL_GLOBAL_STRUCT}) { - for my $f ($perlvars_h) { - try_symbols(readvar($f, sub { "Perl_" . $_[1] . $_[2] . "_ptr" })); - } + try_symbols(readvar($perlvars_h, sub { "Perl_" . $_[1] . $_[2] . "_ptr" })); # XXX AIX seems to want the perlvars.h symbols, for some reason if ($PLATFORM eq 'aix' or $PLATFORM eq 'os2') { # OS/2 needs PL_thr_key try_symbols(readvar($perlvars_h)); -- cgit v1.2.1 From 44c1781396fd9d1017d6ac6eb3a1f30b9d57cfcc Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 26 Jul 2011 14:37:53 +0200 Subject: In makedef.pl, change readvar() to add items to a passed-in hash reference. Previously, readvar() returned a list of symbols, extracting the names of the variables declared there, then transforming them either via a passed in function, or prepending 'PL_'. The list was then either added to %skip, or added to %export by try_symbols(), which had a kludge to normalise the previous transformation to 'PL_'. Instead, passing a reference to the target hash into readvar() allows that kludge to be removed, considerably simplifying try_symbols(). --- makedef.pl | 55 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/makedef.pl b/makedef.pl index 65f019d160..a181345969 100644 --- a/makedef.pl +++ b/makedef.pl @@ -98,10 +98,6 @@ my $globvar_sym = "globvar.sym"; my $perlio_sym = "perlio.sym"; my $static_ext = ""; -my %skip; -# All platforms export boot_DynaLoader unconditionally. -my %export = ( boot_DynaLoader => 1 ); - s/^/$TARG_DIR/ foreach($intrpvar_h, $perlvars_h, $global_sym, $globvar_sym, $perlio_sym, $config_sh); @@ -174,14 +170,33 @@ if ($PLATFORM eq 'os2') { } } +my %skip; +# All platforms export boot_DynaLoader unconditionally. +my %export = ( boot_DynaLoader => 1 ); + sub try_symbols { foreach my $symbol (@_) { - my $skipsym = $symbol; - # XXX hack - if ($define{MULTIPLICITY}) { - $skipsym =~ s/^Perl_[GIT](\w+)_ptr$/PL_$1/; - } - ++$export{$symbol} unless exists $skip{$skipsym}; + ++$export{$symbol} unless exists $skip{$symbol}; + } +} + +sub readvar { + # $hash is the hash that we're adding to. For one of our callers, it will + # actually be the skip hash but that doesn't affect the intent of what + # we're doing, as in that case we skip adding something to the skip hash + # for the second time. + + my ($file, $hash, $proc) = @_; + open my $vars, '<', $file or die die "Cannot open $file: $!\n"; + + while (<$vars>) { + # All symbols have a Perl_ prefix because that's what embed.h sticks + # in front of them. The A?I?S?C? is strictly speaking wrong. + next unless /\bPERLVAR(A?I?S?C?)\(([IGT])(\w+)/; + + my $var = "PL_$3"; + my $symbol = $proc ? &$proc($1,$2,$3) : $var; + ++$hash->{$symbol} unless exists $skip{$var}; } } @@ -690,18 +705,8 @@ if ($define{HAS_SIGNBIT}) { ++$skip{Perl_signbit}; } -sub readvar { - my $file = shift; - my $proc = shift || sub { "PL_$_[2]" }; - open my $vars, '<', $file or die die "Cannot open $file: $!\n"; - - # All symbols have a Perl_ prefix because that's what embed.h sticks - # in front of them. The A?I?S?C? is strictly speaking wrong. - map {/\bPERLVAR(A?I?S?C?)\(([IGT])(\w+)/ ? &$proc($1,$2,$3) : ()} <$vars>; -} - if ($define{'PERL_GLOBAL_STRUCT'}) { - ++$skip{$_} foreach readvar($perlvars_h); + readvar($perlvars_h, \%skip); ++$export{Perl_GetVars}; try_symbols(qw(PL_Vars PL_VarsPtr)) unless $CCTYPE eq 'GCC'; } else { @@ -926,18 +931,18 @@ for my $syms (@syms) { # variables if ($define{'MULTIPLICITY'} && $define{PERL_GLOBAL_STRUCT}) { - try_symbols(readvar($perlvars_h, sub { "Perl_" . $_[1] . $_[2] . "_ptr" })); + readvar($perlvars_h, \%export, sub { "Perl_" . $_[1] . $_[2] . "_ptr" }); # XXX AIX seems to want the perlvars.h symbols, for some reason if ($PLATFORM eq 'aix' or $PLATFORM eq 'os2') { # OS/2 needs PL_thr_key - try_symbols(readvar($perlvars_h)); + readvar($perlvars_h, \%export); } } else { unless ($define{'PERL_GLOBAL_STRUCT'}) { - try_symbols(readvar($perlvars_h)); + readvar($perlvars_h, \%export); } unless ($define{MULTIPLICITY}) { - try_symbols(readvar($intrpvar_h)); + readvar($intrpvar_h, \%export); } } -- cgit v1.2.1 From 7a95c549b02a445cd55ee29b10543fd01e7f76b6 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 26 Jul 2011 15:04:57 +0200 Subject: In makedef.pl, replace calls to try_symbol() with try_symbols(). Following the simplification of the previous commit, the two are now equivalent. --- makedef.pl | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-) diff --git a/makedef.pl b/makedef.pl index a181345969..19e84dfdde 100644 --- a/makedef.pl +++ b/makedef.pl @@ -946,11 +946,6 @@ else { } } -sub try_symbol { - my $symbol = shift; - ++$export{$symbol} unless $skip{$symbol}; -} - # Oddities from PerlIO try_symbols(qw( PerlIO_binmode @@ -964,7 +959,7 @@ try_symbols(qw( )); if ($PLATFORM eq 'win32') { - try_symbol($_) foreach qw( + try_symbols(qw( setgid setuid win32_free_childdir @@ -972,11 +967,11 @@ if ($PLATFORM eq 'win32') { win32_get_childdir win32_get_childenv win32_spawnvp - ); + )); } if ($PLATFORM =~ /^win(?:32|ce)$/) { - foreach my $symbol (qw( + try_symbols(qw( Perl_init_os_extras Perl_thread_create Perl_win32_init @@ -1130,12 +1125,9 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { win32_puts win32_getchar win32_putchar - )) - { - try_symbol($symbol); - } + )); if ($CCTYPE eq "BORLAND") { - try_symbol('_matherr'); + try_symbols('_matherr'); } } elsif ($PLATFORM eq 'os2') { @@ -1150,7 +1142,7 @@ elsif ($PLATFORM eq 'os2') { delete $export{$_} foreach @missing; } elsif ($PLATFORM eq 'netware') { -foreach my $symbol (qw( + try_symbols(qw( Perl_init_os_extras Perl_thread_create Perl_nw5_init @@ -1285,22 +1277,14 @@ foreach my $symbol (qw( Perl_sv_2pv nw_freeenviron Remove_Thread_Ctx - )) - { - try_symbol($symbol); - } + )); } # records of type boot_module for statically linked modules (except Dynaloader) $static_ext =~ s/\//__/g; $static_ext =~ s/\bDynaLoader\b//; -my @stat_mods = map {"boot_$_"} grep {/\S/} split /\s+/, $static_ext; -foreach my $symbol (@stat_mods) - { - try_symbol($symbol); - } - -try_symbol("init_Win32CORE") if $static_ext =~ /\bWin32CORE\b/; +try_symbols(map {"boot_$_"} grep {/\S/} split /\s+/, $static_ext); +try_symbols("init_Win32CORE") if $static_ext =~ /\bWin32CORE\b/; ############################################################################### -- cgit v1.2.1 From fc951c83a03a8123dce1cd2eb23fffbe099e1102 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 26 Jul 2011 15:15:32 +0200 Subject: In makedef.pl, remove duplicate symbols passed to try_symbols() for OS/2. Code to try the 4 thread-specific symbols was added in 2003 by commit 5c728af092d5feba. However, all 4 symbols were already listed in makedef.pl, added in 1999 by commit 3cfae81b38bc8edd. (Unlike other platforms, on OS/2 adding symbols to %export that aren't actually compiled in does not cause errors, as there is code later in makedef.pl to read in miniperl.map, and strip from %export all symbols not listed there.) --- makedef.pl | 7 ------- 1 file changed, 7 deletions(-) diff --git a/makedef.pl b/makedef.pl index 19e84dfdde..2871643b06 100644 --- a/makedef.pl +++ b/makedef.pl @@ -316,13 +316,6 @@ if ($PLATFORM eq 'os2') { CroakWinError PL_do_undump )); - try_symbols(qw( - os2_cond_wait - pthread_join - pthread_create - pthread_detach - )) - if $define{'USE_5005THREADS'} or $define{'USE_ITHREADS'}; } elsif ($PLATFORM eq 'vms') { try_symbols(qw( -- cgit v1.2.1 From 71afeaec6c6e66daa37cbb9c178ee1b6e1d08bac Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 26 Jul 2011 17:25:39 +0200 Subject: In makedef.pl, consolidate all the code that tries platform-specific symbols. Previously the code for OS/2 and VMS was run much earlier. Fortunately none of the symbols tried were conditionally added to the skip list, else much confusion would have ensued. Move the OS/2 code that reads miniperl.map after the code that tries platform-specific symbols. --- makedef.pl | 333 +++++++++++++++++++++++++++++++------------------------------ 1 file changed, 169 insertions(+), 164 deletions(-) diff --git a/makedef.pl b/makedef.pl index 2871643b06..4207c0246c 100644 --- a/makedef.pl +++ b/makedef.pl @@ -248,161 +248,6 @@ if ($PLATFORM ne 'vms') { } } -if ($PLATFORM eq 'os2') { - try_symbols(qw( - ctermid - get_sysinfo - Perl_OS2_init - Perl_OS2_init3 - Perl_OS2_term - OS2_Perl_data - dlopen - dlsym - dlerror - dlclose - dup2 - dup - my_tmpfile - my_tmpnam - my_flock - my_rmdir - my_mkdir - my_getpwuid - my_getpwnam - my_getpwent - my_setpwent - my_endpwent - fork_with_resources - croak_with_os2error - setgrent - endgrent - getgrent - malloc_mutex - threads_mutex - nthreads - nthreads_cond - os2_cond_wait - os2_stat - os2_execname - async_mssleep - msCounter - InfoTable - pthread_join - pthread_create - pthread_detach - XS_Cwd_change_drive - XS_Cwd_current_drive - XS_Cwd_extLibpath - XS_Cwd_extLibpath_set - XS_Cwd_sys_abspath - XS_Cwd_sys_chdir - XS_Cwd_sys_cwd - XS_Cwd_sys_is_absolute - XS_Cwd_sys_is_relative - XS_Cwd_sys_is_rooted - XS_DynaLoader_mod2fname - XS_File__Copy_syscopy - Perl_Register_MQ - Perl_Deregister_MQ - Perl_Serve_Messages - Perl_Process_Messages - init_PMWIN_entries - PMWIN_entries - Perl_hab_GET - loadByOrdinal - pExtFCN - os2error - ResetWinError - CroakWinError - PL_do_undump - )); -} -elsif ($PLATFORM eq 'vms') { - try_symbols(qw( - Perl_cando - Perl_cando_by_name - Perl_closedir - Perl_csighandler_init - Perl_do_rmdir - Perl_fileify_dirspec - Perl_fileify_dirspec_ts - Perl_fileify_dirspec_utf8 - Perl_fileify_dirspec_utf8_ts - Perl_flex_fstat - Perl_flex_lstat - Perl_flex_stat - Perl_kill_file - Perl_my_chdir - Perl_my_chmod - Perl_my_crypt - Perl_my_endpwent - Perl_my_fclose - Perl_my_fdopen - Perl_my_fgetname - Perl_my_flush - Perl_my_fwrite - Perl_my_gconvert - Perl_my_getenv - Perl_my_getenv_len - Perl_my_getlogin - Perl_my_getpwnam - Perl_my_getpwuid - Perl_my_gmtime - Perl_my_kill - Perl_my_localtime - Perl_my_mkdir - Perl_my_sigaction - Perl_my_symlink - Perl_my_time - Perl_my_tmpfile - Perl_my_trnlnm - Perl_my_utime - Perl_my_waitpid - Perl_opendir - Perl_pathify_dirspec - Perl_pathify_dirspec_ts - Perl_pathify_dirspec_utf8 - Perl_pathify_dirspec_utf8_ts - Perl_readdir - Perl_readdir_r - Perl_rename - Perl_rmscopy - Perl_rmsexpand - Perl_rmsexpand_ts - Perl_rmsexpand_utf8 - Perl_rmsexpand_utf8_ts - Perl_seekdir - Perl_sig_to_vmscondition - Perl_telldir - Perl_tounixpath - Perl_tounixpath_ts - Perl_tounixpath_utf8 - Perl_tounixpath_utf8_ts - Perl_tounixspec - Perl_tounixspec_ts - Perl_tounixspec_utf8 - Perl_tounixspec_utf8_ts - Perl_tovmspath - Perl_tovmspath_ts - Perl_tovmspath_utf8 - Perl_tovmspath_utf8_ts - Perl_tovmsspec - Perl_tovmsspec_ts - Perl_tovmsspec_utf8 - Perl_tovmsspec_utf8_ts - Perl_trim_unixpath - Perl_vms_case_tolerant - Perl_vms_do_aexec - Perl_vms_do_exec - Perl_vms_image_init - Perl_vms_realpath - Perl_vmssetenv - Perl_vmssetuserlnm - Perl_vmstrnenv - PerlIO_openn - )); -} - unless ($define{UNLINK_ALL_VERSIONS}) { ++$skip{Perl_unlnk}; } @@ -907,6 +752,11 @@ if ($define{'USE_PERLIO'}) { # Remaining remnants that _may_ be functions are handled below. } +############################################################################### + +# At this point all skip lists should be completed, as we are about to test +# many symbols against them. + for my $syms (@syms) { open (GLOBAL, "<$syms") || die "failed to open $syms: $!\n"; while () { @@ -1123,16 +973,159 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { try_symbols('_matherr'); } } +elsif ($PLATFORM eq 'vms') { + try_symbols(qw( + Perl_cando + Perl_cando_by_name + Perl_closedir + Perl_csighandler_init + Perl_do_rmdir + Perl_fileify_dirspec + Perl_fileify_dirspec_ts + Perl_fileify_dirspec_utf8 + Perl_fileify_dirspec_utf8_ts + Perl_flex_fstat + Perl_flex_lstat + Perl_flex_stat + Perl_kill_file + Perl_my_chdir + Perl_my_chmod + Perl_my_crypt + Perl_my_endpwent + Perl_my_fclose + Perl_my_fdopen + Perl_my_fgetname + Perl_my_flush + Perl_my_fwrite + Perl_my_gconvert + Perl_my_getenv + Perl_my_getenv_len + Perl_my_getlogin + Perl_my_getpwnam + Perl_my_getpwuid + Perl_my_gmtime + Perl_my_kill + Perl_my_localtime + Perl_my_mkdir + Perl_my_sigaction + Perl_my_symlink + Perl_my_time + Perl_my_tmpfile + Perl_my_trnlnm + Perl_my_utime + Perl_my_waitpid + Perl_opendir + Perl_pathify_dirspec + Perl_pathify_dirspec_ts + Perl_pathify_dirspec_utf8 + Perl_pathify_dirspec_utf8_ts + Perl_readdir + Perl_readdir_r + Perl_rename + Perl_rmscopy + Perl_rmsexpand + Perl_rmsexpand_ts + Perl_rmsexpand_utf8 + Perl_rmsexpand_utf8_ts + Perl_seekdir + Perl_sig_to_vmscondition + Perl_telldir + Perl_tounixpath + Perl_tounixpath_ts + Perl_tounixpath_utf8 + Perl_tounixpath_utf8_ts + Perl_tounixspec + Perl_tounixspec_ts + Perl_tounixspec_utf8 + Perl_tounixspec_utf8_ts + Perl_tovmspath + Perl_tovmspath_ts + Perl_tovmspath_utf8 + Perl_tovmspath_utf8_ts + Perl_tovmsspec + Perl_tovmsspec_ts + Perl_tovmsspec_utf8 + Perl_tovmsspec_utf8_ts + Perl_trim_unixpath + Perl_vms_case_tolerant + Perl_vms_do_aexec + Perl_vms_do_exec + Perl_vms_image_init + Perl_vms_realpath + Perl_vmssetenv + Perl_vmssetuserlnm + Perl_vmstrnenv + PerlIO_openn + )); +} elsif ($PLATFORM eq 'os2') { - my (%mapped, @missing); - open MAP, 'miniperl.map' or die 'Cannot read miniperl.map'; - /^\s*[\da-f:]+\s+(\w+)/i and $mapped{$1}++ foreach ; - close MAP or die 'Cannot close miniperl.map'; - - @missing = grep { !exists $mapped{$_} } - keys %export; - @missing = grep { !exists $exportperlmalloc{$_} } @missing; - delete $export{$_} foreach @missing; + try_symbols(qw( + ctermid + get_sysinfo + Perl_OS2_init + Perl_OS2_init3 + Perl_OS2_term + OS2_Perl_data + dlopen + dlsym + dlerror + dlclose + dup2 + dup + my_tmpfile + my_tmpnam + my_flock + my_rmdir + my_mkdir + my_getpwuid + my_getpwnam + my_getpwent + my_setpwent + my_endpwent + fork_with_resources + croak_with_os2error + setgrent + endgrent + getgrent + malloc_mutex + threads_mutex + nthreads + nthreads_cond + os2_cond_wait + os2_stat + os2_execname + async_mssleep + msCounter + InfoTable + pthread_join + pthread_create + pthread_detach + XS_Cwd_change_drive + XS_Cwd_current_drive + XS_Cwd_extLibpath + XS_Cwd_extLibpath_set + XS_Cwd_sys_abspath + XS_Cwd_sys_chdir + XS_Cwd_sys_cwd + XS_Cwd_sys_is_absolute + XS_Cwd_sys_is_relative + XS_Cwd_sys_is_rooted + XS_DynaLoader_mod2fname + XS_File__Copy_syscopy + Perl_Register_MQ + Perl_Deregister_MQ + Perl_Serve_Messages + Perl_Process_Messages + init_PMWIN_entries + PMWIN_entries + Perl_hab_GET + loadByOrdinal + pExtFCN + os2error + ResetWinError + CroakWinError + PL_do_undump + )); } elsif ($PLATFORM eq 'netware') { try_symbols(qw( @@ -1279,6 +1272,18 @@ $static_ext =~ s/\bDynaLoader\b//; try_symbols(map {"boot_$_"} grep {/\S/} split /\s+/, $static_ext); try_symbols("init_Win32CORE") if $static_ext =~ /\bWin32CORE\b/; +if ($PLATFORM eq 'os2') { + my (%mapped, @missing); + open MAP, 'miniperl.map' or die 'Cannot read miniperl.map'; + /^\s*[\da-f:]+\s+(\w+)/i and $mapped{$1}++ foreach ; + close MAP or die 'Cannot close miniperl.map'; + + @missing = grep { !exists $mapped{$_} } + keys %export; + @missing = grep { !exists $exportperlmalloc{$_} } @missing; + delete $export{$_} foreach @missing; +} + ############################################################################### # Now all symbols should be defined because next we are going to output them. -- cgit v1.2.1 From 01cace463300d82f8da82a3bb6b443463d0ab55b Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 26 Jul 2011 22:26:13 +0200 Subject: In makedef.pl, tidy up the USE_PERLIO logic. No need to call try_symbols() for PL_perlio_mutex, as it is found in perlvars.h, and no need to duplicate the skip for it if USE_ITHREADS is not defined. We do need to skip PL_perlio_mutex if if USE_PERLIO is not defined but USE_ITHREADS is [not that this is a configuration that Configure will let you select, until you edit it :-)] Add a comment describing what the "Oddities from PerlIO" are. Remove PerlIO_sv_dup from the list, as it's also in @layer_syms, and inclusion in @layer_syms makes the former redundant. It was added to both in commit 8437356be6fd345c in 2001. --- makedef.pl | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/makedef.pl b/makedef.pl index 4207c0246c..02116942ac 100644 --- a/makedef.pl +++ b/makedef.pl @@ -724,14 +724,6 @@ if ($define{'USE_PERLIO'}) { # PerlIO with layers - export implementation try_symbols(@layer_syms, 'perlsio_binmode'); } - if ($define{'USE_ITHREADS'}) { - try_symbols(qw( - PL_perlio_mutex - )); - } - else { - ++$skip{PL_perlio_mutex}; - } } else { # -Uuseperlio # Skip the PerlIO layer symbols - although @@ -745,6 +737,7 @@ if ($define{'USE_PERLIO'}) { PL_perlio_debug_fd PL_perlio_fd_refcnt PL_perlio_fd_refcnt_size + PL_perlio_mutex ); # Also do NOT add abstraction symbols from $perlio_sym @@ -790,13 +783,14 @@ else { } # Oddities from PerlIO +# All have alternate implementations in perlio.c, so always exist. +# Should they be considered to be part of the API? try_symbols(qw( PerlIO_binmode PerlIO_getpos PerlIO_init PerlIO_setpos PerlIO_sprintf - PerlIO_sv_dup PerlIO_tmpfile PerlIO_vsprintf )); -- cgit v1.2.1 From 3cf3941efbe7151eded0f3d115e71a544defdf77 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Wed, 27 Jul 2011 15:36:35 +0200 Subject: In makedef.pl, tidy up the MYMALLOC logic. No need to call try_symbols() for PL_malloc_mutex, as it is found in perlvars.h. Unlike PL_perlio_mutex, PL_malloc_mutex isn't listed in the main !USE_ITHREADS skip list - perhaps it should be for consistency. --- makedef.pl | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/makedef.pl b/makedef.pl index 02116942ac..688a3043d5 100644 --- a/makedef.pl +++ b/makedef.pl @@ -309,13 +309,8 @@ if ($define{'MYMALLOC'}) { MallocCfg_ptr MallocCfgP_ptr )); - if ($define{'USE_ITHREADS'}) { - try_symbols(qw( - PL_malloc_mutex - )); - } - else { - ++$skip{PL_malloc_mutex}; + unless ($define{USE_ITHREADS}) { + ++$skip{PL_malloc_mutex} } } else { -- cgit v1.2.1 From 9661ac31cea34697b5b3481463c4f97203d2d572 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Fri, 29 Jul 2011 13:37:42 +0200 Subject: In makedef.pl, export boot_* for static modules only on Win32 and WinCE. The code as-is will only be run on Win32 and WinCE, because currently the code to populate $static_ext is only run on Win32 and WinCE. As-is this code can't be run on all platforms, because currently *nix (ie AIX) links static extensions into the perl executable, rather than into the shared perl library. Hence boot_* functions for static extensions aren't in the shared perl library, so it would be an error to attempt to export them from it. --- makedef.pl | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/makedef.pl b/makedef.pl index 688a3043d5..f84c009cc9 100644 --- a/makedef.pl +++ b/makedef.pl @@ -1255,11 +1255,23 @@ elsif ($PLATFORM eq 'netware') { )); } -# records of type boot_module for statically linked modules (except Dynaloader) -$static_ext =~ s/\//__/g; -$static_ext =~ s/\bDynaLoader\b//; -try_symbols(map {"boot_$_"} grep {/\S/} split /\s+/, $static_ext); -try_symbols("init_Win32CORE") if $static_ext =~ /\bWin32CORE\b/; +# When added this code was only run for Win32 and WinCE +# Currently only Win32 links static extensions into the shared library. +# The WinCE makefile doesn't appear to support static extensions, so this code +# can't have any effect there. +# The NetWare Makefile doesn't support static extensions (and hardcodes the +# list of dynamic extensions, and the rules to build them) +# For *nix (and presumably OS/2) with a shared libperl, Makefile.SH compiles +# static extensions with -fPIC, but links them to perl, not libperl.so +# The VMS build scripts don't yet implement static extensions at all. + +if ($PLATFORM =~ /^win(?:32|ce)$/) { + # records of type boot_module for statically linked modules (except Dynaloader) + $static_ext =~ s/\//__/g; + $static_ext =~ s/\bDynaLoader\b//; + try_symbols(map {"boot_$_"} grep {/\S/} split /\s+/, $static_ext); + try_symbols("init_Win32CORE") if $static_ext =~ /\bWin32CORE\b/; +} if ($PLATFORM eq 'os2') { my (%mapped, @missing); -- cgit v1.2.1 From 9cc55be8e5f70c3e3b4c1bc6fc65924d9d9a8de4 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Wed, 27 Jul 2011 23:21:14 +0200 Subject: In makedef.pl, merge the code that reads config.sh For now, retain compatibility (bug compatibility?) by not processing ccflags and optimize on Win32, WinCE and NetWare. --- makedef.pl | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/makedef.pl b/makedef.pl index f84c009cc9..e83eabcbeb 100644 --- a/makedef.pl +++ b/makedef.pl @@ -96,27 +96,23 @@ my $perlvars_h = "perlvars.h"; my $global_sym = "global.sym"; my $globvar_sym = "globvar.sym"; my $perlio_sym = "perlio.sym"; -my $static_ext = ""; s/^/$TARG_DIR/ foreach($intrpvar_h, $perlvars_h, $global_sym, $globvar_sym, $perlio_sym, $config_sh); -unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'netware') { +{ open(CFG,$config_sh) || die "Cannot open $config_sh: $!\n"; while () { - if (/^(?:ccflags|optimize)='(.+)'$/) { + if (/^(?:ccflags|optimize)='(.+)'$/ + # Are the following strictly necessary? Added during refactoring + # to keep the same behaviour when merging other code into here. + && $PLATFORM ne 'win32' && $PLATFORM ne 'wince' + && $PLATFORM ne 'netware') { $_ = $1; $define{$1} = 1 while /-D(\w+)/g; } $define{$1} = $2 - if /^(config_args|archname|perl_patchlevel)='(.+)'$/; - } - close(CFG); -} -if ($PLATFORM eq 'win32' || $PLATFORM eq 'wince') { - open(CFG, '<', $config_sh) || die "Cannot open $config_sh: $!\n"; - if ((join '', ) =~ /^static_ext='(.*)'$/m) { - $static_ext = $1; + if /^(config_args|archname|perl_patchlevel|static_ext)='(.+)'$/; } close(CFG); } @@ -1266,6 +1262,7 @@ elsif ($PLATFORM eq 'netware') { # The VMS build scripts don't yet implement static extensions at all. if ($PLATFORM =~ /^win(?:32|ce)$/) { + my $static_ext = $define{static_ext} // ""; # records of type boot_module for statically linked modules (except Dynaloader) $static_ext =~ s/\//__/g; $static_ext =~ s/\bDynaLoader\b//; -- cgit v1.2.1 From c051ff4cf8f3d5503f717f41689354da1d06f897 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 28 Jul 2011 13:06:26 +0200 Subject: In makedef.pl, read 4 configuration values direct from %Config. makedef.pl has been using Config since commit 9d6c7f2eccef26a6 in 2009. Hence we can read them direct from %Config, instead of parsing config.sh and storing the values in %define. --- makedef.pl | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/makedef.pl b/makedef.pl index e83eabcbeb..2009eb93cf 100644 --- a/makedef.pl +++ b/makedef.pl @@ -111,8 +111,6 @@ s/^/$TARG_DIR/ foreach($intrpvar_h, $perlvars_h, $global_sym, $globvar_sym, $_ = $1; $define{$1} = 1 while /-D(\w+)/g; } - $define{$1} = $2 - if /^(config_args|archname|perl_patchlevel|static_ext)='(.+)'$/; } close(CFG); } @@ -1262,8 +1260,8 @@ elsif ($PLATFORM eq 'netware') { # The VMS build scripts don't yet implement static extensions at all. if ($PLATFORM =~ /^win(?:32|ce)$/) { - my $static_ext = $define{static_ext} // ""; # records of type boot_module for statically linked modules (except Dynaloader) + my $static_ext = $Config{static_ext} // ""; $static_ext =~ s/\//__/g; $static_ext =~ s/\bDynaLoader\b//; try_symbols(map {"boot_$_"} grep {/\S/} split /\s+/, $static_ext); @@ -1300,10 +1298,10 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { } elsif ($PLATFORM eq 'os2') { (my $v = $]) =~ s/(\d\.\d\d\d)(\d\d)$/$1_$2/; - $v .= '-thread' if $define{archname} =~ /-thread/; + $v .= '-thread' if $Config{archname} =~ /-thread/; (my $dll = $define{PERL_DLL}) =~ s/\.dll$//i; - $v .= "\@$define{perl_patchlevel}" if $define{perl_patchlevel}; - my $d = "DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter, configured as $define{config_args}'"; + $v .= "\@$Config{perl_patchlevel}" if $Config{perl_patchlevel}; + my $d = "DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter, configured as $Config{config_args}'"; $d = substr($d, 0, 249) . "...'" if length $d > 253; print <<"---EOP---"; LIBRARY '$dll' INITINSTANCE TERMINSTANCE -- cgit v1.2.1 From 208d7614b345d1fbee3347436a4ce3868b50efbd Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 28 Jul 2011 13:24:36 +0200 Subject: In makedef.pl, read ccflags and optimize from %Config. Previously they were read by opening and parsing config.sh. Remove all code related to reading config.sh, as it is no longer needed. --- makedef.pl | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/makedef.pl b/makedef.pl index 2009eb93cf..69e90ca7ea 100644 --- a/makedef.pl +++ b/makedef.pl @@ -8,8 +8,8 @@ # # Reads from information stored in # +# %Config::Config (ie config.sh) # config.h -# config.sh # global.sym # globvar.sym # intrpvar.h @@ -66,6 +66,14 @@ my %PLATFORM; defined $PLATFORM || die "PLATFORM undefined, must be one of: @PLATFORM\n"; exists $PLATFORM{$PLATFORM} || die "PLATFORM must be one of: @PLATFORM\n"; +# Is the following guard strictly necessary? Added during refactoring +# to keep the same behaviour when merging other code into here. +if ($PLATFORM ne 'win32' && $PLATFORM ne 'wince' && $PLATFORM ne 'netware') { + foreach (@Config{qw(ccflags optimize)}) { + $define{$1} = 1 while /-D(\w+)/g; + } +} + # Add the compile-time options that miniperl was built with to %define. # On Win32 these are not the same options as perl itself will be built # with since miniperl is built with a canned config (one of the win32/ @@ -89,7 +97,6 @@ my %exportperlmalloc = my $exportperlmalloc = $PLATFORM eq 'os2'; -my $config_sh = "config.sh"; my $config_h = "config.h"; my $intrpvar_h = "intrpvar.h"; my $perlvars_h = "perlvars.h"; @@ -98,22 +105,7 @@ my $globvar_sym = "globvar.sym"; my $perlio_sym = "perlio.sym"; s/^/$TARG_DIR/ foreach($intrpvar_h, $perlvars_h, $global_sym, $globvar_sym, - $perlio_sym, $config_sh); - -{ - open(CFG,$config_sh) || die "Cannot open $config_sh: $!\n"; - while () { - if (/^(?:ccflags|optimize)='(.+)'$/ - # Are the following strictly necessary? Added during refactoring - # to keep the same behaviour when merging other code into here. - && $PLATFORM ne 'win32' && $PLATFORM ne 'wince' - && $PLATFORM ne 'netware') { - $_ = $1; - $define{$1} = 1 while /-D(\w+)/g; - } - } - close(CFG); -} + $perlio_sym); open(CFG,$config_h) || die "Cannot open $config_h: $!\n"; while () { -- cgit v1.2.1 From c1b34f5f97867eb890e535d297dd284487aef5b4 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 28 Jul 2011 14:04:53 +0200 Subject: In makedef.pl, consolidate all the C compiler flags parsing code. This isn't quite a "pure" refactoring, as -Dfoo=bar read from %Config will now be processed as $Config{foo} = 'bar'; instead of $Config{foo} = 1; However, it won't change any behaviour, as the only time makedef.pl uses a value of %define for anything other than a truth test is $define{PERL_DLL}, and that is passed in on the command-line by the Makefile invoking makedef.pl --- makedef.pl | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/makedef.pl b/makedef.pl index 69e90ca7ea..0874fbac22 100644 --- a/makedef.pl +++ b/makedef.pl @@ -42,17 +42,18 @@ $TARG_DIR = ''; my %define; +sub process_cc_flags { + foreach (map {split /\s+/, $_} @_) { + $define{$1} = $2 // 1 if /^-D(\w+)(?:=(.+))?/; + } +} + while (@ARGV) { my $flag = shift; - if ($flag =~ s/^CC_FLAGS=/ /) { - for my $fflag ($flag =~ /(?:^|\s)-D(\S+)/g) { - $fflag .= '=1' unless $fflag =~ /^(\w+)=/; - $define{$1} = $2 if $fflag =~ /^(\w+)=(.+)$/; - } + if ($flag =~ /^(?:CC_FLAGS=)?(-D\w.*)/) { + process_cc_flags($1); next; } - $define{$1} = 1 if ($flag =~ /^-D(\w+)$/); - $define{$1} = $2 if ($flag =~ /^-D(\w+)=(.+)$/); $CCTYPE = $1 if ($flag =~ /^CCTYPE=(\w+)$/); $PLATFORM = $1 if ($flag =~ /^PLATFORM=(\w+)$/); $FILETYPE = $1 if ($flag =~ /^FILETYPE=(\w+)$/); @@ -68,11 +69,8 @@ exists $PLATFORM{$PLATFORM} || die "PLATFORM must be one of: @PLATFORM\n"; # Is the following guard strictly necessary? Added during refactoring # to keep the same behaviour when merging other code into here. -if ($PLATFORM ne 'win32' && $PLATFORM ne 'wince' && $PLATFORM ne 'netware') { - foreach (@Config{qw(ccflags optimize)}) { - $define{$1} = 1 while /-D(\w+)/g; - } -} +process_cc_flags(@Config{qw(ccflags optimize)}) + if $PLATFORM ne 'win32' && $PLATFORM ne 'wince' && $PLATFORM ne 'netware'; # Add the compile-time options that miniperl was built with to %define. # On Win32 these are not the same options as perl itself will be built -- cgit v1.2.1 From 0dc3711c7435529d221445ddb0c229ce2750445f Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 28 Jul 2011 14:29:27 +0200 Subject: In makedef.pl, use %ARGS instead of 4 variables for command line arguments. This simplifies processing @ARGV. --- makedef.pl | 87 +++++++++++++++++++++++++++++++------------------------------- 1 file changed, 43 insertions(+), 44 deletions(-) diff --git a/makedef.pl b/makedef.pl index 0874fbac22..42ca3950b2 100644 --- a/makedef.pl +++ b/makedef.pl @@ -35,10 +35,7 @@ BEGIN { unshift @INC, "lib" } use Config; use strict; -use vars qw($PLATFORM $CCTYPE $FILETYPE $TARG_DIR); - -$CCTYPE = 'MSVC'; -$TARG_DIR = ''; +my %ARGS = (CCTYPE => 'MSVC'); my %define; @@ -52,25 +49,25 @@ while (@ARGV) { my $flag = shift; if ($flag =~ /^(?:CC_FLAGS=)?(-D\w.*)/) { process_cc_flags($1); - next; + } elsif ($flag =~ /^(CCTYPE|FILETYPE|PLATFORM|TARG_DIR)=(.+)$/) { + $ARGS{$1} = $2; } - $CCTYPE = $1 if ($flag =~ /^CCTYPE=(\w+)$/); - $PLATFORM = $1 if ($flag =~ /^PLATFORM=(\w+)$/); - $FILETYPE = $1 if ($flag =~ /^FILETYPE=(\w+)$/); - $TARG_DIR = $1 if $flag =~ /^TARG_DIR=(.+)$/; } my @PLATFORM = qw(aix win32 wince os2 netware vms); my %PLATFORM; @PLATFORM{@PLATFORM} = (); -defined $PLATFORM || die "PLATFORM undefined, must be one of: @PLATFORM\n"; -exists $PLATFORM{$PLATFORM} || die "PLATFORM must be one of: @PLATFORM\n"; +die "PLATFORM undefined, must be one of: @PLATFORM\n" + unless defined $ARGS{PLATFORM}; +die "PLATFORM must be one of: @PLATFORM\n" + unless exists $PLATFORM{$ARGS{PLATFORM}}; # Is the following guard strictly necessary? Added during refactoring # to keep the same behaviour when merging other code into here. process_cc_flags(@Config{qw(ccflags optimize)}) - if $PLATFORM ne 'win32' && $PLATFORM ne 'wince' && $PLATFORM ne 'netware'; + if $ARGS{PLATFORM} ne 'win32' && $ARGS{PLATFORM} ne 'wince' + && $ARGS{PLATFORM} ne 'netware'; # Add the compile-time options that miniperl was built with to %define. # On Win32 these are not the same options as perl itself will be built @@ -93,7 +90,7 @@ my %exportperlmalloc = Perl_calloc => "calloc", ); -my $exportperlmalloc = $PLATFORM eq 'os2'; +my $exportperlmalloc = $ARGS{PLATFORM} eq 'os2'; my $config_h = "config.h"; my $intrpvar_h = "intrpvar.h"; @@ -102,8 +99,10 @@ my $global_sym = "global.sym"; my $globvar_sym = "globvar.sym"; my $perlio_sym = "perlio.sym"; -s/^/$TARG_DIR/ foreach($intrpvar_h, $perlvars_h, $global_sym, $globvar_sym, - $perlio_sym); +if (exists $ARGS{TARG_DIR}) { + s/^/$ARGS{TARG_DIR}/ + foreach $intrpvar_h, $perlvars_h, $global_sym, $globvar_sym, $perlio_sym; +} open(CFG,$config_h) || die "Cannot open $config_h: $!\n"; while () { @@ -129,7 +128,7 @@ $define{PERL_IMPLICIT_CONTEXT} ||= $define{USE_ITHREADS} || $define{MULTIPLICITY} ; -if ($define{USE_ITHREADS} && $PLATFORM ne 'win32' && $^O ne 'darwin') { +if ($define{USE_ITHREADS} && $ARGS{PLATFORM} ne 'win32' && $^O ne 'darwin') { $define{USE_REENTRANT_API} = 1; } @@ -140,7 +139,7 @@ print STDERR "Defines: (" . join(' ', sort keys %define) . ")\n"; my $sym_ord = 0; my %ordinal; -if ($PLATFORM eq 'os2') { +if ($ARGS{PLATFORM} eq 'os2') { if (open my $fh, '<', 'perl5.def') { while (<$fh>) { last if /^\s*EXPORTS\b/; @@ -184,7 +183,7 @@ sub readvar { } } -if ($PLATFORM ne 'os2') { +if ($ARGS{PLATFORM} ne 'os2') { ++$skip{$_} foreach qw( PL_cryptseen PL_opsave @@ -199,11 +198,11 @@ if ($PLATFORM ne 'os2') { Perl_my_ntohl Perl_my_swap ); - if ($PLATFORM eq 'vms') { + if ($ARGS{PLATFORM} eq 'vms') { ++$skip{PL_statusvalue_posix}; } else { ++$skip{PL_statusvalue_vms}; - if ($PLATFORM ne 'aix') { + if ($ARGS{PLATFORM} ne 'aix') { ++$skip{$_} foreach qw( PL_DBcv PL_generation @@ -216,14 +215,14 @@ if ($PLATFORM ne 'os2') { } } -if ($PLATFORM ne 'vms') { +if ($ARGS{PLATFORM} ne 'vms') { # VMS does its own thing for these symbols. ++$skip{$_} foreach qw( PL_sig_handlers_initted PL_sig_ignoring PL_sig_defaulting ); - if ($PLATFORM ne 'win32') { + if ($ARGS{PLATFORM} ne 'win32') { ++$skip{$_} foreach qw( Perl_do_spawn Perl_do_spawn_nowait @@ -525,7 +524,7 @@ if ($define{HAS_SIGNBIT}) { if ($define{'PERL_GLOBAL_STRUCT'}) { readvar($perlvars_h, \%skip); ++$export{Perl_GetVars}; - try_symbols(qw(PL_Vars PL_VarsPtr)) unless $CCTYPE eq 'GCC'; + try_symbols(qw(PL_Vars PL_VarsPtr)) unless $ARGS{CCTYPE} eq 'GCC'; } else { ++$skip{$_} foreach qw(Perl_init_global_struct Perl_free_global_struct); } @@ -611,7 +610,7 @@ my @layer_syms = qw( Perl_PerlIO_unread Perl_PerlIO_write ); -if ($PLATFORM eq 'netware') { +if ($ARGS{PLATFORM} eq 'netware') { push(@layer_syms,'PL_def_layerlist','PL_known_layers','PL_perlio'); } @@ -748,7 +747,7 @@ for my $syms (@syms) { if ($define{'MULTIPLICITY'} && $define{PERL_GLOBAL_STRUCT}) { readvar($perlvars_h, \%export, sub { "Perl_" . $_[1] . $_[2] . "_ptr" }); # XXX AIX seems to want the perlvars.h symbols, for some reason - if ($PLATFORM eq 'aix' or $PLATFORM eq 'os2') { # OS/2 needs PL_thr_key + if ($ARGS{PLATFORM} eq 'aix' or $ARGS{PLATFORM} eq 'os2') { # OS/2 needs PL_thr_key readvar($perlvars_h, \%export); } } @@ -774,7 +773,7 @@ try_symbols(qw( PerlIO_vsprintf )); -if ($PLATFORM eq 'win32') { +if ($ARGS{PLATFORM} eq 'win32') { try_symbols(qw( setgid setuid @@ -786,7 +785,7 @@ if ($PLATFORM eq 'win32') { )); } -if ($PLATFORM =~ /^win(?:32|ce)$/) { +if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) { try_symbols(qw( Perl_init_os_extras Perl_thread_create @@ -942,11 +941,11 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { win32_getchar win32_putchar )); - if ($CCTYPE eq "BORLAND") { + if ($ARGS{CCTYPE} eq "BORLAND") { try_symbols('_matherr'); } } -elsif ($PLATFORM eq 'vms') { +elsif ($ARGS{PLATFORM} eq 'vms') { try_symbols(qw( Perl_cando Perl_cando_by_name @@ -1031,7 +1030,7 @@ elsif ($PLATFORM eq 'vms') { PerlIO_openn )); } -elsif ($PLATFORM eq 'os2') { +elsif ($ARGS{PLATFORM} eq 'os2') { try_symbols(qw( ctermid get_sysinfo @@ -1100,7 +1099,7 @@ elsif ($PLATFORM eq 'os2') { PL_do_undump )); } -elsif ($PLATFORM eq 'netware') { +elsif ($ARGS{PLATFORM} eq 'netware') { try_symbols(qw( Perl_init_os_extras Perl_thread_create @@ -1249,7 +1248,7 @@ elsif ($PLATFORM eq 'netware') { # static extensions with -fPIC, but links them to perl, not libperl.so # The VMS build scripts don't yet implement static extensions at all. -if ($PLATFORM =~ /^win(?:32|ce)$/) { +if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) { # records of type boot_module for statically linked modules (except Dynaloader) my $static_ext = $Config{static_ext} // ""; $static_ext =~ s/\//__/g; @@ -1258,7 +1257,7 @@ if ($PLATFORM =~ /^win(?:32|ce)$/) { try_symbols("init_Win32CORE") if $static_ext =~ /\bWin32CORE\b/; } -if ($PLATFORM eq 'os2') { +if ($ARGS{PLATFORM} eq 'os2') { my (%mapped, @missing); open MAP, 'miniperl.map' or die 'Cannot read miniperl.map'; /^\s*[\da-f:]+\s+(\w+)/i and $mapped{$1}++ foreach ; @@ -1276,17 +1275,17 @@ if ($PLATFORM eq 'os2') { # Start with platform specific headers: -if ($PLATFORM =~ /^win(?:32|ce)$/) { +if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) { (my $dll = ($define{PERL_DLL} || "perl515")) =~ s/\.dll$//i; print "LIBRARY $dll\n"; # The DESCRIPTION module definition file statement is not supported # by VC7 onwards. - if ($CCTYPE =~ /^(?:MSVC60|GCC|BORLAND)$/) { + if ($ARGS{CCTYPE} =~ /^(?:MSVC60|GCC|BORLAND)$/) { print "DESCRIPTION 'Perl interpreter'\n"; } print "EXPORTS\n"; } -elsif ($PLATFORM eq 'os2') { +elsif ($ARGS{PLATFORM} eq 'os2') { (my $v = $]) =~ s/(\d\.\d\d\d)(\d\d)$/$1_$2/; $v .= '-thread' if $Config{archname} =~ /-thread/; (my $dll = $define{PERL_DLL}) =~ s/\.dll$//i; @@ -1302,7 +1301,7 @@ DATA LOADONCALL NONSHARED MULTIPLE EXPORTS ---EOP--- } -elsif ($PLATFORM eq 'aix') { +elsif ($ARGS{PLATFORM} eq 'aix') { my $OSVER = `uname -v`; chop $OSVER; my $OSREL = `uname -r`; @@ -1313,8 +1312,8 @@ elsif ($PLATFORM eq 'aix') { print "#!\n"; } } -elsif ($PLATFORM eq 'netware') { - if ($FILETYPE eq 'def') { +elsif ($ARGS{PLATFORM} eq 'netware') { + if ($ARGS{FILETYPE} eq 'def') { print "LIBRARY perl515\n"; print "DESCRIPTION 'Perl interpreter for NetWare'\n"; print "EXPORTS\n"; @@ -1324,11 +1323,11 @@ elsif ($PLATFORM eq 'netware') { # Then the symbols foreach my $symbol (sort keys %export) { - if ($PLATFORM =~ /^win(?:32|ce)$/) { - $symbol = "_$symbol" if $CCTYPE eq 'BORLAND'; + if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) { + $symbol = "_$symbol" if $ARGS{CCTYPE} eq 'BORLAND'; print "\t$symbol\n"; } - elsif ($PLATFORM eq 'os2') { + elsif ($ARGS{PLATFORM} eq 'os2') { printf qq( %-31s \@%s\n), qq("$symbol"), $ordinal{$symbol} || ++$sym_ord; printf qq( %-31s \@%s\n), @@ -1336,7 +1335,7 @@ foreach my $symbol (sort keys %export) { $ordinal{$exportperlmalloc{$symbol}} || ++$sym_ord if $exportperlmalloc and exists $exportperlmalloc{$symbol}; } - elsif ($PLATFORM eq 'netware') { + elsif ($ARGS{PLATFORM} eq 'netware') { print "\t$symbol,\n"; } else { print "$symbol\n"; @@ -1345,7 +1344,7 @@ foreach my $symbol (sort keys %export) { # Then platform specific footers. -if ($PLATFORM eq 'os2') { +if ($ARGS{PLATFORM} eq 'os2') { print < Date: Thu, 28 Jul 2011 15:05:26 +0200 Subject: In makedef.pl, avoid creating %PLATFORMS just for one existence check. A single linear search of @PLATFORMS is simpler and possibly even faster than building a hash from @PLATFORMS, making one lookup, then discarding the hash. Add a block to limit the scope of @PLATFORMS to the code that uses it. --- makedef.pl | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/makedef.pl b/makedef.pl index 42ca3950b2..0a97ba174c 100644 --- a/makedef.pl +++ b/makedef.pl @@ -54,14 +54,16 @@ while (@ARGV) { } } -my @PLATFORM = qw(aix win32 wince os2 netware vms); -my %PLATFORM; -@PLATFORM{@PLATFORM} = (); - -die "PLATFORM undefined, must be one of: @PLATFORM\n" - unless defined $ARGS{PLATFORM}; -die "PLATFORM must be one of: @PLATFORM\n" - unless exists $PLATFORM{$ARGS{PLATFORM}}; +{ + my @PLATFORM = qw(aix win32 wince os2 netware vms); + my %PLATFORM; + @PLATFORM{@PLATFORM} = (); + + die "PLATFORM undefined, must be one of: @PLATFORM\n" + unless defined $ARGS{PLATFORM}; + die "PLATFORM must be one of: @PLATFORM\n" + unless exists $PLATFORM{$ARGS{PLATFORM}}; +} # Is the following guard strictly necessary? Added during refactoring # to keep the same behaviour when merging other code into here. -- cgit v1.2.1 From 60fae8969c3c2f50fa614da8ed36310784b903f5 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 28 Jul 2011 15:08:27 +0200 Subject: In makedef.pl, correct a typo in a comment. --- makedef.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makedef.pl b/makedef.pl index 0a97ba174c..865b5ffeeb 100644 --- a/makedef.pl +++ b/makedef.pl @@ -3,7 +3,7 @@ # Create the export list for perl. # # Needed by WIN32 and OS/2 for creating perl.dll, -# and by AIX for creating libperl.a when -Dusershrplib is in effect, +# and by AIX for creating libperl.a when -Duseshrplib is in effect, # and by VMS for creating perlshr.exe. # # Reads from information stored in -- cgit v1.2.1 From a6587d2d54d31fb38b3c64b9a10bf7d4eefc781b Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Thu, 28 Jul 2011 17:03:04 +0200 Subject: In makedef.pl, refactor the code that reads *.sym files. Hoist the test that chooses the prefix out of the loop. Tweak the regex to avoid needing an explicit chomp/ Use 3-arg open and a lexical for the file handle. --- makedef.pl | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/makedef.pl b/makedef.pl index 865b5ffeeb..e7d72e3dcc 100644 --- a/makedef.pl +++ b/makedef.pl @@ -731,17 +731,15 @@ if ($define{'USE_PERLIO'}) { # many symbols against them. for my $syms (@syms) { - open (GLOBAL, "<$syms") || die "failed to open $syms: $!\n"; - while () { - next if (!/^[A-Za-z]/); - # Functions have a Perl_ prefix - # Variables have a PL_ prefix - chomp($_); - my $symbol = ($syms =~ /var\.sym$/i ? "PL_" : ""); - $symbol .= $_; + open my $global, '<', $syms or die "failed to open $syms: $!\n"; + # Functions already have a Perl_ prefix + # Variables need a PL_ prefix + my $prefix = $syms =~ /var\.sym$/i ? 'PL_' : ''; + while (<$global>) { + next unless /^([A-Za-z].*)/; + my $symbol = "$prefix$1"; ++$export{$symbol} unless exists $skip{$symbol}; } - close(GLOBAL); } # variables -- cgit v1.2.1 From 60a5fae402660bc79200c16ee80c3981165362fc Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Mon, 1 Aug 2011 12:07:44 +0200 Subject: Note in perldelta that makedef.pl has been refactored. --- pod/perldelta.pod | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pod/perldelta.pod b/pod/perldelta.pod index a333d24f57..3d22912459 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -290,7 +290,8 @@ L section, instead. =item * -XXX +F has been refactored. This should have no noticeable affect on +any of the platforms that use it as part of their build (AIX, VMS, Win32). =back -- cgit v1.2.1 From 8d8cba88681398d40004e97bcb93f7f8b88ae05e Mon Sep 17 00:00:00 2001 From: Tony Cook Date: Wed, 27 Jul 2011 21:32:37 +1000 Subject: [rt #84590] try to preserve the inode number, even if it's large This matches the checks done for other stat() fields. --- pp_sys.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pp_sys.c b/pp_sys.c index 726be76c4b..a6949a9d33 100644 --- a/pp_sys.c +++ b/pp_sys.c @@ -2834,7 +2834,15 @@ PP(pp_stat) EXTEND(SP, max); EXTEND_MORTAL(max); mPUSHi(PL_statcache.st_dev); +#if ST_INO_SIZE > IVSIZE + mPUSHn(PL_statcache.st_ino); +#else +# if ST_INO_SIGN <= 0 mPUSHi(PL_statcache.st_ino); +# else + mPUSHu(PL_statcache.st_ino); +# endif +#endif mPUSHu(PL_statcache.st_mode); mPUSHu(PL_statcache.st_nlink); #if Uid_t_size > IVSIZE -- cgit v1.2.1 From a6cefd81cd846bde34f0f42db649d37d30c8d33f Mon Sep 17 00:00:00 2001 From: Tony Cook Date: Mon, 1 Aug 2011 22:01:02 +1000 Subject: Note the stat() change in perldelta --- pod/perldelta.pod | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 3d22912459..a2a491eb78 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -427,6 +427,13 @@ A panic involving the combination of the regular expression modifiers C and the C<\b> escape sequence introduced in 5.14.0 has been fixed [perl #95964]. +=item * + +stat() would always return the inode number as an IV, even when the +original was unsigned, or too large to fit in an IV. stat() now +returns the inode number as the type that would best preserve the +original value. [perl #84590] + =back =head1 Known Problems -- cgit v1.2.1 From 83b32788f4e2799bb5cea7654fbc616d32f09598 Mon Sep 17 00:00:00 2001 From: Chris 'BinGOs' Williams Date: Mon, 1 Aug 2011 20:17:54 +0100 Subject: Update Module-Load to version 0.20 [DELTA] Changes for 0.20 Mon Aug 1 19:13:44 2011 ============================================ * Resolve [rt #69886] reported by Laurent Dami, trailing '::' silently ignored --- Porting/Maintainers.pl | 2 +- cpan/Module-Load/lib/Module/Load.pm | 21 +++++++++++---------- pod/perldelta.pod | 4 ++++ 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 5ef5521862..d5a77b5d6f 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -1262,7 +1262,7 @@ use File::Glob qw(:case); 'Module::Load' => { 'MAINTAINER' => 'kane', - 'DISTRIBUTION' => 'BINGOS/Module-Load-0.18.tar.gz', + 'DISTRIBUTION' => 'BINGOS/Module-Load-0.20.tar.gz', 'FILES' => q[cpan/Module-Load], 'UPSTREAM' => 'cpan', }, diff --git a/cpan/Module-Load/lib/Module/Load.pm b/cpan/Module-Load/lib/Module/Load.pm index d1269da72c..7087b5e8bf 100644 --- a/cpan/Module-Load/lib/Module/Load.pm +++ b/cpan/Module-Load/lib/Module/Load.pm @@ -1,6 +1,6 @@ package Module::Load; -$VERSION = '0.18'; +$VERSION = '0.20'; use strict; use File::Spec (); @@ -30,8 +30,8 @@ sub load (*;@) { die $err if $err; } } - - ### This addresses #41883: Module::Load cannot import + + ### This addresses #41883: Module::Load cannot import ### non-Exporter module. ->import() routines weren't ### properly called when load() was used. { no strict 'refs'; @@ -47,7 +47,8 @@ sub _to_file{ local $_ = shift; my $pm = shift || ''; - my @parts = split /::/; + ## trailing blanks ignored by default. [rt #69886] + my @parts = split /::/, $_, -1; ### because of [perl #19213], see caveats ### my $file = $^O eq 'MSWin32' @@ -55,7 +56,7 @@ sub _to_file{ : File::Spec->catfile( @parts ); $file .= '.pm' if $pm; - + ### on perl's before 5.10 (5.9.5@31746) if you require ### a file in VMS format, it's stored in %INC in VMS ### format. Therefor, better unixify it first @@ -95,15 +96,15 @@ Module::Load - runtime require of both modules and files load Data::Dumper; # loads that module load 'Data::Dumper'; # ditto load $module # tritto - + my $script = 'some/script.pl' load $script; load 'some/script.pl'; # use quotes because of punctuations - + load thing; # try 'thing' first, then 'thing.pm' load CGI, ':standard' # like 'use CGI qw[:standard]' - + =head1 DESCRIPTION @@ -174,8 +175,8 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. -=cut +=cut diff --git a/pod/perldelta.pod b/pod/perldelta.pod index a2a491eb78..88119dc528 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -134,6 +134,10 @@ Also fixes some minor bugs. [rt.cpan.org #68585] [rt.cpan.org #67893] =item * +L has been upgraded from version 0.18 to version 0.20 + +=item * + L has been upgraded from version 0.28 to version 0.30 =item * -- cgit v1.2.1 From 9bfbb6810ea8d096601214bae98434cdc8d85ff8 Mon Sep 17 00:00:00 2001 From: Vincent Pit Date: Tue, 2 Aug 2011 12:17:47 +0200 Subject: SvREFCNT_dec already checks if the SV is non-NULL --- gv.c | 7 ++++--- hv.c | 2 +- scope.c | 3 +-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gv.c b/gv.c index 79bc0e9c0c..12ff1f3d63 100644 --- a/gv.c +++ b/gv.c @@ -411,7 +411,6 @@ Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level) HV* cstash; GV* candidate = NULL; CV* cand_cv = NULL; - CV* old_cv; GV* topgv = NULL; const char *hvname; I32 create = (level >= 0) ? 1 : 0; @@ -505,7 +504,8 @@ Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level) * 2. method isn't a stub (else AUTOLOAD fails spectacularly) */ if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) { - if ((old_cv = GvCV(topgv))) SvREFCNT_dec(old_cv); + CV *old_cv = GvCV(topgv); + SvREFCNT_dec(old_cv); SvREFCNT_inc_simple_void_NN(cand_cv); GvCV_set(topgv, cand_cv); GvCVGEN(topgv) = topgen_cmp; @@ -520,7 +520,8 @@ Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level) if(candidate) { cand_cv = GvCV(candidate); if (topgv && (GvREFCNT(topgv) == 1) && (CvROOT(cand_cv) || CvXSUB(cand_cv))) { - if ((old_cv = GvCV(topgv))) SvREFCNT_dec(old_cv); + CV *old_cv = GvCV(topgv); + SvREFCNT_dec(old_cv); SvREFCNT_inc_simple_void_NN(cand_cv); GvCV_set(topgv, cand_cv); GvCVGEN(topgv) = topgen_cmp; diff --git a/hv.c b/hv.c index f8f16b640a..d6ecfb4a1d 100644 --- a/hv.c +++ b/hv.c @@ -1813,7 +1813,7 @@ Perl_hv_undef_flags(pTHX_ HV *hv, U32 flags) SvREFCNT_dec(meta->mro_linear_current); meta->mro_linear_current = NULL; } - if(meta->mro_nextmethod) SvREFCNT_dec(meta->mro_nextmethod); + SvREFCNT_dec(meta->mro_nextmethod); SvREFCNT_dec(meta->isa); Safefree(meta); aux->xhv_mro_meta = NULL; diff --git a/scope.c b/scope.c index e0ba9a366a..9a43eb0ebb 100644 --- a/scope.c +++ b/scope.c @@ -740,8 +740,7 @@ Perl_leave_scope(pTHX_ I32 base) SvSETMAGIC(value); PL_localizing = 0; SvREFCNT_dec(value); - if (av) /* actually an av, hv or gv */ - SvREFCNT_dec(av); + SvREFCNT_dec(av); /* av may actually be an AV, HV or GV */ break; case SAVEt_GENERIC_PVREF: /* generic pv */ ptr = SSPOPPTR; -- cgit v1.2.1 From 42e73e1c35daee07d5d9e32d6a695b7ac179ac6d Mon Sep 17 00:00:00 2001 From: brian d foy Date: Mon, 25 Oct 2010 00:10:06 -0500 Subject: Add perlexperiment to detail experimental features nearly all this work merged from brian d foy's briandfoy/perlexperiment branch, tidied up and squished by rjbs --- MANIFEST | 1 + pod.lst | 2 + pod/perl.pod | 2 + pod/perlexperiment.pod | 311 +++++++++++++++++++++++++++++++++++++++++++++++ vms/descrip_mms.template | 16 ++- win32/pod.mak | 4 + 6 files changed, 330 insertions(+), 6 deletions(-) create mode 100644 pod/perlexperiment.pod diff --git a/MANIFEST b/MANIFEST index e304e9eb26..6fbbc3ea28 100644 --- a/MANIFEST +++ b/MANIFEST @@ -4428,6 +4428,7 @@ pod/perldsc.pod Perl data structures intro pod/perldtrace.pod Perl's support for DTrace pod/perlebcdic.pod Considerations for running Perl on EBCDIC platforms pod/perlembed.pod Perl ways to embed perl in your C or C++ application +pod/perlexperiment.pod A listing of experimental features in Perl pod/perlfilter.pod Perl source filters pod/perlfork.pod Perl fork() information pod/perlform.pod Perl formats diff --git a/pod.lst b/pod.lst index 43327c7f08..b6729895a8 100644 --- a/pod.lst +++ b/pod.lst @@ -196,6 +196,8 @@ h Miscellaneous perl5005delta Perl changes in version 5.005 perl5004delta Perl changes in version 5.004 + perlexperiment A listing of experimental features in Perl + perlartistic Perl Artistic License perlgpl GNU General Public License diff --git a/pod/perl.pod b/pod/perl.pod index b6fa987a62..84a04c501f 100644 --- a/pod/perl.pod +++ b/pod/perl.pod @@ -218,6 +218,8 @@ For ease of access, the Perl manual has been split up into several sections. perl5005delta Perl changes in version 5.005 perl5004delta Perl changes in version 5.004 + perlexperiment A listing of experimental features in Perl + perlartistic Perl Artistic License perlgpl GNU General Public License diff --git a/pod/perlexperiment.pod b/pod/perlexperiment.pod new file mode 100644 index 0000000000..f9e54e4c6a --- /dev/null +++ b/pod/perlexperiment.pod @@ -0,0 +1,311 @@ +=head1 NAME + +perlexperiment - A listing of experimental features in Perl + +=head1 DESCRIPTION + +This document lists the current and past experimental features in the perl +core. Although each of these are documented with their appropriate topics, +this succinct listing gives you an overview and basic facts about their +status. + +So far I've merely tried to find and list the experimental features and infer +their inception, etc versions. There's a lot of speculation here. + +=head2 Current experiments + +=over 8 + +=item fork() emulation + +Introduced in Perl 5.6.1 + +See also L + +=item Weak references + +Introduced in Perl 5.6.0 + +=item Internal file glob + +Introduced in Perl 5.6.0 + +Accepted in XXX + +=item 64-bit support + +Introduced in Perl 5.005 + +Accepted in XXX + +=item die accepts a reference + +Introduced in Perl 5.005 + +Accecpted in Perl XXX + +=item Unicode support + +Introduced in Perl 5.6.0 + +Accepted in Perl 5.8.0 XXX + +=item -Dusemultiplicity -Dusethreads + +Introduced in Perl 5.6.0 + +=item Long Doubles Still Don't Work In Solaris + +Introduced in Perl 5.7.0 + +=item GetOpt::Long Options can now take multiple values at once (experimental) + +C upgraded to version 2.35 + +Removed in Perl 5.8.8 + +=item 5.005-style threading + +Introduced in Perl 5.005 + +Removed in Perl 5.10 XXX + +=item Test::Harness::Straps + +Removed in Perl 5.10.1 + +=item perlcc + +Introduced in Perl 5.005 + +Removed in Perl 5.9.0 + +See also L + +=item C can now have an experimental optional attribute C + +Introduced in Perl 5.8.0 + +=item Assertions + +The C<-A> command line switch + +Introduced in Perl 5.9.0 + +Removed in Perl 5.9.5 + +=item Linux abstract Unix domain sockets + +Introduced in Perl 5.9.2 + +See also L + +=item L + +=item L + +=item threads + +=item The <:pop> IO psuedolayer + +See also L + +=item The <:win32> IO psuedolayer + +See also L + +=item fields pragma + +Introduced in Perl 5.6.0 + +Removed in XXX + +=item MLDBM + +See also L + +=item internal functions with M flag + +See also L + +=item lex_start API + +Introduced in Perl 5.13.7 + +=item internal API for C<%H> + +Introduced in Perl 5.13.7 + +See also C in L. + +=item av_create_and_push + +=item av_create_and_unshift_one + +=item av_create_and_unshift_one + +=item PL_keyword_plugin + +=item hv_iternext_flags + +=item lex_bufutf8 + +=item lex_discard_to + +=item lex_grow_linestr + +=item lex_next_chunk + +=item lex_peek_unichar + +=item lex_read_space + +=item lex_read_to + +=item lex_read_unichar + +=item lex_stuff_pv + +=item lex_stuff_pvn + +=item lex_stuff_pvs + +=item lex_stuff_sv + +=item lex_unstuff + +=item parse_fullstmt + +=item parse_stmtseq + +=item PL_parser-Ebufend + +=item PL_parser-Ebufptr + +=item PL_parser-Elinestart + +=item PL_parser-Elinestr + +=item Perl_signbit + +=item pad_findmy + +=item sv_utf8_decode + +=item sv_utf8_downgrade + +=item bytes_from_utf8 + +=item bytes_to_utf8 + +=item utf8_to_bytes + +=item DB module + +Introduced in Perl 5.6.0 + +See also L, L + +=item The pseudo-hash data type + +Introduced in Perl 5.6.0 + +=item Lvalue subroutines + +Introduced in Perl 5.6.0 + +See also L + +=item There is an C target in the Makefile. + +=item Unicode in Perl on EBCDIC + +=item C<(?{code})> + +See also L + +=item C<(??{ code })> + +See also L + +=item Backtracking control verbs + +C<(*ACCEPT)> + +Introduced in: Perl 5.10 + +See also: L + +=item Code expressions, conditional expressions, and independent expressions in regexes + +=item The C<\N> regex character class + +The C<\N> character class, not to be confused with the named character +sequence C<\N{NAME}>, denotes any non-newline character in a regular +expression. + +Introduced in: Perl 5.12 + +See also: + +=item gv_try_downgrade + +See also L + +=item Experimental Support for Sun Studio Compilers for Linux OS + +See also L + +=item Pluggable keywords + +See L for the mechanism. + +Introduced in: Perl 5.11.2 + +=back + +=head2 Accepted features + +These features were so wildly successful and played so well with others that +we decided to remove their experimental status and admit them as full, stable +features in the world of Perl, lavishing all the benefits and luxuries thereof. +They are also awarded +5 Stability and +3 Charisma. + +=over 8 + +=item (none yet identified) + +=back + +=head2 Removed features + +These features are no longer considered experimental and their functionality +has disappeared. It's your own fault if you wrote production programs using +these features after we explicitly told you not to (see L). + +=over 8 + +=item C + +The experimental C pragma was swallowed by the C pragma. + +Introduced in: 5.11.2 + +Removed in: 5.11.3 + +=back + +=head1 AUTHORS + +brian d foy C<< >> + +=head1 COPYRIGHT + +Copyright 2010, brian d foy C<< >> + +=head1 LICENSE + +You can use and redistribute this document under the same terms as Perl +itself. + +=cut diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template index bc5ea1465e..a3706f6719 100644 --- a/vms/descrip_mms.template +++ b/vms/descrip_mms.template @@ -407,12 +407,12 @@ pod12 = [.lib.pods]perlbook.pod [.lib.pods]perlboot.pod [.lib.pods]perlbot.pod [ pod13 = [.lib.pods]perlcheat.pod [.lib.pods]perlclib.pod [.lib.pods]perlcn.pod [.lib.pods]perlcommunity.pod [.lib.pods]perlcompile.pod pod14 = [.lib.pods]perlcygwin.pod [.lib.pods]perldata.pod [.lib.pods]perldbmfilter.pod [.lib.pods]perldebguts.pod [.lib.pods]perldebtut.pod pod15 = [.lib.pods]perldebug.pod [.lib.pods]perldelta.pod [.lib.pods]perldgux.pod [.lib.pods]perldiag.pod [.lib.pods]perldos.pod [.lib.pods]perldsc.pod -pod16 = [.lib.pods]perldtrace.pod [.lib.pods]perlebcdic.pod [.lib.pods]perlembed.pod [.lib.pods]perlepoc.pod [.lib.pods]perlfilter.pod -pod17 = [.lib.pods]perlfork.pod [.lib.pods]perlform.pod [.lib.pods]perlfreebsd.pod [.lib.pods]perlfunc.pod [.lib.pods]perlgit.pod [.lib.pods]perlglossary.pod -pod18 = [.lib.pods]perlgpl.pod [.lib.pods]perlguts.pod [.lib.pods]perlhack.pod [.lib.pods]perlhacktips.pod [.lib.pods]perlhacktut.pod -pod19 = [.lib.pods]perlhaiku.pod [.lib.pods]perlhist.pod [.lib.pods]perlhpux.pod [.lib.pods]perlhurd.pod [.lib.pods]perlintern.pod [.lib.pods]perlinterp.pod -pod20 = [.lib.pods]perlintro.pod [.lib.pods]perliol.pod [.lib.pods]perlipc.pod [.lib.pods]perlirix.pod [.lib.pods]perljp.pod [.lib.pods]perlko.pod -pod21 = [.lib.pods]perllexwarn.pod [.lib.pods]perllinux.pod [.lib.pods]perllocale.pod [.lib.pods]perllol.pod [.lib.pods]perlmacos.pod +pod16 = [.lib.pods]perldtrace.pod [.lib.pods]perlebcdic.pod [.lib.pods]perlembed.pod [.lib.pods]perlepoc.pod [.lib.pods]perlexperiment.pod +pod17 = [.lib.pods]perlfilter.pod [.lib.pods]perlfork.pod [.lib.pods]perlform.pod [.lib.pods]perlfreebsd.pod [.lib.pods]perlfunc.pod [.lib.pods]perlgit.pod +pod18 = [.lib.pods]perlglossary.pod [.lib.pods]perlgpl.pod [.lib.pods]perlguts.pod [.lib.pods]perlhack.pod [.lib.pods]perlhacktips.pod +pod19 = [.lib.pods]perlhacktut.pod [.lib.pods]perlhaiku.pod [.lib.pods]perlhist.pod [.lib.pods]perlhpux.pod [.lib.pods]perlhurd.pod [.lib.pods]perlintern.pod +pod20 = [.lib.pods]perlinterp.pod [.lib.pods]perlintro.pod [.lib.pods]perliol.pod [.lib.pods]perlipc.pod [.lib.pods]perlirix.pod [.lib.pods]perljp.pod +pod21 = [.lib.pods]perlko.pod [.lib.pods]perllexwarn.pod [.lib.pods]perllinux.pod [.lib.pods]perllocale.pod [.lib.pods]perllol.pod [.lib.pods]perlmacos.pod pod22 = [.lib.pods]perlmacosx.pod [.lib.pods]perlmod.pod [.lib.pods]perlmodinstall.pod [.lib.pods]perlmodlib.pod [.lib.pods]perlmodstyle.pod pod23 = [.lib.pods]perlmpeix.pod [.lib.pods]perlmroapi.pod [.lib.pods]perlnetware.pod [.lib.pods]perlnewmod.pod [.lib.pods]perlnumber.pod pod24 = [.lib.pods]perlobj.pod [.lib.pods]perlop.pod [.lib.pods]perlopenbsd.pod [.lib.pods]perlopentut.pod [.lib.pods]perlos2.pod [.lib.pods]perlos390.pod @@ -1029,6 +1029,10 @@ makeppport : $(MINIPERL_EXE) $(ARCHDIR)Config.pm nonxsext @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] +[.lib.pods]perlexperiment.pod : [.pod]perlexperiment.pod + @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] + Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] + [.lib.pods]perlfilter.pod : [.pod]perlfilter.pod @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] diff --git a/win32/pod.mak b/win32/pod.mak index ad2f686021..5cc65730d2 100644 --- a/win32/pod.mak +++ b/win32/pod.mak @@ -92,6 +92,7 @@ POD = perl.pod \ perldtrace.pod \ perlebcdic.pod \ perlembed.pod \ + perlexperiment.pod \ perlfilter.pod \ perlfork.pod \ perlform.pod \ @@ -239,6 +240,7 @@ MAN = perl.man \ perldtrace.man \ perlebcdic.man \ perlembed.man \ + perlexperiment.man \ perlfilter.man \ perlfork.man \ perlform.man \ @@ -386,6 +388,7 @@ HTML = perl.html \ perldtrace.html \ perlebcdic.html \ perlembed.html \ + perlexperiment.html \ perlfilter.html \ perlfork.html \ perlform.html \ @@ -533,6 +536,7 @@ TEX = perl.tex \ perldtrace.tex \ perlebcdic.tex \ perlembed.tex \ + perlexperiment.tex \ perlfilter.tex \ perlfork.tex \ perlform.tex \ -- cgit v1.2.1 From 6e8be9cfdd52adfc933b189c5829c3088178a7fe Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 2 Aug 2011 08:39:56 -0700 Subject: Make verbatim pod in bignum.pm fit in 80 columns --- dist/bignum/lib/bignum.pm | 6 +++--- t/porting/known_pod_issues.dat | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/dist/bignum/lib/bignum.pm b/dist/bignum/lib/bignum.pm index 716ba921e5..f0377c60f1 100644 --- a/dist/bignum/lib/bignum.pm +++ b/dist/bignum/lib/bignum.pm @@ -1,7 +1,7 @@ package bignum; use 5.006; -$VERSION = '0.28'; +$VERSION = '0.29'; use Exporter; @ISA = qw( bigint ); @EXPORT_OK = qw( PI e bexp bpi ); @@ -364,12 +364,12 @@ allow you finer control over what get's done in which module/space. For instance, simple loop counters will be Math::BigInts under C and this is slower than keeping them as Perl scalars: - perl -Mbignum -le 'for ($i = 0; $i < 10; $i++) { print ref($i); }' + perl -Mbignum -le 'for ($i = 0; $i < 10; $i++) { print ref($i); }' Please note the following does not work as expected (prints nothing), since overloading of '..' is not yet possible in Perl (as of v5.8.0): - perl -Mbignum -le 'for (1..2) { print ref($_); }' + perl -Mbignum -le 'for (1..2) { print ref($_); }' =head2 Options diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index 77a211e1f0..e953ffa322 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -134,7 +134,6 @@ YAML::Syck YAML::Tiny dist/bignum/lib/bigint.pm Apparent broken link 1 dist/bignum/lib/bignum.pm Apparent broken link 1 -dist/bignum/lib/bignum.pm Verbatim line length including indents exceeds 80 by 1 dist/bignum/lib/bigrat.pm Apparent broken link 1 dist/constant/lib/constant.pm Apparent broken link 2 dist/cwd/lib/file/spec.pm Verbatim line length including indents exceeds 80 by 1 -- cgit v1.2.1 From b539c2c9496bf950c94dcc39801d7f3a5a0cf8c5 Mon Sep 17 00:00:00 2001 From: Keith Thompson Date: Fri, 29 Jul 2011 17:17:00 -0700 Subject: Fix typos in several pod/perl*.pod files --- pod/perldiag.pod | 8 ++++---- pod/perlretut.pod | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pod/perldiag.pod b/pod/perldiag.pod index f508db8c38..d35e364986 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -1959,14 +1959,14 @@ earlier in the line, and you really meant a "less than". (W overflow) You called C with a number that was larger than it can reliably handle and C probably returned the wrong -date. This warning is also triggered with nan (the special +date. This warning is also triggered with NaN (the special not-a-number value). =item gmtime(%f) too small (W overflow) You called C with a number that was smaller than it can reliably handle and C probably returned the wrong -date. This warning is also triggered with nan (the special +date. This warning is also triggered with NaN (the special not-a-number value). =item Got an error from DosAllocMem @@ -2461,14 +2461,14 @@ L. (W overflow) You called C with a number that was larger than it can reliably handle and C probably returned the -wrong date. This warning is also triggered with nan (the special +wrong date. This warning is also triggered with NaN (the special not-a-number value). =item localtime(%f) too small (W overflow) You called C with a number that was smaller than it can reliably handle and C probably returned the -wrong date. This warning is also triggered with nan (the special +wrong date. This warning is also triggered with NaN (the special not-a-number value). =item Lookbehind longer than %d not implemented in regex m/%s/ diff --git a/pod/perlretut.pod b/pod/perlretut.pod index 928dfb5732..218e6b30dc 100644 --- a/pod/perlretut.pod +++ b/pod/perlretut.pod @@ -2731,7 +2731,7 @@ groups or produce results, it may be necessary to use this in combination with embedded code. %count = (); - "supercalifragilisticexpialidoceous" =~ + "supercalifragilisticexpialidocious" =~ /([aeiou])(?{ $count{$1}++; })(*FAIL)/i; printf "%3d '%s'\n", $count{$_}, $_ for (sort keys %count); @@ -2744,7 +2744,7 @@ for another vowel. Thus, match or no match makes no difference, and the regexp engine proceeds until the entire string has been inspected. (It's remarkable that an alternative solution using something like - $count{lc($_)}++ for split('', "supercalifragilisticexpialidoceous"); + $count{lc($_)}++ for split('', "supercalifragilisticexpialidocious"); printf "%3d '%s'\n", $count2{$_}, $_ for ( qw{ a e i o u } ); is considerably slower.) -- cgit v1.2.1 From d1558b3e5ee8166e43b25682b925bda52475f61d Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 2 Aug 2011 12:36:32 -0700 Subject: A few tweaks to the new perlexperiment.pod MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • The :unique attribute has been deprecated already. • The fields pragma has never been experimental and still exists. • Grammar --- pod/perlexperiment.pod | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/pod/perlexperiment.pod b/pod/perlexperiment.pod index f9e54e4c6a..e64728a4ab 100644 --- a/pod/perlexperiment.pod +++ b/pod/perlexperiment.pod @@ -5,12 +5,12 @@ perlexperiment - A listing of experimental features in Perl =head1 DESCRIPTION This document lists the current and past experimental features in the perl -core. Although each of these are documented with their appropriate topics, +core. Although all of these are documented with their appropriate topics, this succinct listing gives you an overview and basic facts about their status. So far I've merely tried to find and list the experimental features and infer -their inception, etc versions. There's a lot of speculation here. +their inception, versions, etc. There's a lot of speculation here. =head2 Current experiments @@ -86,6 +86,8 @@ See also L Introduced in Perl 5.8.0 +Deprecated in Perl 5.10.0 + =item Assertions The C<-A> command line switch @@ -114,12 +116,6 @@ See also L See also L -=item fields pragma - -Introduced in Perl 5.6.0 - -Removed in XXX - =item MLDBM See also L -- cgit v1.2.1 From 706c19b7f8e3507cf277370f033ddc7c57499fdf Mon Sep 17 00:00:00 2001 From: Keith Thompson Date: Tue, 2 Aug 2011 13:58:09 -0700 Subject: Fix typos in pod/perlexperiment.pod --- pod/perlexperiment.pod | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pod/perlexperiment.pod b/pod/perlexperiment.pod index e64728a4ab..7efabb7c29 100644 --- a/pod/perlexperiment.pod +++ b/pod/perlexperiment.pod @@ -42,7 +42,7 @@ Accepted in XXX Introduced in Perl 5.005 -Accecpted in Perl XXX +Accepted in Perl XXX =item Unicode support @@ -108,11 +108,11 @@ See also L =item threads -=item The <:pop> IO psuedolayer +=item The <:pop> IO pseudolayer See also L -=item The <:win32> IO psuedolayer +=item The <:win32> IO pseudolayer See also L -- cgit v1.2.1 From e958e573604ab75ea497030026663063af7f21a6 Mon Sep 17 00:00:00 2001 From: "Matthew Horsfall (alh)" Date: Sun, 31 Jul 2011 22:42:22 -0400 Subject: RT #94988 - Support for %u in diagnostics.pm's printf()-format parser --- lib/diagnostics.pm | 8 ++++---- lib/diagnostics.t | 9 ++++++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/diagnostics.pm b/lib/diagnostics.pm index f2d542927a..60c96ea3ce 100644 --- a/lib/diagnostics.pm +++ b/lib/diagnostics.pm @@ -410,22 +410,22 @@ my %msg; # Since we strip "\.\n" when we search a warning, strip it here as well $header =~ s/\.?$//; - my @toks = split( /(%l?[dx]|%c|%(?:\.\d+)?[fs])/, $header ); + my @toks = split( /(%l?[dx]|%u|%c|%(?:\.\d+)?[fs])/, $header ); if (@toks > 1) { my $conlen = 0; for my $i (0..$#toks){ if( $i % 2 ){ if( $toks[$i] eq '%c' ){ $toks[$i] = '.'; - } elsif( $toks[$i] eq '%d' ){ + } elsif( $toks[$i] =~ /^%(?:d|u)$/ ){ $toks[$i] = '\d+'; } elsif( $toks[$i] =~ '^%(?:s|.*f)$' ){ $toks[$i] = $i == $#toks ? '.*' : '.*?'; } elsif( $toks[$i] =~ '%.(\d+)s' ){ $toks[$i] = ".{$1}"; - } elsif( $toks[$i] =~ '^%l*x$' ){ + } elsif( $toks[$i] =~ '^%l*x$' ){ $toks[$i] = '[\da-f]+'; - } + } } elsif( length( $toks[$i] ) ){ $toks[$i] = quotemeta $toks[$i]; $conlen += length( $toks[$i] ); diff --git a/lib/diagnostics.t b/lib/diagnostics.t index b5db34de74..31a5802c2b 100644 --- a/lib/diagnostics.t +++ b/lib/diagnostics.t @@ -5,7 +5,7 @@ BEGIN { @INC = 'lib'; } -use Test::More tests => 8; +use Test::More tests => 9; BEGIN { my $w; @@ -54,3 +54,10 @@ seek STDERR, 0,0; $warning = ''; warn "Execution of -e aborted due to compilation errors.\n"; like $warning, qr/The final summary message/, 'Periods at end of line'; + + +# Test for %d/%u +seek STDERR, 0,0; +$warning = ''; +warn "Bad arg length for us, is 4, should be 42"; +like $warning, qr/In C parlance/, '%u works'; -- cgit v1.2.1 From 4b932c1481f2c641089c02ab05341310622b6f69 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 2 Aug 2011 14:33:25 -0700 Subject: Increase $diagnostics::VERSION from 1.23 to 1.24 --- lib/diagnostics.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/diagnostics.pm b/lib/diagnostics.pm index 60c96ea3ce..7079d2508f 100644 --- a/lib/diagnostics.pm +++ b/lib/diagnostics.pm @@ -185,7 +185,7 @@ use 5.009001; use Carp; $Carp::Internal{__PACKAGE__.""}++; -our $VERSION = '1.23'; +our $VERSION = '1.24'; our $DEBUG; our $VERBOSE; our $PRETTY; -- cgit v1.2.1 From 10654d5139c0a27b996d0f536591978b3a6d532f Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 2 Aug 2011 14:41:58 -0700 Subject: Remove Perl_mod After mod was renamed to op_lvalue, this stub was added temporarily to provide a smoother transition for the compilers. The compiler maintainer is happy with its extirpation at this stage. See ticket #78908. --- embed.fnc | 2 -- embed.h | 1 - global.sym | 1 - op.c | 8 -------- proto.h | 1 - 5 files changed, 13 deletions(-) diff --git a/embed.fnc b/embed.fnc index a84a958619..f48d8ce9c7 100644 --- a/embed.fnc +++ b/embed.fnc @@ -758,8 +758,6 @@ Ap |I32 |mg_size |NN SV* sv Ap |void |mini_mktime |NN struct tm *ptm AMmd |OP* |op_lvalue |NULLOK OP* o|I32 type poX |OP* |op_lvalue_flags|NULLOK OP* o|I32 type|U32 flags -: To be removed after 5.14 (see [perl #78908]): -EXp |OP* |mod |NULLOK OP* o|I32 type p |void |finalize_optree |NN OP* o #if defined(PERL_IN_OP_C) s |void |finalize_op |NN OP* o diff --git a/embed.h b/embed.h index b15a92e417..0b3c4dca57 100644 --- a/embed.h +++ b/embed.h @@ -840,7 +840,6 @@ #define is_utf8_X_extend(a) Perl_is_utf8_X_extend(aTHX_ a) #define is_utf8_X_non_hangul(a) Perl_is_utf8_X_non_hangul(aTHX_ a) #define is_utf8_X_prepend(a) Perl_is_utf8_X_prepend(aTHX_ a) -#define mod(a,b) Perl_mod(aTHX_ a,b) #define op_clear(a) Perl_op_clear(aTHX_ a) #define qerror(a) Perl_qerror(aTHX_ a) #define reg_named_buff(a,b,c,d) Perl_reg_named_buff(aTHX_ a,b,c,d) diff --git a/global.sym b/global.sym index 11de51ef9c..0a27f2982f 100644 --- a/global.sym +++ b/global.sym @@ -323,7 +323,6 @@ Perl_mg_magical Perl_mg_set Perl_mg_size Perl_mini_mktime -Perl_mod Perl_moreswitches Perl_mro_get_from_name Perl_mro_get_linear_isa diff --git a/op.c b/op.c index 68aa1a7b1d..c9b4d519a6 100644 --- a/op.c +++ b/op.c @@ -2011,14 +2011,6 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags) return o; } -/* Do not use this. It will be removed after 5.14. */ -OP * -Perl_mod(pTHX_ OP *o, I32 type) -{ - return op_lvalue(o,type); -} - - STATIC bool S_scalar_mod_type(const OP *o, I32 type) { diff --git a/proto.h b/proto.h index 6ddc11c7b9..2c63536ebc 100644 --- a/proto.h +++ b/proto.h @@ -2282,7 +2282,6 @@ PERL_CALLCONV void Perl_mini_mktime(pTHX_ struct tm *ptm) #define PERL_ARGS_ASSERT_MINI_MKTIME \ assert(ptm) -PERL_CALLCONV OP* Perl_mod(pTHX_ OP* o, I32 type); PERL_CALLCONV int Perl_mode_from_discipline(pTHX_ const char* s, STRLEN len); PERL_CALLCONV void * Perl_more_bodies(pTHX_ const svtype sv_type, const size_t body_size, const size_t arena_size); PERL_CALLCONV const char* Perl_moreswitches(pTHX_ const char* s) -- cgit v1.2.1 From 662667f1e08ac081a3bfcaed3d91ad5410c3d6e4 Mon Sep 17 00:00:00 2001 From: "Craig A. Berry" Date: Tue, 2 Aug 2011 19:06:41 -0500 Subject: Add the correct PL_sig_ignoring skip for VMS in makedef.pl. This only exists when FAKE_PERSISTENT_SIGNAL_HANDLERS is defined, and that's only defined when HAS_SIGACTION is false. The problem was exposed by ed76ea85d1, which fixed a typo introduced in aadb217dbe, but that typo introduced code that was a noop on all platforms, including VMS, where $^O is 'VMS', not 'vms'. TODO: The existence of PL_sig_defaulting and PL_sig_handlers_initted depends on the definedness of FAKE_DEFAULT_SIGNAL_HANDLERS, which depends on KILL_BY_SIGPRC, which is written directly to config.h without being recorded in config.sh and is thus not visible in Config. So there's no good way to know when these symbols should be skipped. KILL_BY_SIGPRC currently gets defined on all VMS versions and platforms, so it's a breakage-in-waiting but does not actually fall down (yet). --- makedef.pl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/makedef.pl b/makedef.pl index e7d72e3dcc..6a31582e5a 100644 --- a/makedef.pl +++ b/makedef.pl @@ -487,6 +487,11 @@ unless ($define{HAS_MMAP}) { if ($define{HAS_SIGACTION}) { ++$skip{PL_sig_trapped}; + + if ($ARGS{PLATFORM} eq 'vms') { + # FAKE_PERSISTENT_SIGNAL_HANDLERS defined as !defined(HAS_SIGACTION) + ++$skip{PL_sig_ignoring}; + } } unless ($define{USE_LOCALE_COLLATE}) { -- cgit v1.2.1 From 730e5b5b833ac104cb59b730cd59e857559470d8 Mon Sep 17 00:00:00 2001 From: Chris 'BinGOs' Williams Date: Wed, 3 Aug 2011 09:17:26 +0100 Subject: Update CPAN-Meta to CPAN version 2.112150 [DELTA] 2.112150 2011-08-02 22:25:41 America/New_York [BUGFIX] - Stringify any objects encountered during conversion. (RT #67295) - Fixed some broken URLs in documentation and for LGPL in legacy conversion (RT #68738) - Fixed invalid private Pod in CPAN::Meta::Validator (RT #65925) [SPEC] - Clarified that file paths in the 'provides' section must be in Unix-style (i.e. forward slashes) (RT #69045) - Replaced examples using Module::Build::ModuleInfo with Module::Metadata (RT #66135) --- Porting/Maintainers.pl | 2 +- cpan/CPAN-Meta/Changes | 19 ++++++ cpan/CPAN-Meta/lib/CPAN/Meta.pm | 36 +++++++--- cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm | 30 ++++----- cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm | 9 ++- cpan/CPAN-Meta/lib/CPAN/Meta/History.pm | 10 +-- cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm | 9 ++- cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm | 35 +++++----- cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm | 105 +++++++++++++++++++++++------- cpan/CPAN-Meta/t/converter.t | 27 +++++++- pod/perldelta.pod | 9 +++ 11 files changed, 205 insertions(+), 86 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index d5a77b5d6f..728d6b4614 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -493,7 +493,7 @@ use File::Glob qw(:case); 'CPAN::Meta' => { 'MAINTAINER' => 'dagolden', - 'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-2.110930.tar.gz', + 'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-2.112150.tar.gz', 'FILES' => q[cpan/CPAN-Meta], 'EXCLUDED' => [ qr/^xt/, diff --git a/cpan/CPAN-Meta/Changes b/cpan/CPAN-Meta/Changes index e155cc391a..f91f71daae 100644 --- a/cpan/CPAN-Meta/Changes +++ b/cpan/CPAN-Meta/Changes @@ -1,5 +1,24 @@ Revision history for CPAN-Meta +2.112150 2011-08-02 22:25:41 America/New_York + + [BUGFIX] + + - Stringify any objects encountered during conversion. (RT #67295) + + - Fixed some broken URLs in documentation and for LGPL in legacy + conversion (RT #68738) + + - Fixed invalid private Pod in CPAN::Meta::Validator (RT #65925) + + [SPEC] + + - Clarified that file paths in the 'provides' section must be in + Unix-style (i.e. forward slashes) (RT #69045) + + - Replaced examples using Module::Build::ModuleInfo with Module::Metadata + (RT #66135) + 2.110930 2011-04-02 23:31:24 America/New_York [BUGFIX] diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta.pm b/cpan/CPAN-Meta/lib/CPAN/Meta.pm index 5d53514992..36f26d80a7 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta.pm @@ -2,10 +2,7 @@ use 5.006; use strict; use warnings; package CPAN::Meta; -BEGIN { - $CPAN::Meta::VERSION = eval '2.110930_001'; -} -# ABSTRACT: the distribution metadata for a CPAN dist +our $VERSION = '2.112150'; # VERSION use Carp qw(carp croak); @@ -15,9 +12,7 @@ use CPAN::Meta::Converter; use CPAN::Meta::Validator; use Parse::CPAN::Meta 1.4400 (); -sub _dclone { - CPAN::Meta::Converter::_dclone(@_); -} +BEGIN { *_dclone = \&CPAN::Meta::Converter::_dclone } BEGIN { @@ -339,6 +334,8 @@ sub TO_JSON { 1; +# ABSTRACT: the distribution metadata for a CPAN dist + =pod @@ -349,7 +346,7 @@ CPAN::Meta - the distribution metadata for a CPAN dist =head1 VERSION -version 2.110930 +version 2.112150 =head1 SYNOPSIS @@ -644,6 +641,10 @@ particular keys may be retrieved with the C method. If a custom key refers to a data structure, a deep clone is returned. +=for Pod::Coverage TO_JSON abstract author authors custom custom_keys description dynamic_config +generated_by keywords license licenses meta_spec name no_index +optional_features prereqs provides release_status resources version + =head1 BUGS Please report any bugs or feature using the CPAN Request Tracker. @@ -667,6 +668,25 @@ L =back +=for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders + +=head1 SUPPORT + +=head2 Bugs / Feature Requests + +Please report any bugs or feature requests by email to C, or through +the web interface at L. You will be automatically notified of any +progress on the request by the system. + +=head2 Source Code + +This is open source software. The code repository is available for +public review and contribution under the terms of the license. + +L + + git clone git://github.com/dagolden/cpan-meta.git + =head1 AUTHORS =over 4 diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm index 2ea3456426..9fedacba31 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm @@ -2,39 +2,29 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Converter; -BEGIN { - $CPAN::Meta::Converter::VERSION = eval '2.110930_001'; -} -# ABSTRACT: Convert CPAN distribution metadata structures +our $VERSION = '2.112150'; # VERSION use CPAN::Meta::Validator; use version 0.82 (); use Parse::CPAN::Meta 1.4400 (); -use Carp qw(croak); sub _dclone { my $ref = shift; - # Work around JSON::PP's lack of a convert_blessed_universally - local *UNIVERSAL::TO_JSON = sub { - my $obj = shift; - - # Special case: stringify version objects - # Everything else: serialize - return $obj->isa("version") ? "$obj" : - $obj->isa("HASH") ? { %$obj } : - $obj->isa("ARRAY") ? { @$obj } : - croak "Don't know how to serialize $obj"; - }; + # if an object is in the data structure and doesn't specify how to + # turn itself into JSON, we just stringify the object. That does the + # right thing for typical things that might be there, like version objects, + # Path::Class objects, etc. + no warnings 'once'; + local *UNIVERSAL::TO_JSON = sub { return "$_[0]" }; my $backend = Parse::CPAN::Meta->json_backend(); return $backend->new->decode( - $backend->new->convert_blessed->allow_blessed->encode($ref) + $backend->new->allow_blessed->convert_blessed->encode($ref) ); } - my %known_specs = ( '2' => 'http://search.cpan.org/perldoc?CPAN::Meta::Spec', '1.4' => 'http://module-build.sourceforge.net/META-spec-v1.4.html', @@ -1258,6 +1248,8 @@ sub convert { 1; +# ABSTRACT: Convert CPAN distribution metadata structures + =pod @@ -1268,7 +1260,7 @@ CPAN::Meta::Converter - Convert CPAN distribution metadata structures =head1 VERSION -version 2.110930 +version 2.112150 =head1 SYNOPSIS diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm index d8258dcf58..fdec692cfe 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm @@ -2,10 +2,7 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Feature; -BEGIN { - $CPAN::Meta::Feature::VERSION = '2.110930'; -} -# ABSTRACT: an optional feature provided by a CPAN distribution +our $VERSION = '2.112150'; # VERSION use CPAN::Meta::Prereqs; @@ -33,6 +30,8 @@ sub prereqs { $_[0]{prereqs} } 1; +# ABSTRACT: an optional feature provided by a CPAN distribution + =pod @@ -43,7 +42,7 @@ CPAN::Meta::Feature - an optional feature provided by a CPAN distribution =head1 VERSION -version 2.110930 +version 2.112150 =head1 DESCRIPTION diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/History.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/History.pm index 9ccbfd4403..49a614b82d 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta/History.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta/History.pm @@ -3,12 +3,12 @@ use 5.006; use strict; use warnings; package CPAN::Meta::History; -BEGIN { - $CPAN::Meta::History::VERSION = '2.110930'; -} -# ABSTRACT: history of CPAN Meta Spec changes +our $VERSION = '2.112150'; # VERSION + 1; +# ABSTRACT: history of CPAN Meta Spec changes + __END__ @@ -20,7 +20,7 @@ CPAN::Meta::History - history of CPAN Meta Spec changes =head1 VERSION -version 2.110930 +version 2.112150 =head1 DESCRIPTION diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm index 29a2e5a2d5..5d1d1f0600 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm @@ -2,10 +2,7 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Prereqs; -BEGIN { - $CPAN::Meta::Prereqs::VERSION = '2.110930'; -} -# ABSTRACT: a set of distribution prerequisites by phase and type +our $VERSION = '2.112150'; # VERSION use Carp qw(confess); @@ -140,6 +137,8 @@ sub clone { 1; +# ABSTRACT: a set of distribution prerequisites by phase and type + =pod @@ -150,7 +149,7 @@ CPAN::Meta::Prereqs - a set of distribution prerequisites by phase and type =head1 VERSION -version 2.110930 +version 2.112150 =head1 DESCRIPTION diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm index b32fdac08a..c5f8213aee 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm @@ -3,12 +3,12 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Spec; -BEGIN { - $CPAN::Meta::Spec::VERSION = '2.110930'; -} -# ABSTRACT: specification for CPAN distribution metadata +our $VERSION = '2.112150'; # VERSION + 1; +# ABSTRACT: specification for CPAN distribution metadata + __END__ @@ -20,7 +20,7 @@ CPAN::Meta::Spec - specification for CPAN distribution metadata =head1 VERSION -version 2.110930 +version 2.112150 =head1 SYNOPSIS @@ -664,8 +664,9 @@ the distribution. The values are Maps with the following valid subkeys: =item file -This field is required. The value must contain a relative file path -from the root of the distribution to the module containing the package. +This field is required. The value must contain a Unix-style relative +file path from the root of the distribution to the module containing the +package. =item version @@ -681,12 +682,12 @@ Example: license => [ 'http://dev.perl.org/licenses/' ], homepage => 'http://sourceforge.net/projects/module-build', bugtracker => { - web => 'http://github.com/dagolden/cpan-meta-spec/issues', + web => 'http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta', mailto => 'meta-bugs@example.com', }, repository => { - url => 'git://github.com/dagolden/cpan-meta-spec.git', - web => 'http://github.com/dagolden/cpan-meta-spec', + url => 'git://github.com/dagolden/cpan-meta.git', + web => 'http://github.com/dagolden/cpan-meta', type => 'git', }, x_twitter => 'http://twitter.com/cpan_linked/', @@ -1028,10 +1029,10 @@ if both are found. =head2 Extracting Version Numbers from Perl Modules To get the version number from a Perl module, consumers should use the -C<< MM->parse_version($file) >> method provided by L or -the L module provided with L. For -example, for the module given by C<$mod>, the version may be retrieved in one -of the following ways: +C<< MM->parse_version($file) >> method provided by +L or L. For example, for the +module given by C<$mod>, the version may be retrieved in one of the +following ways: # via ExtUtils::MakeMaker my $file = MM->_installed_file_for_module($mod); @@ -1040,14 +1041,14 @@ of the following ways: The private C<_installed_file_for_module> method may be replaced with other methods for locating a module in C<@INC>. - # via Module::Build - my $info = Module::Build::ModuleInfo->new_from_module($mod); + # via Module::Metadata + my $info = Module::Metadata->new_from_module($mod); my $version = $info->version; If only a filename is available, the following approach may be used: # via Module::Build - my $info = Module::Build::ModuleInfo->new_from_file($file); + my $info = Module::Metadata->new_from_file($file); my $version = $info->version; =head2 Comparing Version Numbers diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm index 819011cb09..b9f9868b65 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm @@ -2,10 +2,7 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Validator; -BEGIN { - $CPAN::Meta::Validator::VERSION = '2.110930'; -} -# ABSTRACT: validate CPAN distribution metadata structures +our $VERSION = '2.112150'; # VERSION #--------------------------------------------------------------------------# @@ -692,7 +689,7 @@ my %v1_licenses = ( 'apache' => 'http://apache.org/licenses/LICENSE-2.0', 'artistic' => 'http://opensource.org/licenses/artistic-license.php', 'artistic_2' => 'http://opensource.org/licenses/artistic-license-2.0.php', - 'lgpl' => 'http://www.opensource.org/licenses/lgpl-license.phpt', + 'lgpl' => 'http://www.opensource.org/licenses/lgpl-license.php', 'bsd' => 'http://www.opensource.org/licenses/bsd-license.php', 'gpl' => 'http://www.opensource.org/licenses/gpl-license.php', 'mit' => 'http://opensource.org/licenses/mit-license.php', @@ -829,6 +826,8 @@ sub _error { 1; +# ABSTRACT: validate CPAN distribution metadata structures + =pod @@ -839,7 +838,7 @@ CPAN::Meta::Validator - validate CPAN distribution metadata structures =head1 VERSION -version 2.110930 +version 2.112150 =head1 SYNOPSIS @@ -881,87 +880,143 @@ is valid. Returns a list of errors seen during validation. -=begin internals +=begin :internals =head2 Check Methods =over -=item * check_map($spec,$data) +=item * + +check_map($spec,$data) Checks whether a map (or hash) part of the data structure conforms to the appropriate specification definition. -=item * check_list($spec,$data) + +=item * + +check_list($spec,$data) Checks whether a list (or array) part of the data structure conforms to the appropriate specification definition. -=item * check_lazylist($spec,$data) + +=item * + +check_lazylist($spec,$data) Checks whether a list conforms, but converts strings to a single-element list + =back =head2 Validator Methods =over -=item * header($self,$key,$value) +=item * + +header($self,$key,$value) Validates that the header is valid. -Note: No longer used as we now read the data structure, not the file.=item * url($self,$key,$value) +Note: No longer used as we now read the data structure, not the file. + +=item * + +url($self,$key,$value) Validates that a given value is in an acceptable URL format -=item * urlspec($self,$key,$value) + +=item * + +urlspec($self,$key,$value) Validates that the URL to a META specification is a known one. -=item * string_or_undef($self,$key,$value) + +=item * + +string_or_undef($self,$key,$value) Validates that the value is either a string or an undef value. Bit of a catchall function for parts of the data structure that are completely user defined. -=item * string($self,$key,$value) + +=item * + +string($self,$key,$value) Validates that a string exists for the given key. -=item * file($self,$key,$value) + +=item * + +file($self,$key,$value) Validate that a file is passed for the given key. This may be made more thorough in the future. For now it acts like \&string. -=item * exversion($self,$key,$value) + +=item * + +exversion($self,$key,$value) Validates a list of versions, e.g. '<= 5, >=2, ==3, !=4, >1, <6, 0'. -=item * version($self,$key,$value) + +=item * + +version($self,$key,$value) Validates a single version string. Versions of the type '5.8.8' and '0.00_00' are both valid. A leading 'v' like 'v1.2.3' is also valid. -=item * boolean($self,$key,$value) + +=item * + +boolean($self,$key,$value) Validates for a boolean value. Currently these values are '1', '0', 'true', 'false', however the latter 2 may be removed. -=item * license($self,$key,$value) + +=item * + +license($self,$key,$value) Validates that a value is given for the license. Returns 1 if an known license type, or 2 if a value is given but the license type is not a recommended one. -=item * custom_1($self,$key,$value) + +=item * + +custom_1($self,$key,$value) Validates that the given key is in CamelCase, to indicate a user defined keyword and only has characters in the class [-_a-zA-Z]. In version 1.X of the spec, this was only explicitly stated for 'resources'. -=item * custom_2($self,$key,$value) + +=item * + +custom_2($self,$key,$value) Validates that the given key begins with 'x_' or 'X_', to indicate a user defined keyword and only has characters in the class [-_a-zA-Z] -=item * identifier($self,$key,$value) + +=item * + +identifier($self,$key,$value) Validates that key is in an acceptable format for the META specification, for an identifier, i.e. any that matches the regular expression qr/[a-z][a-z_]/i. -=item * module($self,$key,$value) + +=item * + +module($self,$key,$value) Validates that a given key is in an acceptable module name format, e.g. 'Test::CPAN::Meta::Version'. + =back -=end internals +=end :internals + +=for Pod::Coverage anything boolean check_lazylist check_list custom_1 custom_2 exversion file +identifier license module phase relation release_status string string_or_undef +url urlspec version header check_map =head1 BUGS diff --git a/cpan/CPAN-Meta/t/converter.t b/cpan/CPAN-Meta/t/converter.t index 5cd3e44e70..4bab817303 100644 --- a/cpan/CPAN-Meta/t/converter.t +++ b/cpan/CPAN-Meta/t/converter.t @@ -8,6 +8,20 @@ use CPAN::Meta::Converter; use File::Spec; use IO::Dir; use Parse::CPAN::Meta 1.4400; +use version; + +# mock file object +package + File::StringObject; + +use overload q{""} => sub { ${$_[0]} }, fallback => 1; + +sub new { + my ($class, $file) = @_; + bless \$file, $class; +} + +package main; my $data_dir = IO::Dir->new( 't/data' ); my @files = sort grep { /^\w/ } $data_dir->read; @@ -148,5 +162,16 @@ for my $f ( reverse sort @files ) { ); } -done_testing; +# specific test for object conversion +{ + my $path = File::Spec->catfile('t','data','resources.yml'); + my $original = Parse::CPAN::Meta->load_file( $path ); + ok( $original, "loaded resources.yml" ); + $original->{version} = version->new("1.64"); + $original->{no_index}{file} = File::StringObject->new(".gitignore"); + pass( "replaced some data fields with objects" ); + my $cmc = CPAN::Meta::Converter->new( $original ); + ok( my $converted = $cmc->convert( version => 2 ), "conversion successful" ); +} +done_testing; diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 88119dc528..6ab99d01ee 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -111,6 +111,15 @@ Fixed support for v-strings and x.y.z versions with v5.8.4 =item * +L has been upgraded from version 2.110930_001 to version 2.112150 + +Stringify any objects encountered during conversion. + +Clarified that file paths in the 'provides' section must be in +Unix-style (i.e. forward slashes) + +=item * + L has been upgraded from version 1.56 to version 1.57. There is no change to ExtUtils::Install other than the version number -- cgit v1.2.1 From 4eb81ef27984510df69d5b65e3f5cfa0bd218069 Mon Sep 17 00:00:00 2001 From: Chris 'BinGOs' Williams Date: Wed, 3 Aug 2011 09:28:11 +0100 Subject: Update Module-Metadata to CPAN version 1.000005 [DELTA] 1.0.5 2011-08-02 09:45:00 - Localize $package::VERSION during version discovery (MIYAGAWA) - Fix references to Module::Build::ModuleInfo [RT #66133] (DAGOLDEN) - Added 'new_from_handle()' method [RT #68875] (DAGOLDEN) - Improved documentation (SYNOPSIS, broke out class/object method, and other minor edits) (DAGOLDEN) --- MANIFEST | 3 + Porting/Maintainers.pl | 4 +- cpan/Module-Metadata/lib/Module/Metadata.pm | 154 +++++++++++++++++++--------- cpan/Module-Metadata/t/lib/0.1/Foo.pm | 3 + cpan/Module-Metadata/t/lib/0.2/Foo.pm | 3 + cpan/Module-Metadata/t/metadata.t | 11 +- cpan/Module-Metadata/t/version.t | 22 ++++ pod/perldelta.pod | 6 ++ 8 files changed, 153 insertions(+), 53 deletions(-) create mode 100644 cpan/Module-Metadata/t/lib/0.1/Foo.pm create mode 100644 cpan/Module-Metadata/t/lib/0.2/Foo.pm create mode 100644 cpan/Module-Metadata/t/version.t diff --git a/MANIFEST b/MANIFEST index 6fbbc3ea28..f33a68b118 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1689,10 +1689,13 @@ cpan/Module-Load/t/to_load/Must/Be/Loaded.pm Module::Load tests cpan/Module-Load/t/to_load/TestModule.pm Module::Load tests cpan/Module-Load/t/to_load/ToBeLoaded Module::Load tests cpan/Module-Metadata/lib/Module/Metadata.pm +cpan/Module-Metadata/t/lib/0.1/Foo.pm +cpan/Module-Metadata/t/lib/0.2/Foo.pm cpan/Module-Metadata/t/lib/DistGen.pm cpan/Module-Metadata/t/lib/MBTest.pm cpan/Module-Metadata/t/lib/Tie/CPHash.pm cpan/Module-Metadata/t/metadata.t +cpan/Module-Metadata/t/version.t cpan/Module-Pluggable/lib/Devel/InnerPackage.pm Find inner packages cpan/Module-Pluggable/lib/Module/Pluggable/Object.pm Module::Pluggable cpan/Module-Pluggable/lib/Module/Pluggable.pm Module::Pluggable diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 728d6b4614..639f1fd287 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -1286,9 +1286,9 @@ use File::Glob qw(:case); 'Module::Metadata' => { 'MAINTAINER' => 'dagolden', - 'DISTRIBUTION' => 'DAGOLDEN/Module-Metadata-1.000004.tar.gz', + 'DISTRIBUTION' => 'DAGOLDEN/Module-Metadata-1.000005.tar.gz', 'FILES' => q[cpan/Module-Metadata], - 'EXCLUDED' => [ ], + 'EXCLUDED' => [ qr{^maint}, qr{^xt} ], 'UPSTREAM' => 'cpan', }, diff --git a/cpan/Module-Metadata/lib/Module/Metadata.pm b/cpan/Module-Metadata/lib/Module/Metadata.pm index 9d602261d5..514dd1c16e 100644 --- a/cpan/Module-Metadata/lib/Module/Metadata.pm +++ b/cpan/Module-Metadata/lib/Module/Metadata.pm @@ -11,7 +11,7 @@ package Module::Metadata; use strict; use vars qw($VERSION); -$VERSION = '1.000004'; +$VERSION = '1.000005'; $VERSION = eval $VERSION; use File::Spec; @@ -69,6 +69,18 @@ sub new_from_file { return $class->_init(undef, $filename, @_); } +sub new_from_handle { + my $class = shift; + my $handle = shift; + my $filename = shift; + return undef unless defined($handle) && defined($filename); + $filename = File::Spec->rel2abs( $filename ); + + return $class->_init(undef, $filename, @_, handle => $handle); + +} + + sub new_from_module { my $class = shift; my $module = shift; @@ -183,7 +195,6 @@ sub new_from_module { if ( $package eq $prime_package ) { if ( exists( $prime{$package} ) ) { - # M::B::ModuleInfo will handle this conflict die "Unexpected conflict in '$package'; multiple versions found.\n"; } else { $prime{$package}{file} = $mapped_filename; @@ -282,6 +293,7 @@ sub _init { my $filename = shift; my %props = @_; + my $handle = delete $props{handle}; my( %valid_props, @valid_props ); @valid_props = qw( collect_pod inc ); @valid_props{@valid_props} = delete( @props{@valid_props} ); @@ -302,7 +314,12 @@ sub _init { my $self = bless(\%data, $class); - $self->_parse_file(); + if ( $handle ) { + $self->_parse_fh($handle); + } + else { + $self->_parse_file(); + } unless($self->{module} and length($self->{module})) { my ($v, $d, $f) = File::Spec->splitpath($self->{filename}); @@ -517,9 +534,9 @@ sub _evaluate_version_line { use version; no strict; - local $sigil$var; - \$$var=undef; \$vsub = sub { + local $sigil$var; + \$$var=undef; $line; \$$var }; @@ -648,60 +665,54 @@ sub pod { Module::Metadata - Gather package and POD information from perl module files -=head1 DESCRIPTION - -=over 4 +=head1 SYNOPSIS -=item new_from_file($filename, collect_pod => 1) + use Module::Metadata; -Construct a C object given the path to a file. Takes an optional -argument C which is a boolean that determines whether -POD data is collected and stored for reference. POD data is not -collected by default. POD headings are always collected. + # information about a .pm file + my $info = Module::Metadata->new_from_file( $file ); + my $version = $info->version; -=item new_from_module($module, collect_pod => 1, inc => \@dirs) + # information about a directory full of .pm files + my $provides = + Module::Metadata->package_versions_from_directory('lib'); -Construct a C object given a module or package name. In addition -to accepting the C argument as described above, this -method accepts a C argument which is a reference to an array of -of directories to search for the module. If none are given, the -default is @INC. - -=item name() - -Returns the name of the package represented by this module. If there -are more than one packages, it makes a best guess based on the -filename. If it's a script (i.e. not a *.pm) the package name is -'main'. - -=item version($package) - -Returns the version as defined by the $VERSION variable for the -package as returned by the C method if no arguments are -given. If given the name of a package it will attempt to return the -version of that package if it is specified in the file. +=head1 DESCRIPTION -=item filename() +This module provides a standard way to gather metadata about a .pm file +without executing unsafe code. -Returns the absolute path to the file. +=head1 USAGE -=item packages_inside() +=head2 Class methods -Returns a list of packages. +=over 4 -=item pod_inside() +=item C<< new_from_file($filename, collect_pod => 1) >> -Returns a list of POD sections. +Construct a C object given the path to a file. Takes an +optional argument C which is a boolean that determines whether POD +data is collected and stored for reference. POD data is not collected by +default. POD headings are always collected. Returns undef if the filename +does not exist. -=item contains_pod() +=item C<< new_from_handle($handle, $filename, collect_pod => 1) >> -Returns true if there is any POD in the file. +This works just like C, except that a handle can be provided +as the first argument. Note that there is no validation to confirm that the +handle is a handle or something that can act like one. Passing something that +isn't a handle will cause a exception when trying to read from it. The +C argument is mandatory or undef will be returned. -=item pod($section) +=item C<< new_from_module($module, collect_pod => 1, inc => \@dirs) >> -Returns the POD data in the given section. +Construct a C object given a module or package name. In addition +to accepting the C argument as described above, this +method accepts a C argument which is a reference to an array of +of directories to search for the module. If none are given, the +default is @INC. Returns undef if the module cannot be found. -=item find_module_by_name($module, \@dirs) +=item C<< find_module_by_name($module, \@dirs) >> Returns the path to a module given the module or package name. A list of directories can be passed in as an optional parameter, otherwise @@ -709,7 +720,7 @@ of directories can be passed in as an optional parameter, otherwise Can be called as either an object or a class method. -=item find_module_dir_by_name($module, \@dirs) +=item C<< find_module_dir_by_name($module, \@dirs) >> Returns the entry in C<@dirs> (or C<@INC> by default) that contains the module C<$module>. A list of directories can be passed in as an @@ -717,7 +728,7 @@ optional parameter, otherwise @INC is searched. Can be called as either an object or a class method. -=item package_versions_from_directory($dir, \@files?) +=item C<< package_versions_from_directory($dir, \@files?) >> Scans C<$dir> for .pm files (unless C<@files> is given, in which case looks for those files in C<$dir> - and reads each file for packages and versions, @@ -731,23 +742,66 @@ returning a hashref of the form: 'OtherPackage::Name' => ... } -=item log_info (internal) +=item C<< log_info (internal) >> Used internally to perform logging; imported from Log::Contextual if Log::Contextual has already been loaded, otherwise simply calls warn. =back +=head2 Object methods + +=over 4 + +=item C<< name() >> + +Returns the name of the package represented by this module. If there +are more than one packages, it makes a best guess based on the +filename. If it's a script (i.e. not a *.pm) the package name is +'main'. + +=item C<< version($package) >> + +Returns the version as defined by the $VERSION variable for the +package as returned by the C method if no arguments are +given. If given the name of a package it will attempt to return the +version of that package if it is specified in the file. + +=item C<< filename() >> + +Returns the absolute path to the file. + +=item C<< packages_inside() >> + +Returns a list of packages. + +=item C<< pod_inside() >> + +Returns a list of POD sections. + +=item C<< contains_pod() >> + +Returns true if there is any POD in the file. + +=item C<< pod($section) >> + +Returns the POD data in the given section. + +=back + =head1 AUTHOR -Ken Williams , Randy W. Sims +Original code from Module::Build::ModuleInfo by Ken Williams +, Randy W. Sims Released as Module::Metadata by Matt S Trout (mst) with -assistance from David Golden (xdg) +assistance from David Golden (xdg) . =head1 COPYRIGHT -Copyright (c) 2001-2011 Ken Williams. All rights reserved. +Original code Copyright (c) 2001-2011 Ken Williams. +Additional code Copyright (c) 2010-2011 Matt Trout and David Golden. +All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/cpan/Module-Metadata/t/lib/0.1/Foo.pm b/cpan/Module-Metadata/t/lib/0.1/Foo.pm new file mode 100644 index 0000000000..f1ecacac37 --- /dev/null +++ b/cpan/Module-Metadata/t/lib/0.1/Foo.pm @@ -0,0 +1,3 @@ +package Foo; +$Foo::VERSION = '0.1'; +1; diff --git a/cpan/Module-Metadata/t/lib/0.2/Foo.pm b/cpan/Module-Metadata/t/lib/0.2/Foo.pm new file mode 100644 index 0000000000..8f8ef06532 --- /dev/null +++ b/cpan/Module-Metadata/t/lib/0.2/Foo.pm @@ -0,0 +1,3 @@ +package Foo; +$Foo::VERSION = '0.2'; +1; diff --git a/cpan/Module-Metadata/t/metadata.t b/cpan/Module-Metadata/t/metadata.t index f3d08aaae7..60cb31651d 100644 --- a/cpan/Module-Metadata/t/metadata.t +++ b/cpan/Module-Metadata/t/metadata.t @@ -4,6 +4,7 @@ use strict; use lib 't/lib'; +use IO::File; use MBTest; # parse various module $VERSION lines @@ -173,7 +174,7 @@ our $VERSION = '1.23_00_00'; ); my %modules = reverse @modules; -plan tests => 37 + 2 * keys( %modules ); +plan tests => 39 + 2 * keys( %modules ); require_ok('Module::Metadata'); @@ -210,6 +211,14 @@ $file = File::Spec->catfile( 'lib', split( /::/, $dist->name ) ) . '.pm'; $pm_info = Module::Metadata->new_from_file( $file ); ok( defined( $pm_info ), 'new_from_file() succeeds' ); +# construct from filehandle +my $handle = IO::File->new($file); +$pm_info = Module::Metadata->new_from_handle( $handle, $file ); +ok( defined( $pm_info ), 'new_from_handle() succeeds' ); +$pm_info = Module::Metadata->new_from_handle( $handle ); +is( $pm_info, undef, "new_from_handle() without filename returns undef" ); + + # construct from module name, using custom include path $pm_info = Module::Metadata->new_from_module( $dist->name, inc => [ 'lib', @INC ] ); diff --git a/cpan/Module-Metadata/t/version.t b/cpan/Module-Metadata/t/version.t new file mode 100644 index 0000000000..4acc35812b --- /dev/null +++ b/cpan/Module-Metadata/t/version.t @@ -0,0 +1,22 @@ +use strict; +use Test::More; +use Module::Metadata; +use lib "t/lib/0.2"; + +plan tests => 4; + +require Foo; +is $Foo::VERSION, 0.2; + +my $meta = Module::Metadata->new_from_module("Foo", inc => [ "t/lib/0.1" ] ); +is $meta->version, 0.1; + +is $Foo::VERSION, 0.2; + +ok eval "use Foo 0.2; 1"; + + + + + + diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 6ab99d01ee..07f5dd31f8 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -147,6 +147,12 @@ L has been upgraded from version 0.18 to version 0.20 =item * +L has been upgraded from version 1.000004 to version 1.000005 + +Added C method. + +=item * + L has been upgraded from version 0.28 to version 0.30 =item * -- cgit v1.2.1 From 9cfd094e6d0a842551c1c58e998eb057cd8425e3 Mon Sep 17 00:00:00 2001 From: "H.Merijn Brand" Date: Thu, 4 Aug 2011 09:20:32 +0200 Subject: Support gcc-4.x on HP-UX PA-RISC/64 Correct the socketsize. Probably due to big-endian versus little-endian, this has always worked on Intel CPUs. This is a very very old problem, and it has been the reason I never used gcc-4 on PA-RISC, because perl would not pass the test suite in 64bitall. Noticeable effects of wrong "$socksizetype" are return codes of 0 (pass) from functions like getpeername (), but invalid (or none) data in the returned structures or a return length of 0 or 256. In the latter case, the length is stored in the second part of the 64bit long and the 32bit first part is 0. This might be true on Intel-like machines too, but the tests will pass, as the significant part of the returned length is in the first 32bits and a pointer to int will still see that correct. Mind that in that case the 32bits after that might have been overridden => can of worms. --- ext/Socket/t/getaddrinfo.t | 14 ++++++++++---- hints/hpux.sh | 10 ++++++++++ pod/perldelta.pod | 9 +++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/ext/Socket/t/getaddrinfo.t b/ext/Socket/t/getaddrinfo.t index 5c8d1539d7..b85af38254 100644 --- a/ext/Socket/t/getaddrinfo.t +++ b/ext/Socket/t/getaddrinfo.t @@ -1,6 +1,6 @@ use strict; use warnings; -use Test::More tests => 29; +use Test::More tests => 30; use Socket qw( AI_NUMERICHOST AF_INET SOCK_STREAM IPPROTO_TCP @@ -21,9 +21,15 @@ is( $res[0]->{socktype}, SOCK_STREAM, '$res[0] socktype is SOCK_STREAM' ); ok( $res[0]->{protocol} == 0 || $res[0]->{protocol} == IPPROTO_TCP, '$res[0] protocol is 0 or IPPROTO_TCP' ); -is_deeply( [ unpack_sockaddr_in $res[0]->{addr} ], - [ 80, inet_aton( "127.0.0.1" ) ], - '$res[0] addr is {"127.0.0.1", 80}' ); +ok( defined $res[0]->{addr}, + '$res[0] addr is defined' ); +if (length $res[0]->{addr}) { + is_deeply( [ unpack_sockaddr_in $res[0]->{addr} ], + [ 80, inet_aton( "127.0.0.1" ) ], + '$res[0] addr is {"127.0.0.1", 80}' ); +} else { + fail( '$res[0] addr is empty: check $socksizetype' ); +} # Check actual IV integers work just as well as PV strings ( $err, @res ) = getaddrinfo( "127.0.0.1", 80, { socktype => SOCK_STREAM } ); diff --git a/hints/hpux.sh b/hints/hpux.sh index cb1718478e..be6c1fddb8 100644 --- a/hints/hpux.sh +++ b/hints/hpux.sh @@ -263,6 +263,16 @@ EOM case "$ccisgcc" in $define|true|[Yy]) + # The fixed socket.h header file is wrong for gcc-4.x + # on PA-RISC2.0W, so Sock_type_t is size_t which is + # unsigned long which is 64bit which is too long + case "$gccversion" in + 4*) case "$archname" in + PA-RISC*) socksizetype=int ;; + esac + ;; + esac + # For the moment, don't care that it ain't supported (yet) # by gcc (up to and including 2.95.3), cause it'll crash # anyway. Expect auto-detection of 64-bit enabled gcc on diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 07f5dd31f8..0f83b03fef 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -339,6 +339,15 @@ XXX Any changes to platform support should be listed in the sections below. [ Within the sections, list each platform as a =item entry with specific changes as paragraphs below it. ] +=over 4 + +=item HP-UX PA-RISC/64 now supports gcc-4.x + +A fix to correct the socketsize now makes the test suite pass on HP-UX +PA-RISC for 64bitall builds. + +=back + =head2 New Platforms XXX List any platforms that this version of perl compiles on, that previous -- cgit v1.2.1 From e683222a962029adcd0d77766df95d2ce2db8f55 Mon Sep 17 00:00:00 2001 From: Niko Tyni Date: Thu, 4 Aug 2011 08:33:39 -0700 Subject: Skip the hanging eintr.t test on GNU/kFreeBSD too As we're still using a list of hanging operating systems, include 'gnukfreebsd' by matching for 'freebsd' anywhere in $^O. --- t/io/eintr.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/t/io/eintr.t b/t/io/eintr.t index e545228f97..966922bbe7 100644 --- a/t/io/eintr.t +++ b/t/io/eintr.t @@ -49,7 +49,7 @@ if (exists $ENV{PERLIO} && $ENV{PERLIO} =~ /stdio/ ) { # Also skip on release builds, to avoid other possibly problematic # platforms -if ($^O eq 'VMS' || $^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'freebsd' || +if ($^O eq 'VMS' || $^O eq 'MSWin32' || $^O eq 'cygwin' || $^O =~ /freebsd/ || ($^O eq 'solaris' && $Config{osvers} eq '2.8') || ((int($]*1000) & 1) == 0) ) { -- cgit v1.2.1 From e69061dc352aead76c31e0d932d915ea7ce26512 Mon Sep 17 00:00:00 2001 From: Steffen Mueller Date: Thu, 4 Aug 2011 17:52:18 +0200 Subject: Promote ExtUtils::ParseXS to a stable release --- Porting/Maintainers.pl | 2 +- dist/ExtUtils-ParseXS/Changes | 4 ++++ dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 639f1fd287..4bcc3ba4ac 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -752,7 +752,7 @@ use File::Glob qw(:case); 'ExtUtils::ParseXS' => { 'MAINTAINER' => 'smueller', - 'DISTRIBUTION' => 'SMUELLER/ExtUtils-ParseXS-3.00_05.tar.gz', + 'DISTRIBUTION' => 'SMUELLER/ExtUtils-ParseXS-3.01.tar.gz', 'FILES' => q[dist/ExtUtils-ParseXS], 'UPSTREAM' => 'blead', }, diff --git a/dist/ExtUtils-ParseXS/Changes b/dist/ExtUtils-ParseXS/Changes index e667a2aaf8..13d633bcd3 100644 --- a/dist/ExtUtils-ParseXS/Changes +++ b/dist/ExtUtils-ParseXS/Changes @@ -1,5 +1,9 @@ Revision history for Perl extension ExtUtils::ParseXS. +3.01 - Thu Aug 4 17:51:00 CET 2011 + + - No significant changes form 3.00_05. + 3.00_05 - Wed Jul 27 22:54:00 CET 2011 - Define PERL_UNUSED_ARG for pre-3.8.9 perls. diff --git a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm index 8a2658ff23..a26ce17de9 100644 --- a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm +++ b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm @@ -35,7 +35,7 @@ our @EXPORT_OK = qw( process_file report_error_count ); -our $VERSION = '3.00_05'; +our $VERSION = '3.01'; $VERSION = eval $VERSION if $VERSION =~ /_/; # The scalars in the line below remain as 'our' variables because pulling -- cgit v1.2.1 From 54d18cdceede591a29c5e0beebe4eec4a0baae42 Mon Sep 17 00:00:00 2001 From: Steffen Mueller Date: Thu, 4 Aug 2011 20:12:21 +0200 Subject: Another ExtUtils::ParseXS version upgrade necessary This is ExtUtils::ParseXS 3.02. Nothing to see here. --- Porting/Maintainers.pl | 2 +- dist/ExtUtils-ParseXS/Changes | 4 ++++ dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 4bcc3ba4ac..fd7c3cc0e4 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -752,7 +752,7 @@ use File::Glob qw(:case); 'ExtUtils::ParseXS' => { 'MAINTAINER' => 'smueller', - 'DISTRIBUTION' => 'SMUELLER/ExtUtils-ParseXS-3.01.tar.gz', + 'DISTRIBUTION' => 'SMUELLER/ExtUtils-ParseXS-3.02.tar.gz', 'FILES' => q[dist/ExtUtils-ParseXS], 'UPSTREAM' => 'blead', }, diff --git a/dist/ExtUtils-ParseXS/Changes b/dist/ExtUtils-ParseXS/Changes index 13d633bcd3..2c32803039 100644 --- a/dist/ExtUtils-ParseXS/Changes +++ b/dist/ExtUtils-ParseXS/Changes @@ -1,5 +1,9 @@ Revision history for Perl extension ExtUtils::ParseXS. +3.02 - Thu Aug 4 18:19:00 CET 2011 + + - Test fix: Use File::Spec->catfile instead of catdir where appropriate. + 3.01 - Thu Aug 4 17:51:00 CET 2011 - No significant changes form 3.00_05. diff --git a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm index a26ce17de9..bb39bf3286 100644 --- a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm +++ b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm @@ -35,7 +35,7 @@ our @EXPORT_OK = qw( process_file report_error_count ); -our $VERSION = '3.01'; +our $VERSION = '3.02'; $VERSION = eval $VERSION if $VERSION =~ /_/; # The scalars in the line below remain as 'our' variables because pulling -- cgit v1.2.1 From c9d1da359da6a3d527d7a64d9eed3f8ab441bb8b Mon Sep 17 00:00:00 2001 From: brian greenfield Date: Fri, 29 Jul 2011 13:55:10 +0100 Subject: Fix typos in pod/perlgit.pod --- pod/perlgit.pod | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pod/perlgit.pod b/pod/perlgit.pod index eef06dab6d..a316e7bf97 100644 --- a/pod/perlgit.pod +++ b/pod/perlgit.pod @@ -51,7 +51,7 @@ branches in the repository: The branches that begin with "origin" correspond to the "git remote" that you cloned from (which is named "origin"). Each branch on the -remote will be exactly tracked by theses branches. You should NEVER do +remote will be exactly tracked by these branches. You should NEVER do work on these remote tracking branches. You only ever do work in a local branch. Local branches can be configured to automerge (on pull) from a designated remote tracking branch. This is the case with the @@ -720,7 +720,7 @@ repository is "p5p"): $ git rebase p5p/blead You will see your commits being re-applied, and you will then be able to -push safetly. More information about rebasing can be found in the +push safely. More information about rebasing can be found in the documentation for the git-rebase(1) command. For larger sets of commits that only make sense together, or that would -- cgit v1.2.1 From 63f27fd71dd22aa00021eb1e4fde4faa55ec9524 Mon Sep 17 00:00:00 2001 From: "Craig A. Berry" Date: Fri, 5 Aug 2011 08:25:37 -0500 Subject: No dots in directory names, please. Dot is the directory delimiter on VMS, so it's awkward at best to use it in directory names. 4eb81ef279, "Update Module-Metadata to CPAN version 1.000005" introduced two new directories with dots in the name, which confused the manifest checker and broke the build on VMS. --- MANIFEST | 4 ++-- cpan/Module-Metadata/lib/Module/Metadata.pm | 2 +- cpan/Module-Metadata/t/lib/0.1/Foo.pm | 3 --- cpan/Module-Metadata/t/lib/0.2/Foo.pm | 3 --- cpan/Module-Metadata/t/lib/0_1/Foo.pm | 3 +++ cpan/Module-Metadata/t/lib/0_2/Foo.pm | 3 +++ cpan/Module-Metadata/t/version.t | 4 ++-- 7 files changed, 11 insertions(+), 11 deletions(-) delete mode 100644 cpan/Module-Metadata/t/lib/0.1/Foo.pm delete mode 100644 cpan/Module-Metadata/t/lib/0.2/Foo.pm create mode 100644 cpan/Module-Metadata/t/lib/0_1/Foo.pm create mode 100644 cpan/Module-Metadata/t/lib/0_2/Foo.pm diff --git a/MANIFEST b/MANIFEST index f33a68b118..6d1b3425ff 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1689,8 +1689,8 @@ cpan/Module-Load/t/to_load/Must/Be/Loaded.pm Module::Load tests cpan/Module-Load/t/to_load/TestModule.pm Module::Load tests cpan/Module-Load/t/to_load/ToBeLoaded Module::Load tests cpan/Module-Metadata/lib/Module/Metadata.pm -cpan/Module-Metadata/t/lib/0.1/Foo.pm -cpan/Module-Metadata/t/lib/0.2/Foo.pm +cpan/Module-Metadata/t/lib/0_1/Foo.pm +cpan/Module-Metadata/t/lib/0_2/Foo.pm cpan/Module-Metadata/t/lib/DistGen.pm cpan/Module-Metadata/t/lib/MBTest.pm cpan/Module-Metadata/t/lib/Tie/CPHash.pm diff --git a/cpan/Module-Metadata/lib/Module/Metadata.pm b/cpan/Module-Metadata/lib/Module/Metadata.pm index 514dd1c16e..41d8214ef5 100644 --- a/cpan/Module-Metadata/lib/Module/Metadata.pm +++ b/cpan/Module-Metadata/lib/Module/Metadata.pm @@ -11,7 +11,7 @@ package Module::Metadata; use strict; use vars qw($VERSION); -$VERSION = '1.000005'; +$VERSION = '1.000005_01'; $VERSION = eval $VERSION; use File::Spec; diff --git a/cpan/Module-Metadata/t/lib/0.1/Foo.pm b/cpan/Module-Metadata/t/lib/0.1/Foo.pm deleted file mode 100644 index f1ecacac37..0000000000 --- a/cpan/Module-Metadata/t/lib/0.1/Foo.pm +++ /dev/null @@ -1,3 +0,0 @@ -package Foo; -$Foo::VERSION = '0.1'; -1; diff --git a/cpan/Module-Metadata/t/lib/0.2/Foo.pm b/cpan/Module-Metadata/t/lib/0.2/Foo.pm deleted file mode 100644 index 8f8ef06532..0000000000 --- a/cpan/Module-Metadata/t/lib/0.2/Foo.pm +++ /dev/null @@ -1,3 +0,0 @@ -package Foo; -$Foo::VERSION = '0.2'; -1; diff --git a/cpan/Module-Metadata/t/lib/0_1/Foo.pm b/cpan/Module-Metadata/t/lib/0_1/Foo.pm new file mode 100644 index 0000000000..f1ecacac37 --- /dev/null +++ b/cpan/Module-Metadata/t/lib/0_1/Foo.pm @@ -0,0 +1,3 @@ +package Foo; +$Foo::VERSION = '0.1'; +1; diff --git a/cpan/Module-Metadata/t/lib/0_2/Foo.pm b/cpan/Module-Metadata/t/lib/0_2/Foo.pm new file mode 100644 index 0000000000..8f8ef06532 --- /dev/null +++ b/cpan/Module-Metadata/t/lib/0_2/Foo.pm @@ -0,0 +1,3 @@ +package Foo; +$Foo::VERSION = '0.2'; +1; diff --git a/cpan/Module-Metadata/t/version.t b/cpan/Module-Metadata/t/version.t index 4acc35812b..061a063177 100644 --- a/cpan/Module-Metadata/t/version.t +++ b/cpan/Module-Metadata/t/version.t @@ -1,14 +1,14 @@ use strict; use Test::More; use Module::Metadata; -use lib "t/lib/0.2"; +use lib "t/lib/0_2"; plan tests => 4; require Foo; is $Foo::VERSION, 0.2; -my $meta = Module::Metadata->new_from_module("Foo", inc => [ "t/lib/0.1" ] ); +my $meta = Module::Metadata->new_from_module("Foo", inc => [ "t/lib/0_1" ] ); is $meta->version, 0.1; is $Foo::VERSION, 0.2; -- cgit v1.2.1 From 4403bf9319536d279482d2ef5847bccf1f7ed57e Mon Sep 17 00:00:00 2001 From: "Craig A. Berry" Date: Fri, 5 Aug 2011 09:01:39 -0500 Subject: Don't install perldoc.com twice. It gets built and installed in [.utils], so there's no reason to copy it into [.lib.pods], from whence it gets installed a second time. Putting it in [.lib.pods] was introduced way back in 97abc6adff, well before installperl was even working on VMS. --- vms/descrip_mms.template | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template index a3706f6719..876baa0232 100644 --- a/vms/descrip_mms.template +++ b/vms/descrip_mms.template @@ -355,7 +355,7 @@ unidatadirs = lib/unicore/To lib/unicore/lib # Modules which must be installed before we can build extensions LIBPREREQ = $(ARCHDIR)Config.pm $(ARCHDIR)Config_heavy.pl [.lib.VMS]Filespec.pm $(ARCHDIR)vmspipe.com [.lib]buildcustomize.pl -utils1 = [.lib.pods]perldoc.com [.lib.ExtUtils]Miniperl.pm [.utils]c2ph.com [.utils]h2ph.com +utils1 = [.utils]perldoc.com [.lib.ExtUtils]Miniperl.pm [.utils]c2ph.com [.utils]h2ph.com utils2 = [.utils]h2xs.com [.utils]libnetcfg.com [.lib]perlbug.com [.utils]json_pp.com utils3 = [.utils]perlivp.com [.lib]splain.com [.utils]pl2pm.com [.utils]xsubpp.com [.utils]instmodsh.com utils4 = [.utils]enc2xs.com [.utils]piconv.com [.utils]cpan.com [.utils]prove.com [.utils]ptar.com [.utils]ptardiff.com [.utils]shasum.com @@ -558,10 +558,8 @@ nonxsext : $(LIBPREREQ) preplibrary $(MINIPERL_EXE) @ If F$Search("[.lib]VMS.Dir").eqs."" Then Create/Directory [.lib.VMS] Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.VMS] -[.lib.pods]perldoc.com : [.utils]perldoc.PL $(ARCHDIR)Config.pm - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] +[.utils]perldoc.com : [.utils]perldoc.PL $(ARCHDIR)Config.pm $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE) - Copy/NoConfirm/Log [.utils]perldoc.com [.lib.pods] [.lib.ExtUtils]Miniperl.pm : Minimod.PL miniperlmain.c $(ARCHDIR)Config.pm $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE) >$(MMS$TARGET) @@ -1919,7 +1917,7 @@ realclean : clean - If F$Search("$(ARCHDIR)Config_heavy.pl").nes."" Then Delete/NoConfirm/Log $(ARCHDIR)Config_heavy.pl;* - If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Delete/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm;* - If F$Search("[.lib.pods]*.pod").nes."" Then Delete/NoConfirm/Log [.lib.pods]*.pod;* - - If F$Search("[.lib.pods]perldoc.com").nes."" Then Delete/NoConfirm/Log [.lib.pods]perldoc.com;* + - If F$Search("[.utils]perldoc.com").nes."" Then Delete/NoConfirm/Log [.utils]perldoc.com;* - If F$Search("[.utils]perlivp.com").nes."" Then Delete/NoConfirm/Log [.utils]perlivp.com;* - If F$Search("[.lib.pods]pod2*.com").nes."" Then Delete/NoConfirm/Log [.lib.pods]pod2*.com;* - If F$Search("[.t.lib]vms*.t").nes."" Then Delete/NoConfirm/Log [.t.lib]vms*.t;* -- cgit v1.2.1 From 203979cd3f6e5fc2c4039fbd225bbbc4c1bb8f84 Mon Sep 17 00:00:00 2001 From: "Craig A. Berry" Date: Fri, 5 Aug 2011 09:12:25 -0500 Subject: Don't use [.lib.pods] staging directory in VMS builds. It's arduous to maintain all the dependency rules, and since 7eb47696de, which removed the only reference to $(pod), we don't even *run* any of those rules, i.e., the directory does not even get populated during the build. Its existence appears to be a carryover from a time before installperl copied [.pods] in the build directory to [.lib.pods] in the install directory. Reducing the size of vms/descrip_mms.template by 44% probably won't cause too many tears to be shed, either. --- pod/buildtoc | 35 --- vms/descrip_mms.template | 777 ----------------------------------------------- 2 files changed, 812 deletions(-) diff --git a/pod/buildtoc b/pod/buildtoc index b0968f1f82..68f75b3e24 100644 --- a/pod/buildtoc +++ b/pod/buildtoc @@ -586,24 +586,6 @@ sub generate_roffitall { ) } -sub generate_descrip_mms_1 { - local $Text::Wrap::columns = 150; - my $count = 0; - my @lines = map {"pod" . $count++ . " = $_"} - split /\n/, wrap('', '', join " ", map "[.lib.pods]$_.pod", - sort grep { $_ !~ m{/} } keys %Pods, keys %Readmepods); - @lines, "pod = " . join ' ', map {"\$(pod$_)"} 0 .. $count - 1; -} - -sub generate_descrip_mms_2 { - map {<<"SNIP"} -[.lib.pods]$_.pod : [.pod]$_.pod - \@ If F\$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log \$(MMS\$SOURCE) [.lib.pods] -SNIP - sort grep { $_ !~ m{/} } keys %Pods, keys %Readmepods; -} - sub generate_nmake_1 { # XXX Fix this with File::Spec (map {sprintf "\tcopy ..\\README.%-8s ..\\pod\\perl$_.pod\n", $_} @@ -698,11 +680,6 @@ sub do_podmak { sub do_vms { my ($name, $makefile) = @_; - $makefile =~ s/\npod\d* =[^\n]*/\0/gs; - verify_contiguous($name, $makefile, 'pod assignments'); - $makefile =~ s/\0+/join "\n", '', &generate_descrip_mms_1/se; - - my_die "$name contains NUL bytes" if $makefile =~ /\0/; # Looking for the macro defining the current perldelta: #PERLDELTA_CURRENT = [.pod]perl5139delta.pod @@ -712,18 +689,6 @@ sub do_vms { verify_contiguous($name, $makefile, 'current perldelta macro'); $makefile =~ s/\0+/join "\n", '', "PERLDELTA_CURRENT = [.pod]$delta_target", ''/se; -# Looking for rules like this -# [.lib.pods]perl.pod : [.pod]perl.pod -# @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] -# Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - - $makefile =~ s/\n\Q[.lib.pods]\Eperl[^\n\.]*\.pod[^\n]+\n - [^\n]+\n # Another line - [^\n]+\Q[.lib.pods]\E\n # ends [.lib.pods] - /\0/gsx; - verify_contiguous($name, $makefile, 'copy rules'); - $makefile =~ s/\0+/join "\n", '', &generate_descrip_mms_2/se; - $makefile; } diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template index 876baa0232..57e7439d45 100644 --- a/vms/descrip_mms.template +++ b/vms/descrip_mms.template @@ -391,43 +391,6 @@ x2p : [.x2p]$(DBG)a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com extra.pods : miniperl @ @extra_pods.com -pod0 = [.lib.pods]perl.pod [.lib.pods]perl5004delta.pod [.lib.pods]perl5005delta.pod [.lib.pods]perl5100delta.pod [.lib.pods]perl5101delta.pod -pod1 = [.lib.pods]perl5110delta.pod [.lib.pods]perl5111delta.pod [.lib.pods]perl5112delta.pod [.lib.pods]perl5113delta.pod [.lib.pods]perl5114delta.pod -pod2 = [.lib.pods]perl5115delta.pod [.lib.pods]perl5120delta.pod [.lib.pods]perl5121delta.pod [.lib.pods]perl5122delta.pod [.lib.pods]perl5123delta.pod -pod3 = [.lib.pods]perl5124delta.pod [.lib.pods]perl5130delta.pod [.lib.pods]perl51310delta.pod [.lib.pods]perl51311delta.pod [.lib.pods]perl5131delta.pod -pod4 = [.lib.pods]perl5132delta.pod [.lib.pods]perl5133delta.pod [.lib.pods]perl5134delta.pod [.lib.pods]perl5135delta.pod [.lib.pods]perl5136delta.pod -pod5 = [.lib.pods]perl5137delta.pod [.lib.pods]perl5138delta.pod [.lib.pods]perl5139delta.pod [.lib.pods]perl5140delta.pod [.lib.pods]perl5141delta.pod -pod6 = [.lib.pods]perl5150delta.pod [.lib.pods]perl5151delta.pod [.lib.pods]perl5152delta.pod [.lib.pods]perl561delta.pod [.lib.pods]perl56delta.pod -pod7 = [.lib.pods]perl570delta.pod [.lib.pods]perl571delta.pod [.lib.pods]perl572delta.pod [.lib.pods]perl573delta.pod [.lib.pods]perl581delta.pod -pod8 = [.lib.pods]perl582delta.pod [.lib.pods]perl583delta.pod [.lib.pods]perl584delta.pod [.lib.pods]perl585delta.pod [.lib.pods]perl586delta.pod -pod9 = [.lib.pods]perl587delta.pod [.lib.pods]perl588delta.pod [.lib.pods]perl589delta.pod [.lib.pods]perl58delta.pod [.lib.pods]perl590delta.pod -pod10 = [.lib.pods]perl591delta.pod [.lib.pods]perl592delta.pod [.lib.pods]perl593delta.pod [.lib.pods]perl594delta.pod [.lib.pods]perl595delta.pod -pod11 = [.lib.pods]perlaix.pod [.lib.pods]perlamiga.pod [.lib.pods]perlapi.pod [.lib.pods]perlapio.pod [.lib.pods]perlartistic.pod [.lib.pods]perlbeos.pod -pod12 = [.lib.pods]perlbook.pod [.lib.pods]perlboot.pod [.lib.pods]perlbot.pod [.lib.pods]perlbs2000.pod [.lib.pods]perlcall.pod [.lib.pods]perlce.pod -pod13 = [.lib.pods]perlcheat.pod [.lib.pods]perlclib.pod [.lib.pods]perlcn.pod [.lib.pods]perlcommunity.pod [.lib.pods]perlcompile.pod -pod14 = [.lib.pods]perlcygwin.pod [.lib.pods]perldata.pod [.lib.pods]perldbmfilter.pod [.lib.pods]perldebguts.pod [.lib.pods]perldebtut.pod -pod15 = [.lib.pods]perldebug.pod [.lib.pods]perldelta.pod [.lib.pods]perldgux.pod [.lib.pods]perldiag.pod [.lib.pods]perldos.pod [.lib.pods]perldsc.pod -pod16 = [.lib.pods]perldtrace.pod [.lib.pods]perlebcdic.pod [.lib.pods]perlembed.pod [.lib.pods]perlepoc.pod [.lib.pods]perlexperiment.pod -pod17 = [.lib.pods]perlfilter.pod [.lib.pods]perlfork.pod [.lib.pods]perlform.pod [.lib.pods]perlfreebsd.pod [.lib.pods]perlfunc.pod [.lib.pods]perlgit.pod -pod18 = [.lib.pods]perlglossary.pod [.lib.pods]perlgpl.pod [.lib.pods]perlguts.pod [.lib.pods]perlhack.pod [.lib.pods]perlhacktips.pod -pod19 = [.lib.pods]perlhacktut.pod [.lib.pods]perlhaiku.pod [.lib.pods]perlhist.pod [.lib.pods]perlhpux.pod [.lib.pods]perlhurd.pod [.lib.pods]perlintern.pod -pod20 = [.lib.pods]perlinterp.pod [.lib.pods]perlintro.pod [.lib.pods]perliol.pod [.lib.pods]perlipc.pod [.lib.pods]perlirix.pod [.lib.pods]perljp.pod -pod21 = [.lib.pods]perlko.pod [.lib.pods]perllexwarn.pod [.lib.pods]perllinux.pod [.lib.pods]perllocale.pod [.lib.pods]perllol.pod [.lib.pods]perlmacos.pod -pod22 = [.lib.pods]perlmacosx.pod [.lib.pods]perlmod.pod [.lib.pods]perlmodinstall.pod [.lib.pods]perlmodlib.pod [.lib.pods]perlmodstyle.pod -pod23 = [.lib.pods]perlmpeix.pod [.lib.pods]perlmroapi.pod [.lib.pods]perlnetware.pod [.lib.pods]perlnewmod.pod [.lib.pods]perlnumber.pod -pod24 = [.lib.pods]perlobj.pod [.lib.pods]perlop.pod [.lib.pods]perlopenbsd.pod [.lib.pods]perlopentut.pod [.lib.pods]perlos2.pod [.lib.pods]perlos390.pod -pod25 = [.lib.pods]perlos400.pod [.lib.pods]perlpacktut.pod [.lib.pods]perlperf.pod [.lib.pods]perlplan9.pod [.lib.pods]perlpod.pod -pod26 = [.lib.pods]perlpodspec.pod [.lib.pods]perlpodstyle.pod [.lib.pods]perlpolicy.pod [.lib.pods]perlport.pod [.lib.pods]perlpragma.pod -pod27 = [.lib.pods]perlqnx.pod [.lib.pods]perlre.pod [.lib.pods]perlreapi.pod [.lib.pods]perlrebackslash.pod [.lib.pods]perlrecharclass.pod -pod28 = [.lib.pods]perlref.pod [.lib.pods]perlreftut.pod [.lib.pods]perlreguts.pod [.lib.pods]perlrequick.pod [.lib.pods]perlreref.pod -pod29 = [.lib.pods]perlretut.pod [.lib.pods]perlriscos.pod [.lib.pods]perlrun.pod [.lib.pods]perlsec.pod [.lib.pods]perlsolaris.pod [.lib.pods]perlsource.pod -pod30 = [.lib.pods]perlstyle.pod [.lib.pods]perlsub.pod [.lib.pods]perlsymbian.pod [.lib.pods]perlsyn.pod [.lib.pods]perlthrtut.pod [.lib.pods]perltie.pod -pod31 = [.lib.pods]perltoc.pod [.lib.pods]perltodo.pod [.lib.pods]perltooc.pod [.lib.pods]perltoot.pod [.lib.pods]perltrap.pod [.lib.pods]perltru64.pod -pod32 = [.lib.pods]perltw.pod [.lib.pods]perlunicode.pod [.lib.pods]perlunifaq.pod [.lib.pods]perluniintro.pod [.lib.pods]perluniprops.pod -pod33 = [.lib.pods]perlunitut.pod [.lib.pods]perlutil.pod [.lib.pods]perluts.pod [.lib.pods]perlvar.pod [.lib.pods]perlvmesa.pod [.lib.pods]perlvms.pod -pod34 = [.lib.pods]perlvos.pod [.lib.pods]perlwin32.pod -pod = $(pod0) $(pod1) $(pod2) $(pod3) $(pod4) $(pod5) $(pod6) $(pod7) $(pod8) $(pod9) $(pod10) $(pod11) $(pod12) $(pod13) $(pod14) $(pod15) $(pod16) $(pod17) $(pod18) $(pod19) $(pod20) $(pod21) $(pod22) $(pod23) $(pod24) $(pod25) $(pod26) $(pod27) $(pod28) $(pod29) $(pod30) $(pod31) $(pod32) $(pod33) $(pod34) - PERLDELTA_CURRENT = [.pod]perl5152delta.pod $(PERLDELTA_CURRENT) : [.pod]perldelta.pod @@ -679,742 +642,6 @@ preplibrary : $(MINIPERL_EXE) $(LIBPREREQ) makeppport : $(MINIPERL_EXE) $(ARCHDIR)Config.pm nonxsext $(MINIPERL) mkppport -[.lib.pods]perl.pod : [.pod]perl.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5004delta.pod : [.pod]perl5004delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5005delta.pod : [.pod]perl5005delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5100delta.pod : [.pod]perl5100delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5101delta.pod : [.pod]perl5101delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5110delta.pod : [.pod]perl5110delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5111delta.pod : [.pod]perl5111delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5112delta.pod : [.pod]perl5112delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5113delta.pod : [.pod]perl5113delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5114delta.pod : [.pod]perl5114delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5115delta.pod : [.pod]perl5115delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5120delta.pod : [.pod]perl5120delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5121delta.pod : [.pod]perl5121delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5122delta.pod : [.pod]perl5122delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5123delta.pod : [.pod]perl5123delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5124delta.pod : [.pod]perl5124delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5130delta.pod : [.pod]perl5130delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl51310delta.pod : [.pod]perl51310delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl51311delta.pod : [.pod]perl51311delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5131delta.pod : [.pod]perl5131delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5132delta.pod : [.pod]perl5132delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5133delta.pod : [.pod]perl5133delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5134delta.pod : [.pod]perl5134delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5135delta.pod : [.pod]perl5135delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5136delta.pod : [.pod]perl5136delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5137delta.pod : [.pod]perl5137delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5138delta.pod : [.pod]perl5138delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5139delta.pod : [.pod]perl5139delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5140delta.pod : [.pod]perl5140delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5141delta.pod : [.pod]perl5141delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5150delta.pod : [.pod]perl5150delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5151delta.pod : [.pod]perl5151delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl5152delta.pod : [.pod]perl5152delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl561delta.pod : [.pod]perl561delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl56delta.pod : [.pod]perl56delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl570delta.pod : [.pod]perl570delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl571delta.pod : [.pod]perl571delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl572delta.pod : [.pod]perl572delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl573delta.pod : [.pod]perl573delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl581delta.pod : [.pod]perl581delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl582delta.pod : [.pod]perl582delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl583delta.pod : [.pod]perl583delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl584delta.pod : [.pod]perl584delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl585delta.pod : [.pod]perl585delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl586delta.pod : [.pod]perl586delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl587delta.pod : [.pod]perl587delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl588delta.pod : [.pod]perl588delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl589delta.pod : [.pod]perl589delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl58delta.pod : [.pod]perl58delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl590delta.pod : [.pod]perl590delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl591delta.pod : [.pod]perl591delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl592delta.pod : [.pod]perl592delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl593delta.pod : [.pod]perl593delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl594delta.pod : [.pod]perl594delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perl595delta.pod : [.pod]perl595delta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlaix.pod : [.pod]perlaix.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlamiga.pod : [.pod]perlamiga.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlapi.pod : [.pod]perlapi.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlapio.pod : [.pod]perlapio.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlartistic.pod : [.pod]perlartistic.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlbeos.pod : [.pod]perlbeos.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlbook.pod : [.pod]perlbook.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlboot.pod : [.pod]perlboot.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlbot.pod : [.pod]perlbot.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlbs2000.pod : [.pod]perlbs2000.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlcall.pod : [.pod]perlcall.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlce.pod : [.pod]perlce.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlcheat.pod : [.pod]perlcheat.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlclib.pod : [.pod]perlclib.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlcn.pod : [.pod]perlcn.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlcommunity.pod : [.pod]perlcommunity.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlcompile.pod : [.pod]perlcompile.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlcygwin.pod : [.pod]perlcygwin.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perldata.pod : [.pod]perldata.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perldbmfilter.pod : [.pod]perldbmfilter.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perldebguts.pod : [.pod]perldebguts.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perldebtut.pod : [.pod]perldebtut.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perldebug.pod : [.pod]perldebug.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perldelta.pod : [.pod]perldelta.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perldgux.pod : [.pod]perldgux.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perldiag.pod : [.pod]perldiag.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perldos.pod : [.pod]perldos.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perldsc.pod : [.pod]perldsc.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perldtrace.pod : [.pod]perldtrace.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlebcdic.pod : [.pod]perlebcdic.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlembed.pod : [.pod]perlembed.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlepoc.pod : [.pod]perlepoc.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlexperiment.pod : [.pod]perlexperiment.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlfilter.pod : [.pod]perlfilter.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlfork.pod : [.pod]perlfork.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlform.pod : [.pod]perlform.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlfreebsd.pod : [.pod]perlfreebsd.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlfunc.pod : [.pod]perlfunc.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlgit.pod : [.pod]perlgit.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlglossary.pod : [.pod]perlglossary.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlgpl.pod : [.pod]perlgpl.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlguts.pod : [.pod]perlguts.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlhack.pod : [.pod]perlhack.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlhacktips.pod : [.pod]perlhacktips.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlhacktut.pod : [.pod]perlhacktut.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlhaiku.pod : [.pod]perlhaiku.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlhist.pod : [.pod]perlhist.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlhpux.pod : [.pod]perlhpux.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlhurd.pod : [.pod]perlhurd.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlintern.pod : [.pod]perlintern.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlinterp.pod : [.pod]perlinterp.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlintro.pod : [.pod]perlintro.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perliol.pod : [.pod]perliol.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlipc.pod : [.pod]perlipc.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlirix.pod : [.pod]perlirix.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perljp.pod : [.pod]perljp.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlko.pod : [.pod]perlko.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perllexwarn.pod : [.pod]perllexwarn.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perllinux.pod : [.pod]perllinux.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perllocale.pod : [.pod]perllocale.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perllol.pod : [.pod]perllol.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlmacos.pod : [.pod]perlmacos.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlmacosx.pod : [.pod]perlmacosx.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlmod.pod : [.pod]perlmod.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlmodinstall.pod : [.pod]perlmodinstall.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlmodlib.pod : [.pod]perlmodlib.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlmodstyle.pod : [.pod]perlmodstyle.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlmpeix.pod : [.pod]perlmpeix.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlmroapi.pod : [.pod]perlmroapi.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlnetware.pod : [.pod]perlnetware.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlnewmod.pod : [.pod]perlnewmod.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlnumber.pod : [.pod]perlnumber.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlobj.pod : [.pod]perlobj.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlop.pod : [.pod]perlop.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlopenbsd.pod : [.pod]perlopenbsd.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlopentut.pod : [.pod]perlopentut.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlos2.pod : [.pod]perlos2.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlos390.pod : [.pod]perlos390.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlos400.pod : [.pod]perlos400.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlpacktut.pod : [.pod]perlpacktut.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlperf.pod : [.pod]perlperf.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlplan9.pod : [.pod]perlplan9.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlpod.pod : [.pod]perlpod.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlpodspec.pod : [.pod]perlpodspec.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlpodstyle.pod : [.pod]perlpodstyle.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlpolicy.pod : [.pod]perlpolicy.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlport.pod : [.pod]perlport.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlpragma.pod : [.pod]perlpragma.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlqnx.pod : [.pod]perlqnx.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlre.pod : [.pod]perlre.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlreapi.pod : [.pod]perlreapi.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlrebackslash.pod : [.pod]perlrebackslash.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlrecharclass.pod : [.pod]perlrecharclass.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlref.pod : [.pod]perlref.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlreftut.pod : [.pod]perlreftut.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlreguts.pod : [.pod]perlreguts.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlrequick.pod : [.pod]perlrequick.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlreref.pod : [.pod]perlreref.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlretut.pod : [.pod]perlretut.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlriscos.pod : [.pod]perlriscos.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlrun.pod : [.pod]perlrun.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlsec.pod : [.pod]perlsec.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlsolaris.pod : [.pod]perlsolaris.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlsource.pod : [.pod]perlsource.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlstyle.pod : [.pod]perlstyle.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlsub.pod : [.pod]perlsub.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlsymbian.pod : [.pod]perlsymbian.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlsyn.pod : [.pod]perlsyn.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlthrtut.pod : [.pod]perlthrtut.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perltie.pod : [.pod]perltie.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perltoc.pod : [.pod]perltoc.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perltodo.pod : [.pod]perltodo.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perltooc.pod : [.pod]perltooc.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perltoot.pod : [.pod]perltoot.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perltrap.pod : [.pod]perltrap.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perltru64.pod : [.pod]perltru64.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perltw.pod : [.pod]perltw.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlunicode.pod : [.pod]perlunicode.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlunifaq.pod : [.pod]perlunifaq.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perluniintro.pod : [.pod]perluniintro.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perluniprops.pod : [.pod]perluniprops.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlunitut.pod : [.pod]perlunitut.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlutil.pod : [.pod]perlutil.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perluts.pod : [.pod]perluts.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlvar.pod : [.pod]perlvar.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlvmesa.pod : [.pod]perlvmesa.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlvms.pod : [.pod]perlvms.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlvos.pod : [.pod]perlvos.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - -[.lib.pods]perlwin32.pod : [.pod]perlwin32.pod - @ If F$Search("[.lib]pods.dir").eqs."" Then Create/Directory [.lib.pods] - Copy/NoConfirm/Log $(MMS$SOURCE) [.lib.pods] - install.html : [.pod]perltoc.pod @ @perl_setup.com @ If F$Search("perl_root:[lib]html.dir").eqs."" Then Create/Directory perl_root:[lib.html] @@ -1852,13 +1079,11 @@ tidy : cleanlis - If F$Search("$(ARCHDIR)Config_heavy.pl;-1").nes."" Then Purge/NoConfirm/Log $(ARCHDIR)Config_heavy.pl - If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Purge/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm - If F$Search("[.lib.VMS]*.*;-1").nes."" Then Purge/NoConfirm/Log [.lib.VMS]*.* - - If F$Search("[.lib.pods]*.Pod;-1").nes."" Then Purge/NoConfirm/Log [.lib.pods]*.Pod - If F$Search("$(ARCHCORE)*.*").nes."" Then Purge/NoConfirm/Log $(ARCHCORE)*.* - If F$Search("[.lib]*.com;-1").nes."" Then Purge/NoConfirm/Log [.lib]*.com - If F$Search("[.pod]*.com;-1").nes."" Then Purge/NoConfirm/Log [.pod]*.com - If F$Search("[.utils]*.com;-1").nes."" Then Purge/NoConfirm/Log [.utils]*.com - If F$Search("[.x2p]*.com;-1").nes."" Then Purge/NoConfirm/Log [.x2p]*.com - - If F$Search("[.lib.pods]*.com;-1").nes."" Then Purge/NoConfirm/Log [.lib.pods]*.com - If F$Search("[.lib]buildcustomize.pl;-1").nes."" Then Purge/NoConfirm/Log [.lib]buildcustomize.pl clean : tidy cleantest @@ -1916,10 +1141,8 @@ realclean : clean - If F$Search("$(ARCHDIR)Config.pm").nes."" Then Delete/NoConfirm/Log $(ARCHDIR)Config.pm;* - If F$Search("$(ARCHDIR)Config_heavy.pl").nes."" Then Delete/NoConfirm/Log $(ARCHDIR)Config_heavy.pl;* - If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Delete/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm;* - - If F$Search("[.lib.pods]*.pod").nes."" Then Delete/NoConfirm/Log [.lib.pods]*.pod;* - If F$Search("[.utils]perldoc.com").nes."" Then Delete/NoConfirm/Log [.utils]perldoc.com;* - If F$Search("[.utils]perlivp.com").nes."" Then Delete/NoConfirm/Log [.utils]perlivp.com;* - - If F$Search("[.lib.pods]pod2*.com").nes."" Then Delete/NoConfirm/Log [.lib.pods]pod2*.com;* - If F$Search("[.t.lib]vms*.t").nes."" Then Delete/NoConfirm/Log [.t.lib]vms*.t;* - If F$Search("[...]*$(E)").nes."" Then Delete/NoConfirm/Log [...]*$(E);* - If F$Search("Perl_Setup.Com").nes."" Then Delete/NoConfirm/Log Perl_Setup.Com;* -- cgit v1.2.1 From 1380b51d3b2bb6a067c4a2a3eebbe18650487023 Mon Sep 17 00:00:00 2001 From: David Mitchell Date: Fri, 5 Aug 2011 17:46:46 +0100 Subject: RT #96354: \h \H \v and \V didn't check for EOL The HORIZWS and similar regexp ops didn't check that the end of the string had been reached; therefore they would blithely compare against the \0 at the end of the string, or beyond. --- regexec.c | 4 ++++ t/re/re_tests | 10 +++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/regexec.c b/regexec.c index 76c91af1f7..bdd5e3faed 100644 --- a/regexec.c +++ b/regexec.c @@ -5683,6 +5683,8 @@ NULL #define CASE_CLASS(nAmE) \ case nAmE: \ + if (locinput >= PL_regeol) \ + sayNO; \ if ((n=is_##nAmE(locinput,utf8_target))) { \ locinput += n; \ nextchr = UCHARAT(locinput); \ @@ -5690,6 +5692,8 @@ NULL sayNO; \ break; \ case N##nAmE: \ + if (locinput >= PL_regeol) \ + sayNO; \ if ((n=is_##nAmE(locinput,utf8_target))) { \ sayNO; \ } else { \ diff --git a/t/re/re_tests b/t/re/re_tests index 35a72203cd..978e02c1dd 100644 --- a/t/re/re_tests +++ b/t/re/re_tests @@ -1,7 +1,10 @@ # This stops me getting screenfulls of syntax errors every time I accidentally -# run this file via a shell glob. Format of this file is given in regexp.t +# run this file via a shell glob. The full format of this file is given +# in regexp.t # Can't use \N{VALID NAME TEST} here because need 'use charnames'; but can use # \N{U+valid} here. +# +# pat string y/n/etc expr expected-expr skip-reason __END__ abc abc y $& abc abc abc y $-[0] 0 @@ -1522,4 +1525,9 @@ abc\N{def - c - \\N{NAME} must be resolved by the lexer # See [perl #89750]. This makes sure that the simple fold gets generated # in that case, to DF. /[^\x{1E9E}]/i \x{DF} n - - + +# RT #96354 +/^.*\d\H/ X1 n - - +/^.*\d\V/ X1 n - - + # vim: softtabstop=0 noexpandtab -- cgit v1.2.1 From 9840cdeec87c1cfcbe49098423c52d12404f785c Mon Sep 17 00:00:00 2001 From: Chris 'BinGOs' Williams Date: Fri, 5 Aug 2011 18:38:51 +0100 Subject: Update ExtUtils-MakeMaker to CPAN version 6.59 [DELTA] 6.59 Fri Aug 5 12:09:00 BST No changes since 6.58_01 6.58_01 Wed Aug 3 21:12:00 BST Doc Fixes * Corrected the repository location [chorny] Bug Fixes * Removed the %INC check from _has_cpan_meta and updated the CPAN::Meta bundled with EUMM to one that doesn't set $VERSION in a begin block so it can't appear to be loaded, thus causing us to mistakenly try and call methods on CPAN::Meta modules - this is due to older versions in site_perl shadowing our installation of other bundled modules. [rt.cpan.org 69465] [rt.cpan.org 69900] [MSTROUT] --- Porting/Maintainers.pl | 2 +- cpan/ExtUtils-MakeMaker/Changes | 15 +++++++++++++++ cpan/ExtUtils-MakeMaker/MANIFEST | 1 - cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm | 13 +++++++++---- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm | 4 ++-- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm | 2 +- cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm | 2 +- pod/perldelta.pod | 4 ++++ 30 files changed, 55 insertions(+), 32 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index fd7c3cc0e4..94d9281360 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -731,7 +731,7 @@ use File::Glob qw(:case); 'ExtUtils::MakeMaker' => { 'MAINTAINER' => 'mschwern', - 'DISTRIBUTION' => 'MSCHWERN/ExtUtils-MakeMaker-6.58.tar.gz', + 'DISTRIBUTION' => 'MSTROUT/ExtUtils-MakeMaker-6.59.tar.gz', 'FILES' => q[cpan/ExtUtils-MakeMaker], 'EXCLUDED' => [ qr{^t/lib/Test/}, qr{^(bundled|my)/}, diff --git a/cpan/ExtUtils-MakeMaker/Changes b/cpan/ExtUtils-MakeMaker/Changes index e549e9c8f0..393891089a 100644 --- a/cpan/ExtUtils-MakeMaker/Changes +++ b/cpan/ExtUtils-MakeMaker/Changes @@ -1,3 +1,18 @@ +6.59 Fri Aug 5 12:09:00 BST + No changes since 6.58_01 + +6.58_01 Wed Aug 3 21:12:00 BST + Doc Fixes + * Corrected the repository location [chorny] + + Bug Fixes + * Removed the %INC check from _has_cpan_meta and updated the CPAN::Meta + bundled with EUMM to one that doesn't set $VERSION in a begin block + so it can't appear to be loaded, thus causing us to mistakenly try + and call methods on CPAN::Meta modules - this is due to older versions + in site_perl shadowing our installation of other bundled modules. + [rt.cpan.org 69465] [rt.cpan.org 69900] [MSTROUT] + 6.58 Wed Jul 6 14:17:06 PDT 2011 No changes since 6.57_11 diff --git a/cpan/ExtUtils-MakeMaker/MANIFEST b/cpan/ExtUtils-MakeMaker/MANIFEST index 0f31fec0eb..ef9ec12dd1 100644 --- a/cpan/ExtUtils-MakeMaker/MANIFEST +++ b/cpan/ExtUtils-MakeMaker/MANIFEST @@ -164,4 +164,3 @@ t/xs.t TODO META.yml Module YAML meta-data (added by MakeMaker) META.json Module JSON meta-data (added by MakeMaker) -SIGNATURE Public-key signature (added by MakeMaker) diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm index 5a33bff6a3..269514f9be 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm @@ -10,7 +10,7 @@ our @ISA = qw(Exporter); our @EXPORT = qw(test_harness pod2man perllocal_install uninstall warn_if_old_packlist); -our $VERSION = '6.58'; +our $VERSION = '6.59'; my $Is_VMS = $^O eq 'VMS'; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm index a4e26666e4..23b199ac82 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm @@ -2,7 +2,7 @@ package ExtUtils::Liblist; use strict; -our $VERSION = '6.58'; +our $VERSION = '6.59'; use File::Spec; require ExtUtils::Liblist::Kid; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm index a0e2f24302..125d2be2e8 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm @@ -11,7 +11,7 @@ use 5.006; use strict; use warnings; -our $VERSION = '6.58'; +our $VERSION = '6.59'; use ExtUtils::MakeMaker::Config; use Cwd 'cwd'; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm index ce3e0738ad..dd43cc7609 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm @@ -3,7 +3,7 @@ package ExtUtils::MM; use strict; use ExtUtils::MakeMaker::Config; -our $VERSION = '6.58'; +our $VERSION = '6.59'; require ExtUtils::Liblist; require ExtUtils::MakeMaker; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm index 3d33e7fdad..0d356e3ead 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm @@ -1,7 +1,7 @@ package ExtUtils::MM_AIX; use strict; -our $VERSION = '6.58'; +our $VERSION = '6.59'; require ExtUtils::MM_Unix; our @ISA = qw(ExtUtils::MM_Unix); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm index 6a50c012df..ee3e6bf93d 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm @@ -1,7 +1,7 @@ package ExtUtils::MM_Any; use strict; -our $VERSION = '6.58'; +our $VERSION = '6.59'; use Carp; use File::Spec; @@ -730,8 +730,8 @@ CMD sub _has_cpan_meta { return eval { - $INC{'CPAN/Meta.pm'} or require CPAN::Meta; - CPAN::Meta->VERSION(2.110350); + require CPAN::Meta; + CPAN::Meta->VERSION(2.112150); 1; }; } @@ -816,6 +816,11 @@ on, no guarantee is made though. sub _fix_metadata_before_conversion { my ( $metadata ) = @_; + # we should never be called unless this already passed but + # prefer to be defensive in case somebody else calls this + + return unless _has_cpan_meta; + my $bad_version = $metadata->{version} && !CPAN::Meta::Validator->new->version( 'version', $metadata->{version} ); @@ -1291,7 +1296,7 @@ sub realclean { # Special exception for the perl core where INST_* is not in blib. # This cleans up the files built from the ext/ directory (all XS). if( $self->{PERL_CORE} ) { - push @dirs, qw($(INST_AUTODIR) $(INST_ARCHAUTODIR)); + push @dirs, qw($(INST_AUTODIR) $(INST_ARCHAUTODIR)); push @files, values %{$self->{PM}}; } diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm index 15918c9e0a..368d370b5b 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm @@ -26,7 +26,7 @@ require ExtUtils::MM_Any; require ExtUtils::MM_Unix; our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix ); -our $VERSION = '6.58'; +our $VERSION = '6.59'; =item os_flavor diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm index 7417b436e9..5f10d1e523 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm @@ -9,7 +9,7 @@ require ExtUtils::MM_Unix; require ExtUtils::MM_Win32; our @ISA = qw( ExtUtils::MM_Unix ); -our $VERSION = '6.58'; +our $VERSION = '6.59'; =head1 NAME diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm index 915fc33cf4..a8643c6026 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm @@ -2,7 +2,7 @@ package ExtUtils::MM_DOS; use strict; -our $VERSION = '6.58'; +our $VERSION = '6.59'; require ExtUtils::MM_Any; require ExtUtils::MM_Unix; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm index ca120a346c..05cbd923b2 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm @@ -7,7 +7,7 @@ BEGIN { our @ISA = qw( ExtUtils::MM_Unix ); } -our $VERSION = '6.58'; +our $VERSION = '6.59'; =head1 NAME diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm index 33e5036e28..4582a6d23a 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm @@ -2,7 +2,7 @@ package ExtUtils::MM_MacOS; use strict; -our $VERSION = '6.58'; +our $VERSION = '6.59'; sub new { die <<'UNSUPPORTED'; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm index 3e4ca58e52..a1ef5310da 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm @@ -22,7 +22,7 @@ use strict; use ExtUtils::MakeMaker::Config; use File::Basename; -our $VERSION = '6.58'; +our $VERSION = '6.59'; require ExtUtils::MM_Win32; our @ISA = qw(ExtUtils::MM_Win32); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm index 4d10020408..9af648cba8 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm @@ -5,7 +5,7 @@ use strict; use ExtUtils::MakeMaker qw(neatvalue); use File::Spec; -our $VERSION = '6.58'; +our $VERSION = '6.59'; require ExtUtils::MM_Any; require ExtUtils::MM_Unix; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm index f81c1c30b7..402e72cdf7 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm @@ -1,7 +1,7 @@ package ExtUtils::MM_QNX; use strict; -our $VERSION = '6.58'; +our $VERSION = '6.59'; require ExtUtils::MM_Unix; our @ISA = qw(ExtUtils::MM_Unix); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm index 6b9b6a6b02..17afb3b2e1 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm @@ -1,7 +1,7 @@ package ExtUtils::MM_UWIN; use strict; -our $VERSION = '6.58'; +our $VERSION = '6.59'; require ExtUtils::MM_Unix; our @ISA = qw(ExtUtils::MM_Unix); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm index b8548876c2..324885ec5c 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm @@ -15,7 +15,7 @@ use ExtUtils::MakeMaker qw($Verbose neatvalue); # If we make $VERSION an our variable parse_version() breaks use vars qw($VERSION); -$VERSION = '6.58'; +$VERSION = '6.59'; $VERSION = eval $VERSION; require ExtUtils::MM_Any; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm index 3d52b87e23..9e640f39c3 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm @@ -15,7 +15,7 @@ BEGIN { use File::Basename; -our $VERSION = '6.58'; +our $VERSION = '6.59'; require ExtUtils::MM_Any; require ExtUtils::MM_Unix; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm index 9a427c6c31..b0fd476587 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm @@ -1,7 +1,7 @@ package ExtUtils::MM_VOS; use strict; -our $VERSION = '6.58'; +our $VERSION = '6.59'; require ExtUtils::MM_Unix; our @ISA = qw(ExtUtils::MM_Unix); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm index 5a1fd32234..05a19764a2 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm @@ -27,7 +27,7 @@ use ExtUtils::MakeMaker qw( neatvalue ); require ExtUtils::MM_Any; require ExtUtils::MM_Unix; our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix ); -our $VERSION = '6.58'; +our $VERSION = '6.59'; $ENV{EMXSHELL} = 'sh'; # to run `commands` diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm index 71115a86e5..b0158282e5 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm @@ -2,7 +2,7 @@ package ExtUtils::MM_Win95; use strict; -our $VERSION = '6.58'; +our $VERSION = '6.59'; require ExtUtils::MM_Win32; our @ISA = qw(ExtUtils::MM_Win32); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm index 5591d4741d..1e8eb4d1d3 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm @@ -3,7 +3,7 @@ package ExtUtils::MY; use strict; require ExtUtils::MM; -our $VERSION = '6.58'; +our $VERSION = '6.59'; our @ISA = qw(ExtUtils::MM); { diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm index 6173b6be09..c8c3c2366b 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm @@ -18,7 +18,7 @@ our @Overridable; my @Prepend_parent; my %Recognized_Att_Keys; -our $VERSION = '6.58'; +our $VERSION = '6.59'; $VERSION = eval $VERSION; # Emulate something resembling CVS $Revision$ @@ -2869,7 +2869,7 @@ generated Makefile along with your report. For more up-to-date information, see L. -Repository available at L. +Repository available at L. =head1 LICENSE diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm index 70ee092c78..58bbdd6f3e 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm @@ -2,7 +2,7 @@ package ExtUtils::MakeMaker::Config; use strict; -our $VERSION = '6.58'; +our $VERSION = '6.59'; use Config (); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm index bc3bd34f92..bf855b957d 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm @@ -3,7 +3,7 @@ package ExtUtils::Mkbootstrap; # There's just too much Dynaloader incest here to turn on strict vars. use strict 'refs'; -our $VERSION = '6.58'; +our $VERSION = '6.59'; require Exporter; our @ISA = ('Exporter'); diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm index e7ff00ceb6..9609f648ba 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm @@ -10,7 +10,7 @@ use Config; our @ISA = qw(Exporter); our @EXPORT = qw(&Mksymlists); -our $VERSION = '6.58'; +our $VERSION = '6.59'; sub Mksymlists { my(%spec) = @_; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm index 623e01090c..2d235acc46 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm @@ -3,7 +3,7 @@ package ExtUtils::testlib; use strict; use warnings; -our $VERSION = '6.58'; +our $VERSION = '6.59'; use Cwd; use File::Spec; diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 0f83b03fef..846526f26d 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -128,6 +128,10 @@ to version 1.999002 and a new C attribute has been added. =item * +L has been upgraded from version 6.58 to version 6.59 + +=item * + L has been upgraded from version 1.11 to 1.12. C with "-" for the program name works once more. This was broken in -- cgit v1.2.1 From 2b009216d764ed700a7b4771b3cb035529dc22bc Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Sat, 6 Aug 2011 05:55:57 -0700 Subject: Remove comment from ck_glob that is no longer relevant This code was made more failsafe by commit 4984aa345. --- op.c | 1 - 1 file changed, 1 deletion(-) diff --git a/op.c b/op.c index c9b4d519a6..38cfc109e8 100644 --- a/op.c +++ b/op.c @@ -7900,7 +7900,6 @@ Perl_ck_glob(pTHX_ OP *o) } #if !defined(PERL_EXTERNAL_GLOB) - /* XXX this can be tightened up and made more failsafe. */ if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) { GV *glob_gv; ENTER; -- cgit v1.2.1 From e4ac890e26cfafba9132e6b4a68619e82201be3d Mon Sep 17 00:00:00 2001 From: Sandy Andy Date: Sat, 6 Aug 2011 08:09:22 +0200 Subject: prevent mixing non-native and native newlines in manifest files --- dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm | 34 +++++++++++++------ dist/ExtUtils-Manifest/t/Manifest.t | 44 ++++++++++++++++++++++++- 2 files changed, 67 insertions(+), 11 deletions(-) diff --git a/dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm b/dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm index ce4314c419..62e9877982 100644 --- a/dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm +++ b/dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm @@ -13,7 +13,7 @@ use vars qw($VERSION @ISA @EXPORT_OK $Is_MacOS $Is_VMS $Is_VMS_mode $Is_VMS_lc $Is_VMS_nodot $Debug $Verbose $Quiet $MANIFEST $DEFAULT_MSKIP); -$VERSION = '1.58'; +$VERSION = '1.59'; @ISA=('Exporter'); @EXPORT_OK = qw(mkmanifest manicheck filecheck fullcheck skipcheck @@ -706,21 +706,35 @@ sub maniadd { } -# Sometimes MANIFESTs are missing a trailing newline. Fix this. +# Make sure this MANIFEST is consistently written with native +# newlines and has a terminal newline. sub _fix_manifest { my $manifest_file = shift; open MANIFEST, $MANIFEST or die "Could not open $MANIFEST: $!"; - - # Yes, we should be using seek(), but I'd like to avoid loading POSIX - # to get SEEK_* - my @manifest = ; + local $/; + my @manifest = split /(\015\012|\012|\015)/, , -1; close MANIFEST; + my $must_rewrite = ""; + if ($manifest[-1] eq ""){ + # sane case: last line had a terminal newline + pop @manifest; + for (my $i=1; $i<=$#manifest; $i+=2) { + unless ($manifest[$i] eq "\n") { + $must_rewrite = "not a newline at pos $i"; + last; + } + } + } else { + $must_rewrite = "last line without newline"; + } - unless( $manifest[-1] =~ /\n\z/ ) { - open MANIFEST, ">>$MANIFEST" or die "Could not open $MANIFEST: $!"; - print MANIFEST "\n"; - close MANIFEST; + if ( $must_rewrite ) { + open MANIFEST, ">", $MANIFEST or die "(must_rewrite=$must_rewrite) Could not open >$MANIFEST: $!"; + for (my $i=0; $i<=$#manifest; $i+=2) { + print MANIFEST "$manifest[$i]\n"; + } + close MANIFEST or die "could not write $MANIFEST: $!"; } } diff --git a/dist/ExtUtils-Manifest/t/Manifest.t b/dist/ExtUtils-Manifest/t/Manifest.t index 91b126b20e..8d2ff8b91e 100644 --- a/dist/ExtUtils-Manifest/t/Manifest.t +++ b/dist/ExtUtils-Manifest/t/Manifest.t @@ -13,7 +13,7 @@ chdir 't'; use strict; -use Test::More tests => 94; +use Test::More tests => 96; use Cwd; use File::Spec; @@ -231,6 +231,48 @@ is( $files->{wibble}, '', 'maniadd() with undef comment' ); is( $files->{yarrow}, 'hock',' with comment' ); is( $files->{foobar}, '', ' preserved old entries' ); +{ + # EOL normalization in maniadd() + + # move manifest away: + rename "MANIFEST", "MANIFEST.bak" or die "Could not rename MANIFEST to MANIFEST.bak: $!"; + my $prev_maniaddresult; + my @eol = ("\012","\015","\015\012"); + # for all line-endings: + for my $i (0..$#eol) { + my $eol = $eol[$i]; + # cp the backup of the manifest to MANIFEST, line-endings adjusted + my $content = do { local $/; open my $fh, "MANIFEST.bak" or die; <$fh> }; + SPLITTER: for my $eol2 (@eol) { + if ( index($content, $eol2) > -1 ) { + my @lines = split /$eol2/, $content; + pop @lines while $lines[-1] eq ""; + open my $fh, ">", "MANIFEST" or die "Could not open >MANIFEST: $!"; + print $fh map { "$_$eol" } @lines; + close $fh or die "Could not close: $!"; + last SPLITTER; + } + } + # try maniadd + maniadd({eoltest => "end of line normalization test"}); + # slurp result and compare to previous result + my $maniaddresult = do { local $/; open my $fh, "MANIFEST" or die; <$fh> }; + if ($prev_maniaddresult) { + if ( $maniaddresult eq $prev_maniaddresult ) { + pass "normalization success with i=$i"; + } else { + require Data::Dumper; + local $Data::Dumper::Useqq = 1; + local $Data::Dumper::Terse = 1; + is Data::Dumper::Dumper($maniaddresult), Data::Dumper::Dumper($prev_maniaddresult), "eol normalization failed with i=$i"; + } + } + $prev_maniaddresult = $maniaddresult; + } + # move backup over MANIFEST + rename "MANIFEST.bak", "MANIFEST" or die "Could not rename MANIFEST.bak to MANIFEST: $!"; +} + my %funky_files; # test including a filename with a space SKIP: { -- cgit v1.2.1 From a30cae0b01fd4edd8cdf5801d652cd9bf39dbfe0 Mon Sep 17 00:00:00 2001 From: Chris 'BinGOs' Williams Date: Sat, 6 Aug 2011 17:38:01 +0100 Subject: Update DB_File to CPAN version 1.823 [DELTA] 1.823 6 Aug 2011 * croak if attempt to freeze/thaw DB_File object [RT #69985] --- Porting/Maintainers.pl | 2 +- cpan/DB_File/Changes | 8 ++++++++ cpan/DB_File/DB_File.pm | 20 +++++++++++++++----- cpan/DB_File/t/db-recno.t | 1 - pod/perldelta.pod | 6 ++++++ 5 files changed, 30 insertions(+), 7 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 94d9281360..82d35bc82f 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -524,7 +524,7 @@ use File::Glob qw(:case); 'DB_File' => { 'MAINTAINER' => 'pmqs', - 'DISTRIBUTION' => 'PMQS/DB_File-1.822.tar.gz', + 'DISTRIBUTION' => 'PMQS/DB_File-1.823.tar.gz', 'FILES' => q[cpan/DB_File], 'EXCLUDED' => [ qr{^patches/}, qw{ t/pod.t diff --git a/cpan/DB_File/Changes b/cpan/DB_File/Changes index 79da038eed..2bdbd28a1d 100644 --- a/cpan/DB_File/Changes +++ b/cpan/DB_File/Changes @@ -1,4 +1,12 @@ +1.823 6 Aug 2011 + * croak if attempt to freeze/thaw DB_File object + [RT #69985] + +1.822 12 March 2011 + + * Link rot + [rt.cpan.org #69739] 1.822 12 March 2011 diff --git a/cpan/DB_File/DB_File.pm b/cpan/DB_File/DB_File.pm index 7b8755bd54..0f813d512a 100644 --- a/cpan/DB_File/DB_File.pm +++ b/cpan/DB_File/DB_File.pm @@ -165,7 +165,7 @@ our ($db_version, $use_XSLoader, $splice_end_array_no_length, $splice_end_array, use Carp; -$VERSION = "1.822" ; +$VERSION = "1.823" ; $VERSION = eval $VERSION; # needed for dev releases { @@ -578,6 +578,20 @@ sub get_dup } +sub STORABLE_freeze +{ + my $type = ref shift; + croak "Cannot freeze $type object\n"; +} + +sub STORABLE_thaw +{ + my $type = ref shift; + croak "Cannot thaw $type object\n"; +} + + + 1; __END__ @@ -2263,10 +2277,6 @@ All versions of Berkeley DB are available there. Alternatively, Berkeley DB version 1 is available at your nearest CPAN archive in F. -If you are running IRIX, then get Berkeley DB version 1 from -F. It has the patches necessary to -compile properly on IRIX 5.3. - =head1 COPYRIGHT Copyright (c) 1995-2007 Paul Marquess. All rights reserved. This program diff --git a/cpan/DB_File/t/db-recno.t b/cpan/DB_File/t/db-recno.t index 404a060fa7..bd198dcf2f 100644 --- a/cpan/DB_File/t/db-recno.t +++ b/cpan/DB_File/t/db-recno.t @@ -1,6 +1,5 @@ #!./perl -w -use warnings; use strict; use Config; diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 846526f26d..417d638f46 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -120,6 +120,12 @@ Unix-style (i.e. forward slashes) =item * +L has been upgraded from version 1.822 to version 1.823 + +Will now croak if attempt to freeze/thaw DB_File object [RT #69985] + +=item * + L has been upgraded from version 1.56 to version 1.57. There is no change to ExtUtils::Install other than the version number -- cgit v1.2.1 From 37adef70fb8ef1239bc8f880ba06268efdc67904 Mon Sep 17 00:00:00 2001 From: Chris 'BinGOs' Williams Date: Sat, 6 Aug 2011 22:38:29 +0100 Subject: Update DB_File to CPAN version 1.824 [DELTA] 1.824 6 Aug 2011 * Amendments to tests to work in blead [RT #70108] --- Porting/Maintainers.pl | 2 +- cpan/DB_File/Changes | 5 +++++ cpan/DB_File/DB_File.pm | 2 +- pod/perldelta.pod | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 82d35bc82f..9401db76e9 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -524,7 +524,7 @@ use File::Glob qw(:case); 'DB_File' => { 'MAINTAINER' => 'pmqs', - 'DISTRIBUTION' => 'PMQS/DB_File-1.823.tar.gz', + 'DISTRIBUTION' => 'PMQS/DB_File-1.824.tar.gz', 'FILES' => q[cpan/DB_File], 'EXCLUDED' => [ qr{^patches/}, qw{ t/pod.t diff --git a/cpan/DB_File/Changes b/cpan/DB_File/Changes index 2bdbd28a1d..f527911f5a 100644 --- a/cpan/DB_File/Changes +++ b/cpan/DB_File/Changes @@ -1,3 +1,8 @@ +1.824 6 Aug 2011 + + * Amendments to tests to work in blead + [RT #70108] + 1.823 6 Aug 2011 * croak if attempt to freeze/thaw DB_File object diff --git a/cpan/DB_File/DB_File.pm b/cpan/DB_File/DB_File.pm index 0f813d512a..d7fba44ebc 100644 --- a/cpan/DB_File/DB_File.pm +++ b/cpan/DB_File/DB_File.pm @@ -165,7 +165,7 @@ our ($db_version, $use_XSLoader, $splice_end_array_no_length, $splice_end_array, use Carp; -$VERSION = "1.823" ; +$VERSION = "1.824" ; $VERSION = eval $VERSION; # needed for dev releases { diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 417d638f46..a6388a337f 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -120,7 +120,7 @@ Unix-style (i.e. forward slashes) =item * -L has been upgraded from version 1.822 to version 1.823 +L has been upgraded from version 1.822 to version 1.824 Will now croak if attempt to freeze/thaw DB_File object [RT #69985] -- cgit v1.2.1 From 4ea805df821d52961197994f679ae3d8a5106c34 Mon Sep 17 00:00:00 2001 From: Chris 'BinGOs' Williams Date: Sun, 7 Aug 2011 10:56:50 +0100 Subject: Update CPAN to CPAN version 1.9800 [DELTA] 2011-08-07 Andreas J. Koenig * release 1.9800 * RT #69463: fix memory leak in CacheMgr (Serguei Trouchelle) 2011-06-27 Andreas J. Koenig * release 1.97_51 * address #68835: Changed read_meta to ignore dynamic_config (David Golden) * bugfix: refuse to store_persistent if the own build_dir is not available (Andreas Koenig) * cosmetics: remove "Going to" from the beginning of user-visible strings (Jesse Vincent) * flock adjustments for Win32 from activestate (Christian Walde) --- MANIFEST | 1 + Porting/Maintainers.pl | 2 +- cpan/CPAN/Changes | 20 + cpan/CPAN/lib/App/Cpan.pm | 302 +++++++------- cpan/CPAN/lib/CPAN.pm | 84 ++-- cpan/CPAN/lib/CPAN/CacheMgr.pm | 1 + cpan/CPAN/lib/CPAN/Distribution.pm | 109 ++--- cpan/CPAN/lib/CPAN/Distroprefs.pm | 8 +- cpan/CPAN/lib/CPAN/Exception/yaml_not_installed.pm | 50 --- cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm | 53 +++ cpan/CPAN/lib/CPAN/FTP.pm | 12 +- cpan/CPAN/lib/CPAN/FirstTime.pm | 48 +-- cpan/CPAN/lib/CPAN/HTTP/Client.pm | 6 +- cpan/CPAN/lib/CPAN/HandleConfig.pm | 22 +- cpan/CPAN/lib/CPAN/Index.pm | 12 +- cpan/CPAN/lib/CPAN/Mirrors.pm | 439 +++++++++++++++++---- cpan/CPAN/lib/CPAN/Shell.pm | 9 +- pod/perldelta.pod | 4 + 18 files changed, 770 insertions(+), 412 deletions(-) create mode 100644 cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm diff --git a/MANIFEST b/MANIFEST index 6d1b3425ff..98593a1ead 100644 --- a/MANIFEST +++ b/MANIFEST @@ -288,6 +288,7 @@ cpan/CPAN/lib/CPAN/Distrostatus.pm helper package for CPAN.pm cpan/CPAN/lib/CPAN/Exception/blocked_urllist.pm helper package for CPAN.pm cpan/CPAN/lib/CPAN/Exception/RecursiveDependency.pm helper package for CPAN.pm cpan/CPAN/lib/CPAN/Exception/yaml_not_installed.pm helper package for CPAN.pm +cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm helper package for CPAN.pm cpan/CPAN/lib/CPAN/FirstTime.pm Utility for creating CPAN config files cpan/CPAN/lib/CPAN/FTP/netrc.pm helper package for CPAN.pm cpan/CPAN/lib/CPAN/FTP.pm helper package for CPAN.pm diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 9401db76e9..cbd3392679 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -415,7 +415,7 @@ use File::Glob qw(:case); 'CPAN' => { 'MAINTAINER' => 'andk', - 'DISTRIBUTION' => 'ANDK/CPAN-1.9600.tar.gz', + 'DISTRIBUTION' => 'ANDK/CPAN-1.9800.tar.gz', 'FILES' => q[cpan/CPAN], 'EXCLUDED' => [ qr{^distroprefs/}, qr{^inc/Test/}, diff --git a/cpan/CPAN/Changes b/cpan/CPAN/Changes index 0c1776a4e6..7c4e56ed90 100644 --- a/cpan/CPAN/Changes +++ b/cpan/CPAN/Changes @@ -1,3 +1,23 @@ +2011-08-07 Andreas J. Koenig + + * release 1.9800 + + * RT #69463: fix memory leak in CacheMgr (Serguei Trouchelle) + +2011-06-27 Andreas J. Koenig + + * release 1.97_51 + + * address #68835: Changed read_meta to ignore dynamic_config (David Golden) + + * bugfix: refuse to store_persistent if the own build_dir is not + available (Andreas Koenig) + + * cosmetics: remove "Going to" from the beginning of user-visible + strings (Jesse Vincent) + + * flock adjustments for Win32 from activestate (Christian Walde) + 2011-03-12 Andreas J. Koenig * release 1.9600 diff --git a/cpan/CPAN/lib/App/Cpan.pm b/cpan/CPAN/lib/App/Cpan.pm index cfc12908e5..0fce3d3ec1 100644 --- a/cpan/CPAN/lib/App/Cpan.pm +++ b/cpan/CPAN/lib/App/Cpan.pm @@ -19,11 +19,11 @@ App::Cpan - easily interact with CPAN from the command line # use local::lib cpan -l module_name [ module_name ... ] - + # with just the dot, install from the distribution in the # current directory cpan . - + # without arguments, starts CPAN.pm shell cpan @@ -73,7 +73,7 @@ to install a module even if its tests fail. When you use this option, =item -F -Turn off CPAN.pm's attempts to lock anything. You should be careful with +Turn off CPAN.pm's attempts to lock anything. You should be careful with this since you might end up with multiple scripts trying to muck in the same directory. This isn't so much of a concern if you're loading a special config with C<-j>, and that config sets up its own work directories. @@ -105,7 +105,7 @@ Install the specified modules. =item -j Config.pm Load the file that has the CPAN configuration data. This should have the -same format as the standard F file, which defines +same format as the standard F file, which defines C<$CPAN::Config> as an anonymous hash. =item -J @@ -188,27 +188,27 @@ use File::Basename; use Getopt::Std; -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Internal constants use constant TRUE => 1; use constant FALSE => 0; -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # The return values -use constant HEY_IT_WORKED => 0; +use constant HEY_IT_WORKED => 0; use constant I_DONT_KNOW_WHAT_HAPPENED => 1; # 0b0000_0001 use constant ITS_NOT_MY_FAULT => 2; use constant THE_PROGRAMMERS_AN_IDIOT => 4; use constant A_MODULE_FAILED_TO_INSTALL => 8; -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # set up the order of options that we layer over CPAN::Shell BEGIN { # most of this should be in methods use vars qw( @META_OPTIONS $Default %CPAN_METHODS @CPAN_OPTIONS @option_order %Method_table %Method_table_index ); - + @META_OPTIONS = qw( h v g G C A D O l L a r j: J ); $Default = 'default'; @@ -227,7 +227,7 @@ $Default = 'default'; @option_order = ( @META_OPTIONS, @CPAN_OPTIONS ); -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # map switches to the subroutines in this script, along with other information. # use this stuff instead of hard-coded indices and values sub NO_ARGS () { 0 } @@ -249,7 +249,7 @@ sub GOOD_EXIT () { 0 } # options that do their one thing g => [ \&_download, NO_ARGS, GOOD_EXIT, 'Download the latest distro' ], G => [ \&_gitify, NO_ARGS, GOOD_EXIT, 'Down and gitify the latest distro' ], - + C => [ \&_show_Changes, ARGS, GOOD_EXIT, 'Showing Changes file' ], A => [ \&_show_Author, ARGS, GOOD_EXIT, 'Showing Author' ], D => [ \&_show_Details, ARGS, GOOD_EXIT, 'Showing Details' ], @@ -278,7 +278,7 @@ sub GOOD_EXIT () { 0 } ); } -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # finally, do some argument processing sub _stupid_interface_hack_for_non_rtfmers @@ -286,17 +286,17 @@ sub _stupid_interface_hack_for_non_rtfmers no warnings 'uninitialized'; shift @ARGV if( $ARGV[0] eq 'install' and @ARGV > 1 ) } - + sub _process_options { my %options; - + # if no arguments, just drop into the shell if( 0 == @ARGV ) { CPAN::shell(); exit 0 } else { Getopt::Std::getopts( - join( '', @option_order ), \%options ); + join( '', @option_order ), \%options ); \%options; } } @@ -304,7 +304,7 @@ sub _process_options sub _process_setup_options { my( $class, $options ) = @_; - + if( $options->{j} ) { $Method_table{j}[ $Method_table_index{code} ]->( $options->{j} ); @@ -318,7 +318,7 @@ sub _process_setup_options write_file => 0, ); } - + if( $options->{F} ) { $Method_table{F}[ $Method_table_index{code} ]->( $options->{F} ); @@ -328,7 +328,7 @@ sub _process_setup_options my $option_count = grep { $options->{$_} } @option_order; no warnings 'uninitialized'; $option_count -= $options->{'f'}; # don't count force - + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # if there are no options, set -i (this line fixes RT ticket 16915) $options->{i}++ unless $option_count; @@ -339,7 +339,7 @@ sub _process_setup_options Just do it. -The C method returns 0 on success and a postive number on +The C method returns 0 on success and a postive number on failure. See the section on EXIT CODES for details on the values. =cut @@ -367,10 +367,10 @@ sub run $class->_process_setup_options( $options ); OPTION: foreach my $option ( @option_order ) - { + { next unless $options->{$option}; - my( $sub, $takes_args, $description ) = + my( $sub, $takes_args, $description ) = map { $Method_table{$option}[ $Method_table_index{$_} ] } qw( code takes_args ); @@ -382,7 +382,7 @@ sub run $logger->info( "$description -- ignoring other arguments" ) if( @ARGV && ! $takes_args ); - + $return_value = $sub->( \ @ARGV, $options ); last; @@ -402,33 +402,33 @@ sub DESTROY { 1 } sub _init_logger { my $log4perl_loaded = eval "require Log::Log4perl; 1"; - + unless( $log4perl_loaded ) { $logger = Local::Null::Logger->new; return $logger; } - + my $LEVEL = $ENV{CPANSCRIPT_LOGLEVEL} || 'INFO'; - + Log::Log4perl::init( \ <<"HERE" ); log4perl.rootLogger=$LEVEL, A1 log4perl.appender.A1=Log::Log4perl::Appender::Screen log4perl.appender.A1.layout=PatternLayout log4perl.appender.A1.layout.ConversionPattern=%m%n HERE - + $logger = Log::Log4perl->get_logger( 'App::Cpan' ); } - -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # - # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # sub _default { my( $args, $options ) = @_; - + my $switch = ''; # choose the option that we're going to use @@ -458,12 +458,12 @@ sub _default if( $options->{f} ) { sub { CPAN::Shell->force( $method, @_ ) } } else { sub { CPAN::Shell->$method( @_ ) } } }; - + # How do I handle exit codes for multiple arguments? my $errors = 0; - - foreach my $arg ( @$args ) - { + + foreach my $arg ( @$args ) + { _clear_cpanpm_output(); $action->( $arg ); @@ -473,7 +473,7 @@ sub _default $errors ? I_DONT_KNOW_WHAT_HAPPENED : HEY_IT_WORKED; } -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # =for comment @@ -488,7 +488,7 @@ my $scalar = ''; sub _hook_into_CPANpm_report { no warnings 'redefine'; - + *CPAN::Shell::myprint = sub { my($self,$what) = @_; $scalar .= $what if defined $what; @@ -500,15 +500,15 @@ sub _hook_into_CPANpm_report *CPAN::Shell::mywarn = sub { my($self,$what) = @_; $scalar .= $what if defined $what; - $self->print_ornamented($what, + $self->print_ornamented($what, $CPAN::Config->{colorize_warn}||'bold red on_white' ); }; } - + sub _clear_cpanpm_output { $scalar = '' } - + sub _get_cpanpm_output { $scalar } BEGIN { @@ -522,9 +522,9 @@ my @skip_lines = ( sub _get_cpanpm_last_line { open my($fh), "<", \ $scalar; - + my @lines = <$fh>; - + # This is a bit ugly. Once we examine a line, we have to # examine the line before it and go through all of the same # regexes. I could do something fancy, but this works. @@ -538,9 +538,9 @@ sub _get_cpanpm_last_line } } } - + $logger->debug( "Last interesting line of CPAN.pm output is:\n\t$lines[-1]" ); - + $lines[-1]; } } @@ -548,28 +548,28 @@ sub _get_cpanpm_last_line BEGIN { my $epic_fail_words = join '|', qw( Error stop(?:ping)? problems force not unsupported fail(?:ed)? ); - + sub _cpanpm_output_indicates_failure { my $last_line = _get_cpanpm_last_line(); - + my $result = $last_line =~ /\b(?:$epic_fail_words)\b/i; $result || (); } } - + sub _cpanpm_output_indicates_success { my $last_line = _get_cpanpm_last_line(); - + my $result = $last_line =~ /\b(?:\s+-- OK|PASS)\b/; $result || (); } - + sub _cpanpm_output_is_vague { - return FALSE if - _cpanpm_output_indicates_failure() || + return FALSE if + _cpanpm_output_indicates_failure() || _cpanpm_output_indicates_success(); return TRUE; @@ -577,24 +577,24 @@ sub _cpanpm_output_is_vague } -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # sub _print_help { $logger->info( "Use perldoc to read the documentation" ); exec "perldoc $0"; } - + sub _print_version { - $logger->info( + $logger->info( "$0 script version $VERSION, CPAN.pm version " . CPAN->VERSION ); return HEY_IT_WORKED; } - + sub _create_autobundle { - $logger->info( + $logger->info( "Creating autobundle in $CPAN::Config->{cpan_home}/Bundle" ); CPAN::Shell->autobundle; @@ -621,24 +621,24 @@ sub _upgrade } sub _load_config # -j - { + { my $file = shift || ''; - + # should I clear out any existing config here? $CPAN::Config = {}; delete $INC{'CPAN/Config.pm'}; croak( "Config file [$file] does not exist!\n" ) unless -e $file; - + my $rc = eval "require '$file'"; # CPAN::HandleConfig::require_myconfig_or_config looks for this $INC{'CPAN/MyConfig.pm'} = 'fake out!'; - + # CPAN::HandleConfig::load looks for this $CPAN::Config_loaded = 'fake out'; - + croak( "Could not load [$file]: $@\n") unless $rc; - + return HEY_IT_WORKED; } @@ -646,60 +646,60 @@ sub _dump_config { my $args = shift; require Data::Dumper; - + my $fh = $args->[0] || \*STDOUT; - - my $dd = Data::Dumper->new( - [$CPAN::Config], - ['$CPAN::Config'] + + my $dd = Data::Dumper->new( + [$CPAN::Config], + ['$CPAN::Config'] ); - + print $fh $dd->Dump, "\n1;\n__END__\n"; - + return HEY_IT_WORKED; } sub _lock_lobotomy { no warnings 'redefine'; - + *CPAN::_flock = sub { 1 }; *CPAN::checklock = sub { 1 }; return HEY_IT_WORKED; } - + sub _download - { + { my $args = shift; - + local $CPAN::DEBUG = 1; - + my %paths; - + foreach my $module ( @$args ) { $logger->info( "Checking $module" ); my $path = CPAN::Shell->expand( "Module", $module )->cpan_file; - + $logger->debug( "Inst file would be $path\n" ); - + $paths{$module} = _get_file( _make_path( $path ) ); } - + return \%paths; } sub _make_path { join "/", qw(authors id), $_[0] } - + sub _get_file { my $path = shift; - + my $loaded = eval "require LWP::Simple; 1;"; croak "You need LWP::Simple to use features that fetch files from CPAN\n" unless $loaded; - + my $file = substr $path, rindex( $path, '/' ) + 1; my $store_path = catfile( cwd(), $file ); $logger->debug( "Store path is $store_path" ); @@ -717,13 +717,13 @@ sub _get_file sub _gitify { my $args = shift; - + my $loaded = eval "require Archive::Extract; 1;"; croak "You need Archive::Extract to use features that gitify distributions\n" unless $loaded; - + my $starting_dir = cwd(); - + foreach my $module ( @$args ) { $logger->info( "Checking $module" ); @@ -731,23 +731,23 @@ sub _gitify my $store_paths = _download( [ $module ] ); $logger->debug( "gitify Store path is $store_paths->{$module}" ); - my $dirname = dirname( $store_paths->{$module} ); - + my $dirname = dirname( $store_paths->{$module} ); + my $ae = Archive::Extract->new( archive => $store_paths->{$module} ); $ae->extract( to => $dirname ); - + chdir $ae->extract_path; - + my $git = $ENV{GIT_COMMAND} || '/usr/local/bin/git'; croak "Could not find $git" unless -e $git; croak "$git is not executable" unless -x $git; - + # can we do this in Pure Perl? system( $git, 'init' ); system( $git, qw( add . ) ); system( $git, qw( commit -a -m ), 'initial import' ); } - + chdir $starting_dir; return HEY_IT_WORKED; @@ -756,42 +756,42 @@ sub _gitify sub _show_Changes { my $args = shift; - + foreach my $arg ( @$args ) { $logger->info( "Checking $arg\n" ); - + my $module = eval { CPAN::Shell->expand( "Module", $arg ) }; my $out = _get_cpanpm_output(); - + next unless eval { $module->inst_file }; #next if $module->uptodate; - + ( my $id = $module->id() ) =~ s/::/\-/; - + my $url = "http://search.cpan.org/~" . lc( $module->userid ) . "/" . $id . "-" . $module->cpan_version() . "/"; - + #print "URL: $url\n"; _get_changes_file($url); } return HEY_IT_WORKED; - } - + } + sub _get_changes_file { croak "Reading Changes files requires LWP::Simple and URI\n" unless eval "require LWP::Simple; require URI; 1"; - + my $url = shift; my $content = LWP::Simple::get( $url ); $logger->info( "Got $url ..." ) if defined $content; #print $content; - + my( $change_link ) = $content =~ m|Changes|gi; - + my $changes_url = URI->new_abs( $change_link, $url ); $logger->debug( "Change link is: $changes_url" ); @@ -801,11 +801,11 @@ sub _get_changes_file return HEY_IT_WORKED; } - + sub _show_Author - { + { my $args = shift; - + foreach my $arg ( @$args ) { my $module = CPAN::Shell->expand( "Module", $arg ); @@ -814,29 +814,29 @@ sub _show_Author $logger->info( "Didn't find a $arg module, so no author!" ); next; } - + my $author = CPAN::Shell->expand( "Author", $module->userid ); - + next unless $module->userid; - - printf "%-25s %-8s %-25s %s\n", + + printf "%-25s %-8s %-25s %s\n", $arg, $module->userid, $author->email, $author->fullname; } return HEY_IT_WORKED; - } + } sub _show_Details { my $args = shift; - + foreach my $arg ( @$args ) { my $module = CPAN::Shell->expand( "Module", $arg ); my $author = CPAN::Shell->expand( "Author", $module->userid ); - + next unless $module->userid; - + print "$arg\n", "-" x 73, "\n\t"; print join "\n\t", $module->description ? $module->description : "(no description)", @@ -848,26 +848,26 @@ sub _show_Details $author->fullname . " (" . $module->userid . ")", $author->email; print "\n\n"; - + } - + return HEY_IT_WORKED; - } + } sub _show_out_of_date { my @modules = CPAN::Shell->expand( "Module", "/./" ); - + printf "%-40s %6s %6s\n", "Module Name", "Local", "CPAN"; print "-" x 73, "\n"; - + foreach my $module ( @modules ) { next unless $module->inst_file; next if $module->uptodate; printf "%-40s %.4f %.4f\n", - $module->id, - $module->inst_version ? $module->inst_version : '', + $module->id, + $module->inst_version ? $module->inst_version : '', $module->cpan_version; } @@ -879,71 +879,71 @@ sub _show_author_mods my $args = shift; my %hash = map { lc $_, 1 } @$args; - + my @modules = CPAN::Shell->expand( "Module", "/./" ); - + foreach my $module ( @modules ) { next unless exists $hash{ lc $module->userid }; print $module->id, "\n"; } - + return HEY_IT_WORKED; } - + sub _list_all_mods { require File::Find; - + my $args = shift; - - + + my $fh = \*STDOUT; - + INC: foreach my $inc ( @INC ) - { + { my( $wanted, $reporter ) = _generator(); File::Find::find( { wanted => $wanted }, $inc ); - + my $count = 0; FILE: foreach my $file ( @{ $reporter->() } ) { my $version = _parse_version_safely( $file ); - + my $module_name = _path_to_module( $inc, $file ); next FILE unless defined $module_name; - + print $fh "$module_name\t$version\n"; - + #last if $count++ > 5; } } return HEY_IT_WORKED; } - + sub _generator - { + { my @files = (); - - sub { push @files, - File::Spec->canonpath( $File::Find::name ) + + sub { push @files, + File::Spec->canonpath( $File::Find::name ) if m/\A\w+\.pm\z/ }, sub { \@files }, } - + sub _parse_version_safely # stolen from PAUSE's mldistwatch, but refactored { my( $file ) = @_; - + local $/ = "\n"; local $_; # don't mess with the $_ in the map calling this - + return unless open FILE, "<$file"; my $in_pod = 0; my $version; - while( ) + while( ) { chomp; $in_pod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $in_pod; @@ -951,22 +951,22 @@ sub _parse_version_safely # stolen from PAUSE's mldistwatch, but refactored next unless /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/; my( $sigil, $var ) = ( $1, $2 ); - + $version = _eval_version( $_, $sigil, $var ); last; } close FILE; return 'undef' unless defined $version; - + return $version; } sub _eval_version { my( $line, $sigil, $var ) = @_; - - my $eval = qq{ + + my $eval = qq{ package ExtUtils::MakeMaker::_version; local $sigil$var; @@ -974,7 +974,7 @@ sub _eval_version $line }; \$$var }; - + my $version = do { local $^W = 0; no strict; @@ -988,16 +988,16 @@ sub _path_to_module { my( $inc, $path ) = @_; return if length $path< length $inc; - + my $module_path = substr( $path, length $inc ); $module_path =~ s/\.pm\z//; - + # XXX: this is cheating and doesn't handle everything right my @dirs = grep { ! /\W/ } File::Spec->splitdir( $module_path ); shift @dirs; - + my $module_name = join "::", @dirs; - + return $module_name; } @@ -1007,7 +1007,7 @@ sub _path_to_module =head1 EXIT VALUES -The script exits with zero if it thinks that everything worked, or a +The script exits with zero if it thinks that everything worked, or a positive number if it thinks that something failed. Note, however, that in some cases it has to divine a failure by the output of things it does not control. For now, the exit codes are vague: diff --git a/cpan/CPAN/lib/CPAN.pm b/cpan/CPAN/lib/CPAN.pm index e36cf09e31..4e1f2a3018 100644 --- a/cpan/CPAN/lib/CPAN.pm +++ b/cpan/CPAN/lib/CPAN.pm @@ -2,7 +2,7 @@ # vim: ts=4 sts=4 sw=4: use strict; package CPAN; -$CPAN::VERSION = '1.9600'; +$CPAN::VERSION = '1.9800'; $CPAN::VERSION =~ s/_//; # we need to run chdir all over and we would get at wrong libraries @@ -37,6 +37,7 @@ use CPAN::Shell; use CPAN::LWP::UserAgent; use CPAN::Exception::RecursiveDependency; use CPAN::Exception::yaml_not_installed; +use CPAN::Exception::yaml_process_error; use Carp (); use Config (); @@ -1069,7 +1070,7 @@ sub has_usable { # don't die, because we may need # Archive::Tar to upgrade } - + } }, ], @@ -1469,14 +1470,14 @@ mentioned four. Each of the four entities is implemented as a class with slightly differing methods for displaying an object. Arguments to these commands are either strings exactly matching -the identification string of an object, or regular expressions +the identification string of an object, or regular expressions matched case-insensitively against various attributes of the objects. The parser only recognizes a regular expression when you enclose it with slashes. The principle is that the number of objects found influences how an item is displayed. If the search finds one item, the result is -displayed with the rather verbose method C, but if +displayed with the rather verbose method C, but if more than one is found, each object is displayed with the terse method C. @@ -1588,7 +1589,7 @@ being executed within the distribution file's working directory. C displays the README file of the associated distribution. C gets and untars (if not yet done) the distribution file, changes to the appropriate directory and opens a subshell process in -that directory. C displays the module's pod documentation +that directory. C displays the module's pod documentation in html or plain text format. =item C author @@ -1699,8 +1700,11 @@ literal backslash. C writes a bundle file into the C<$CPAN::Config-E{cpan_home}/Bundle> directory. The file contains a list of all modules that are both available from CPAN and currently -installed within @INC. The name of the bundle file is based on the -current date and a counter. +installed within @INC. Duplicates of each distribution are suppressed. +The name of the bundle file is based on the current date and a +counter. + +Return value: path to the written file. =head2 hosts @@ -1718,10 +1722,35 @@ mkmyconfig() writes your own CPAN::MyConfig file into your C<~/.cpan/> directory so that you can save your own preferences instead of the system-wide ones. +=head2 r [Module|/Regexp/]... + +scans current perl installation for modules that have a newer version +available on CPAN and provides a list of them. If called without +argument, all potential upgrades are listed; if called with arguments +the list is filtered to the modules and regexps given as arguments. + +The listing looks something like this: + + Package namespace installed latest in CPAN file + CPAN 1.94_64 1.9600 ANDK/CPAN-1.9600.tar.gz + CPAN::Reporter 1.1801 1.1902 DAGOLDEN/CPAN-Reporter-1.1902.tar.gz + YAML 0.70 0.73 INGY/YAML-0.73.tar.gz + YAML::Syck 1.14 1.17 AVAR/YAML-Syck-1.17.tar.gz + YAML::Tiny 1.44 1.50 ADAMK/YAML-Tiny-1.50.tar.gz + CGI 3.43 3.55 MARKSTOS/CGI.pm-3.55.tar.gz + Module::Build::YAML 1.40 1.41 DAGOLDEN/Module-Build-0.3800.tar.gz + TAP::Parser::Result::YAML 3.22 3.23 ANDYA/Test-Harness-3.23.tar.gz + YAML::XS 0.34 0.35 INGY/YAML-LibYAML-0.35.tar.gz + +It suppresses duplicates in the column C such that +distributions with many upgradeable modules are listed only once. + +Note that the list is not sorted. + =head2 recent ***EXPERIMENTAL COMMAND*** The C command downloads a list of recent uploads to CPAN and -displays them I. While the command is running, a $SIG{INT} +displays them I. While the command is running, a $SIG{INT} exits the loop after displaying the current item. B: This command requires XML::LibXML installed. @@ -1776,7 +1805,7 @@ approach will likely remain. B: See also L -=head2 upgrade [Module|/Regex/]... +=head2 upgrade [Module|/Regexp/]... The C command first runs an C command with the given arguments and then installs the newest versions of all modules that @@ -1895,7 +1924,7 @@ Example: o conf shell If KEY starts and ends with a slash, the string in between is -treated as a regular expression and only keys matching this regex +treated as a regular expression and only keys matching this regexp are displayed Example: @@ -1998,7 +2027,7 @@ currently defined: inactivity_timeout breaks interactive Makefile.PLs or Build.PLs after this many seconds inactivity. Set to 0 to disable timeouts. - index_expire refetch index files after this many days + index_expire refetch index files after this many days inhibit_startup_message if true, suppress the startup message keep_source_where directory in which to keep the source (if we do) @@ -2192,7 +2221,7 @@ randomness into the URL selection. Since CPAN.pm version 1.88_51 modules declared as C by a distribution are treated differently depending on the config variable C. By setting -C to C, such a module is not +C to C, such a module is not installed. It is only built and tested, and then kept in the list of tested but uninstalled modules. As such, it is available during the build of the dependent module by integrating the path to the @@ -2246,7 +2275,7 @@ temporarily override assorted C configuration variables =item -specify dependencies the original maintainer forgot +specify dependencies the original maintainer forgot =item @@ -2583,7 +2612,7 @@ needs. You have been warned:-) =head1 PROGRAMMER'S INTERFACE -If you do not enter the shell, shell commands are +If you do not enter the shell, shell commands are available both as methods (Cinstall(...)>) and as functions in the calling package (C). Before calling low-level commands, it makes sense to initialize components of CPAN you need, e.g.: @@ -2596,9 +2625,20 @@ High-level commands do such initializations automatically. There's currently only one class that has a stable interface - CPAN::Shell. All commands that are available in the CPAN shell are -methods of the class CPAN::Shell. Each of the commands that produce -listings of modules (C, C, C) also return a list of -the IDs of all modules within the list. +methods of the class CPAN::Shell. The arguments on the commandline are +passed as arguments to the method. + +So if you take for example the shell command + + notest install A B C + +the actually executed command is + + CPAN::Shell->notest("install","A","B","C"); + +Each of the commands that produce listings of modules (C, +C, C) also return a list of the IDs of all modules +within the list. =over 2 @@ -2650,7 +2690,7 @@ all modules that need updating. First a quick and dirty way: If you don't want any output should all modules be up to date, parse the output of above command for the regular expression C and decide to mail the output -only if it doesn't match. +only if it doesn't match. If you prefer to do it more in a programmerish style in one single process, something like this may better suit you: @@ -2837,7 +2877,7 @@ cancellation can be avoided by letting C run the C for you. This install method only has the power to install the distribution if -there are no dependencies in the way. To install an object along with all +there are no dependencies in the way. To install an object along with all its dependencies, use CPAN::Shell->install. Note that install() gives no meaningful return value. See uptodate(). @@ -3231,7 +3271,7 @@ the software producing the indices on CPAN, the mirroring process on CPAN, packaging, configuration, synchronicity, and even (gasp!) due to bugs within the CPAN.pm module itself. -For debugging the code of CPAN.pm itself in interactive mode, some +For debugging the code of CPAN.pm itself in interactive mode, some debugging aid can be turned on for most packages within CPAN.pm with one of @@ -3387,7 +3427,7 @@ Maintaining a bundle definition file means keeping track of two things: dependencies and interactivity. CPAN.pm sometimes fails on calculating dependencies because not all modules define all MakeMaker attributes correctly, so a bundle definition file should specify -prerequisites as early as possible. On the other hand, it's +prerequisites as early as possible. On the other hand, it's annoying that so many distributions need some interactive configuring. So what you can try to accomplish in your private bundle file is to have the packages that need to be configured early in the file and the gentle @@ -3432,7 +3472,7 @@ need Net::FTP. =item One-way visibility -One-way visibility means these firewalls try to make themselves +One-way visibility means these firewalls try to make themselves invisible to users inside the firewall. An FTP data connection is normally created by sending your IP address to the remote server and then listening for the return connection. But the remote server will not be able to diff --git a/cpan/CPAN/lib/CPAN/CacheMgr.pm b/cpan/CPAN/lib/CPAN/CacheMgr.pm index b9b4eeb32b..23e756e75b 100644 --- a/cpan/CPAN/lib/CPAN/CacheMgr.pm +++ b/cpan/CPAN/lib/CPAN/CacheMgr.pm @@ -49,6 +49,7 @@ sub tidyup { $self->_clean_cache($toremove); return if $CPAN::Signal; } + $self->{FIFO} = []; } #-> sub CPAN::CacheMgr::dir ; diff --git a/cpan/CPAN/lib/CPAN/Distribution.pm b/cpan/CPAN/lib/CPAN/Distribution.pm index b39e723fd2..32648ecc1f 100644 --- a/cpan/CPAN/lib/CPAN/Distribution.pm +++ b/cpan/CPAN/lib/CPAN/Distribution.pm @@ -158,7 +158,7 @@ sub tested_ok_but_not_installed { || $self->{install}->failed ) - ); + ); } @@ -584,7 +584,8 @@ EOF #-> sub CPAN::Distribution::pick_meta_file ; sub pick_meta_file { - my($self, $yaml) = @_; + my($self, $filter) = @_; + $filter = '.' unless defined $filter; my $build_dir; unless ($build_dir = $self->{build_dir}) { @@ -602,7 +603,7 @@ sub pick_meta_file { push @choices, 'META.json' if $has_cm; push @choices, 'META.yml' if $has_cm || $has_pcm; - for my $file ( @choices ) { + for my $file ( grep { /$filter/ } @choices ) { my $path = File::Spec->catdir( $build_dir, $file ); return $path if -f $path } @@ -740,7 +741,7 @@ sub choose_MM_or_MB { $prefer_installer = CPAN::HandleConfig->prefs_lookup( $self, q{prefer_installer} ); - # M::B <= 0.35 left a DATA handle open that + # M::B <= 0.35 left a DATA handle open that # causes problems upgrading M::B on Windows close *Module::Build::Version::DATA if fileno *Module::Build::Version::DATA; @@ -776,6 +777,12 @@ sub choose_MM_or_MB { sub store_persistent_state { my($self) = @_; my $dir = $self->{build_dir}; + unless (defined $dir && length $dir) { + my $id = $self->id; + $CPAN::Frontend->mywarnonce("build_dir of $id is not known, ". + "will not store persistent state\n"); + return; + } unless (File::Spec->canonpath(File::Basename::dirname($dir)) eq File::Spec->canonpath($CPAN::Config->{build_dir})) { $CPAN::Frontend->mywarnonce("Directory '$dir' not below $CPAN::Config->{build_dir}, ". @@ -858,7 +865,7 @@ sub try_download { } } my $countedpatches = @$patches == 1 ? "1 patch" : (scalar @$patches . " patches"); - $CPAN::Frontend->myprint("Going to apply $countedpatches:\n"); + $CPAN::Frontend->myprint("Applying $countedpatches:\n"); my $patches_dir = $CPAN::Config->{patches_dir}; for my $patch (@$patches) { if ($patches_dir && !File::Spec->file_name_is_absolute($patch)) { @@ -1844,7 +1851,7 @@ is part of the perl-%s distribution. To install that, you need to run delete $self->{force_update}; return; } - $CPAN::Frontend->myprint("\n CPAN.pm: Going to build ".$self->id."\n\n"); + $CPAN::Frontend->myprint("\n CPAN.pm: Building ".$self->id."\n\n"); $self->debug("Changed directory to $builddir") if $CPAN::DEBUG; if ($^O eq 'MacOS') { @@ -2843,8 +2850,7 @@ sub _fulfills_all_version_rqs { } #-> sub CPAN::Distribution::read_meta -# read any sort of meta files, return CPAN::Meta object if no errors and -# dynamic_config = 0 +# read any sort of meta files, return CPAN::Meta object if no errors sub read_meta { my($self) = @_; my $meta_file = $self->pick_meta_file @@ -2862,9 +2868,6 @@ sub read_meta { return if $eummv < 6.2501; } - # META/MYMETA is only authoritative if dynamic_config is false - return if $meta->dynamic_config; - return $meta; } @@ -2889,8 +2892,8 @@ sub read_yaml { if $CPAN::DEBUG; $self->debug($yaml) if $CPAN::DEBUG && $yaml; # MYMETA.yml is static and authoritative by definition - if ( $meta_file =~ /MYMETA\.yml/ ) { - return $yaml; + if ( $meta_file =~ /MYMETA\.yml/ ) { + return $yaml; } # META.yml is authoritative only if dynamic_config is defined and false if ( defined $yaml->{dynamic_config} && ! $yaml->{dynamic_config} ) { @@ -2903,7 +2906,7 @@ sub read_yaml { #-> sub CPAN::Distribution::configure_requires ; sub configure_requires { my($self) = @_; - return unless my $meta_file = $self->pick_meta_file; + return unless my $meta_file = $self->pick_meta_file('^META'); if (my $meta_obj = $self->read_meta) { my $prereqs = $meta_obj->effective_prereqs; my $cr = $prereqs->requirements_for(qw/configure requires/); @@ -2929,7 +2932,9 @@ sub prereq_pm { $self->{modulebuild}||"", ) if $CPAN::DEBUG; my($req,$breq); - if (my $meta_obj = $self->read_meta) { + my $meta_obj = $self->read_meta; + # META/MYMETA is only authoritative if dynamic_config is false + if ($meta_obj && ! $meta_obj->dynamic_config) { my $prereqs = $meta_obj->effective_prereqs; my $requires = $prereqs->requirements_for(qw/runtime requires/); my $build_requires = $prereqs->requirements_for(qw/build requires/); @@ -3168,7 +3173,7 @@ sub test { # bypass actual tests if "trust_test_report_history" and have a report my $have_tested_fcn; if ( $CPAN::Config->{trust_test_report_history} - && $CPAN::META->has_inst("CPAN::Reporter::History") + && $CPAN::META->has_inst("CPAN::Reporter::History") && ( $have_tested_fcn = CPAN::Reporter::History->can("have_tested" ))) { if ( my @reports = $have_tested_fcn->( dist => $self->base_id ) ) { # Do nothing if grade was DISCARD @@ -3288,43 +3293,43 @@ sub test { sub _make_test_illuminate_prereqs { my($self) = @_; - my @prereq; - - # local $CPAN::DEBUG = 16; # Distribution - for my $m (keys %{$self->{sponsored_mods}}) { - next unless $self->{sponsored_mods}{$m} > 0; - my $m_obj = CPAN::Shell->expand("Module",$m) or next; - # XXX we need available_version which reflects - # $ENV{PERL5LIB} so that already tested but not yet - # installed modules are counted. - my $available_version = $m_obj->available_version; - my $available_file = $m_obj->available_file; - if ($available_version && - !CPAN::Version->vlt($available_version,$self->{prereq_pm}{$m}) - ) { - CPAN->debug("m[$m] good enough available_version[$available_version]") - if $CPAN::DEBUG; - } elsif ($available_file - && ( - !$self->{prereq_pm}{$m} - || - $self->{prereq_pm}{$m} == 0 - ) - ) { - # lex Class::Accessor::Chained::Fast which has no $VERSION - CPAN->debug("m[$m] have available_file[$available_file]") - if $CPAN::DEBUG; - } else { - push @prereq, $m; - } - } + my @prereq; + + # local $CPAN::DEBUG = 16; # Distribution + for my $m (keys %{$self->{sponsored_mods}}) { + next unless $self->{sponsored_mods}{$m} > 0; + my $m_obj = CPAN::Shell->expand("Module",$m) or next; + # XXX we need available_version which reflects + # $ENV{PERL5LIB} so that already tested but not yet + # installed modules are counted. + my $available_version = $m_obj->available_version; + my $available_file = $m_obj->available_file; + if ($available_version && + !CPAN::Version->vlt($available_version,$self->{prereq_pm}{$m}) + ) { + CPAN->debug("m[$m] good enough available_version[$available_version]") + if $CPAN::DEBUG; + } elsif ($available_file + && ( + !$self->{prereq_pm}{$m} + || + $self->{prereq_pm}{$m} == 0 + ) + ) { + # lex Class::Accessor::Chained::Fast which has no $VERSION + CPAN->debug("m[$m] have available_file[$available_file]") + if $CPAN::DEBUG; + } else { + push @prereq, $m; + } + } my $but; - if (@prereq) { - my $cnt = @prereq; - my $which = join ",", @prereq; + if (@prereq) { + my $cnt = @prereq; + my $which = join ",", @prereq; $but = $cnt == 1 ? "one dependency not OK ($which)" : - "$cnt dependencies missing ($which)"; - } + "$cnt dependencies missing ($which)"; + } $but; } @@ -3670,7 +3675,7 @@ sub perldoc { $CPAN::Frontend->myprint(qq{ Function system("@args") returned status $estatus (wstat $wstatus) - }); + }); } } else { diff --git a/cpan/CPAN/lib/CPAN/Distroprefs.pm b/cpan/CPAN/lib/CPAN/Distroprefs.pm index e1be9cdf74..61c389ed2d 100644 --- a/cpan/CPAN/lib/CPAN/Distroprefs.pm +++ b/cpan/CPAN/lib/CPAN/Distroprefs.pm @@ -169,7 +169,7 @@ sub find { file => $_, ext => $ext, dir => $dir }); # copied from CPAN.pm; is this ever actually possible? - redo unless -f $result->abs; + redo unless -f $result->abs; my $load_method = $self->_load_method($loader, $result); my @prefs = eval { $self->$load_method($loader, $result) }; @@ -314,7 +314,7 @@ __END__ CPAN::Distroprefs -- read and match distroprefs -=head1 SYNOPSIS +=head1 SYNOPSIS use CPAN::Distroprefs; @@ -381,7 +381,7 @@ All results share some common attributes: C, C, or C -=head3 file +=head3 file the file from which these prefs were read, or to which this error refers (relative filename) @@ -413,7 +413,7 @@ Success results contain: an arrayref of CPAN::Distroprefs::Pref objects -=head1 PREFS +=head1 PREFS CPAN::Distroprefs::Pref objects represent individual distroprefs documents. They are constructed automatically as part of C results from C. diff --git a/cpan/CPAN/lib/CPAN/Exception/yaml_not_installed.pm b/cpan/CPAN/lib/CPAN/Exception/yaml_not_installed.pm index e1259e5397..1e7fa83a53 100644 --- a/cpan/CPAN/lib/CPAN/Exception/yaml_not_installed.pm +++ b/cpan/CPAN/lib/CPAN/Exception/yaml_not_installed.pm @@ -20,54 +20,4 @@ sub as_string { "'$self->{module}' not installed, cannot $self->{during} '$self->{file}'\n"; } -package CPAN::Exception::yaml_process_error; -use strict; -use overload '""' => "as_string"; - -use vars qw( - $VERSION -); -$VERSION = "5.5"; - - -sub new { - my($class,$module,$file,$during,$error) = @_; - # my $at = Carp::longmess(""); # XXX find something more beautiful - bless { module => $module, - file => $file, - during => $during, - error => $error, - # at => $at, - }, $class; -} - -sub as_string { - my($self) = shift; - if ($self->{during}) { - if ($self->{file}) { - if ($self->{module}) { - if ($self->{error}) { - return "Alert: While trying to '$self->{during}' YAML file\n". - " '$self->{file}'\n". - "with '$self->{module}' the following error was encountered:\n". - " $self->{error}\n"; - } else { - return "Alert: While trying to '$self->{during}' YAML file\n". - " '$self->{file}'\n". - "with '$self->{module}' some unknown error was encountered\n"; - } - } else { - return "Alert: While trying to '$self->{during}' YAML file\n". - " '$self->{file}'\n". - "some unknown error was encountered\n"; - } - } else { - return "Alert: While trying to '$self->{during}' some YAML file\n". - "some unknown error was encountered\n"; - } - } else { - return "Alert: unknown error encountered\n"; - } -} - 1; diff --git a/cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm b/cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm new file mode 100644 index 0000000000..ae8c14ebeb --- /dev/null +++ b/cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm @@ -0,0 +1,53 @@ +# -*- Mode: cperl; coding: utf-8; cperl-indent-level: 4 -*- +# vim: ts=4 sts=4 sw=4: +package CPAN::Exception::yaml_process_error; +use strict; +use overload '""' => "as_string"; + +use vars qw( + $VERSION +); +$VERSION = "5.5"; + + +sub new { + my($class,$module,$file,$during,$error) = @_; + # my $at = Carp::longmess(""); # XXX find something more beautiful + bless { module => $module, + file => $file, + during => $during, + error => $error, + # at => $at, + }, $class; +} + +sub as_string { + my($self) = shift; + if ($self->{during}) { + if ($self->{file}) { + if ($self->{module}) { + if ($self->{error}) { + return "Alert: While trying to '$self->{during}' YAML file\n". + " '$self->{file}'\n". + "with '$self->{module}' the following error was encountered:\n". + " $self->{error}\n"; + } else { + return "Alert: While trying to '$self->{during}' YAML file\n". + " '$self->{file}'\n". + "with '$self->{module}' some unknown error was encountered\n"; + } + } else { + return "Alert: While trying to '$self->{during}' YAML file\n". + " '$self->{file}'\n". + "some unknown error was encountered\n"; + } + } else { + return "Alert: While trying to '$self->{during}' some YAML file\n". + "some unknown error was encountered\n"; + } + } else { + return "Alert: unknown error encountered\n"; + } +} + +1; diff --git a/cpan/CPAN/lib/CPAN/FTP.pm b/cpan/CPAN/lib/CPAN/FTP.pm index 4f233814e5..997e141be5 100644 --- a/cpan/CPAN/lib/CPAN/FTP.pm +++ b/cpan/CPAN/lib/CPAN/FTP.pm @@ -21,6 +21,11 @@ $VERSION = "5.5005"; sub _ftp_statistics { my($self,$fh) = @_; my $locktype = $fh ? LOCK_EX : LOCK_SH; + # XXX On Windows flock() implements mandatory locking, so we can + # XXX only use shared locking to still allow _yaml_load_file() to + # XXX read from the file using a different filehandle. + $locktype = LOCK_SH if $^O eq "MSWin32"; + $fh ||= FileHandle->new; my $file = File::Spec->catfile($CPAN::Config->{cpan_home},"FTPstats.yml"); mkpath dirname $file; @@ -56,6 +61,7 @@ sub _ftp_statistics { $CPAN::Frontend->mydie($@); } } + CPAN::_flock($fh, LOCK_UN); return $stats->[0]; } @@ -567,7 +573,7 @@ sub hostdleasy { #called from hostdlxxx $ThesiteURL = $ro_url; return $l; } - # If request is for a compressed file and we can find the + # If request is for a compressed file and we can find the # uncompressed file also, return the path of the uncompressed file # otherwise, decompress it and return the resulting path if ($l =~ /(.+)\.gz$/) { @@ -975,7 +981,7 @@ ftp config variable with Trying with external ftp to get '$url' $netrc_explain - Going to send the dialog + Sending the dialog $dialog } ); @@ -1014,7 +1020,7 @@ $dialog $CPAN::Frontend->myprint(qq{ Trying with external ftp to get $url - Going to send the dialog + Sending the dialog $dialog } ); diff --git a/cpan/CPAN/lib/CPAN/FirstTime.pm b/cpan/CPAN/lib/CPAN/FirstTime.pm index 667bdca2f9..5030ef9b83 100644 --- a/cpan/CPAN/lib/CPAN/FirstTime.pm +++ b/cpan/CPAN/lib/CPAN/FirstTime.pm @@ -202,8 +202,8 @@ Preferred method for determining the current working directory? =item halt_on_failure Normally, CPAN.pm continues processing the full list of targets and -dependencies, even if one of them fails. However, you can specify -that CPAN should halt after the first failure. +dependencies, even if one of them fails. However, you can specify +that CPAN should halt after the first failure. Do you want to halt on failure (yes/no)? @@ -339,7 +339,7 @@ Your choice: Parameters for the './Build install' command? Typical frequently used setting: - --uninst 1 # uninstall conflicting files + --uninst 1 # uninstall conflicting files # (but do NOT use with local::lib or INSTALL_BASE) Your choice: @@ -781,8 +781,8 @@ sub init { if ( $args{autoconfig} ) { $auto_config = 1; } elsif ($matcher) { - $auto_config = 0; - } else { + $auto_config = 0; + } else { my $_conf = prompt($prompts{auto_config}, "yes"); $auto_config = ($_conf and $_conf =~ /^y/i) ? 1 : 0; } @@ -795,7 +795,7 @@ sub init { my $i_am_mad = 0; # silent prompting -- just quietly use default *_real_prompt = sub { return $_[1] }; - } + } # # bootstrap local::lib or sudo @@ -993,8 +993,8 @@ sub init { my_dflt_prompt(makepl_arg => "", $matcher); my_dflt_prompt(make_arg => "", $matcher); if ( $CPAN::Config->{makepl_arg} =~ /LIBS=|INC=/ ) { - $CPAN::Frontend->mywarn( - "Warning: Using LIBS or INC in makepl_arg will likely break distributions\n" . + $CPAN::Frontend->mywarn( + "Warning: Using LIBS or INC in makepl_arg will likely break distributions\n" . "that specify their own LIBS or INC options in Makefile.PL.\n" ); } @@ -1224,9 +1224,9 @@ sub init { ); } else { - $CPAN::Frontend->myprint( - "Autoconfigured everything but 'urllist'.\n" - ); + $CPAN::Frontend->myprint( + "Autoconfigured everything but 'urllist'.\n" + ); _do_pick_mirrors(); } } @@ -1247,8 +1247,8 @@ sub init { $CPAN::Frontend->myprint( "Skipping local::lib bootstrap because 'urllist' is not configured.\n" ); - } - else { + } + else { $CPAN::Frontend->myprint("\nAttempting to bootstrap local::lib...\n"); $CPAN::Frontend->myprint("\nWriting $configpm for bootstrap...\n"); delete $CPAN::Config->{install_help}; # temporary only @@ -1268,11 +1268,11 @@ sub init { $CPAN::Frontend->myprint("From the CPAN Shell, you might try 'look local::lib' and \n" . "run 'perl Makefile --bootstrap' and see if that is successful. Then\n" . "restart your CPAN client\n" - ); + ); } else { _local_lib_config(); - } + } } } @@ -1515,7 +1515,7 @@ ALERT: 'make' is an essential tool for building perl Modules. Please make sure you have 'make' (or some equivalent) working. HERE - if ($^O eq "MSWin32") { + if ($^O eq "MSWin32") { $CPAN::Frontend->mywarn(<<"HERE"); Windows users may want to follow this procedure when back in the CPAN shell: @@ -1528,7 +1528,7 @@ substitute. You can then revisit this dialog with o conf init make HERE - } + } } sub init_cpan_home { @@ -1657,7 +1657,7 @@ sub my_prompt_loop { # (2) We don't have a copy at all # (2a) If we are allowed to connect, we try to get a new copy. If it succeeds, # we use it, otherwise, we warn about failure -# (2b) If we aren't allowed to connect, +# (2b) If we aren't allowed to connect, sub conf_sites { my %args = @_; @@ -1732,7 +1732,7 @@ HERE } else { $CPAN::Frontend->mywarn(<<'HERE'); -You will need to provide CPAN mirror URLs yourself or set +You will need to provide CPAN mirror URLs yourself or set 'o conf connect_to_internet_ok 1' and try again. HERE } @@ -1851,7 +1851,9 @@ sub auto_mirrored_by { my $local = shift or return; local $|=1; $CPAN::Frontend->myprint("Looking for CPAN mirrors near you (please be patient)\n"); - my $mirrors = CPAN::Mirrors->new($local); + my $mirrors = CPAN::Mirrors->new; + $mirrors->parse_mirrored_by($local); + my $cnt = 0; my @best = $mirrors->best_mirrors( how_many => 3, @@ -1860,9 +1862,11 @@ sub auto_mirrored_by { if ($cnt++>60) { $cnt=0; $CPAN::Frontend->myprint("\n"); } }, ); + my $urllist = [ map { $_->http } @best ]; push @$urllist, grep { /^file:/ } @{$CPAN::Config->{urllist}}; $CPAN::Frontend->myprint(" done!\n\n"); + return $urllist } @@ -1998,8 +2002,8 @@ later if you\'re sure it\'s right.\n}, sub _print_urllist { my ($which) = @_; $CPAN::Frontend->myprint("$which urllist\n"); - for ( @{$CPAN::Config->{urllist} || []} ) { - $CPAN::Frontend->myprint(" $_\n") + for ( @{$CPAN::Config->{urllist} || []} ) { + $CPAN::Frontend->myprint(" $_\n") }; } diff --git a/cpan/CPAN/lib/CPAN/HTTP/Client.pm b/cpan/CPAN/lib/CPAN/HTTP/Client.pm index 52de7fe237..c5eb0f6a43 100644 --- a/cpan/CPAN/lib/CPAN/HTTP/Client.pm +++ b/cpan/CPAN/lib/CPAN/HTTP/Client.pm @@ -31,8 +31,8 @@ sub mirror { my($self, $uri, $path) = @_; my $want_proxy = $self->_want_proxy($uri); - my $http = HTTP::Tiny->new( - $want_proxy ? (proxy => $self->{proxy}) : () + my $http = HTTP::Tiny->new( + $want_proxy ? (proxy => $self->{proxy}) : () ); my ($response, %headers); @@ -112,7 +112,7 @@ sub _get_challenge { my $auth_list = $response->{headers}(lc $auth_header); return unless defined $auth_list; $auth_list = [$auth_list] unless ref $auth_list; - + for my $challenge (@$auth_list) { $challenge =~ tr/,/;/; # "," is used to separate auth-params!! ($challenge) = $self->split_header_words($challenge); diff --git a/cpan/CPAN/lib/CPAN/HandleConfig.pm b/cpan/CPAN/lib/CPAN/HandleConfig.pm index 58ccbe50e5..09c42efee0 100644 --- a/cpan/CPAN/lib/CPAN/HandleConfig.pm +++ b/cpan/CPAN/lib/CPAN/HandleConfig.pm @@ -265,11 +265,11 @@ sub commit { my($self,@args) = @_; CPAN->debug("args[@args]") if $CPAN::DEBUG; if ($CPAN::RUN_DEGRADED) { - $CPAN::Frontend->mydie( - "'o conf commit' disabled in ". - "degraded mode. Maybe try\n". - " !undef \$CPAN::RUN_DEGRADED\n" - ); + $CPAN::Frontend->mydie( + "'o conf commit' disabled in ". + "degraded mode. Maybe try\n". + " !undef \$CPAN::RUN_DEGRADED\n" + ); } my ($configpm, $must_reload); @@ -474,13 +474,13 @@ sub init { sub require_myconfig_or_config () { if ( $INC{"CPAN/MyConfig.pm"} || _try_loading("CPAN::MyConfig", cpan_home())) { return $INC{"CPAN/MyConfig.pm"}; - } + } elsif ( $INC{"CPAN/Config.pm"} || _try_loading("CPAN::Config") ) { return $INC{"CPAN/Config.pm"}; - } + } else { return q{}; - } + } } # Load a module, but ignore "can't locate..." errors @@ -495,8 +495,8 @@ sub _try_loading { if ( -f File::Spec->catfile($dir, $file) ) { unshift @INC, $dir; last; + } } - } eval { require $file }; my $err_myconfig = $@; @@ -515,7 +515,7 @@ sub cpan_home_dir_candidates { if ($^O ne 'darwin') { push @dirs, File::HomeDir->my_data; # my_data is ~/Library/Application Support on darwin, - # which causes issues in the toolchain. + # which causes issues in the toolchain. } push @dirs, File::HomeDir->my_home; } @@ -592,7 +592,7 @@ sub make_new_config { Old configuration file $configpm moved to $configpm_bak END - } + } } my $fh = FileHandle->new; if ($fh->open(">$configpm")) { diff --git a/cpan/CPAN/lib/CPAN/Index.pm b/cpan/CPAN/lib/CPAN/Index.pm index 4fcde8c390..af98d7bf15 100644 --- a/cpan/CPAN/lib/CPAN/Index.pm +++ b/cpan/CPAN/lib/CPAN/Index.pm @@ -132,7 +132,7 @@ sub reanimate_build_dir { return; } $CPAN::Frontend->myprint - (sprintf("Going to read %d yaml file%s from %s/\n", + (sprintf("Reading %d yaml file%s from %s/\n", scalar @candidates, @candidates==1 ? "" : "s", $CPAN::Config->{build_dir} @@ -231,7 +231,7 @@ sub rd_authindex { return unless defined $index_target; return if CPAN::_sqlite_running(); my @lines; - $CPAN::Frontend->myprint("Going to read '$index_target'\n"); + $CPAN::Frontend->myprint("Reading '$index_target'\n"); local(*FH); tie *FH, 'CPAN::Tarzip', $index_target; local($/) = "\n"; @@ -271,7 +271,7 @@ sub rd_modpacks { my($self, $index_target) = @_; return unless defined $index_target; return if CPAN::_sqlite_running(); - $CPAN::Frontend->myprint("Going to read '$index_target'\n"); + $CPAN::Frontend->myprint("Reading '$index_target'\n"); my $fh = CPAN::Tarzip->TIEHANDLE($index_target); local $_; CPAN->debug(sprintf "start[%d]", time) if $CPAN::DEBUG; @@ -494,7 +494,7 @@ sub rd_modlist { my($cl,$index_target) = @_; return unless defined $index_target; return if CPAN::_sqlite_running(); - $CPAN::Frontend->myprint("Going to read '$index_target'\n"); + $CPAN::Frontend->myprint("Reading '$index_target'\n"); my $fh = CPAN::Tarzip->TIEHANDLE($index_target); local $_; my $slurp = ""; @@ -556,7 +556,7 @@ sub write_metadata_cache { $cache->{last_time} = $LAST_TIME; $cache->{DATE_OF_02} = $DATE_OF_02; $cache->{PROTOCOL} = PROTOCOL; - $CPAN::Frontend->myprint("Going to write $metadata_file\n"); + $CPAN::Frontend->myprint("Writing $metadata_file\n"); eval { Storable::nstore($cache, $metadata_file) }; $CPAN::Frontend->mywarn($@) if $@; # ?? missing "\n" after $@ in mywarn ?? } @@ -569,7 +569,7 @@ sub read_metadata_cache { return unless $CPAN::META->has_usable("Storable"); my $metadata_file = File::Spec->catfile($CPAN::Config->{cpan_home},"Metadata"); return unless -r $metadata_file and -f $metadata_file; - $CPAN::Frontend->myprint("Going to read '$metadata_file'\n"); + $CPAN::Frontend->myprint("Reading '$metadata_file'\n"); my $cache; eval { $cache = Storable::retrieve($metadata_file) }; $CPAN::Frontend->mywarn($@) if $@; # ?? missing "\n" after $@ in mywarn ?? diff --git a/cpan/CPAN/lib/CPAN/Mirrors.pm b/cpan/CPAN/lib/CPAN/Mirrors.pm index 3582b0acb4..daafc1dbaf 100644 --- a/cpan/CPAN/lib/CPAN/Mirrors.pm +++ b/cpan/CPAN/lib/CPAN/Mirrors.pm @@ -1,5 +1,37 @@ # -*- Mode: cperl; coding: utf-8; cperl-indent-level: 4 -*- # vim: ts=4 sts=4 sw=4: +=head1 NAME + +CPAN::Mirrors - Get CPAN miror information and select a fast one + +=head1 SYNOPSIS + + use CPAN::Mirrors; + + my $mirrors = CPAN::Mirrors->new; + $mirrors->parse_from_file( $mirrored_by_file ); + + my $seen = {}; + + my $best_continent = $mirrors->find_best_continents( { seen => $seen } ); + my @mirrors = $mirrors->get_mirrors_by_continents( $best_continent ); + + my $callback = sub { + my( $m ) = @_; + printf "%s = %s\n", $m->hostname, $m->rtt + }; + $mirrors->get_mirrors_timings( \@mirrors, $seen, $callback ); + + @mirrors = sort { $a->rtt <=> $b->rtt } @mirrors; + + print "Best mirrors are ", map( { $_->rtt } @mirrors[0..3] ), "\n"; + +=head1 DESCRIPTION + +=over + +=cut + package CPAN::Mirrors; use strict; use vars qw($VERSION $urllist $silent); @@ -10,31 +42,55 @@ use FileHandle; use Fcntl ":flock"; use Net::Ping (); +=item new( LOCAL_FILE_NAME ) + +=cut + sub new { my ($class, $file) = @_; - my $self = bless { - mirrors => [], - geography => {}, + my $self = bless { + mirrors => [], + geography => {}, }, $class; + if( defined $file ) { + $self->parse_mirrored_by( $file ); + } + + return $self +} + +sub parse_mirrored_by { + my ($self, $file) = @_; my $handle = FileHandle->new; - $handle->open($file) + $handle->open($file) or croak "Couldn't open $file: $!"; flock $handle, LOCK_SH; $self->_parse($file,$handle); flock $handle, LOCK_UN; $handle->close; +} - # populate continents & countries +=item continents() - return $self -} +Return a list of continents based on those defined in F. + +=cut sub continents { my ($self) = @_; return keys %{$self->{geography}}; } +=item countries( [CONTINENTS] ) + +Return a list of countries based on those defined in F. +It only returns countries for the continents you specify (as defined +in C). If you don't specify any continents, it returns all +of the countries listed in F. + +=cut + sub countries { my ($self, @continents) = @_; @continents = $self->continents unless @continents; @@ -45,6 +101,15 @@ sub countries { return @countries; } +=item mirrors( [COUNTRIES] ) + +Return a list of mirrors based on those defined in F. +It only returns mirrors for the countries you specify (as defined +in C). If you don't specify any countries, it returns all +of the mirrors listed in F. + +=cut + sub mirrors { my ($self, @countries) = @_; return @{$self->{mirrors}} unless @countries; @@ -56,118 +121,300 @@ sub mirrors { return @found; } +=item get_mirrors_by_countries( [COUNTRIES] ) + +A more sensible synonym for mirrors. + +=cut + +sub get_mirrors_by_countries { &mirrors } + +=item get_mirrors_by_continents( [CONTINENTS] ) + +Return a list of mirrors for all of continents you specify. If you don't +specify any continents, it returns all of the mirrors. + +=cut + +sub get_mirrors_by_continents { + my ($self, $continents ) = @_; + + $self->mirrors( $self->get_countries_by_continents( @$continents ) ); + } + +=item get_countries_by_continents( [CONTINENTS] ) + +A more sensible synonym for countries. + +=cut +sub get_countries_by_continents { &countries } + +=item best_mirrors + +C checks for the best mirrors based on the list of +continents you pass, or, without that, all continents, as defined +by C. It pings each mirror, up to the value of +C. In list context, it returns up to C mirror. +In scalar context, it returns the single best mirror. + +Arguments + + how_many - the number of mirrors to return. Default: 1 + callback - a callback for find_best_continents + verbose - true or false on all the whining and moaning. Default: false + continents - an array ref of the continents to check + +If you don't specify the continents, C calls +C to get the list of continents to check. + +=cut + sub best_mirrors { my ($self, %args) = @_; - my $how_many = $args{how_many} || 1; - my $callback = $args{callback}; - my $verbose = $args{verbose}; - my $conts = $args{continents} || []; - $conts = [$conts] unless ref $conts; + my $how_many = $args{how_many} || 1; + my $callback = $args{callback}; + my $verbose = defined $args{verbose} ? $args{verbose} : 0; + my $continents = $args{continents} || []; + $continents = [$continents] unless ref $continents; # Old Net::Ping did not do timings at all return "http://www.cpan.org/" unless Net::Ping->VERSION gt '2.13'; my $seen = {}; - if ( ! @$conts ) { + if ( ! @$continents ) { print "Searching for the best continent ...\n" if $verbose; - my @best = $self->_find_best_continent($seen, $verbose, $callback); + my @best_continents = $self->find_best_continents( + seen => $seen, + verbose => $verbose, + callback => $callback, + ); # Only add enough continents to find enough mirrors my $count = 0; - for my $c ( @best ) { - push @$conts, $c; - $count += $self->mirrors( $self->countries($c) ); + for my $continent ( @best_continents ) { + push @$continents, $continent; + $count += $self->mirrors( $self->countries($continent) ); last if $count >= $how_many; } } - print "Scanning " . join(", ", @$conts) . " ...\n" if $verbose; + print "Scanning " . join(", ", @$continents) . " ...\n" if $verbose; + + my $trial_mirrors = $self->get_n_random_mirrors_by_continents( 3 * $how_many, $continents->[0] ); + + my $timings = $self->get_mirrors_timings( $trial_mirrors, $seen, $callback ); + return [] unless @$timings; + + $how_many = @$timings if $how_many > @$timings; + + return wantarray ? @{$timings}[0 .. $how_many-1] : $timings->[0]; +} + +=item get_n_random_mirrors_by_continents( N, [CONTINENTS] + +Returns up to N random mirrors for the specified continents. Specify the +continents as an array reference. + +=cut + +sub get_n_random_mirrors_by_continents { + my( $self, $n, $continents ) = @_; + $n ||= 3; + $continents = [ $continents ] unless ref $continents; - my @timings; - my @long_list = $self->mirrors($self->countries(@$conts)); - my $long_list_size = ( $how_many > 10 ? $how_many : 10 ); - if ( @long_list > $long_list_size ) { - @long_list = map {$_->[0]} - sort {$a->[1] <=> $b->[1]} - map {[$_, rand]} @long_list; - splice @long_list, $long_list_size; # truncate + if ( $n <= 0 ) { + return wantarray ? () : []; } - for my $m ( @long_list ) { - next unless $m->http; - my $hostname = $m->hostname; - if ( $seen->{$hostname} ) { - push @timings, $seen->{$hostname} - if defined $seen->{$hostname}[1]; + my @long_list = $self->get_mirrors_by_continents( $continents ); + + if ( $n eq '*' or $n > @long_list ) { + return wantarray ? @long_list : \@long_list; + } + + @long_list = map {$_->[0]} + sort {$a->[1] <=> $b->[1]} + map {[$_, rand]} @long_list; + + splice @long_list, $n; # truncate + + \@long_list; +} + +=item get_mirrors_timings( MIRROR_LIST, SEEN, CALLBACK ); + +Pings the listed mirrors and returns a list of mirrors sorted +in ascending ping times. + +=cut + +sub get_mirrors_timings { + my( $self, $mirror_list, $seen, $callback ) = @_; + + $seen = {} unless defined $seen; + croak "The mirror list argument must be an array reference" + unless ref $mirror_list eq ref []; + croak "The seen argument must be a hash reference" + unless ref $seen eq ref {}; + croak "callback must be a subroutine" + if( defined $callback and ref $callback ne ref sub {} ); + + my $timings = []; + for my $m ( @$mirror_list ) { + $seen->{$m->hostname} = $m; + next unless eval{ $m->http }; + + if( $self->_try_a_ping( $seen, $m, ) ) { + my $ping = $m->ping; + next unless defined $ping; + push @$timings, $m; + $callback->( $m ) if $callback; } else { - my $ping = $m->ping; - next unless defined $ping; - push @timings, [$m, $ping]; - $callback->($m,$ping) if $callback; + push @$timings, $seen->{$m->hostname} + if defined $seen->{$m->hostname}->rtt; } } - return unless @timings; - - $how_many = @timings if $how_many > @timings; - my @best = - map { $_->[0] } - sort { $a->[1] <=> $b->[1] } @timings; - return wantarray ? @best[0 .. $how_many-1] : $best[0]; + my @best = sort { + if( defined $a->rtt and defined $b->rtt ) { + $a->rtt <=> $b->rtt + } + elsif( defined $a->rtt and ! defined $b->rtt ) { + return -1; + } + elsif( ! defined $a->rtt and defined $b->rtt ) { + return 1; + } + elsif( ! defined $a->rtt and ! defined $b->rtt ) { + return 0; + } + + } @$timings; + + return wantarray ? @best : \@best; } -sub _find_best_continent { - my ($self, $seen, $verbose, $callback) = @_; +=item find_best_continents( HASH_REF ); + +C goes through each continent and pings C random +mirrors on that continent. It then orders the continents by ascending +median ping time. In list context, it returns the ordered list of +continent. In scalar context, it returns the same list as an anonymous +array. + +Arguments: + + n - the number of hosts to ping for each continent. Default: 3 + seen - a hashref of cached hostname ping times + verbose - true or false for noisy or quiet. Default: false + callback - a subroutine to run after each ping. + ping_cache_limit - how long, in seconds, to reuse previous ping times. + Default: 1 day + +The C hash has hostnames as keys and anonymous arrays as values. The +anonymous array is a triplet of a C object, a ping +time, and the epoch time for the measurement. + +The callback subroutine gets the C object, the ping +time, and measurement time (the same things in the C hashref) as arguments. +C doesn't care what the callback does and ignores the return +value. - my %median; +=cut + +sub find_best_continents { + my ($self, %args) = @_; + + $args{n} ||= 3; + $args{verbose} = 0 unless defined $args{verbose}; + $args{seen} = {} unless defined $args{seen}; + croak "The seen argument must be a hash reference" + unless ref $args{seen} eq ref {}; + $args{ping_cache_limit} = 24 * 60 * 60 + unless defined $args{ping_cache_time}; + croak "callback must be a subroutine" + if( defined $args{callback} and ref $args{callback} ne ref sub {} ); + + my %medians; CONT: for my $c ( $self->continents ) { + print "Testing $c\n" if $args{verbose}; my @mirrors = $self->mirrors( $self->countries($c) ); + next CONT unless @mirrors; - my $sample = 3; - my $n = (@mirrors < $sample) ? @mirrors : $sample; + my $n = (@mirrors < $args{n}) ? @mirrors : $args{n}; + my @tests; - RANDOM: while ( @mirrors && @tests < $n ) { + my $tries = 0; + RANDOM: while ( @mirrors && @tests < $n && $tries++ < 15 ) { my $m = splice( @mirrors, int(rand(@mirrors)), 1 ); - my $ping = $m->ping; - $callback->($m,$ping) if $callback; - # record undef so we don't try again - $seen->{$m->hostname} = [$m, $ping]; - next RANDOM unless defined $ping; - push @tests, $ping; - } - next CONT unless @tests; - @tests = sort { $a <=> $b } @tests; - if ( @tests == 1 ) { - $median{$c} = $tests[0]; - } - elsif ( @tests % 2 ) { - $median{$c} = $tests[ int(@tests / 2) ]; - } - else { - my $mid_high = int(@tests/2); - $median{$c} = ($tests[$mid_high-1] + $tests[$mid_high])/2; + if( $self->_try_a_ping( $args{seen}, $m, $args{ping_cache_limit} ) ) { + $self->get_mirrors_timings( [ $m ], @args{qw(seen callback)} ); + next RANDOM unless defined $args{seen}{$m->hostname}->rtt; + } + printf "\t%s -> %0.2f ms\n", + $m->hostname, + join ' ', 1000 * $args{seen}{$m->hostname}->rtt + if $args{verbose}; + + push @tests, $args{seen}{$m->hostname}->rtt; } + + my $median = $self->_get_median_ping_time( \@tests, $args{verbose} ); + $medians{$c} = $median if defined $median; } - my @best_cont = sort { $median{$a} <=> $median{$b} } keys %median ; + my @best_cont = sort { $medians{$a} <=> $medians{$b} } keys %medians; - if ( $verbose ) { + if ( $args{verbose} ) { print "Median result by continent:\n"; for my $c ( @best_cont ) { - printf( " %d ms %s\n", int($median{$c}*1000+.5), $c ); + printf( " %4d ms %s\n", int($medians{$c}*1000+.5), $c ); } } return wantarray ? @best_cont : $best_cont[0]; } +# retry if +sub _try_a_ping { + my ($self, $seen, $mirror, $ping_cache_limit ) = @_; + + ( ! exists $seen->{$mirror->hostname} ) + or + ( + ! defined $seen->{$mirror->hostname}->rtt + or + time - $seen->{$mirror->hostname}->rtt > $ping_cache_limit + ) +} + +sub _get_median_ping_time { + my ($self, $tests, $verbose ) = @_; + + my @sorted = sort { $a <=> $b } @$tests; + + my $median = do { + if ( @sorted == 0 ) { undef } + elsif ( @sorted == 1 ) { $sorted[0] } + elsif ( @sorted % 2 ) { $sorted[ int(@sorted / 2) ] } + else { + my $mid_high = int(@sorted/2); + ($sorted[$mid_high-1] + $sorted[$mid_high])/2; + } + }; + + printf "\t-->median time: %0.2f ms\n", $median * 1000 if $verbose; + + return $median; +} + # Adapted from Parse::CPAN::MirroredBy by Adam Kennedy sub _parse { my ($self, $file, $handle) = @_; my $output = $self->{mirrors}; - my $geo = $self->{geography}; + my $geo = $self->{geography}; local $/ = "\012"; my $line = 0; @@ -193,7 +440,7 @@ sub _parse { $mirror ||= {}; if ( $prop eq 'dst_location' ) { my (@location,$continent,$country); - @location = (split /\s*,\s*/, $value) + @location = (split /\s*,\s*/, $value) and ($continent, $country) = @location[-1,-2]; $continent =~ s/\s\(.*//; $continent =~ s/\W+$//; # if Jarkko doesn't know latitude/longitude @@ -244,35 +491,61 @@ sub new { $arg ||= {}; bless $arg, $self; } -sub hostname { shift->{hostname} } -sub continent { shift->{continent} } -sub country { shift->{country} } -sub http { shift->{http} || '' } -sub ftp { shift->{ftp} || '' } -sub rsync { shift->{rsync} || '' } - -sub url { +sub hostname { shift->{hostname} } +sub continent { shift->{continent} } +sub country { shift->{country} } +sub http { shift->{http} || '' } +sub ftp { shift->{ftp} || '' } +sub rsync { shift->{rsync} || '' } +sub rtt { shift->{rtt} } +sub ping_time { shift->{ping_time} } + +sub url { my $self = shift; return $self->{http} || $self->{ftp}; } sub ping { my $self = shift; + my $ping = Net::Ping->new("tcp",1); my ($proto) = $self->url =~ m{^([^:]+)}; my $port = $proto eq 'http' ? 80 : 21; return unless $port; - if ( $ping->can('port_number') ) { - $ping->port_number($port); + + if ( $ping->can('port_number') ) { + $ping->port_number($port); } else { $ping->{'port_num'} = $port; } + $ping->hires(1) if $ping->can('hires'); my ($alive,$rtt) = $ping->ping($self->hostname); - return $alive ? $rtt : undef; + + $self->{rtt} = $alive ? $rtt : undef; + $self->{ping_time} = time; + + $self->rtt; } 1; +=back + +=head1 AUTHOR + +Andreas Koenig C<< >>, David Golden C<< >>, +brian d foy C<< >> + +=head1 LICENSE + +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +See L + + + +=cut diff --git a/cpan/CPAN/lib/CPAN/Shell.pm b/cpan/CPAN/lib/CPAN/Shell.pm index 9effb0d2e7..21441df653 100644 --- a/cpan/CPAN/lib/CPAN/Shell.pm +++ b/cpan/CPAN/lib/CPAN/Shell.pm @@ -653,7 +653,7 @@ sub mkmyconfig { "CPAN::MyConfig already exists as $configpm.\n" . "Running configuration again...\n" ); - require CPAN::FirstTime; + require CPAN::FirstTime; CPAN::FirstTime::init($configpm); } else { @@ -1221,6 +1221,7 @@ sub autobundle { $fh->close; $CPAN::Frontend->myprint("\nWrote bundle file $to\n\n"); + return $to; } #-> sub CPAN::Shell::expandany ; @@ -1684,7 +1685,7 @@ sub rematein { if ($meth =~ /^($needs_recursion_protection)$/) { # it would be silly to check for recursion for look or dump # (we are in CPAN::Shell::rematein) - CPAN->debug("Going to test against recursion") if $CPAN::DEBUG; + CPAN->debug("Testing against recursion") if $CPAN::DEBUG; eval { $obj->color_cmd_tmps(0,1); }; if ($@) { if (ref $@ @@ -1847,7 +1848,7 @@ sub recent { my($self) = @_; if ($CPAN::META->has_inst("XML::LibXML")) { my $url = $CPAN::Defaultrecent; - $CPAN::Frontend->myprint("Going to fetch '$url'\n"); + $CPAN::Frontend->myprint("Fetching '$url'\n"); unless ($CPAN::META->has_usable("LWP")) { $CPAN::Frontend->mydie("LWP not installed; cannot continue"); } @@ -1935,7 +1936,7 @@ sub smoke { my $distros = $self->recent; DISTRO: for my $distro (@$distros) { next if $distro =~ m|/Bundle-|; # XXX crude heuristic to skip bundles - $CPAN::Frontend->myprint(sprintf "Going to download and test '$distro'\n"); + $CPAN::Frontend->myprint(sprintf "Downloading and testing '$distro'\n"); { my $skip = 0; local $SIG{INT} = sub { $skip = 1 }; diff --git a/pod/perldelta.pod b/pod/perldelta.pod index a6388a337f..b21b2a653d 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -105,6 +105,10 @@ XXX =item * +L has been upgraded from version 1.9600 to version 1.9800 + +=item * + L has been upgraded from version 0.9108 to version 0.9109 Fixed support for v-strings and x.y.z versions with v5.8.4 -- cgit v1.2.1 From 944f470e93f75e083f15437b49be527ccd2468ba Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 7 Aug 2011 15:46:09 +0200 Subject: In embed.pl, remove unused parameter $keep_pre from readvars(). $keep_pre was added by commit c6af7a1aaf1f569e in 1998, and the last user removed by commit 51371543ca1a75ed in 1999. --- regen/embed.pl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/regen/embed.pl b/regen/embed.pl index dac4d45089..20bb177e24 100755 --- a/regen/embed.pl +++ b/regen/embed.pl @@ -360,8 +360,8 @@ EOF warn "$unflagged_pointers pointer arguments to clean up\n" if $unflagged_pointers; walk_table(\&write_global_sym, "global.sym"); -sub readvars(\%$$@) { - my ($syms, $file,$pre,$keep_pre) = @_; +sub readvars(\%$$) { + my ($syms, $file, $pre) = @_; local (*FILE, $_); open(FILE, "< $file") or die "embed.pl: Can't open $file: $!\n"; @@ -369,7 +369,6 @@ sub readvars(\%$$@) { s/[ \t]*#.*//; # Delete comments. if (/PERLVARA?I?C?\($pre(\w+)/) { my $sym = $1; - $sym = $pre . $sym if $keep_pre; warn "duplicate symbol $sym while processing $file line $.\n" if exists $$syms{$sym}; $$syms{$sym} = $pre || 1; -- cgit v1.2.1 From adf34b4b4a293cee5d4f61b17ac556417fa34709 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 7 Aug 2011 16:04:26 +0200 Subject: In embed.pl, refactor readvars() to return a sorted list. Previously it would assign to the hash reference passed to it. However, the rest of the code only ever used the keys of that hash, in sorted order, so it is simpler to change readvars() to return that list directly. Also move the declaration of the lexical $sym down to its first point of use. --- regen/embed.pl | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/regen/embed.pl b/regen/embed.pl index 20bb177e24..fa9c1686ad 100755 --- a/regen/embed.pl +++ b/regen/embed.pl @@ -360,30 +360,25 @@ EOF warn "$unflagged_pointers pointer arguments to clean up\n" if $unflagged_pointers; walk_table(\&write_global_sym, "global.sym"); -sub readvars(\%$$) { - my ($syms, $file, $pre) = @_; +sub readvars { + my ($file, $pre) = @_; local (*FILE, $_); + my %seen; open(FILE, "< $file") or die "embed.pl: Can't open $file: $!\n"; while () { s/[ \t]*#.*//; # Delete comments. if (/PERLVARA?I?C?\($pre(\w+)/) { - my $sym = $1; - warn "duplicate symbol $sym while processing $file line $.\n" - if exists $$syms{$sym}; - $$syms{$sym} = $pre || 1; + warn "duplicate symbol $1 while processing $file line $.\n" + if $seen{$1}++; } } close(FILE); + return sort keys %seen; } -my %intrp; -my %globvar; - -readvars %intrp, 'intrpvar.h','I'; -readvars %globvar, 'perlvars.h','G'; - -my $sym; +my @intrp = readvars 'intrpvar.h','I'; +my @globvar = readvars 'perlvars.h','G'; sub undefine ($) { my ($sym) = @_; @@ -601,7 +596,9 @@ print $em <<'END'; END -for $sym (sort keys %intrp) { +my $sym; + +for $sym (@intrp) { print $em multon($sym,'I','vTHX->'); } @@ -613,7 +610,7 @@ print $em <<'END'; END -for $sym (sort keys %intrp) { +for $sym (@intrp) { print $em multoff($sym,'I'); } @@ -629,7 +626,7 @@ print $em <<'END'; END -for $sym (sort keys %globvar) { +for $sym (@globvar) { print $em "#ifdef OS2\n" if $sym eq 'sh_path'; print $em multon($sym, 'G','my_vars->'); print $em multon("G$sym",'', 'my_vars->'); @@ -642,7 +639,7 @@ print $em <<'END'; END -for $sym (sort keys %globvar) { +for $sym (@globvar) { print $em "#ifdef OS2\n" if $sym eq 'sh_path'; print $em multoff($sym,'G'); print $em "#endif\n" if $sym eq 'sh_path'; @@ -743,7 +740,7 @@ END_EXTERN_C EOT -foreach $sym (sort keys %globvar) { +foreach $sym (@globvar) { print $capih bincompat_var('G',$sym); } -- cgit v1.2.1 From 5f9c653531784e662e71052c2739c67e786c87f3 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 7 Aug 2011 16:16:00 +0200 Subject: In embed.pl, inline hide() and bincompat_var() into their only call point. hide() has only been used by bincompat_var() since commit acfe0abcedaf592f in 2001, and bincompat_var() only used in one place at the top level since commit 87b9e16005b9e39b in 2010. --- regen/embed.pl | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/regen/embed.pl b/regen/embed.pl index fa9c1686ad..232af368c2 100755 --- a/regen/embed.pl +++ b/regen/embed.pl @@ -380,11 +380,6 @@ sub readvars { my @intrp = readvars 'intrpvar.h','I'; my @globvar = readvars 'perlvars.h','G'; -sub undefine ($) { - my ($sym) = @_; - "#undef $sym\n"; -} - sub hide { my ($from, $to, $indent) = @_; $indent = '' unless defined $indent; @@ -392,12 +387,6 @@ sub hide { "#${indent}define $from" . "\t" x ($t < 3 ? 3 - $t : 1) . "$to\n"; } -sub bincompat_var ($$) { - my ($pfx, $sym) = @_; - my $arg = ($pfx eq 'G' ? 'NULL' : 'aTHX'); - undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr($arg))"); -} - sub multon ($$$) { my ($sym,$pre,$ptr) = @_; hide("PL_$sym", "($ptr$pre$sym)"); @@ -741,7 +730,8 @@ END_EXTERN_C EOT foreach $sym (@globvar) { - print $capih bincompat_var('G',$sym); + print $capih + "#undef PL_$sym\n" . hide("PL_$sym", "(*Perl_G${sym}_ptr(NULL))"); } print $capih <<'EOT'; -- cgit v1.2.1 From 1c8ee5951aa0bf17a19c80d9dc0f311dac8b5d4b Mon Sep 17 00:00:00 2001 From: "Chas. Owens" Date: Sun, 7 Aug 2011 12:37:10 -0700 Subject: [perl #96228] perlop misdocuments ${ qr/x/ } as undef --- pod/perlop.pod | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pod/perlop.pod b/pod/perlop.pod index f9d80d324c..9e83c52f82 100644 --- a/pod/perlop.pod +++ b/pod/perlop.pod @@ -1308,8 +1308,10 @@ in C. If "'" is used as the delimiter, no interpolation is done. Returns a Perl value which may be used instead of the corresponding C expression. The returned value is a normalized version of the original pattern. It magically differs from -a string containing the same characters: C returns "Regexp", -even though dereferencing the result returns undef. +a string containing the same characters: C returns "Regexp"; +however, dereferencing it is not well defined (you currently get the +normalized version of the original pattern, but this may change). + For example, -- cgit v1.2.1 From cfcf4a240719f70fa5174748462da13a5a8f0fd9 Mon Sep 17 00:00:00 2001 From: "H.Merijn Brand" Date: Mon, 8 Aug 2011 12:06:45 +0200 Subject: GNU gcc-4.6.1 revealed a broken system header on HP-UX 11.00 --- README.hpux | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/README.hpux b/README.hpux index 4af901f0c2..7bd4b93299 100644 --- a/README.hpux +++ b/README.hpux @@ -634,6 +634,27 @@ bug seems to be to create add to the file F Whether you are using NIS does not matter. Amazingly enough, the same bug also affects Solaris. +=head1 error: pasting ")" and "l" does not give a valid preprocessing token + +There seems to be a broken system header file in HP-UX 11.00 that +breaks perl building in 32bit mode with GNU gcc-4.x causing this +error. The same file for HP-UX 11.11 (even though the file is older) +does not show this failure, and has the correct definition, so the +best fix is to patch the header to match: + + --- /usr/include/inttypes.h 2001-04-20 18:42:14 +0200 + +++ /usr/include/inttypes.h 2000-11-14 09:00:00 +0200 + @@ -72,7 +72,7 @@ + #define UINT32_C(__c) __CONCAT_U__(__c) + #else /* __LP64 */ + #define INT32_C(__c) __CONCAT__(__c,l) + -#define UINT32_C(__c) __CONCAT__(__CONCAT_U__(__c),l) + +#define UINT32_C(__c) __CONCAT__(__c,ul) + #endif /* __LP64 */ + + #define INT64_C(__c) __CONCAT_L__(__c,l) + + =head1 Miscellaneous HP-UX 11 Y2K patch "Y2K-1100 B.11.00.B0125 HP-UX Core OS Year 2000 @@ -650,8 +671,4 @@ Jeff Okamoto With much assistance regarding shared libraries from Marc Sabatella. -=head1 DATE - -Version 0.8.3: 2008-06-24 - =cut -- cgit v1.2.1 From cc48f4fedf9571c3e9e06ccc0fb1a29756ea9f68 Mon Sep 17 00:00:00 2001 From: Chris 'BinGOs' Williams Date: Mon, 8 Aug 2011 11:02:50 +0100 Subject: Update Params-Check to CPAN version 0.32 [DELTA] Changes for 0.32 Mon Aug 8 10:53:36 2011 ============================================ * Removed unnecessary use Data::Dumper --- Porting/Maintainers.pl | 2 +- cpan/Params-Check/lib/Params/Check.pm | 4 +--- pod/perldelta.pod | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index cbd3392679..8a7c68b5b9 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -1372,7 +1372,7 @@ use File::Glob qw(:case); 'Params::Check' => { 'MAINTAINER' => 'kane', - 'DISTRIBUTION' => 'BINGOS/Params-Check-0.30.tar.gz', + 'DISTRIBUTION' => 'BINGOS/Params-Check-0.32.tar.gz', 'EXCLUDED' => [ qw( Params-Check-0.26.tar.gz ) ], 'FILES' => q[cpan/Params-Check], 'UPSTREAM' => 'cpan', diff --git a/cpan/Params-Check/lib/Params/Check.pm b/cpan/Params-Check/lib/Params/Check.pm index a86256d2c6..c1365a9abe 100644 --- a/cpan/Params-Check/lib/Params/Check.pm +++ b/cpan/Params-Check/lib/Params/Check.pm @@ -5,8 +5,6 @@ use strict; use Carp qw[carp croak]; use Locale::Maketext::Simple Style => 'gettext'; -use Data::Dumper; - BEGIN { use Exporter (); use vars qw[ @ISA $VERSION @EXPORT_OK $VERBOSE $ALLOW_UNKNOWN @@ -18,7 +16,7 @@ BEGIN { @ISA = qw[ Exporter ]; @EXPORT_OK = qw[check allow last_error]; - $VERSION = '0.30'; + $VERSION = '0.32'; $VERBOSE = $^W ? 1 : 0; $NO_DUPLICATES = 0; $STRIP_LEADING_DASHES = 0; diff --git a/pod/perldelta.pod b/pod/perldelta.pod index b21b2a653d..4082704d7e 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -167,7 +167,7 @@ Added C method. =item * -L has been upgraded from version 0.28 to version 0.30 +L has been upgraded from version 0.28 to version 0.32 =item * -- cgit v1.2.1 From 76c5dcfae755756b146d14a3b81f650bac8dbcb1 Mon Sep 17 00:00:00 2001 From: Florian Ragwitz Date: Mon, 8 Aug 2011 15:53:59 +0200 Subject: ExtUtils::Manifest 1.59 just made it to CPAN --- Porting/Maintainers.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 8a7c68b5b9..99f505a97b 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -744,7 +744,7 @@ use File::Glob qw(:case); 'ExtUtils::Manifest' => { 'MAINTAINER' => 'p5p', - 'DISTRIBUTION' => 'RKOBES/ExtUtils-Manifest-1.58.tar.gz', + 'DISTRIBUTION' => 'FLORA/ExtUtils-Manifest-1.59.tar.gz', 'FILES' => q[dist/ExtUtils-Manifest], 'UPSTREAM' => 'blead', }, -- cgit v1.2.1 From 4c782551eaaaa6b2b165b92d3c20aa8edc9c28d5 Mon Sep 17 00:00:00 2001 From: "Craig A. Berry" Date: Sun, 7 Aug 2011 11:05:40 -0500 Subject: Fix porting check for dots in directory names. The existing check conflated two different potential problems, multiple dots in a filename and dots in a directory name. Multiple dots in a filename can cause various kinds of trouble, depending on the VMS filesystem in use, but there are workarounds for older filesystems and this problem is unlikely to cause a build failure, so it's probably too stringent to make a test fail when we find them (and there are lots of examples already in the repository). *Any* dots in a directory name are problematic because dot is the directory delimiter. Newer (ODS-5) filesystems can handle these if escaping is done but older (ODS-2) filesystems can't and the manifest checker in configure.com can't. In other words, the build falls down hard in this case. The existing test was checking for multiple dots in a directory name but not checking the filename at all. I've changed it to check for any dots in a directory name. --- t/porting/filenames.t | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/t/porting/filenames.t b/t/porting/filenames.t index 93f9dce379..268dd1c8c5 100644 --- a/t/porting/filenames.t +++ b/t/porting/filenames.t @@ -61,8 +61,8 @@ sub validate_file_name { my @path_components = split('/',$path); pop @path_components; # throw away the filename for my $component (@path_components) { - if ($component =~ /\..*?\./) { - fail("no directory components containing more than one '.'"); + if ($component =~ /\./) { + fail("no directory components containing '.'"); return; } if (length $component > 32) { -- cgit v1.2.1 From 4df4e8c46d30f48994973aa13c4eb40ffb905021 Mon Sep 17 00:00:00 2001 From: Florian Ragwitz Date: Mon, 8 Aug 2011 16:37:33 +0200 Subject: Upgrade bignum to version 0.29 --- Porting/Maintainers.pl | 2 +- dist/bignum/lib/Math/BigFloat/Trace.pm | 2 +- dist/bignum/lib/Math/BigInt/Trace.pm | 2 +- dist/bignum/lib/bigrat.pm | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 99f505a97b..41a73d386d 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -334,7 +334,7 @@ use File::Glob qw(:case); 'bignum' => { 'MAINTAINER' => 'rafl', - 'DISTRIBUTION' => 'FLORA/bignum-0.28.tar.gz', + 'DISTRIBUTION' => 'FLORA/bignum-0.29.tar.gz', 'FILES' => q[dist/bignum], 'EXCLUDED' => [ qr{^inc/Module/}, qw(t/pod.t t/pod_cov.t) ], 'UPSTREAM' => 'blead', diff --git a/dist/bignum/lib/Math/BigFloat/Trace.pm b/dist/bignum/lib/Math/BigFloat/Trace.pm index 055d7b70d8..5e1636e59d 100644 --- a/dist/bignum/lib/Math/BigFloat/Trace.pm +++ b/dist/bignum/lib/Math/BigFloat/Trace.pm @@ -12,7 +12,7 @@ use vars qw($VERSION @ISA $PACKAGE @EXPORT_OK @ISA = qw(Exporter Math::BigFloat); -$VERSION = '0.28'; +$VERSION = '0.29'; use overload; # inherit overload from BigFloat diff --git a/dist/bignum/lib/Math/BigInt/Trace.pm b/dist/bignum/lib/Math/BigInt/Trace.pm index 59dcf43e94..5826f6123b 100644 --- a/dist/bignum/lib/Math/BigInt/Trace.pm +++ b/dist/bignum/lib/Math/BigInt/Trace.pm @@ -12,7 +12,7 @@ use vars qw($VERSION @ISA $PACKAGE @EXPORT_OK @ISA = qw(Exporter Math::BigInt); -$VERSION = '0.28'; +$VERSION = '0.29'; use overload; # inherit overload from BigInt diff --git a/dist/bignum/lib/bigrat.pm b/dist/bignum/lib/bigrat.pm index 907c13ceb5..6ba821d976 100644 --- a/dist/bignum/lib/bigrat.pm +++ b/dist/bignum/lib/bigrat.pm @@ -1,7 +1,7 @@ package bigrat; use 5.006; -$VERSION = '0.28'; +$VERSION = '0.29'; require Exporter; @ISA = qw( bigint ); @EXPORT_OK = qw( PI e bpi bexp ); -- cgit v1.2.1 From 8d38d4f3d12487d853d03228c4481161ddcd2632 Mon Sep 17 00:00:00 2001 From: Gerard Goossen Date: Sat, 6 Aug 2011 18:24:12 +0200 Subject: AASSIGN_COMMON var detection bug with logical operators, TODO test --- t/op/array.t | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/t/op/array.t b/t/op/array.t index f995ea34b2..f837e047ed 100644 --- a/t/op/array.t +++ b/t/op/array.t @@ -7,7 +7,7 @@ BEGIN { require 'test.pl'; -plan (130); +plan (131); # # @foo, @bar, and @ary are also used from tie-stdarray after tie-ing them @@ -427,6 +427,13 @@ sub test_arylen { (our $y, our $z) = ($x,$y); is("$x $y $z", "1 1 2"); } +{ + local $TODO = "AASSIGN_COMMON detection with logical operators"; + my $true = 1; + our($x,$y,$z) = (1..3); + (our $y, our $z) = $true && ($x,$y); + is("$x $y $z", "1 1 2"); +} # [perl #70171] { -- cgit v1.2.1 From 83f9fced9447634b1f940717275290f7a74ab633 Mon Sep 17 00:00:00 2001 From: Gerard Goossen Date: Sat, 6 Aug 2011 17:23:03 +0200 Subject: Move aassign common var detection to a separate function. --- embed.fnc | 3 ++ embed.h | 1 + op.c | 124 ++++++++++++++++++++++++++++++++++---------------------------- proto.h | 1 + 4 files changed, 73 insertions(+), 56 deletions(-) diff --git a/embed.fnc b/embed.fnc index f48d8ce9c7..e2309108b4 100644 --- a/embed.fnc +++ b/embed.fnc @@ -805,6 +805,9 @@ p |void |my_unexec Apa |OP* |newANONLIST |NULLOK OP* o Apa |OP* |newANONHASH |NULLOK OP* o Ap |OP* |newANONSUB |I32 floor|NULLOK OP* proto|NULLOK OP* block +#if defined(PERL_IN_OP_C) +i |bool |aassign_common_vars |NULLOK OP* o +#endif Apda |OP* |newASSIGNOP |I32 flags|NULLOK OP* left|I32 optype|NULLOK OP* right Apda |OP* |newCONDOP |I32 flags|NN OP* first|NULLOK OP* trueop|NULLOK OP* falseop Apd |CV* |newCONSTSUB |NULLOK HV* stash|NULLOK const char* name|NULLOK SV* sv diff --git a/embed.h b/embed.h index 0b3c4dca57..7fc3b211b8 100644 --- a/embed.h +++ b/embed.h @@ -1331,6 +1331,7 @@ #define mulexp10 S_mulexp10 # endif # if defined(PERL_IN_OP_C) +#define aassign_common_vars(a) S_aassign_common_vars(aTHX_ a) #define apply_attrs(a,b,c,d) S_apply_attrs(aTHX_ a,b,c,d) #define apply_attrs_my(a,b,c,d) S_apply_attrs_my(aTHX_ a,b,c,d) #define bad_type(a,b,c,d) S_bad_type(aTHX_ a,b,c,d) diff --git a/op.c b/op.c index 38cfc109e8..4187b50c6b 100644 --- a/op.c +++ b/op.c @@ -4798,6 +4798,73 @@ S_is_list_assignment(pTHX_ register const OP *o) return FALSE; } +/* + Helper function for newASSIGNOP to detection commonality between the + lhs and the rhs. Marks all variables with PL_generation. If it + returns TRUE the assignment must be able to handle common variables. +*/ +PERL_STATIC_INLINE bool +S_aassign_common_vars(pTHX_ OP* o) +{ + OP *lastop = o; + OP *curop; + for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) { + if (PL_opargs[curop->op_type] & OA_DANGEROUS) { + if (curop->op_type == OP_GV) { + GV *gv = cGVOPx_gv(curop); + if (gv == PL_defgv + || (int)GvASSIGN_GENERATION(gv) == PL_generation) + return TRUE; + GvASSIGN_GENERATION_set(gv, PL_generation); + } + else if (curop->op_type == OP_PADSV || + curop->op_type == OP_PADAV || + curop->op_type == OP_PADHV || + curop->op_type == OP_PADANY) + { + if (PAD_COMPNAME_GEN(curop->op_targ) + == (STRLEN)PL_generation) + return TRUE; + PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation); + + } + else if (curop->op_type == OP_RV2CV) + return TRUE; + else if (curop->op_type == OP_RV2SV || + curop->op_type == OP_RV2AV || + curop->op_type == OP_RV2HV || + curop->op_type == OP_RV2GV) { + if (lastop->op_type != OP_GV) /* funny deref? */ + return TRUE; + } + else if (curop->op_type == OP_PUSHRE) { +#ifdef USE_ITHREADS + if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) { + GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff)); + if (gv == PL_defgv + || (int)GvASSIGN_GENERATION(gv) == PL_generation) + return TRUE; + GvASSIGN_GENERATION_set(gv, PL_generation); + } +#else + GV *const gv + = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv; + if (gv) { + if (gv == PL_defgv + || (int)GvASSIGN_GENERATION(gv) == PL_generation) + return TRUE; + GvASSIGN_GENERATION_set(gv, PL_generation); + } +#endif + } + else + return TRUE; + } + lastop = curop; + } + return FALSE; +} + /* =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right @@ -4936,63 +5003,8 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right) */ if (maybe_common_vars) { - OP *lastop = o; PL_generation++; - for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) { - if (PL_opargs[curop->op_type] & OA_DANGEROUS) { - if (curop->op_type == OP_GV) { - GV *gv = cGVOPx_gv(curop); - if (gv == PL_defgv - || (int)GvASSIGN_GENERATION(gv) == PL_generation) - break; - GvASSIGN_GENERATION_set(gv, PL_generation); - } - else if (curop->op_type == OP_PADSV || - curop->op_type == OP_PADAV || - curop->op_type == OP_PADHV || - curop->op_type == OP_PADANY) - { - if (PAD_COMPNAME_GEN(curop->op_targ) - == (STRLEN)PL_generation) - break; - PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation); - - } - else if (curop->op_type == OP_RV2CV) - break; - else if (curop->op_type == OP_RV2SV || - curop->op_type == OP_RV2AV || - curop->op_type == OP_RV2HV || - curop->op_type == OP_RV2GV) { - if (lastop->op_type != OP_GV) /* funny deref? */ - break; - } - else if (curop->op_type == OP_PUSHRE) { -#ifdef USE_ITHREADS - if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) { - GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff)); - if (gv == PL_defgv - || (int)GvASSIGN_GENERATION(gv) == PL_generation) - break; - GvASSIGN_GENERATION_set(gv, PL_generation); - } -#else - GV *const gv - = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv; - if (gv) { - if (gv == PL_defgv - || (int)GvASSIGN_GENERATION(gv) == PL_generation) - break; - GvASSIGN_GENERATION_set(gv, PL_generation); - } -#endif - } - else - break; - } - lastop = curop; - } - if (curop != o) + if (aassign_common_vars(o)) o->op_private |= OPpASSIGN_COMMON; } diff --git a/proto.h b/proto.h index 2c63536ebc..1807b2f4a6 100644 --- a/proto.h +++ b/proto.h @@ -5458,6 +5458,7 @@ STATIC AV* S_mro_get_linear_isa_dfs(pTHX_ HV* stash, U32 level) STATIC NV S_mulexp10(NV value, I32 exponent); #endif #if defined(PERL_IN_OP_C) +PERL_STATIC_INLINE bool S_aassign_common_vars(pTHX_ OP* o); STATIC void S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); -- cgit v1.2.1 From 3023b5f30c62e26185b48118c7c84030adb5b623 Mon Sep 17 00:00:00 2001 From: Gerard Goossen Date: Sat, 6 Aug 2011 17:50:40 +0200 Subject: Change aassign_common_vars to check using the optree without using the linked list. Besides no longer depending on the op chain this also solves a bug where the common vars where not detected because of logical operators. --- op.c | 12 ++++++++---- t/op/array.t | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/op.c b/op.c index 4187b50c6b..f862cd88ff 100644 --- a/op.c +++ b/op.c @@ -4806,9 +4806,8 @@ S_is_list_assignment(pTHX_ register const OP *o) PERL_STATIC_INLINE bool S_aassign_common_vars(pTHX_ OP* o) { - OP *lastop = o; OP *curop; - for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) { + for (curop = cUNOPo->op_first; curop; curop=curop->op_sibling) { if (PL_opargs[curop->op_type] & OA_DANGEROUS) { if (curop->op_type == OP_GV) { GV *gv = cGVOPx_gv(curop); @@ -4834,7 +4833,7 @@ S_aassign_common_vars(pTHX_ OP* o) curop->op_type == OP_RV2AV || curop->op_type == OP_RV2HV || curop->op_type == OP_RV2GV) { - if (lastop->op_type != OP_GV) /* funny deref? */ + if (cUNOPx(curop)->op_first->op_type != OP_GV) /* funny deref? */ return TRUE; } else if (curop->op_type == OP_PUSHRE) { @@ -4860,7 +4859,11 @@ S_aassign_common_vars(pTHX_ OP* o) else return TRUE; } - lastop = curop; + + if (curop->op_flags & OPf_KIDS) { + if (aassign_common_vars(curop)) + return TRUE; + } } return FALSE; } @@ -5006,6 +5009,7 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right) PL_generation++; if (aassign_common_vars(o)) o->op_private |= OPpASSIGN_COMMON; + LINKLIST(o); } if (right && right->op_type == OP_SPLIT && !PL_madskills) { diff --git a/t/op/array.t b/t/op/array.t index f837e047ed..aec4b30167 100644 --- a/t/op/array.t +++ b/t/op/array.t @@ -428,7 +428,7 @@ sub test_arylen { is("$x $y $z", "1 1 2"); } { - local $TODO = "AASSIGN_COMMON detection with logical operators"; + # AASSIGN_COMMON detection with logical operators my $true = 1; our($x,$y,$z) = (1..3); (our $y, our $z) = $true && ($x,$y); -- cgit v1.2.1 From ea31ed6697f4ec8ba9adbd2e965d8912bb223307 Mon Sep 17 00:00:00 2001 From: Gerard Goossen Date: Mon, 8 Aug 2011 22:18:03 +0200 Subject: Only warn about "Statement unlikely to be reached" after an exec if exec is a statement. Moving the OP_EXEC check to finalize_optree changed that it would also warn if 'exec' is part of an expression. This patch changes the behaviour to only warn if 'exec' is the whole statement, which appears to be the behaviour before moving the check to finalize_optree. --- op.c | 9 +++++---- t/lib/warnings/op | 6 ++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/op.c b/op.c index f862cd88ff..d20009e265 100644 --- a/op.c +++ b/op.c @@ -1445,14 +1445,15 @@ S_finalize_op(pTHX_ OP* o) PL_curcop = ((COP*)o); /* for warnings */ break; case OP_EXEC: - if (o->op_next && o->op_next->op_type == OP_NEXTSTATE + if ( o->op_sibling + && (o->op_sibling->op_type == OP_NEXTSTATE || o->op_sibling->op_type == OP_DBSTATE) && ckWARN(WARN_SYNTAX)) { - if (o->op_next->op_sibling) { - const OPCODE type = o->op_next->op_sibling->op_type; + if (o->op_sibling->op_sibling) { + const OPCODE type = o->op_sibling->op_sibling->op_type; if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) { const line_t oldline = CopLINE(PL_curcop); - CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next)); + CopLINE_set(PL_curcop, CopLINE((COP*)o->op_sibling)); Perl_warner(aTHX_ packWARN(WARN_EXEC), "Statement unlikely to be reached"); Perl_warner(aTHX_ packWARN(WARN_EXEC), diff --git a/t/lib/warnings/op b/t/lib/warnings/op index e596e7918a..b3cb7d6bed 100644 --- a/t/lib/warnings/op +++ b/t/lib/warnings/op @@ -755,6 +755,12 @@ EXPECT Statement unlikely to be reached at - line 4. (Maybe you meant system() when you said exec()?) ######## +# op.c, no warning if exec isn't a statement. +use warnings 'syntax' ; +$a || exec "$^X -e 1" ; +my $a +EXPECT +######## # op.c my @a; defined(@a); EXPECT -- cgit v1.2.1 From d673215e89e48f1d926b059d6b44b3b8a681d538 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Mon, 8 Aug 2011 22:15:52 -0700 Subject: Make prototype("CORE::CORE") die once more. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commit b8c38f0a2a65 accidentally made prototype("CORE::CORE") return undef instead of dying. This is the only case that reached the line with the ‘Should not happen...’ comment. This commit changes it to be handled earlier and also adds an asser- tion to make sure that unreachable code really is unreachable (which it should be now, I think, I hope...). --- op.c | 4 ++-- t/op/cproto.t | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/op.c b/op.c index d20009e265..a1443850f3 100644 --- a/op.c +++ b/op.c @@ -10245,7 +10245,7 @@ Perl_core_prototype(pTHX_ SV *sv, const char *name, const STRLEN len, PERL_ARGS_ASSERT_CORE_PROTOTYPE; - if (!code) { + if (!code || code == -KEY_CORE) { if (croak) return (SV *)Perl_die(aTHX_ "Can't find an opnumber for \"%s\"", name @@ -10290,7 +10290,7 @@ Perl_core_prototype(pTHX_ SV *sv, const char *name, const STRLEN len, } i++; } - return NULL; /* Should not happen... */ + assert(0); return NULL; /* Should not happen... */ found: defgv = PL_opargs[i] & OA_DEFGV; oa = PL_opargs[i] >> OASHIFT; diff --git a/t/op/cproto.t b/t/op/cproto.t index ee9743375b..e1f3125dfc 100644 --- a/t/op/cproto.t +++ b/t/op/cproto.t @@ -7,7 +7,7 @@ BEGIN { } BEGIN { require './test.pl'; } -plan tests => 243; +plan tests => 244; while () { chomp; @@ -32,6 +32,7 @@ __LINE__ () __PACKAGE__ () __DATA__ undef __END__ undef +CORE unknown abs (_) accept (**) alarm (_) -- cgit v1.2.1 From fc09a9a0cfd399ade7b09bd087384df6b3d742dc Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 9 Aug 2011 09:24:20 +0200 Subject: Add uconfig64.sh to the list of files that Porting/checkcfgvar.pl checks. --- Porting/checkcfgvar.pl | 1 + 1 file changed, 1 insertion(+) diff --git a/Porting/checkcfgvar.pl b/Porting/checkcfgvar.pl index 60348855e6..50daa40111 100755 --- a/Porting/checkcfgvar.pl +++ b/Porting/checkcfgvar.pl @@ -40,6 +40,7 @@ my @CFG = ( "NetWare/config.wc", "symbian/config.sh", "uconfig.sh", + "uconfig64.sh", "plan9/config_sh.sample", "vos/config.alpha.def", "vos/config.ga.def", -- cgit v1.2.1 From cc3a8cf3b019ea5e5464be8d848b855817aa6c9a Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 9 Aug 2011 09:25:07 +0200 Subject: Add defaults for st_ino size/sign probes to uconfig64.sh These were not added in 668fdbe135fd76c7 because Porting/checkcfgvar.pl was not aware that uconfig64.sh needed testing. --- uconfig64.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/uconfig64.sh b/uconfig64.sh index a98abb6484..38784313b0 100644 --- a/uconfig64.sh +++ b/uconfig64.sh @@ -738,6 +738,8 @@ srand48_r_proto='0' srandom_r_proto='0' src='.' ssizetype=long +st_ino_sign='1' +st_ino_size='8' startperl='#!perl' stdchar=char stdio_base='((fp)->_IO_read_base)' -- cgit v1.2.1 From 2186be13a01ba687b2fe25f0d5c898031257c2b5 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 9 Aug 2011 09:44:54 +0200 Subject: Remove 5.8.x VOS specific code from Porting/checkcfgvar.pl. Commit 3fd80bd61943d0f8 in 2002 removed vos/config.{alpha,gf}.def from blead, but they were still present in maint-5.8, so the logic to process them was retained, to minimise the differences in the Porting/* scripts. maint-5.8 is EOL now, so these can be removed. --- Porting/checkcfgvar.pl | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/Porting/checkcfgvar.pl b/Porting/checkcfgvar.pl index 50daa40111..61ecb1e332 100755 --- a/Porting/checkcfgvar.pl +++ b/Porting/checkcfgvar.pl @@ -31,7 +31,6 @@ my %MASTER_CFG; my %lst; my @CFG = ( - # This list contains both 5.8.x and 5.9.x files, # we check from MANIFEST whether they are expected to be present. # We can't base our check on $], because that's the version of the # perl that we are running, not the version of the source tree. @@ -42,8 +41,6 @@ my @CFG = ( "uconfig.sh", "uconfig64.sh", "plan9/config_sh.sample", - "vos/config.alpha.def", - "vos/config.ga.def", "win32/config.bc", "win32/config.gc", "win32/config.gc64", @@ -118,12 +115,10 @@ for my $cfg (@CFG) { } # foo='bar' # foo=bar - # $foo='bar' # VOS 5.8.x specialty - # $foo=bar # VOS 5.8.x specialty - if (/^\$?(\w+)='(.*)'$/) { + if (/^(\w+)='(.*)'$/) { $cfg{$1}++; } - elsif (/^\$?(\w+)=(.*)$/) { + elsif (/^(\w+)=(.*)$/) { $cfg{$1}++; } elsif (/^\$\s+WC "(\w+)='(.*)'"$/) { -- cgit v1.2.1 From 12b81ca50a3ad3c06c786138add2f964cf24acb6 Mon Sep 17 00:00:00 2001 From: Tony Cook Date: Wed, 20 Jul 2011 20:23:15 +1000 Subject: work around a bug in dtrace - it strips const from function parameters With usedtrace this caused: - build failures under g++ (OS X) - const qualification warnings with gcc (OS X) The workaround simply adds const to char * parameters if not already present. The bug in dtrace was apparently reported to Sun in 2006: http://opensolaris.org/jive/thread.jspa?threadID=53810 Mozilla ran into the same problem: https://bugzilla.mozilla.org/show_bug.cgi?id=593483 --- Makefile.SH | 5 ++++- perldtrace.d | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Makefile.SH b/Makefile.SH index 714d78c202..b1045624d9 100755 --- a/Makefile.SH +++ b/Makefile.SH @@ -749,8 +749,11 @@ else case "$dtrace_h" in ?*) $spitshell >>$Makefile <<'!NO!SUBS!' +# dtrace dicards const qualifiers from arguments, put them back $(DTRACE_H): perldtrace.d - $(DTRACE) -h -s perldtrace.d -o $(DTRACE_H) + $(DTRACE) -h -s perldtrace.d -o $(DTRACE_H).in + sed -e '/const/!s/char \*/const char */g' $(DTRACE_H).in >$(DTRACE_H) + $(RMS) $(DTRACE_H).in mydtrace.h: $(DTRACE_H) diff --git a/perldtrace.d b/perldtrace.d index f87a27adaf..95eb0664da 100644 --- a/perldtrace.d +++ b/perldtrace.d @@ -4,8 +4,8 @@ */ provider perl { - probe sub__entry(char *, char *, int, char *); - probe sub__return(char *, char *, int, char *); + probe sub__entry(const char *, const char *, int, const char *); + probe sub__return(const char *, const char *, int, const char *); probe phase__change(const char *, const char *); }; -- cgit v1.2.1 From 1750d3ff2eed6c4b057e139a98d99b148b9fc4c6 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 9 Aug 2011 10:51:09 +0200 Subject: In checkcfgvar.pl, inline check_cfg() into its only caller. --- Porting/checkcfgvar.pl | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/Porting/checkcfgvar.pl b/Porting/checkcfgvar.pl index 61ecb1e332..b7022dc22f 100755 --- a/Porting/checkcfgvar.pl +++ b/Porting/checkcfgvar.pl @@ -87,19 +87,6 @@ read_file("MANIFEST", my @MASTER_CFG = sort keys %MASTER_CFG; -sub check_cfg { - my ($fn, $cfg) = @_; - for my $v (@MASTER_CFG) { - exists $cfg->{$v} and next; - if ($opt_l) { - $lst{$fn}{$v}++; - } - else { - print "$fn: missing '$v'\n"; - } - } -} - for my $cfg (@CFG) { unless (exists $MANIFEST{$cfg}) { print STDERR "[skipping not-expected '$cfg']\n"; @@ -130,7 +117,16 @@ for my $cfg (@CFG) { if ($cfg eq 'configure.com') { $cfg{startperl}++; # Cheat. } - check_cfg($cfg, \%cfg); + + for my $v (@MASTER_CFG) { + exists $cfg{$v} and next; + if ($opt_l) { + $lst{$cfg}{$v}++; + } + else { + print "$cfg: missing '$v'\n"; + } + } } $opt_l and print "$_\n" for sort keys %lst; -- cgit v1.2.1 From 4ccedf19068db1b38e89a50a04ef6c446c6716df Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 9 Aug 2011 11:30:35 +0200 Subject: In checkcfgvar.pl, inline and eliminate read_file() and config_h_SH_reader(). config_h_SH_reader() was called once in one place, to generate a closure passed to read_file(). In turn, read_file()'s use of a callback to process lines of the file that it opened concealed the near-linear flow of control. use autodie; to simplify the error handling. --- Porting/checkcfgvar.pl | 81 +++++++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 44 deletions(-) diff --git a/Porting/checkcfgvar.pl b/Porting/checkcfgvar.pl index b7022dc22f..e8342eac40 100755 --- a/Porting/checkcfgvar.pl +++ b/Porting/checkcfgvar.pl @@ -11,6 +11,7 @@ use strict; use warnings; +use autodie; sub usage { @@ -52,38 +53,27 @@ my @CFG = ( "Porting/config.sh", ); -sub read_file { - my ($fn, $sub) = @_; - if (open(my $fh, $fn)) { - local $_; - while (<$fh>) { - &$sub; - } - } else { - die "$0: Failed to open '$fn' for reading: $!\n"; - } -} - -sub config_h_SH_reader { - my $cfg = shift; - return sub { +{ + open my $fh, '<', $MASTER_CFG; + while (<$fh>) { while (/[^\\]\$([a-z]\w+)/g) { my $v = $1; next if $v =~ /^(CONFIG_H|CONFIG_SH)$/; - $cfg->{$v}++; + $MASTER_CFG{$v}++; } } + close $fh; } -read_file($MASTER_CFG, - config_h_SH_reader(\%MASTER_CFG)); - my %MANIFEST; -read_file("MANIFEST", - sub { - $MANIFEST{$1}++ if /^(.+?)\t/; - }); +{ + open my $fh, '<', 'MANIFEST'; + while (<$fh>) { + $MANIFEST{$1}++ if /^(.+?)\t/; + } + close $fh; +} my @MASTER_CFG = sort keys %MASTER_CFG; @@ -93,27 +83,30 @@ for my $cfg (@CFG) { next; } my %cfg; - read_file($cfg, - sub { - return if /^\#/ || /^\s*$/ || /^\:/; - if ($cfg eq 'configure.com') { - s/(\s*!.*|\s*)$//; # remove trailing comments or whitespace - return if ! /^\$\s+WC "(\w+)='(.*)'"$/; - } - # foo='bar' - # foo=bar - if (/^(\w+)='(.*)'$/) { - $cfg{$1}++; - } - elsif (/^(\w+)=(.*)$/) { - $cfg{$1}++; - } - elsif (/^\$\s+WC "(\w+)='(.*)'"$/) { - $cfg{$1}++; - } else { - warn "$cfg:$.:$_"; - } - }); + + open my $fh, '<', $cfg; + while (<$fh>) { + next if /^\#/ || /^\s*$/ || /^\:/; + if ($cfg eq 'configure.com') { + s/(\s*!.*|\s*)$//; # remove trailing comments or whitespace + next if ! /^\$\s+WC "(\w+)='(.*)'"$/; + } + # foo='bar' + # foo=bar + if (/^(\w+)='(.*)'$/) { + $cfg{$1}++; + } + elsif (/^(\w+)=(.*)$/) { + $cfg{$1}++; + } + elsif (/^\$\s+WC "(\w+)='(.*)'"$/) { + $cfg{$1}++; + } else { + warn "$cfg:$.:$_"; + } + } + close $fh; + if ($cfg eq 'configure.com') { $cfg{startperl}++; # Cheat. } -- cgit v1.2.1 From 2dcb77c26736076b3481dcbbca7b173a29d8a0e4 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 9 Aug 2011 11:47:50 +0200 Subject: In checkcfgvar.pl, eliminate the file-scope lexical %MASTER_CFG. --- Porting/checkcfgvar.pl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Porting/checkcfgvar.pl b/Porting/checkcfgvar.pl index e8342eac40..66787d5ae1 100755 --- a/Porting/checkcfgvar.pl +++ b/Porting/checkcfgvar.pl @@ -28,7 +28,6 @@ GetOptions ( ) or usage (1); my $MASTER_CFG = "config_h.SH"; -my %MASTER_CFG; my %lst; my @CFG = ( @@ -53,16 +52,19 @@ my @CFG = ( "Porting/config.sh", ); +my @MASTER_CFG; { + my %seen; open my $fh, '<', $MASTER_CFG; while (<$fh>) { while (/[^\\]\$([a-z]\w+)/g) { my $v = $1; next if $v =~ /^(CONFIG_H|CONFIG_SH)$/; - $MASTER_CFG{$v}++; + $seen{$v}++; } } close $fh; + @MASTER_CFG = sort keys %seen; } my %MANIFEST; @@ -75,8 +77,6 @@ my %MANIFEST; close $fh; } -my @MASTER_CFG = sort keys %MASTER_CFG; - for my $cfg (@CFG) { unless (exists $MANIFEST{$cfg}) { print STDERR "[skipping not-expected '$cfg']\n"; -- cgit v1.2.1 From 68cf6151323b2a224f5d3e28a47922726683ff63 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 9 Aug 2011 12:06:08 +0200 Subject: In checkcfgvar.pl, eliminate the file-scope lexical %lst. --- Porting/checkcfgvar.pl | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Porting/checkcfgvar.pl b/Porting/checkcfgvar.pl index 66787d5ae1..f0800851d9 100755 --- a/Porting/checkcfgvar.pl +++ b/Porting/checkcfgvar.pl @@ -29,7 +29,6 @@ GetOptions ( my $MASTER_CFG = "config_h.SH"; -my %lst; my @CFG = ( # we check from MANIFEST whether they are expected to be present. # We can't base our check on $], because that's the version of the @@ -77,7 +76,7 @@ my %MANIFEST; close $fh; } -for my $cfg (@CFG) { +for my $cfg (sort @CFG) { unless (exists $MANIFEST{$cfg}) { print STDERR "[skipping not-expected '$cfg']\n"; next; @@ -111,15 +110,15 @@ for my $cfg (@CFG) { $cfg{startperl}++; # Cheat. } + my $problems; for my $v (@MASTER_CFG) { exists $cfg{$v} and next; if ($opt_l) { - $lst{$cfg}{$v}++; + # print the name once, for the first problem we encounter. + print "$cfg\n" unless $problems++; } else { print "$cfg: missing '$v'\n"; } } } - -$opt_l and print "$_\n" for sort keys %lst; -- cgit v1.2.1 From e46d973584785af1f445c4dedbee4243419cb860 Mon Sep 17 00:00:00 2001 From: Chris 'BinGOs' Williams Date: Tue, 9 Aug 2011 10:02:28 +0100 Subject: Update Encode to CPAN version 2.44 [DELTA] $Revision: 2.44 $ $Date: 2011/08/09 07:49:44 $ ! Unicode/Unicode.xs Addressed the following: Date: Fri, 22 Jul 2011 13:58:43 +0200 From: Robert Zacek To: perl5-security-report@perl.org Subject: Unicode.xs!decode_xs n-byte heap-overflow ! Encode.pm encoding.pm ! lib/Encode/Alias.pm lib/Encode/Encoder.pm lib/Encode/Guess.pm Applied: RT#69735: patch for use constant DEBUG => https://rt.cpan.org/Ticket/Update.html?id=69735 --- Porting/Maintainers.pl | 2 +- cpan/Encode/Changes | 16 ++++++++++++++-- cpan/Encode/Encode.pm | 6 +++--- cpan/Encode/META.yml | 4 ++-- cpan/Encode/Unicode/Unicode.xs | 7 +++++-- cpan/Encode/encoding.pm | 4 ++-- cpan/Encode/lib/Encode/Alias.pm | 4 ++-- cpan/Encode/lib/Encode/Encoder.pm | 6 +++--- cpan/Encode/lib/Encode/Guess.pm | 4 ++-- pod/perldelta.pod | 6 ++++++ 10 files changed, 40 insertions(+), 19 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 41a73d386d..8bd9af9e14 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -625,7 +625,7 @@ use File::Glob qw(:case); 'Encode' => { 'MAINTAINER' => 'dankogai', - 'DISTRIBUTION' => 'DANKOGAI/Encode-2.43.tar.gz', + 'DISTRIBUTION' => 'DANKOGAI/Encode-2.44.tar.gz', 'FILES' => q[cpan/Encode], 'UPSTREAM' => 'cpan', }, diff --git a/cpan/Encode/Changes b/cpan/Encode/Changes index 7df93305c1..54234214ca 100644 --- a/cpan/Encode/Changes +++ b/cpan/Encode/Changes @@ -1,8 +1,20 @@ # Revision history for Perl extension Encode. # -# $Id: Changes,v 2.43 2011/05/21 23:14:43 dankogai Exp dankogai $ +# $Id: Changes,v 2.44 2011/08/09 07:49:44 dankogai Exp dankogai $ # -$Revision: 2.43 $ $Date: 2011/05/21 23:14:43 $ +$Revision: 2.44 $ $Date: 2011/08/09 07:49:44 $ +! Unicode/Unicode.xs + Addressed the following: + Date: Fri, 22 Jul 2011 13:58:43 +0200 + From: Robert Zacek + To: perl5-security-report@perl.org + Subject: Unicode.xs!decode_xs n-byte heap-overflow +! Encode.pm encoding.pm +! lib/Encode/Alias.pm lib/Encode/Encoder.pm lib/Encode/Guess.pm + Applied: RT#69735: patch for use constant DEBUG => + https://rt.cpan.org/Ticket/Update.html?id=69735 + +2.43 2011/05/21 23:14:43 ! lib/Encode/Alias.pm Addressed RT#68361: Encode::Bytes x-mac-... aliases missing https://rt.cpan.org/Ticket/Display.html?id=68361 diff --git a/cpan/Encode/Encode.pm b/cpan/Encode/Encode.pm index b6bace911e..171b2da056 100644 --- a/cpan/Encode/Encode.pm +++ b/cpan/Encode/Encode.pm @@ -1,11 +1,11 @@ # -# $Id: Encode.pm,v 2.43 2011/05/21 23:14:43 dankogai Exp dankogai $ +# $Id: Encode.pm,v 2.44 2011/08/09 07:49:44 dankogai Exp dankogai $ # package Encode; use strict; use warnings; -our $VERSION = sprintf "%d.%02d", q$Revision: 2.43 $ =~ /(\d+)/g; -sub DEBUG () { 0 } +our $VERSION = sprintf "%d.%02d", q$Revision: 2.44 $ =~ /(\d+)/g; +use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; use XSLoader (); XSLoader::load( __PACKAGE__, $VERSION ); diff --git a/cpan/Encode/META.yml b/cpan/Encode/META.yml index 33861c70d9..d73458f7bd 100644 --- a/cpan/Encode/META.yml +++ b/cpan/Encode/META.yml @@ -1,6 +1,6 @@ --- #YAML:1.0 name: Encode -version: 2.43 +version: 2.44 abstract: ~ author: [] license: unknown @@ -14,7 +14,7 @@ no_index: directory: - t - inc -generated_by: ExtUtils::MakeMaker version 6.56 +generated_by: ExtUtils::MakeMaker version 6.57_05 meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 diff --git a/cpan/Encode/Unicode/Unicode.xs b/cpan/Encode/Unicode/Unicode.xs index 16f4cd1ff2..039f1559a3 100644 --- a/cpan/Encode/Unicode/Unicode.xs +++ b/cpan/Encode/Unicode/Unicode.xs @@ -1,5 +1,5 @@ /* - $Id: Unicode.xs,v 2.7 2010/12/31 22:48:48 dankogai Exp $ + $Id: Unicode.xs,v 2.8 2011/08/09 07:49:44 dankogai Exp dankogai $ */ #define PERL_NO_GET_CONTEXT @@ -256,7 +256,10 @@ CODE: This prevents allocating too much in the rogue case of a large input consisting initially of long sequence uft8-byte unicode chars followed by single utf8-byte chars. */ - STRLEN remaining = (e - s)/usize; + /* +1 + fixes Unicode.xs!decode_xs n-byte heap-overflow + */ + STRLEN remaining = (e - s)/usize + 1; /* +1 to avoid the leak */ STRLEN max_alloc = remaining + (8*1024*1024); STRLEN est_alloc = remaining * UTF8_MAXLEN; STRLEN newlen = SvLEN(result) + /* min(max_alloc, est_alloc) */ diff --git a/cpan/Encode/encoding.pm b/cpan/Encode/encoding.pm index be20a49448..24d6e5b66c 100644 --- a/cpan/Encode/encoding.pm +++ b/cpan/Encode/encoding.pm @@ -1,4 +1,4 @@ -# $Id: encoding.pm,v 2.8 2009/02/15 17:44:13 dankogai Exp $ +# $Id: encoding.pm,v 2.9 2011/08/09 07:49:44 dankogai Exp dankogai $ package encoding; our $VERSION = '2.6_01'; @@ -6,7 +6,7 @@ use Encode; use strict; use warnings; -sub DEBUG () { 0 } +use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; BEGIN { if ( ord("A") == 193 ) { diff --git a/cpan/Encode/lib/Encode/Alias.pm b/cpan/Encode/lib/Encode/Alias.pm index 604d39e41d..d744cc5e93 100644 --- a/cpan/Encode/lib/Encode/Alias.pm +++ b/cpan/Encode/lib/Encode/Alias.pm @@ -2,8 +2,8 @@ package Encode::Alias; use strict; use warnings; no warnings 'redefine'; -our $VERSION = do { my @r = ( q$Revision: 2.14 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; -sub DEBUG () { 0 } +our $VERSION = do { my @r = ( q$Revision: 2.15 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; +use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; use base qw(Exporter); diff --git a/cpan/Encode/lib/Encode/Encoder.pm b/cpan/Encode/lib/Encode/Encoder.pm index f7194f81ac..9a46d36743 100644 --- a/cpan/Encode/lib/Encode/Encoder.pm +++ b/cpan/Encode/lib/Encode/Encoder.pm @@ -1,17 +1,17 @@ # -# $Id: Encoder.pm,v 2.1 2006/05/03 18:24:10 dankogai Exp $ +# $Id: Encoder.pm,v 2.2 2011/08/09 07:49:44 dankogai Exp dankogai $ # package Encode::Encoder; use strict; use warnings; -our $VERSION = do { my @r = ( q$Revision: 2.1 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; +our $VERSION = do { my @r = ( q$Revision: 2.2 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw ( encoder ); our $AUTOLOAD; -sub DEBUG () { 0 } +use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; use Encode qw(encode decode find_encoding from_to); use Carp; diff --git a/cpan/Encode/lib/Encode/Guess.pm b/cpan/Encode/lib/Encode/Guess.pm index 9636a8ad8a..31ec58f4fc 100644 --- a/cpan/Encode/lib/Encode/Guess.pm +++ b/cpan/Encode/lib/Encode/Guess.pm @@ -2,10 +2,10 @@ package Encode::Guess; use strict; use warnings; use Encode qw(:fallbacks find_encoding); -our $VERSION = do { my @r = ( q$Revision: 2.4 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; +our $VERSION = do { my @r = ( q$Revision: 2.5 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; my $Canon = 'Guess'; -sub DEBUG () { 0 } +use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; our %DEF_SUSPECTS = map { $_ => find_encoding($_) } qw(ascii utf8); $Encode::Encoding{$Canon} = bless { Name => $Canon, diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 4082704d7e..1e5380e4f1 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -130,6 +130,12 @@ Will now croak if attempt to freeze/thaw DB_File object [RT #69985] =item * +L has been upgraded from version 2.43 to version 2.44 + +Addressed 'decode_xs n-byte heap-overflow' security bug in Unicode.xs + +=item * + L has been upgraded from version 1.56 to version 1.57. There is no change to ExtUtils::Install other than the version number -- cgit v1.2.1 From 2674d7ed407d638011150d4d3fbd7e660543480a Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 9 Aug 2011 06:05:58 -0700 Subject: Keep verbatim pod in File::Spec within 80 cols --- dist/Cwd/lib/File/Spec.pm | 8 +++++--- t/porting/known_pod_issues.dat | 1 - 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/dist/Cwd/lib/File/Spec.pm b/dist/Cwd/lib/File/Spec.pm index 34c527eea2..2d60b89a3c 100644 --- a/dist/Cwd/lib/File/Spec.pm +++ b/dist/Cwd/lib/File/Spec.pm @@ -3,7 +3,7 @@ package File::Spec; use strict; use vars qw(@ISA $VERSION); -$VERSION = '3.33'; +$VERSION = '3.34'; $VERSION = eval $VERSION; my %module = (MacOS => 'Mac', @@ -199,8 +199,10 @@ X X Splits a path in to volume, directory, and filename portions. On systems with no concept of volume, returns '' for volume. - ($volume,$directories,$file) = File::Spec->splitpath( $path ); - ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); + ($volume,$directories,$file) = + File::Spec->splitpath( $path ); + ($volume,$directories,$file) = + File::Spec->splitpath( $path, $no_file ); For systems with no syntax differentiating filenames from directories, assumes that the last file is a path unless C<$no_file> is true or a diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index e953ffa322..b67509bcd3 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -136,7 +136,6 @@ dist/bignum/lib/bigint.pm Apparent broken link 1 dist/bignum/lib/bignum.pm Apparent broken link 1 dist/bignum/lib/bigrat.pm Apparent broken link 1 dist/constant/lib/constant.pm Apparent broken link 2 -dist/cwd/lib/file/spec.pm Verbatim line length including indents exceeds 80 by 1 dist/cwd/lib/file/spec/mac.pm Verbatim line length including indents exceeds 80 by 9 dist/cwd/lib/file/spec/unix.pm Verbatim line length including indents exceeds 80 by 1 dist/cwd/lib/file/spec/vms.pm Verbatim line length including indents exceeds 80 by 1 -- cgit v1.2.1 From 7302ea77198bcd86f8ad20f42dc567c07277b526 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 9 Aug 2011 06:19:50 -0700 Subject: Keep verbatim pod in File::Mac/Unix within 80 cols --- dist/Cwd/lib/File/Spec/Mac.pm | 25 +++++++++++++++---------- dist/Cwd/lib/File/Spec/Unix.pm | 5 +++-- t/porting/known_pod_issues.dat | 2 -- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/dist/Cwd/lib/File/Spec/Mac.pm b/dist/Cwd/lib/File/Spec/Mac.pm index f47293cb2d..1fa533cd36 100644 --- a/dist/Cwd/lib/File/Spec/Mac.pm +++ b/dist/Cwd/lib/File/Spec/Mac.pm @@ -4,7 +4,7 @@ use strict; use vars qw(@ISA $VERSION); require File::Spec::Unix; -$VERSION = '3.34'; +$VERSION = '3.35'; $VERSION = eval $VERSION; @ISA = qw(File::Spec::Unix); @@ -156,13 +156,16 @@ their Unix counterparts: Unix: Unix->catdir("","") = "/" Unix->catdir("",".") = "/" - Unix->catdir("","..") = "/" # can't go beyond root + Unix->catdir("","..") = "/" # can't go + # beyond root Unix->catdir("",".","..","..","a") = "/a" Mac: - Mac->catdir("","") = rootdir() # (e.g. "HD:") + Mac->catdir("","") = rootdir() # (e.g. "HD:") Mac->catdir("",":") = rootdir() - Mac->catdir("","::") = rootdir() # can't go beyond root - Mac->catdir("",":","::","::","a") = rootdir() . "a:" # (e.g. "HD:a:") + Mac->catdir("","::") = rootdir() # can't go + # beyond root + Mac->catdir("",":","::","::","a") = rootdir() . "a:" + # (e.g. "HD:a:") However, this approach is limited to the first arguments following "root" (again, see Ccanonpath()> ). If there are more @@ -400,10 +403,11 @@ the filename '' is always considered to be absolute. Note that with version E.g. - File::Spec->file_name_is_absolute("a"); # false (relative) - File::Spec->file_name_is_absolute(":a:b:"); # false (relative) - File::Spec->file_name_is_absolute("MacintoshHD:"); # true (absolute) - File::Spec->file_name_is_absolute(""); # true (absolute) + File::Spec->file_name_is_absolute("a"); # false (relative) + File::Spec->file_name_is_absolute(":a:b:"); # false (relative) + File::Spec->file_name_is_absolute("MacintoshHD:"); + # true (absolute) + File::Spec->file_name_is_absolute(""); # true (absolute) =cut @@ -440,7 +444,8 @@ sub path { =item splitpath ($volume,$directories,$file) = File::Spec->splitpath( $path ); - ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); + ($volume,$directories,$file) = File::Spec->splitpath( $path, + $no_file ); Splits a path into volume, directory, and filename portions. diff --git a/dist/Cwd/lib/File/Spec/Unix.pm b/dist/Cwd/lib/File/Spec/Unix.pm index b276b21392..9f024e00be 100644 --- a/dist/Cwd/lib/File/Spec/Unix.pm +++ b/dist/Cwd/lib/File/Spec/Unix.pm @@ -3,7 +3,7 @@ package File::Spec::Unix; use strict; use vars qw($VERSION); -$VERSION = '3.33'; +$VERSION = '3.34'; $VERSION = eval $VERSION; =head1 NAME @@ -238,7 +238,8 @@ sub join { =item splitpath ($volume,$directories,$file) = File::Spec->splitpath( $path ); - ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); + ($volume,$directories,$file) = File::Spec->splitpath( $path, + $no_file ); Splits a path into volume, directory, and filename portions. On systems with no concept of volume, returns '' for volume. diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index b67509bcd3..53ffc01c24 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -136,8 +136,6 @@ dist/bignum/lib/bigint.pm Apparent broken link 1 dist/bignum/lib/bignum.pm Apparent broken link 1 dist/bignum/lib/bigrat.pm Apparent broken link 1 dist/constant/lib/constant.pm Apparent broken link 2 -dist/cwd/lib/file/spec/mac.pm Verbatim line length including indents exceeds 80 by 9 -dist/cwd/lib/file/spec/unix.pm Verbatim line length including indents exceeds 80 by 1 dist/cwd/lib/file/spec/vms.pm Verbatim line length including indents exceeds 80 by 1 dist/cwd/lib/file/spec/win32.pm Verbatim line length including indents exceeds 80 by 1 dist/data-dumper/dumper.pm ? Should you be using L<...> instead of 1 -- cgit v1.2.1 From 2f03b6be283ae09fca92d09e4e393d99ef1c38d4 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 9 Aug 2011 06:23:10 -0700 Subject: Keep verbatim pod in File::VMS/Win32 within 80 cols --- dist/Cwd/lib/File/Spec/VMS.pm | 5 +++-- dist/Cwd/lib/File/Spec/Win32.pm | 5 +++-- t/porting/known_pod_issues.dat | 2 -- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dist/Cwd/lib/File/Spec/VMS.pm b/dist/Cwd/lib/File/Spec/VMS.pm index 120575a3e0..9164dbcc59 100644 --- a/dist/Cwd/lib/File/Spec/VMS.pm +++ b/dist/Cwd/lib/File/Spec/VMS.pm @@ -4,7 +4,7 @@ use strict; use vars qw(@ISA $VERSION); require File::Spec::Unix; -$VERSION = '3.34'; +$VERSION = '3.35'; $VERSION = eval $VERSION; @ISA = qw(File::Spec::Unix); @@ -602,7 +602,8 @@ sub file_name_is_absolute { =item splitpath (override) ($volume,$directories,$file) = File::Spec->splitpath( $path ); - ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); + ($volume,$directories,$file) = File::Spec->splitpath( $path, + $no_file ); Passing a true value for C<$no_file> indicates that the path being split only contains directory components, even on systems where you diff --git a/dist/Cwd/lib/File/Spec/Win32.pm b/dist/Cwd/lib/File/Spec/Win32.pm index 81c0960bb5..fa5c3b16a6 100644 --- a/dist/Cwd/lib/File/Spec/Win32.pm +++ b/dist/Cwd/lib/File/Spec/Win32.pm @@ -5,7 +5,7 @@ use strict; use vars qw(@ISA $VERSION); require File::Spec::Unix; -$VERSION = '3.34'; +$VERSION = '3.35'; $VERSION = eval $VERSION; @ISA = qw(File::Spec::Unix); @@ -189,7 +189,8 @@ sub canonpath { =item splitpath ($volume,$directories,$file) = File::Spec->splitpath( $path ); - ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); + ($volume,$directories,$file) = File::Spec->splitpath( $path, + $no_file ); Splits a path into volume, directory, and filename portions. Assumes that the last file is a path unless the path ends in '\\', '\\.', '\\..' diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index 53ffc01c24..768ec0d58d 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -136,8 +136,6 @@ dist/bignum/lib/bigint.pm Apparent broken link 1 dist/bignum/lib/bignum.pm Apparent broken link 1 dist/bignum/lib/bigrat.pm Apparent broken link 1 dist/constant/lib/constant.pm Apparent broken link 2 -dist/cwd/lib/file/spec/vms.pm Verbatim line length including indents exceeds 80 by 1 -dist/cwd/lib/file/spec/win32.pm Verbatim line length including indents exceeds 80 by 1 dist/data-dumper/dumper.pm ? Should you be using L<...> instead of 1 dist/data-dumper/dumper.pm Verbatim line length including indents exceeds 80 by 1 dist/extutils-install/lib/extutils/installed.pm Verbatim line length including indents exceeds 80 by 2 -- cgit v1.2.1 From b877fea2fc789be8bb0df2db93ffe5c1ecb4fb33 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 9 Aug 2011 06:26:31 -0700 Subject: Keep verbatim pod in Data::Dumper within 80 cols --- dist/Data-Dumper/Dumper.pm | 16 ++++++++-------- t/porting/known_pod_issues.dat | 1 - 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/dist/Data-Dumper/Dumper.pm b/dist/Data-Dumper/Dumper.pm index d30c66cc60..748dd545f4 100644 --- a/dist/Data-Dumper/Dumper.pm +++ b/dist/Data-Dumper/Dumper.pm @@ -9,7 +9,7 @@ package Data::Dumper; -$VERSION = '2.131'; # Don't forget to set version and release date in POD! +$VERSION = '2.132'; # Don't forget to set version and release date in POD! #$| = 1; @@ -1106,20 +1106,20 @@ distribution for more examples.) print($@) if $@; print Dumper($boo), Dumper($bar); # pretty print (no array indices) - $Data::Dumper::Terse = 1; # don't output names where feasible - $Data::Dumper::Indent = 0; # turn off all pretty print + $Data::Dumper::Terse = 1; # don't output names where feasible + $Data::Dumper::Indent = 0; # turn off all pretty print print Dumper($boo), "\n"; - $Data::Dumper::Indent = 1; # mild pretty print + $Data::Dumper::Indent = 1; # mild pretty print print Dumper($boo); - $Data::Dumper::Indent = 3; # pretty print with array indices + $Data::Dumper::Indent = 3; # pretty print with array indices print Dumper($boo); - $Data::Dumper::Useqq = 1; # print strings in double quotes + $Data::Dumper::Useqq = 1; # print strings in double quotes print Dumper($boo); - $Data::Dumper::Pair = " : "; # specify hash key/value separator + $Data::Dumper::Pair = " : "; # specify hash key/value separator print Dumper($boo); @@ -1297,7 +1297,7 @@ modify it under the same terms as Perl itself. =head1 VERSION -Version 2.131 (May 27 2011) +Version 2.132 (August 20 2011) =head1 SEE ALSO diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index 768ec0d58d..7dd37953bb 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -137,7 +137,6 @@ dist/bignum/lib/bignum.pm Apparent broken link 1 dist/bignum/lib/bigrat.pm Apparent broken link 1 dist/constant/lib/constant.pm Apparent broken link 2 dist/data-dumper/dumper.pm ? Should you be using L<...> instead of 1 -dist/data-dumper/dumper.pm Verbatim line length including indents exceeds 80 by 1 dist/extutils-install/lib/extutils/installed.pm Verbatim line length including indents exceeds 80 by 2 dist/extutils-parsexs/lib/extutils/typemaps.pm Verbatim line length including indents exceeds 80 by 4 dist/extutils-parsexs/lib/extutils/typemaps/outputmap.pm Verbatim line length including indents exceeds 80 by 1 -- cgit v1.2.1 From 755104b1eda30228147f87b8af9b5cef37d565ff Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 9 Aug 2011 06:30:00 -0700 Subject: Keep verbatim pod in ExtUtils::Installed within 80 cols --- dist/ExtUtils-Install/lib/ExtUtils/Installed.pm | 6 ++++-- t/porting/known_pod_issues.dat | 1 - 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dist/ExtUtils-Install/lib/ExtUtils/Installed.pm b/dist/ExtUtils-Install/lib/ExtUtils/Installed.pm index afc52a5188..b4b7f7580f 100644 --- a/dist/ExtUtils-Install/lib/ExtUtils/Installed.pm +++ b/dist/ExtUtils-Install/lib/ExtUtils/Installed.pm @@ -383,7 +383,8 @@ the configuration information for a separate perl installation and pass that in. my $yoda_cfg = get_fake_config('yoda'); - my $yoda_inst = ExtUtils::Installed->new(config_override=>$yoda_cfg); + my $yoda_inst = + ExtUtils::Installed->new(config_override=>$yoda_cfg); Similarly, the parameter C may be a reference to an array which is used in place of the default module search paths @@ -399,7 +400,8 @@ you will want to set both together. The parameter C can be used to specify B paths to search for installed modules. For instance - my $installed = ExtUtils::Installed->new(extra_libs=>["/my/lib/path"]); + my $installed = + ExtUtils::Installed->new(extra_libs=>["/my/lib/path"]); This should only be necessary if C is not in PERL5LIB. diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index 7dd37953bb..d508354259 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -137,7 +137,6 @@ dist/bignum/lib/bignum.pm Apparent broken link 1 dist/bignum/lib/bigrat.pm Apparent broken link 1 dist/constant/lib/constant.pm Apparent broken link 2 dist/data-dumper/dumper.pm ? Should you be using L<...> instead of 1 -dist/extutils-install/lib/extutils/installed.pm Verbatim line length including indents exceeds 80 by 2 dist/extutils-parsexs/lib/extutils/typemaps.pm Verbatim line length including indents exceeds 80 by 4 dist/extutils-parsexs/lib/extutils/typemaps/outputmap.pm Verbatim line length including indents exceeds 80 by 1 dist/extutils-parsexs/lib/perlxs.pod Verbatim line length including indents exceeds 80 by 4 -- cgit v1.2.1 From e0a28d18583c9c77dd0a06307df78a2b2d755c5f Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 9 Aug 2011 08:33:56 -0700 Subject: Ignore another editor droppink --- t/porting/podcheck.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/t/porting/podcheck.t b/t/porting/podcheck.t index 85076d2294..1ab1c51446 100644 --- a/t/porting/podcheck.t +++ b/t/porting/podcheck.t @@ -306,7 +306,7 @@ my $non_pods = qr/ (?: \. | old # buildtoc output ) $ - ) | ~$ # Another editor dropping + ) | ~$ | \ \(Autosaved\)\.txt$ # Other editor droppings /x; -- cgit v1.2.1 From f78469763f3f5d11ff87e9bf38b99d9f860a1723 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 9 Aug 2011 16:13:42 -0700 Subject: Keep verbatim pod in ExtUtils::Typemaps within 80 cols --- dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm | 18 +++++++++++++----- t/porting/known_pod_issues.dat | 1 - 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm b/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm index 0f5d12c840..7ecc7777cd 100644 --- a/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm +++ b/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm @@ -2,7 +2,7 @@ package ExtUtils::Typemaps; use 5.006001; use strict; use warnings; -our $VERSION = '1.00'; +our $VERSION = '1.01'; #use Carp qw(croak); require ExtUtils::ParseXS; @@ -26,9 +26,14 @@ ExtUtils::Typemaps - Read/Write/Modify Perl/XS typemap files # add a mapping $typemap->add_typemap(ctype => 'NV', xstype => 'T_NV'); - $typemap->add_inputmap (xstype => 'T_NV', code => '$var = ($type)SvNV($arg);'); - $typemap->add_outputmap(xstype => 'T_NV', code => 'sv_setnv($arg, (NV)$var);'); - $typemap->add_string(string => $typemapstring); # will be parsed and merged + $typemap->add_inputmap( + xstype => 'T_NV', code => '$var = ($type)SvNV($arg);' + ); + $typemap->add_outputmap( + xstype => 'T_NV', code => 'sv_setnv($arg, (NV)$var);' + ); + $typemap->add_string(string => $typemapstring); + # will be parsed and merged # remove a mapping (same for remove_typemap and remove_outputmap...) $typemap->remove_inputmap(xstype => 'SomeType'); @@ -732,7 +737,10 @@ corresponding OUTPUT code: 'T_OUT' => ' { GV *gv = newGVgen("$Package"); if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) ) - sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); + sv_setsv( + $arg, + sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)) + ); else $arg = &PL_sv_undef; } diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index d508354259..db818eec27 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -137,7 +137,6 @@ dist/bignum/lib/bignum.pm Apparent broken link 1 dist/bignum/lib/bigrat.pm Apparent broken link 1 dist/constant/lib/constant.pm Apparent broken link 2 dist/data-dumper/dumper.pm ? Should you be using L<...> instead of 1 -dist/extutils-parsexs/lib/extutils/typemaps.pm Verbatim line length including indents exceeds 80 by 4 dist/extutils-parsexs/lib/extutils/typemaps/outputmap.pm Verbatim line length including indents exceeds 80 by 1 dist/extutils-parsexs/lib/perlxs.pod Verbatim line length including indents exceeds 80 by 4 dist/extutils-parsexs/lib/perlxstut.pod Verbatim line length including indents exceeds 80 by 9 -- cgit v1.2.1 From b879da0f8636785e611f9240e436a0af523f4c08 Mon Sep 17 00:00:00 2001 From: Karl Williamson Date: Mon, 8 Aug 2011 11:32:48 -0600 Subject: podcheck.t: Change verbatim line length max to 79 Some pagers reserve a column for their own use. This patch has podcheck.t warn if a verbatim line will wrap when such a pager is used in an 80 column terminal window. This effectively restores the situation to what it was before commit 2cd46bfd6d03cd8826c5e968efdd36416191bc8f, but the message is now honest about the situation, i.e., that 79 colummns are effectively the max without a warning. The point of this is to give a number to shoot for, 79, that will work almost always (I believe though that there are pagers that reserve 2 columns in some cases), but of course the data file is continued to be used to silence the warning if it isn't desired to get down to 79. --- t/porting/known_pod_issues.dat | 295 ++++++++++++++++++++++------------------- t/porting/podcheck.t | 13 +- 2 files changed, 163 insertions(+), 145 deletions(-) diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index db818eec27..bdd56a1514 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -136,190 +136,207 @@ dist/bignum/lib/bigint.pm Apparent broken link 1 dist/bignum/lib/bignum.pm Apparent broken link 1 dist/bignum/lib/bigrat.pm Apparent broken link 1 dist/constant/lib/constant.pm Apparent broken link 2 +dist/cwd/lib/file/spec/vms.pm Verbatim line length including indents exceeds 79 by 1 +dist/cwd/lib/file/spec/win32.pm Verbatim line length including indents exceeds 79 by 1 dist/data-dumper/dumper.pm ? Should you be using L<...> instead of 1 -dist/extutils-parsexs/lib/extutils/typemaps/outputmap.pm Verbatim line length including indents exceeds 80 by 1 -dist/extutils-parsexs/lib/perlxs.pod Verbatim line length including indents exceeds 80 by 4 -dist/extutils-parsexs/lib/perlxstut.pod Verbatim line length including indents exceeds 80 by 9 +dist/extutils-parsexs/lib/extutils/typemaps/outputmap.pm Verbatim line length including indents exceeds 79 by 1 +dist/extutils-parsexs/lib/perlxs.pod Verbatim line length including indents exceeds 79 by 4 +dist/extutils-parsexs/lib/perlxstut.pod Verbatim line length including indents exceeds 79 by 10 dist/filter-simple/lib/filter/simple.pm Verbatim paragraph in NAME section 1 -dist/i18n-langtags/lib/i18n/langtags.pm Verbatim line length including indents exceeds 80 by 2 -dist/io/io.pm Verbatim line length including indents exceeds 80 by 1 -dist/io/lib/io/socket/inet.pm Verbatim line length including indents exceeds 80 by 3 +dist/i18n-langtags/lib/i18n/langtags.pm Verbatim line length including indents exceeds 79 by 2 +dist/io/io.pm Verbatim line length including indents exceeds 79 by 1 +dist/io/lib/io/socket/inet.pm Verbatim line length including indents exceeds 79 by 5 dist/locale-maketext/lib/locale/maketext.pod No items in =over / =back list 1 -dist/locale-maketext/lib/locale/maketext.pod Verbatim line length including indents exceeds 80 by 1 +dist/locale-maketext/lib/locale/maketext.pod Verbatim line length including indents exceeds 79 by 1 dist/locale-maketext/lib/locale/maketext/tpj13.pod No items in =over / =back list 3 dist/math-bigint/lib/math/bigfloat.pm Apparent broken link 7 dist/math-bigint/lib/math/bigfloat.pm Apparent internal link is missing its forward slash 6 -dist/math-bigint/lib/math/bigfloat.pm Verbatim line length including indents exceeds 80 by 25 +dist/math-bigint/lib/math/bigfloat.pm Verbatim line length including indents exceeds 79 by 28 dist/math-bigint/lib/math/bigint.pm Apparent broken link 5 dist/math-bigint/lib/math/bigint.pm Apparent internal link is missing its forward slash 7 -dist/math-bigint/lib/math/bigint.pm Verbatim line length including indents exceeds 80 by 109 +dist/math-bigint/lib/math/bigint.pm Verbatim line length including indents exceeds 79 by 122 dist/math-bigint/lib/math/bigint.pm empty section in previous paragraph 1 dist/math-bigint/lib/math/bigint/calcemu.pm Apparent broken link 1 dist/math-bigint/lib/math/bigint/calcemu.pm empty section in previous paragraph 3 dist/math-bigrat/lib/math/bigrat.pm Apparent broken link 3 dist/math-bigrat/lib/math/bigrat.pm Apparent internal link is missing its forward slash 1 -dist/math-bigrat/lib/math/bigrat.pm Verbatim line length including indents exceeds 80 by 5 -dist/module-corelist/lib/module/corelist.pm Verbatim line length including indents exceeds 80 by 4 -dist/net-ping/lib/net/ping.pm Verbatim line length including indents exceeds 80 by 2 -dist/perlfaq/lib/perlfaq4.pod Verbatim line length including indents exceeds 80 by 14 -dist/perlfaq/lib/perlfaq5.pod Verbatim line length including indents exceeds 80 by 32 -dist/perlfaq/lib/perlfaq6.pod Verbatim line length including indents exceeds 80 by 34 -dist/perlfaq/lib/perlfaq7.pod Verbatim line length including indents exceeds 80 by 7 -dist/perlfaq/lib/perlfaq8.pod Verbatim line length including indents exceeds 80 by 20 -dist/perlfaq/lib/perlfaq9.pod Verbatim line length including indents exceeds 80 by 7 +dist/math-bigrat/lib/math/bigrat.pm Verbatim line length including indents exceeds 79 by 7 +dist/module-corelist/blib/script/corelist Verbatim line length including indents exceeds 79 by 1 +dist/module-corelist/lib/module/corelist.pm Verbatim line length including indents exceeds 79 by 4 +dist/net-ping/lib/net/ping.pm Verbatim line length including indents exceeds 79 by 2 +dist/perlfaq/lib/perlfaq2.pod Verbatim line length including indents exceeds 79 by 1 +dist/perlfaq/lib/perlfaq4.pod Verbatim line length including indents exceeds 79 by 16 +dist/perlfaq/lib/perlfaq5.pod Verbatim line length including indents exceeds 79 by 40 +dist/perlfaq/lib/perlfaq6.pod Verbatim line length including indents exceeds 79 by 36 +dist/perlfaq/lib/perlfaq7.pod Verbatim line length including indents exceeds 79 by 7 +dist/perlfaq/lib/perlfaq8.pod Verbatim line length including indents exceeds 79 by 20 +dist/perlfaq/lib/perlfaq9.pod Verbatim line length including indents exceeds 79 by 7 +dist/safe/safe.pm Verbatim line length including indents exceeds 79 by 1 dist/safe/safe.pm empty section in previous paragraph 1 -dist/selfloader/lib/selfloader.pm Verbatim line length including indents exceeds 80 by 10 -dist/storable/storable.pm Verbatim line length including indents exceeds 80 by 3 -dist/term-readline/lib/term/readline.pm Verbatim line length including indents exceeds 80 by 1 -dist/thread-queue/lib/thread/queue.pm Verbatim line length including indents exceeds 80 by 4 -dist/threads/lib/threads.pm Verbatim line length including indents exceeds 80 by 3 -ext/b/b/concise.pm Verbatim line length including indents exceeds 80 by 1 +dist/selfloader/lib/selfloader.pm Verbatim line length including indents exceeds 79 by 14 +dist/storable/storable.pm Verbatim line length including indents exceeds 79 by 4 +dist/term-readline/lib/term/readline.pm Verbatim line length including indents exceeds 79 by 1 +dist/thread-queue/lib/thread/queue.pm Verbatim line length including indents exceeds 79 by 4 +dist/threads/lib/threads.pm Verbatim line length including indents exceeds 79 by 3 +ext/b/b.pm Verbatim line length including indents exceeds 79 by 1 +ext/b/b/concise.pm Verbatim line length including indents exceeds 79 by 1 ext/devel-peek/peek.pm ? Should you be using L<...> instead of 2 -ext/devel-peek/peek.pm Verbatim line length including indents exceeds 80 by 2 -ext/dynaloader/dynaloader.pm Verbatim line length including indents exceeds 80 by 1 -ext/file-glob/glob.pm Verbatim line length including indents exceeds 80 by 12 -ext/hash-util-fieldhash/lib/hash/util/fieldhash.pm Verbatim line length including indents exceeds 80 by 2 -ext/i18n-langinfo/langinfo.pm Verbatim line length including indents exceeds 80 by 1 -ext/opcode/opcode.pm Verbatim line length including indents exceeds 80 by 7 -ext/posix/lib/posix.pod Verbatim line length including indents exceeds 80 by 28 -ext/re/re.pm Verbatim line length including indents exceeds 80 by 6 +ext/devel-peek/peek.pm Verbatim line length including indents exceeds 79 by 2 +ext/dynaloader/dynaloader.pm Verbatim line length including indents exceeds 79 by 1 +ext/file-glob/glob.pm Verbatim line length including indents exceeds 79 by 15 +ext/hash-util-fieldhash/lib/hash/util/fieldhash.pm Verbatim line length including indents exceeds 79 by 2 +ext/i18n-langinfo/langinfo.pm Verbatim line length including indents exceeds 79 by 1 +ext/opcode/opcode.pm Verbatim line length including indents exceeds 79 by 10 +ext/posix/lib/posix.pod Verbatim line length including indents exceeds 79 by 29 +ext/re/re.pm Verbatim line length including indents exceeds 79 by 6 ext/vms-dclsym/dclsym.pm ? Should you be using L<...> instead of 1 -ext/vms-dclsym/dclsym.pm Verbatim line length including indents exceeds 80 by 1 -ext/vms-stdio/stdio.pm Verbatim line length including indents exceeds 80 by 1 -ext/xs-apitest/apitest.pm Verbatim line length including indents exceeds 80 by 1 +ext/vms-dclsym/dclsym.pm Verbatim line length including indents exceeds 79 by 1 +ext/vms-stdio/stdio.pm Verbatim line length including indents exceeds 79 by 1 +ext/xs-apitest/apitest.pm Verbatim line length including indents exceeds 79 by 1 install ? Should you be using F<...> or maybe L<...> instead of 1 -install Verbatim line length including indents exceeds 80 by 8 -installhtml Verbatim line length including indents exceeds 80 by 5 +install Verbatim line length including indents exceeds 79 by 10 +installhtml Verbatim line length including indents exceeds 79 by 5 os2/os2/os2-extattr/extattr.pm ? Should you be using F<...> or maybe L<...> instead of 1 -os2/os2/os2-process/process.pm Verbatim line length including indents exceeds 80 by 20 -os2/os2/os2-rexx/dll/dll.pm Verbatim line length including indents exceeds 80 by 2 -os2/os2/os2-rexx/rexx.pm Verbatim line length including indents exceeds 80 by 1 -pod/perl.pod Verbatim line length including indents exceeds 80 by 7 -pod/perlaix.pod Verbatim line length including indents exceeds 80 by 6 +os2/os2/os2-process/process.pm Verbatim line length including indents exceeds 79 by 27 +os2/os2/os2-rexx/dll/dll.pm Verbatim line length including indents exceeds 79 by 2 +os2/os2/os2-rexx/rexx.pm Verbatim line length including indents exceeds 79 by 1 +pod/perl.pod Verbatim line length including indents exceeds 79 by 9 +pod/perlaix.pod Verbatim line length including indents exceeds 79 by 11 pod/perlapi.pod ? Should you be using L<...> instead of 86 -pod/perlapi.pod Verbatim line length including indents exceeds 80 by 6 +pod/perlapi.pod Verbatim line length including indents exceeds 79 by 24 pod/perlapi.pod unresolved internal link 3 -pod/perlapio.pod Verbatim line length including indents exceeds 80 by 5 -pod/perlbook.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlcall.pod Verbatim line length including indents exceeds 80 by 2 -pod/perlce.pod Verbatim line length including indents exceeds 80 by 2 -pod/perlclib.pod Verbatim line length including indents exceeds 80 by 3 -pod/perlcygwin.pod Verbatim line length including indents exceeds 80 by 22 -pod/perldbmfilter.pod Verbatim line length including indents exceeds 80 by 1 -pod/perldebguts.pod Verbatim line length including indents exceeds 80 by 55 -pod/perldebtut.pod Verbatim line length including indents exceeds 80 by 20 -pod/perldebug.pod Verbatim line length including indents exceeds 80 by 3 +pod/perlapio.pod Verbatim line length including indents exceeds 79 by 5 +pod/perlbook.pod Verbatim line length including indents exceeds 79 by 1 +pod/perlcall.pod Verbatim line length including indents exceeds 79 by 2 +pod/perlce.pod Verbatim line length including indents exceeds 79 by 2 +pod/perlclib.pod Verbatim line length including indents exceeds 79 by 3 +pod/perlcygwin.pod Verbatim line length including indents exceeds 79 by 27 +pod/perldbmfilter.pod Verbatim line length including indents exceeds 79 by 1 +pod/perldebguts.pod Verbatim line length including indents exceeds 79 by 68 +pod/perldebtut.pod Verbatim line length including indents exceeds 79 by 22 +pod/perldebug.pod Verbatim line length including indents exceeds 79 by 3 pod/perldiag.pod =item type mismatch 1 -pod/perldiag.pod Verbatim line length including indents exceeds 80 by 1 -pod/perldsc.pod Verbatim line length including indents exceeds 80 by 3 -pod/perldtrace.pod Verbatim line length including indents exceeds 80 by 21 -pod/perlebcdic.pod Verbatim line length including indents exceeds 80 by 272 -pod/perlembed.pod Verbatim line length including indents exceeds 80 by 14 +pod/perldiag.pod Verbatim line length including indents exceeds 79 by 2 +pod/perldsc.pod Verbatim line length including indents exceeds 79 by 4 +pod/perldtrace.pod Verbatim line length including indents exceeds 79 by 22 +pod/perlebcdic.pod Verbatim line length including indents exceeds 79 by 273 +pod/perlembed.pod Verbatim line length including indents exceeds 79 by 27 pod/perlfunc.pod There is more than one target 1 -pod/perlfunc.pod Verbatim line length including indents exceeds 80 by 157 -pod/perlgit.pod Verbatim line length including indents exceeds 80 by 13 -pod/perlgpl.pod Verbatim line length including indents exceeds 80 by 31 +pod/perlfunc.pod Verbatim line length including indents exceeds 79 by 168 +pod/perlgit.pod Verbatim line length including indents exceeds 79 by 14 +pod/perlgpl.pod Verbatim line length including indents exceeds 79 by 50 pod/perlguts.pod ? Should you be using F<...> or maybe L<...> instead of 2 pod/perlguts.pod ? Should you be using L<...> instead of 1 -pod/perlguts.pod Verbatim line length including indents exceeds 80 by 23 +pod/perlguts.pod Verbatim line length including indents exceeds 79 by 25 pod/perlhack.pod ? Should you be using L<...> instead of 1 -pod/perlhacktips.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlhist.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlhpux.pod Verbatim line length including indents exceeds 80 by 2 -pod/perlhurd.pod Verbatim line length including indents exceeds 80 by 2 +pod/perlhack.pod Verbatim line length including indents exceeds 79 by 1 +pod/perlhacktips.pod Verbatim line length including indents exceeds 79 by 1 +pod/perlhist.pod Verbatim line length including indents exceeds 79 by 2 +pod/perlhpux.pod Verbatim line length including indents exceeds 79 by 3 +pod/perlhurd.pod Verbatim line length including indents exceeds 79 by 2 pod/perlintern.pod ? Should you be using L<...> instead of 5 +pod/perlintern.pod Verbatim line length including indents exceeds 79 by 2 pod/perlinterp.pod ? Should you be using L<...> instead of 1 -pod/perlinterp.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlintro.pod Verbatim line length including indents exceeds 80 by 8 -pod/perliol.pod Verbatim line length including indents exceeds 80 by 7 -pod/perlipc.pod Verbatim line length including indents exceeds 80 by 18 -pod/perlirix.pod Verbatim line length including indents exceeds 80 by 4 -pod/perllocale.pod Verbatim line length including indents exceeds 80 by 4 -pod/perllol.pod Verbatim line length including indents exceeds 80 by 4 -pod/perlmacosx.pod Verbatim line length including indents exceeds 80 by 3 -pod/perlmod.pod Verbatim line length including indents exceeds 80 by 2 -pod/perlmodlib.pod Verbatim line length including indents exceeds 80 by 3 -pod/perlmodstyle.pod Verbatim line length including indents exceeds 80 by 2 -pod/perlmpeix.pod Verbatim line length including indents exceeds 80 by 2 +pod/perlinterp.pod Verbatim line length including indents exceeds 79 by 1 +pod/perlintro.pod Verbatim line length including indents exceeds 79 by 11 +pod/perliol.pod Verbatim line length including indents exceeds 79 by 8 +pod/perlipc.pod Verbatim line length including indents exceeds 79 by 21 +pod/perlirix.pod Verbatim line length including indents exceeds 79 by 4 +pod/perllocale.pod Verbatim line length including indents exceeds 79 by 4 +pod/perllol.pod Verbatim line length including indents exceeds 79 by 4 +pod/perlmacosx.pod Verbatim line length including indents exceeds 79 by 3 +pod/perlmod.pod Verbatim line length including indents exceeds 79 by 3 +pod/perlmodlib.pod Verbatim line length including indents exceeds 79 by 3 +pod/perlmodstyle.pod Verbatim line length including indents exceeds 79 by 2 +pod/perlmpeix.pod Verbatim line length including indents exceeds 79 by 2 pod/perlmroapi.pod ? Should you be using L<...> instead of 1 -pod/perlnetware.pod Verbatim line length including indents exceeds 80 by 4 -pod/perlnewmod.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlop.pod Verbatim line length including indents exceeds 80 by 26 +pod/perlnetware.pod Verbatim line length including indents exceeds 79 by 4 +pod/perlnewmod.pod Verbatim line length including indents exceeds 79 by 1 +pod/perlop.pod Verbatim line length including indents exceeds 79 by 30 pod/perlos2.pod ? Should you be using L<...> instead of 2 -pod/perlos2.pod Verbatim line length including indents exceeds 80 by 21 -pod/perlos390.pod Verbatim line length including indents exceeds 80 by 11 -pod/perlpacktut.pod Verbatim line length including indents exceeds 80 by 4 -pod/perlperf.pod Verbatim line length including indents exceeds 80 by 151 -pod/perlpodspec.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlpodstyle.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlreapi.pod Verbatim line length including indents exceeds 80 by 16 -pod/perlrebackslash.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlref.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlreguts.pod Verbatim line length including indents exceeds 80 by 13 -pod/perlrequick.pod Verbatim line length including indents exceeds 80 by 3 -pod/perlretut.pod Verbatim line length including indents exceeds 80 by 11 -pod/perlrun.pod Verbatim line length including indents exceeds 80 by 2 -pod/perlsolaris.pod Verbatim line length including indents exceeds 80 by 14 +pod/perlos2.pod Verbatim line length including indents exceeds 79 by 22 +pod/perlos390.pod Verbatim line length including indents exceeds 79 by 11 +pod/perlpacktut.pod Verbatim line length including indents exceeds 79 by 6 +pod/perlperf.pod Verbatim line length including indents exceeds 79 by 154 +pod/perlpodspec.pod Verbatim line length including indents exceeds 79 by 9 +pod/perlpodstyle.pod Verbatim line length including indents exceeds 79 by 1 +pod/perlreapi.pod Verbatim line length including indents exceeds 79 by 17 +pod/perlrebackslash.pod Verbatim line length including indents exceeds 79 by 1 +pod/perlref.pod Verbatim line length including indents exceeds 79 by 1 +pod/perlreguts.pod Verbatim line length including indents exceeds 79 by 17 +pod/perlrequick.pod Verbatim line length including indents exceeds 79 by 3 +pod/perlretut.pod Verbatim line length including indents exceeds 79 by 13 +pod/perlrun.pod Verbatim line length including indents exceeds 79 by 2 +pod/perlsec.pod Verbatim line length including indents exceeds 79 by 1 +pod/perlsolaris.pod Verbatim line length including indents exceeds 79 by 14 pod/perlsource.pod ? Should you be using F<...> or maybe L<...> instead of 1 pod/perlsub.pod ? Should you be using F<...> or maybe L<...> instead of 3 -pod/perlsub.pod Verbatim line length including indents exceeds 80 by 1 -pod/perlsymbian.pod Verbatim line length including indents exceeds 80 by 15 -pod/perlsyn.pod Verbatim line length including indents exceeds 80 by 6 -pod/perlthrtut.pod Verbatim line length including indents exceeds 80 by 4 -pod/perltie.pod Verbatim line length including indents exceeds 80 by 10 -pod/perltodo.pod Verbatim line length including indents exceeds 80 by 5 +pod/perlsub.pod Verbatim line length including indents exceeds 79 by 4 +pod/perlsymbian.pod Verbatim line length including indents exceeds 79 by 20 +pod/perlsyn.pod Verbatim line length including indents exceeds 79 by 7 +pod/perlthrtut.pod Verbatim line length including indents exceeds 79 by 5 +pod/perltie.pod Verbatim line length including indents exceeds 79 by 13 +pod/perltodo.pod Verbatim line length including indents exceeds 79 by 7 pod/perltodo.pod empty section in previous paragraph 2 -pod/perltoot.pod Verbatim line length including indents exceeds 80 by 1 +pod/perltoot.pod Verbatim line length including indents exceeds 79 by 1 pod/perltrap.pod ? Should you be using F<...> or maybe L<...> instead of 1 -pod/perltrap.pod Verbatim line length including indents exceeds 80 by 14 +pod/perltrap.pod Verbatim line length including indents exceeds 79 by 15 pod/perltru64.pod ? Should you be using F<...> or maybe L<...> instead of 1 -pod/perltru64.pod Verbatim line length including indents exceeds 80 by 4 +pod/perltru64.pod Verbatim line length including indents exceeds 79 by 4 pod/perlunifaq.pod empty section in previous paragraph 1 -pod/perluniintro.pod Verbatim line length including indents exceeds 80 by 1 +pod/perluniintro.pod Verbatim line length including indents exceeds 79 by 3 pod/perluniprops.pod =item type mismatch 6 -pod/perlvar.pod Verbatim line length including indents exceeds 80 by 9 +pod/perlvar.pod Verbatim line length including indents exceeds 79 by 9 pod/perlvms.pod ? Should you be using F<...> or maybe L<...> instead of 1 -pod/perlvms.pod Verbatim line length including indents exceeds 80 by 2 -pod/perlwin32.pod Verbatim line length including indents exceeds 80 by 12 -porting/epigraphs.pod Verbatim line length including indents exceeds 80 by 3 -porting/expand-macro.pl Verbatim line length including indents exceeds 80 by 2 +pod/perlvms.pod Verbatim line length including indents exceeds 79 by 2 +pod/perlwin32.pod Verbatim line length including indents exceeds 79 by 12 +porting/epigraphs.pod Verbatim line length including indents exceeds 79 by 3 +porting/expand-macro.pl Verbatim line length including indents exceeds 79 by 2 porting/how_to_write_a_perldelta.pod There is no NAME 1 -porting/how_to_write_a_perldelta.pod Verbatim line length including indents exceeds 80 by 3 -porting/pumpkin.pod Verbatim line length including indents exceeds 80 by 6 -porting/release_managers_guide.pod Verbatim line length including indents exceeds 80 by 7 +porting/how_to_write_a_perldelta.pod Verbatim line length including indents exceeds 79 by 3 +porting/pumpkin.pod Verbatim line length including indents exceeds 79 by 9 +porting/release_managers_guide.pod Verbatim line length including indents exceeds 79 by 9 porting/release_managers_guide.pod Verbatim paragraph in NAME section 1 porting/release_schedule.pod There is no NAME 1 -symbian/perlutil.pod Verbatim line length including indents exceeds 80 by 3 -utils/c2ph Verbatim line length including indents exceeds 80 by 42 +symbian/perlutil.pod Verbatim line length including indents exceeds 79 by 4 +utils/c2ph Verbatim line length including indents exceeds 79 by 44 utils/libnetcfg Apparent broken link 1 -vms/ext/filespec.pm Verbatim line length including indents exceeds 80 by 1 +vms/ext/filespec.pm Verbatim line length including indents exceeds 79 by 1 x2p/a2p.pod empty section in previous paragraph 2 -lib/benchmark.pm Verbatim line length including indents exceeds 80 by 4 +lib/benchmark.pm Verbatim line length including indents exceeds 79 by 4 lib/cpan/debug.pm There is no NAME 1 lib/cpan/handleconfig.pm =head2 without preceding higher level 1 lib/cpan/handleconfig.pm There is no NAME 1 -lib/class/struct.pm Verbatim line length including indents exceeds 80 by 6 +lib/class/struct.pm Verbatim line length including indents exceeds 79 by 7 lib/config.pod ? Should you be using L<...> instead of -1 lib/config.pod nested commands F<...F<...>...> 3 -lib/db.pm Verbatim line length including indents exceeds 80 by 2 -lib/english.pm Verbatim line length including indents exceeds 80 by 1 -lib/exporter.pm Verbatim line length including indents exceeds 80 by 2 -lib/extutils/embed.pm Verbatim line length including indents exceeds 80 by 1 -lib/extutils/xssymset.pm Verbatim line length including indents exceeds 80 by 1 -lib/file/basename.pm Verbatim line length including indents exceeds 80 by 2 -lib/file/find.pm Verbatim line length including indents exceeds 80 by 1 -lib/getopt/std.pm Verbatim line length including indents exceeds 80 by 1 -lib/perlio.pm Verbatim line length including indents exceeds 80 by 1 -lib/tie/hash.pm Verbatim line length including indents exceeds 80 by 3 -lib/tie/scalar.pm Verbatim line length including indents exceeds 80 by 1 -lib/unicode/ucd.pm Verbatim line length including indents exceeds 80 by 1 -lib/deprecate.pm Verbatim line length including indents exceeds 80 by 2 -lib/integer.pm Verbatim line length including indents exceeds 80 by 1 -lib/overload.pm Verbatim line length including indents exceeds 80 by 1 +lib/db.pm Verbatim line length including indents exceeds 79 by 2 +lib/dbm_filter.pm Verbatim line length including indents exceeds 79 by 1 +lib/dbm_filter/compress.pm Verbatim line length including indents exceeds 79 by 1 +lib/dbm_filter/encode.pm Verbatim line length including indents exceeds 79 by 1 +lib/dbm_filter/int32.pm Verbatim line length including indents exceeds 79 by 1 +lib/dbm_filter/null.pm Verbatim line length including indents exceeds 79 by 1 +lib/dbm_filter/utf8.pm Verbatim line length including indents exceeds 79 by 1 +lib/english.pm Verbatim line length including indents exceeds 79 by 1 +lib/exporter.pm Verbatim line length including indents exceeds 79 by 2 +lib/extutils/embed.pm Verbatim line length including indents exceeds 79 by 2 +lib/extutils/xssymset.pm Verbatim line length including indents exceeds 79 by 1 +lib/file/basename.pm Verbatim line length including indents exceeds 79 by 2 +lib/file/find.pm Verbatim line length including indents exceeds 79 by 1 +lib/getopt/std.pm Verbatim line length including indents exceeds 79 by 1 +lib/perlio.pm Verbatim line length including indents exceeds 79 by 2 +lib/pod/text/overstrike.pm Verbatim line length including indents exceeds 79 by 1 +lib/tie/array.pm Verbatim line length including indents exceeds 79 by 1 +lib/tie/hash.pm Verbatim line length including indents exceeds 79 by 3 +lib/tie/scalar.pm Verbatim line length including indents exceeds 79 by 1 +lib/unicode/ucd.pm Verbatim line length including indents exceeds 79 by 1 +lib/deprecate.pm Verbatim line length including indents exceeds 79 by 2 +lib/integer.pm Verbatim line length including indents exceeds 79 by 1 +lib/overload.pm Verbatim line length including indents exceeds 79 by 1 lib/perl5db.pl ? Should you be using L<...> instead of 1 -lib/perl5db.pl Verbatim line length including indents exceeds 80 by 1 -lib/strict.pm Verbatim line length including indents exceeds 80 by 1 -lib/utf8.pm Verbatim line length including indents exceeds 80 by 3 -lib/version.pod Verbatim line length including indents exceeds 80 by 2 -lib/version/internals.pod Verbatim line length including indents exceeds 80 by 2 -lib/vmsish.pm Verbatim line length including indents exceeds 80 by 1 +lib/perl5db.pl Verbatim line length including indents exceeds 79 by 1 +lib/strict.pm Verbatim line length including indents exceeds 79 by 1 +lib/utf8.pm Verbatim line length including indents exceeds 79 by 4 +lib/version.pod Verbatim line length including indents exceeds 79 by 2 +lib/version/internals.pod Verbatim line length including indents exceeds 79 by 2 +lib/vmsish.pm Verbatim line length including indents exceeds 79 by 1 diff --git a/t/porting/podcheck.t b/t/porting/podcheck.t index 1ab1c51446..6f71914a66 100644 --- a/t/porting/podcheck.t +++ b/t/porting/podcheck.t @@ -71,13 +71,14 @@ If a link is broken, but there is an existing internal target of the same name, it is likely that the internal target was meant, and the C<"/"> is missing from the CE> pod command. -=item Verbatim paragraphs that wrap in an 80 column window +=item Verbatim paragraphs that wrap in an 80 (including 1 spare) column window It's annoying to have lines wrap when displaying pod documentation in a -terminal window. This checks that all such lines fit, and for those that -don't, it tells you how much needs to be cut in order to fit. However, -if you're fixing these, keep in mind that some terminal/pager combinations -require really a maximum of 79 or 78 columns to display properly. +terminal window. This checks that all verbatim lines fit in a standard 80 +column window, even when using a pager that reserves a column for its own use. +(Thus the check is for a net of 79 columns.) +For those that lines that don't fit, it tells you how much needs to be cut in +order to fit. Often, the easiest thing to do to gain space for these is to lower the indent to just one space. @@ -279,7 +280,7 @@ my $data_dir = File::Spec->catdir($original_dir, 'porting'); my $known_issues = File::Spec->catfile($data_dir, 'known_pod_issues.dat'); my $copy_fh; -my $MAX_LINE_LENGTH = 80; # 80 columns +my $MAX_LINE_LENGTH = 79; # 79 columns my $INDENT = 7; # default nroff indent # Our warning messages. Better not have [('"] in them, as those are used as -- cgit v1.2.1 From d2086f64ccaad7c84018225dfbba1711f5364f2f Mon Sep 17 00:00:00 2001 From: Karl Williamson Date: Tue, 9 Aug 2011 22:08:07 -0600 Subject: autodoc.pl: output to fit in 79 columns --- autodoc.pl | 4 ++-- t/porting/known_pod_issues.dat | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/autodoc.pl b/autodoc.pl index 89b36df9b5..186ebd2411 100644 --- a/autodoc.pl +++ b/autodoc.pl @@ -197,7 +197,7 @@ removed without notice.\n\n" if $flags =~ /x/; print $fh "\t$ret" . ($large_ret ? ' ' : "\t") . "$n("; my $long_args; for (@args) { - if ($indent_size + 2 + length > 80) { + if ($indent_size + 2 + length > 79) { $long_args=1; $indent_size -= length($n) - 3; last; @@ -213,7 +213,7 @@ removed without notice.\n\n" if $flags =~ /x/; while () { if (!@args or length $args - && $indent_size + 3 + length($args[0]) + length $args > 80 + && $indent_size + 3 + length($args[0]) + length $args > 79 ) { print $fh $first ? '' : ( diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index bdd56a1514..1ee620d467 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -203,7 +203,7 @@ os2/os2/os2-rexx/rexx.pm Verbatim line length including indents exceeds 79 by 1 pod/perl.pod Verbatim line length including indents exceeds 79 by 9 pod/perlaix.pod Verbatim line length including indents exceeds 79 by 11 pod/perlapi.pod ? Should you be using L<...> instead of 86 -pod/perlapi.pod Verbatim line length including indents exceeds 79 by 24 +pod/perlapi.pod Verbatim line length including indents exceeds 79 by 6 pod/perlapi.pod unresolved internal link 3 pod/perlapio.pod Verbatim line length including indents exceeds 79 by 5 pod/perlbook.pod Verbatim line length including indents exceeds 79 by 1 @@ -235,7 +235,6 @@ pod/perlhist.pod Verbatim line length including indents exceeds 79 by 2 pod/perlhpux.pod Verbatim line length including indents exceeds 79 by 3 pod/perlhurd.pod Verbatim line length including indents exceeds 79 by 2 pod/perlintern.pod ? Should you be using L<...> instead of 5 -pod/perlintern.pod Verbatim line length including indents exceeds 79 by 2 pod/perlinterp.pod ? Should you be using L<...> instead of 1 pod/perlinterp.pod Verbatim line length including indents exceeds 79 by 1 pod/perlintro.pod Verbatim line length including indents exceeds 79 by 11 -- cgit v1.2.1 From dbef30a62b2ca0b18690e69cb7b13fa506da21d6 Mon Sep 17 00:00:00 2001 From: Mike Sheldrake Date: Wed, 10 Aug 2011 08:15:15 +0200 Subject: ExtUtils::ParseXS: Test All @INC Derived typemap Locations The ExtUtils::ParseXS tests would sometime fail to locate some core Perl typemaps in @INC. This fixes CPAN RT #70047. Patch slightly modified by Steffen Mueller. Includes the mandatory version bump to a development version. --- dist/ExtUtils-ParseXS/Changes | 5 +++++ dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm | 2 +- dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t | 15 ++++++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/dist/ExtUtils-ParseXS/Changes b/dist/ExtUtils-ParseXS/Changes index 2c32803039..b721f85f36 100644 --- a/dist/ExtUtils-ParseXS/Changes +++ b/dist/ExtUtils-ParseXS/Changes @@ -1,5 +1,10 @@ Revision history for Perl extension ExtUtils::ParseXS. +3.02_01 - ... + + - Test fix: Try all @INC-derived typemap locations. (CPAN RT #70047) + [Mike Sheldrake] + 3.02 - Thu Aug 4 18:19:00 CET 2011 - Test fix: Use File::Spec->catfile instead of catdir where appropriate. diff --git a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm index bb39bf3286..503ab8d1f7 100644 --- a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm +++ b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm @@ -35,7 +35,7 @@ our @EXPORT_OK = qw( process_file report_error_count ); -our $VERSION = '3.02'; +our $VERSION = '3.02_01'; $VERSION = eval $VERSION if $VERSION =~ /_/; # The scalars in the line below remain as 'our' variables because pulling diff --git a/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t b/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t index e9e7e59650..3b89706f34 100644 --- a/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t +++ b/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t @@ -17,7 +17,20 @@ use ExtUtils::ParseXS::Utilities qw( skip "No lib/ExtUtils/ directories under directories in \@INC", 1 unless @stl > 9; - ok( -f $stl[-10], + + # We check only as many location entries from the start of the array + # (where the @INC-related entries are) as there are entries from @INC. + # We manage to do that by stopping when we find the "updir" related + # entries, which we assume is never contained in a default @INC entry. + my $max = $#INC; + $max = $#stl if $#stl < $max; + foreach my $i (0.. $max) { + $max = $i, last if $stl[$i] =~ /\Q$updir\E/; + } + + my $updir = File::Spec->updir; + ok( + ( 0 < (grep -f $_, @stl[0..$max]) ), "At least one typemap file exists underneath \@INC directories" ); } -- cgit v1.2.1 From 66696b31b4bd676a25e614b4de03b997e28c2502 Mon Sep 17 00:00:00 2001 From: Steffen Mueller Date: Wed, 10 Aug 2011 15:26:01 +0200 Subject: Add Mike Sheldrake to AUTHORS --- AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS b/AUTHORS index 20b588aef1..4508af5bb6 100644 --- a/AUTHORS +++ b/AUTHORS @@ -765,6 +765,7 @@ Mike Mestnik Mike Pomraning Mike Rogers Mike Schilli +Mike Sheldrake Mike Stok Mike W Ellwood Mikhail Zabaluev -- cgit v1.2.1 From 2f6c23cede836f486ef4def6d28f88f2f88494ce Mon Sep 17 00:00:00 2001 From: Steffen Mueller Date: Wed, 10 Aug 2011 15:49:34 +0200 Subject: Fix trivial test failure from dbef30a62b2ca0b186 For the record: This was my (Steffen's) fault, not Mike's! --- dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t b/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t index 3b89706f34..3de8d9d3b9 100644 --- a/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t +++ b/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t @@ -22,13 +22,13 @@ use ExtUtils::ParseXS::Utilities qw( # (where the @INC-related entries are) as there are entries from @INC. # We manage to do that by stopping when we find the "updir" related # entries, which we assume is never contained in a default @INC entry. + my $updir = File::Spec->updir; my $max = $#INC; $max = $#stl if $#stl < $max; foreach my $i (0.. $max) { $max = $i, last if $stl[$i] =~ /\Q$updir\E/; } - my $updir = File::Spec->updir; ok( ( 0 < (grep -f $_, @stl[0..$max]) ), "At least one typemap file exists underneath \@INC directories" -- cgit v1.2.1 From c4499eff9e27f09a805029be88d38ee5f4d89144 Mon Sep 17 00:00:00 2001 From: Karl Williamson Date: Sat, 30 Jul 2011 12:33:31 -0600 Subject: Add perldelta for /aa and \b commit This adds an entry for commit f2e96b5ddb6396417bc2fb71915c5025215060d6 --- pod/perldelta.pod | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 1e5380e4f1..31b50ba910 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -482,6 +482,15 @@ original was unsigned, or too large to fit in an IV. stat() now returns the inode number as the type that would best preserve the original value. [perl #84590] +=item * + +The combination of the regular expression modifiers C and the C<\b> +and C<\B> escape sequences did not work properly on UTF-8 encoded +strings. All non-ASCII characters under C should be treated as +non-word characters, but what was happening was that Unicode rules were +used to determine wordness/non-wordness for non-ASCII characters. This +is now fixed [perl #95968]. + =back =head1 Known Problems -- cgit v1.2.1 From 87916f79aa07b5dbe56ccb225f526e8752c462ad Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 9 Aug 2011 17:56:07 -0700 Subject: Keep verbatim pod in ExtUtils::Typemaps::OutputMap within 80 cols --- dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm | 7 ++++--- t/porting/known_pod_issues.dat | 1 - 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm b/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm index d29cae4e82..52baa54ec5 100644 --- a/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm +++ b/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm @@ -109,10 +109,11 @@ If the optimization can not be applied, this returns undef. If it can be applied, this method returns a hash reference containing the following information: - type: Any of the characters i, u, n, p + type: Any of the characters i, u, n, p with_size: Bool indicating whether this is the sv_setpvn variant - what: The code that actually evaluates to the output scalar - what_size: If "with_size", this has the string length (as code, not constant) + what: The code that actually evaluates to the output scalar + what_size: If "with_size", this has the string length (as code, + not constant) =cut diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index 1ee620d467..ff1becc0b7 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -139,7 +139,6 @@ dist/constant/lib/constant.pm Apparent broken link 2 dist/cwd/lib/file/spec/vms.pm Verbatim line length including indents exceeds 79 by 1 dist/cwd/lib/file/spec/win32.pm Verbatim line length including indents exceeds 79 by 1 dist/data-dumper/dumper.pm ? Should you be using L<...> instead of 1 -dist/extutils-parsexs/lib/extutils/typemaps/outputmap.pm Verbatim line length including indents exceeds 79 by 1 dist/extutils-parsexs/lib/perlxs.pod Verbatim line length including indents exceeds 79 by 4 dist/extutils-parsexs/lib/perlxstut.pod Verbatim line length including indents exceeds 79 by 10 dist/filter-simple/lib/filter/simple.pm Verbatim paragraph in NAME section 1 -- cgit v1.2.1 From e0d3d5f5ef3302519c375a84615d5b8630632c62 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 9 Aug 2011 18:06:38 -0700 Subject: Keep verbatim pod in I18N:LT and IO.pm within 80 cols --- dist/I18N-LangTags/lib/I18N/LangTags.pm | 22 +++++++++++----------- dist/IO/IO.pm | 6 +++--- t/porting/known_pod_issues.dat | 2 -- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/dist/I18N-LangTags/lib/I18N/LangTags.pm b/dist/I18N-LangTags/lib/I18N/LangTags.pm index 85a4f2263b..42ff0fccba 100644 --- a/dist/I18N-LangTags/lib/I18N/LangTags.pm +++ b/dist/I18N-LangTags/lib/I18N/LangTags.pm @@ -19,7 +19,7 @@ require Exporter; ); %EXPORT_TAGS = ('ALL' => \@EXPORT_OK); -$VERSION = "0.36"; +$VERSION = "0.37"; sub uniq { my %seen; return grep(!($seen{$_}++), @_); } # a util function @@ -579,16 +579,16 @@ tag ("ar") exists. Examples: - alternate_language_tags('no-bok') is ('nb') - alternate_language_tags('nb') is ('no-bok') - alternate_language_tags('he') is ('iw') - alternate_language_tags('iw') is ('he') - alternate_language_tags('i-hakka') is ('zh-hakka', 'x-hakka') - alternate_language_tags('zh-hakka') is ('i-hakka', 'x-hakka') - alternate_language_tags('en') is () - alternate_language_tags('x-mingo-tom') is ('i-mingo-tom') - alternate_language_tags('x-klikitat') is ('i-klikitat') - alternate_language_tags('i-klikitat') is ('x-klikitat') + alternate_language_tags('no-bok') is ('nb') + alternate_language_tags('nb') is ('no-bok') + alternate_language_tags('he') is ('iw') + alternate_language_tags('iw') is ('he') + alternate_language_tags('i-hakka') is ('zh-hakka', 'x-hakka') + alternate_language_tags('zh-hakka') is ('i-hakka', 'x-hakka') + alternate_language_tags('en') is () + alternate_language_tags('x-mingo-tom') is ('i-mingo-tom') + alternate_language_tags('x-klikitat') is ('i-klikitat') + alternate_language_tags('i-klikitat') is ('x-klikitat') This function returns empty-list if given anything other than a formally valid language tag. diff --git a/dist/IO/IO.pm b/dist/IO/IO.pm index d6ccbfb1fa..09143f2e39 100644 --- a/dist/IO/IO.pm +++ b/dist/IO/IO.pm @@ -7,7 +7,7 @@ use Carp; use strict; use warnings; -our $VERSION = "1.25_04"; +our $VERSION = "1.25_05"; XSLoader::load 'IO', $VERSION; sub import { @@ -32,8 +32,8 @@ IO - load various IO modules =head1 SYNOPSIS - use IO qw(Handle File); # loads IO modules, here IO::Handle, IO::File - use IO; # DEPRECATED + use IO qw(Handle File); # loads IO modules, here IO::Handle, IO::File + use IO; # DEPRECATED =head1 DESCRIPTION diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index ff1becc0b7..c679af3a33 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -142,8 +142,6 @@ dist/data-dumper/dumper.pm ? Should you be using L<...> instead of 1 dist/extutils-parsexs/lib/perlxs.pod Verbatim line length including indents exceeds 79 by 4 dist/extutils-parsexs/lib/perlxstut.pod Verbatim line length including indents exceeds 79 by 10 dist/filter-simple/lib/filter/simple.pm Verbatim paragraph in NAME section 1 -dist/i18n-langtags/lib/i18n/langtags.pm Verbatim line length including indents exceeds 79 by 2 -dist/io/io.pm Verbatim line length including indents exceeds 79 by 1 dist/io/lib/io/socket/inet.pm Verbatim line length including indents exceeds 79 by 5 dist/locale-maketext/lib/locale/maketext.pod No items in =over / =back list 1 dist/locale-maketext/lib/locale/maketext.pod Verbatim line length including indents exceeds 79 by 1 -- cgit v1.2.1 From d7d631d38c5c053ee82c1c44d814be8b15160481 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Tue, 9 Aug 2011 20:22:36 -0700 Subject: Keep verbatim pod in various dist/* pods within 79 cols --- dist/IO/lib/IO/Socket/INET.pm | 48 ++-- dist/Locale-Maketext/lib/Locale/Maketext.pod | 3 +- dist/Math-BigInt/lib/Math/BigFloat.pm | 320 ++++++++++++++------------- t/porting/known_pod_issues.dat | 3 - 4 files changed, 189 insertions(+), 185 deletions(-) diff --git a/dist/IO/lib/IO/Socket/INET.pm b/dist/IO/lib/IO/Socket/INET.pm index 2f0e5d1d7a..cc9f170aac 100644 --- a/dist/IO/lib/IO/Socket/INET.pm +++ b/dist/IO/lib/IO/Socket/INET.pm @@ -15,7 +15,7 @@ use Exporter; use Errno; @ISA = qw(IO::Socket); -$VERSION = "1.31"; +$VERSION = "1.32"; my $EINVAL = exists(&Errno::EINVAL) ? Errno::EINVAL() : 1; @@ -338,22 +338,23 @@ In addition to the key-value pairs accepted by L, C provides. - PeerAddr Remote host address [:] - PeerHost Synonym for PeerAddr - PeerPort Remote port or service [()] | - LocalAddr Local host bind address hostname[:port] - LocalHost Synonym for LocalAddr - LocalPort Local host bind port [()] | - Proto Protocol name (or number) "tcp" | "udp" | ... - Type Socket type SOCK_STREAM | SOCK_DGRAM | ... - Listen Queue size for listen - ReuseAddr Set SO_REUSEADDR before binding - Reuse Set SO_REUSEADDR before binding (deprecated, prefer ReuseAddr) - ReusePort Set SO_REUSEPORT before binding - Broadcast Set SO_BROADCAST before binding - Timeout Timeout value for various operations - MultiHomed Try all addresses for multi-homed hosts - Blocking Determine if connection will be blocking mode + PeerAddr Remote host address [:] + PeerHost Synonym for PeerAddr + PeerPort Remote port or service [()] | + LocalAddr Local host bind address hostname[:port] + LocalHost Synonym for LocalAddr + LocalPort Local host bind port [()] | + Proto Protocol name (or number) "tcp" | "udp" | ... + Type Socket type SOCK_STREAM | SOCK_DGRAM | ... + Listen Queue size for listen + ReuseAddr Set SO_REUSEADDR before binding + Reuse Set SO_REUSEADDR before binding (deprecated, + prefer ReuseAddr) + ReusePort Set SO_REUSEPORT before binding + Broadcast Set SO_BROADCAST before binding + Timeout Timeout value for various operations + MultiHomed Try all addresses for multi-homed hosts + Blocking Determine if connection will be blocking mode If C is defined then a listen socket is created, else if the socket type, which is derived from the protocol, is SOCK_STREAM then @@ -397,12 +398,13 @@ Examples: $sock = IO::Socket::INET->new('127.0.0.1:25'); - $sock = IO::Socket::INET->new(PeerPort => 9999, - PeerAddr => inet_ntoa(INADDR_BROADCAST), - Proto => udp, - LocalAddr => 'localhost', - Broadcast => 1 ) - or die "Can't bind : $@\n"; + $sock = IO::Socket::INET->new( + PeerPort => 9999, + PeerAddr => inet_ntoa(INADDR_BROADCAST), + Proto => udp, + LocalAddr => 'localhost', + Broadcast => 1 ) + or die "Can't bind : $@\n"; NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE diff --git a/dist/Locale-Maketext/lib/Locale/Maketext.pod b/dist/Locale-Maketext/lib/Locale/Maketext.pod index 14b47c884e..ce280bed23 100644 --- a/dist/Locale-Maketext/lib/Locale/Maketext.pod +++ b/dist/Locale-Maketext/lib/Locale/Maketext.pod @@ -166,7 +166,8 @@ file, you might consider something like this in your project class: my $lh; if($chosen_language) { $lh = $class->get_handle($chosen_language) - || die "No language handle for \"$chosen_language\" or the like"; + || die "No language handle for \"$chosen_language\"" + . " or the like"; } else { # Config file missing, maybe? $lh = $class->get_handle() diff --git a/dist/Math-BigInt/lib/Math/BigFloat.pm b/dist/Math-BigInt/lib/Math/BigFloat.pm index c992f97340..9c75951f71 100644 --- a/dist/Math-BigInt/lib/Math/BigFloat.pm +++ b/dist/Math-BigInt/lib/Math/BigFloat.pm @@ -12,7 +12,7 @@ package Math::BigFloat; # _a : accuracy # _p : precision -$VERSION = '1.994'; +$VERSION = '1.995'; require 5.006002; require Exporter; @@ -3816,122 +3816,122 @@ Math::BigFloat - Arbitrary size floating point math package =head1 SYNOPSIS - use Math::BigFloat; - - # Number creation - my $x = Math::BigFloat->new($str); # defaults to 0 - my $y = $x->copy(); # make a true copy - my $nan = Math::BigFloat->bnan(); # create a NotANumber - my $zero = Math::BigFloat->bzero(); # create a +0 - my $inf = Math::BigFloat->binf(); # create a +inf - my $inf = Math::BigFloat->binf('-'); # create a -inf - my $one = Math::BigFloat->bone(); # create a +1 - my $mone = Math::BigFloat->bone('-'); # create a -1 - - my $pi = Math::BigFloat->bpi(100); # PI to 100 digits - - # the following examples compute their result to 100 digits accuracy: - my $cos = Math::BigFloat->new(1)->bcos(100); # cosinus(1) - my $sin = Math::BigFloat->new(1)->bsin(100); # sinus(1) - my $atan = Math::BigFloat->new(1)->batan(100); # arcus tangens(1) - - my $atan2 = Math::BigFloat->new( 1 )->batan2( 1 ,100); # batan(1) - my $atan2 = Math::BigFloat->new( 1 )->batan2( 8 ,100); # batan(1/8) - my $atan2 = Math::BigFloat->new( -2 )->batan2( 1 ,100); # batan(-2) - - # Testing - $x->is_zero(); # true if arg is +0 - $x->is_nan(); # true if arg is NaN - $x->is_one(); # true if arg is +1 - $x->is_one('-'); # true if arg is -1 - $x->is_odd(); # true if odd, false for even - $x->is_even(); # true if even, false for odd - $x->is_pos(); # true if >= 0 - $x->is_neg(); # true if < 0 - $x->is_inf(sign); # true if +inf, or -inf (default is '+') - - $x->bcmp($y); # compare numbers (undef,<0,=0,>0) - $x->bacmp($y); # compare absolutely (undef,<0,=0,>0) - $x->sign(); # return the sign, either +,- or NaN - $x->digit($n); # return the nth digit, counting from right - $x->digit(-$n); # return the nth digit, counting from left - - # The following all modify their first argument. If you want to preserve - # $x, use $z = $x->copy()->bXXX($y); See under L for why this is - # necessary when mixing $a = $b assignments with non-overloaded math. - - # set - $x->bzero(); # set $i to 0 - $x->bnan(); # set $i to NaN - $x->bone(); # set $x to +1 - $x->bone('-'); # set $x to -1 - $x->binf(); # set $x to inf - $x->binf('-'); # set $x to -inf - - $x->bneg(); # negation - $x->babs(); # absolute value - $x->bnorm(); # normalize (no-op) - $x->bnot(); # two's complement (bit wise not) - $x->binc(); # increment x by 1 - $x->bdec(); # decrement x by 1 - - $x->badd($y); # addition (add $y to $x) - $x->bsub($y); # subtraction (subtract $y from $x) - $x->bmul($y); # multiplication (multiply $x by $y) - $x->bdiv($y); # divide, set $x to quotient - # return (quo,rem) or quo if scalar - - $x->bmod($y); # modulus ($x % $y) - $x->bpow($y); # power of arguments ($x ** $y) - $x->bmodpow($exp,$mod); # modular exponentiation (($num**$exp) % $mod)) - $x->blsft($y, $n); # left shift by $y places in base $n - $x->brsft($y, $n); # right shift by $y places in base $n - # returns (quo,rem) or quo if in scalar context - - $x->blog(); # logarithm of $x to base e (Euler's number) - $x->blog($base); # logarithm of $x to base $base (f.i. 2) - $x->bexp(); # calculate e ** $x where e is Euler's number - - $x->band($y); # bit-wise and - $x->bior($y); # bit-wise inclusive or - $x->bxor($y); # bit-wise exclusive or - $x->bnot(); # bit-wise not (two's complement) - - $x->bsqrt(); # calculate square-root - $x->broot($y); # $y'th root of $x (e.g. $y == 3 => cubic root) - $x->bfac(); # factorial of $x (1*2*3*4*..$x) - - $x->bround($N); # accuracy: preserve $N digits - $x->bfround($N); # precision: round to the $Nth digit - - $x->bfloor(); # return integer less or equal than $x - $x->bceil(); # return integer greater or equal than $x + use Math::BigFloat; + + # Number creation + my $x = Math::BigFloat->new($str); # defaults to 0 + my $y = $x->copy(); # make a true copy + my $nan = Math::BigFloat->bnan(); # create a NotANumber + my $zero = Math::BigFloat->bzero(); # create a +0 + my $inf = Math::BigFloat->binf(); # create a +inf + my $inf = Math::BigFloat->binf('-'); # create a -inf + my $one = Math::BigFloat->bone(); # create a +1 + my $mone = Math::BigFloat->bone('-'); # create a -1 + + my $pi = Math::BigFloat->bpi(100); # PI to 100 digits + + # the following examples compute their result to 100 digits accuracy: + my $cos = Math::BigFloat->new(1)->bcos(100); # cosinus(1) + my $sin = Math::BigFloat->new(1)->bsin(100); # sinus(1) + my $atan = Math::BigFloat->new(1)->batan(100); # arcus tangens(1) + + my $atan2 = Math::BigFloat->new( 1 )->batan2( 1 ,100); # batan(1) + my $atan2 = Math::BigFloat->new( 1 )->batan2( 8 ,100); # batan(1/8) + my $atan2 = Math::BigFloat->new( -2 )->batan2( 1 ,100); # batan(-2) + + # Testing + $x->is_zero(); # true if arg is +0 + $x->is_nan(); # true if arg is NaN + $x->is_one(); # true if arg is +1 + $x->is_one('-'); # true if arg is -1 + $x->is_odd(); # true if odd, false for even + $x->is_even(); # true if even, false for odd + $x->is_pos(); # true if >= 0 + $x->is_neg(); # true if < 0 + $x->is_inf(sign); # true if +inf, or -inf (default is '+') + + $x->bcmp($y); # compare numbers (undef,<0,=0,>0) + $x->bacmp($y); # compare absolutely (undef,<0,=0,>0) + $x->sign(); # return the sign, either +,- or NaN + $x->digit($n); # return the nth digit, counting from right + $x->digit(-$n); # return the nth digit, counting from left + + # The following all modify their first argument. If you want to pre- + # serve $x, use $z = $x->copy()->bXXX($y); See under L for + # necessary when mixing $a = $b assignments with non-overloaded math. + + # set + $x->bzero(); # set $i to 0 + $x->bnan(); # set $i to NaN + $x->bone(); # set $x to +1 + $x->bone('-'); # set $x to -1 + $x->binf(); # set $x to inf + $x->binf('-'); # set $x to -inf + + $x->bneg(); # negation + $x->babs(); # absolute value + $x->bnorm(); # normalize (no-op) + $x->bnot(); # two's complement (bit wise not) + $x->binc(); # increment x by 1 + $x->bdec(); # decrement x by 1 + + $x->badd($y); # addition (add $y to $x) + $x->bsub($y); # subtraction (subtract $y from $x) + $x->bmul($y); # multiplication (multiply $x by $y) + $x->bdiv($y); # divide, set $x to quotient + # return (quo,rem) or quo if scalar + + $x->bmod($y); # modulus ($x % $y) + $x->bpow($y); # power of arguments ($x ** $y) + $x->bmodpow($exp,$mod); # modular exponentiation (($num**$exp) % $mod)) + $x->blsft($y, $n); # left shift by $y places in base $n + $x->brsft($y, $n); # right shift by $y places in base $n + # returns (quo,rem) or quo if in scalar context + + $x->blog(); # logarithm of $x to base e (Euler's number) + $x->blog($base); # logarithm of $x to base $base (f.i. 2) + $x->bexp(); # calculate e ** $x where e is Euler's number + + $x->band($y); # bit-wise and + $x->bior($y); # bit-wise inclusive or + $x->bxor($y); # bit-wise exclusive or + $x->bnot(); # bit-wise not (two's complement) + + $x->bsqrt(); # calculate square-root + $x->broot($y); # $y'th root of $x (e.g. $y == 3 => cubic root) + $x->bfac(); # factorial of $x (1*2*3*4*..$x) + + $x->bround($N); # accuracy: preserve $N digits + $x->bfround($N); # precision: round to the $Nth digit + + $x->bfloor(); # return integer less or equal than $x + $x->bceil(); # return integer greater or equal than $x # The following do not modify their arguments: - bgcd(@values); # greatest common divisor - blcm(@values); # lowest common multiplicator + bgcd(@values); # greatest common divisor + blcm(@values); # lowest common multiplicator - $x->bstr(); # return string - $x->bsstr(); # return string in scientific notation + $x->bstr(); # return string + $x->bsstr(); # return string in scientific notation - $x->as_int(); # return $x as BigInt - $x->exponent(); # return exponent as BigInt - $x->mantissa(); # return mantissa as BigInt - $x->parts(); # return (mantissa,exponent) as BigInt + $x->as_int(); # return $x as BigInt + $x->exponent(); # return exponent as BigInt + $x->mantissa(); # return mantissa as BigInt + $x->parts(); # return (mantissa,exponent) as BigInt - $x->length(); # number of digits (w/o sign and '.') - ($l,$f) = $x->length(); # number of digits, and length of fraction + $x->length(); # number of digits (w/o sign and '.') + ($l,$f) = $x->length(); # number of digits, and length of fraction - $x->precision(); # return P of $x (or global, if P of $x undef) - $x->precision($n); # set P of $x to $n - $x->accuracy(); # return A of $x (or global, if A of $x undef) - $x->accuracy($n); # set A $x to $n + $x->precision(); # return P of $x (or global, if P of $x undef) + $x->precision($n); # set P of $x to $n + $x->accuracy(); # return A of $x (or global, if A of $x undef) + $x->accuracy($n); # set A $x to $n - # these get/set the appropriate global value for all BigFloat objects - Math::BigFloat->precision(); # Precision - Math::BigFloat->accuracy(); # Accuracy - Math::BigFloat->round_mode(); # rounding mode + # these get/set the appropriate global value for all BigFloat objects + Math::BigFloat->precision(); # Precision + Math::BigFloat->accuracy(); # Accuracy + Math::BigFloat->round_mode(); # rounding mode =head1 DESCRIPTION @@ -4040,8 +4040,8 @@ input $x has no accuracy or precision set, then a fallback parameter will be used. For historical reasons, it is called C and can be accessed via: - $d = Math::BigFloat->div_scale(); # query - Math::BigFloat->div_scale($n); # set to $n digits + $d = Math::BigFloat->div_scale(); # query + Math::BigFloat->div_scale($n); # set to $n digits The default value for C is 40. @@ -4049,13 +4049,13 @@ In case the result of one operation has more digits than specified, it is rounded. The rounding mode taken is either the default mode, or the one supplied to the operation after the I: - $x = Math::BigFloat->new(2); - Math::BigFloat->accuracy(5); # 5 digits max - $y = $x->copy()->bdiv(3); # will give 0.66667 - $y = $x->copy()->bdiv(3,6); # will give 0.666667 - $y = $x->copy()->bdiv(3,6,undef,'odd'); # will give 0.666667 - Math::BigFloat->round_mode('zero'); - $y = $x->copy()->bdiv(3,6); # will also give 0.666667 + $x = Math::BigFloat->new(2); + Math::BigFloat->accuracy(5); # 5 digits max + $y = $x->copy()->bdiv(3); # will give 0.66667 + $y = $x->copy()->bdiv(3,6); # will give 0.666667 + $y = $x->copy()->bdiv(3,6,undef,'odd'); # will give 0.666667 + Math::BigFloat->round_mode('zero'); + $y = $x->copy()->bdiv(3,6); # will also give 0.666667 Note that C<< Math::BigFloat->accuracy() >> and C<< Math::BigFloat->precision() >> set the global variables, and thus B newly created number will be subject @@ -4138,12 +4138,12 @@ differences: =head2 accuracy - $x->accuracy(5); # local for $x - CLASS->accuracy(5); # global for all members of CLASS - # Note: This also applies to new()! + $x->accuracy(5); # local for $x + CLASS->accuracy(5); # global for all members of CLASS + # Note: This also applies to new()! - $A = $x->accuracy(); # read out accuracy that affects $x - $A = CLASS->accuracy(); # read out global accuracy + $A = $x->accuracy(); # read out accuracy that affects $x + $A = CLASS->accuracy(); # read out global accuracy Set or get the global or local accuracy, aka how many significant digits the results have. If you set a global accuracy, then this also applies to new()! @@ -4163,15 +4163,17 @@ to the math operation as additional parameter: =head2 precision() - $x->precision(-2); # local for $x, round at the second digit right of the dot - $x->precision(2); # ditto, round at the second digit left of the dot + $x->precision(-2); # local for $x, round at the second + # digit right of the dot + $x->precision(2); # ditto, round at the second digit left + # of the dot CLASS->precision(5); # Global for all members of CLASS # This also applies to new()! CLASS->precision(-5); # ditto - $P = CLASS->precision(); # read out global precision - $P = $x->precision(); # read out precision that affects $x + $P = CLASS->precision(); # read out global precision + $P = $x->precision(); # read out precision that affects $x Note: You probably want to use L instead. With L you set the number of digits each result should have, with L you @@ -4187,7 +4189,7 @@ This method was added in v1.82 of Math::BigInt (April 2007). =head2 bnok() - $x->bnok($y); # x over y (binomial coefficient n over k) + $x->bnok($y); # x over y (binomial coefficient n over k) Calculates the binomial coefficient n over k, also called the "choose" function. The result is equivalent to: @@ -4351,10 +4353,10 @@ Please see the file BUGS in the CPAN distribution Math::BigInt for known bugs. Do not try to be clever to insert some operations in between switching libraries: - require Math::BigFloat; - my $matter = Math::BigFloat->bone() + 4; # load BigInt and Calc - Math::BigFloat->import( lib => 'Pari' ); # load Pari, too - my $anti_matter = Math::BigFloat->bone()+4; # now use Pari + require Math::BigFloat; + my $matter = Math::BigFloat->bone() + 4; # load BigInt and Calc + Math::BigFloat->import( lib => 'Pari' ); # load Pari, too + my $anti_matter = Math::BigFloat->bone()+4; # now use Pari This will create objects with numbers stored in two different backend libraries, and B will happen when you use these together: @@ -4378,8 +4380,8 @@ The following will probably not print what you expect: It prints both quotient and remainder since print works in list context. Also, bdiv() will modify $c, so be careful. You probably want to use - print $c / 123.456,"\n"; - print scalar $c->bdiv(123.456),"\n"; # or if you want to modify $c + print $c / 123.456,"\n"; + print scalar $c->bdiv(123.456),"\n"; # or if you want to modify $c instead. @@ -4427,39 +4429,41 @@ C etc. The first will modify $x, the second one won't: A common pitfall is to use L when you want to round a result to a certain number of digits: - use Math::BigFloat; + use Math::BigFloat; - Math::BigFloat->precision(4); # does not do what you think it does - my $x = Math::BigFloat->new(12345); # rounds $x to "12000"! - print "$x\n"; # print "12000" - my $y = Math::BigFloat->new(3); # rounds $y to "0"! - print "$y\n"; # print "0" - $z = $x / $y; # 12000 / 0 => NaN! - print "$z\n"; - print $z->precision(),"\n"; # 4 + Math::BigFloat->precision(4); # does not do what you + # think it does + my $x = Math::BigFloat->new(12345); # rounds $x to "12000"! + print "$x\n"; # print "12000" + my $y = Math::BigFloat->new(3); # rounds $y to "0"! + print "$y\n"; # print "0" + $z = $x / $y; # 12000 / 0 => NaN! + print "$z\n"; + print $z->precision(),"\n"; # 4 Replacing L with L is probably not what you want, either: - use Math::BigFloat; + use Math::BigFloat; - Math::BigFloat->accuracy(4); # enables global rounding: - my $x = Math::BigFloat->new(123456); # rounded immediately to "12350" - print "$x\n"; # print "123500" - my $y = Math::BigFloat->new(3); # rounded to "3 - print "$y\n"; # print "3" - print $z = $x->copy()->bdiv($y),"\n"; # 41170 - print $z->accuracy(),"\n"; # 4 + Math::BigFloat->accuracy(4); # enables global rounding: + my $x = Math::BigFloat->new(123456); # rounded immediately + # to "12350" + print "$x\n"; # print "123500" + my $y = Math::BigFloat->new(3); # rounded to "3 + print "$y\n"; # print "3" + print $z = $x->copy()->bdiv($y),"\n"; # 41170 + print $z->accuracy(),"\n"; # 4 What you want to use instead is: - use Math::BigFloat; + use Math::BigFloat; - my $x = Math::BigFloat->new(123456); # no rounding - print "$x\n"; # print "123456" - my $y = Math::BigFloat->new(3); # no rounding - print "$y\n"; # print "3" - print $z = $x->copy()->bdiv($y,4),"\n"; # 41150 - print $z->accuracy(),"\n"; # undef + my $x = Math::BigFloat->new(123456); # no rounding + print "$x\n"; # print "123456" + my $y = Math::BigFloat->new(3); # no rounding + print "$y\n"; # print "3" + print $z = $x->copy()->bdiv($y,4),"\n"; # 41150 + print $z->accuracy(),"\n"; # undef In addition to computing what you expected, the last example also does B "taint" the result with an accuracy or precision setting, which would diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index c679af3a33..1f60461dd1 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -142,13 +142,10 @@ dist/data-dumper/dumper.pm ? Should you be using L<...> instead of 1 dist/extutils-parsexs/lib/perlxs.pod Verbatim line length including indents exceeds 79 by 4 dist/extutils-parsexs/lib/perlxstut.pod Verbatim line length including indents exceeds 79 by 10 dist/filter-simple/lib/filter/simple.pm Verbatim paragraph in NAME section 1 -dist/io/lib/io/socket/inet.pm Verbatim line length including indents exceeds 79 by 5 dist/locale-maketext/lib/locale/maketext.pod No items in =over / =back list 1 -dist/locale-maketext/lib/locale/maketext.pod Verbatim line length including indents exceeds 79 by 1 dist/locale-maketext/lib/locale/maketext/tpj13.pod No items in =over / =back list 3 dist/math-bigint/lib/math/bigfloat.pm Apparent broken link 7 dist/math-bigint/lib/math/bigfloat.pm Apparent internal link is missing its forward slash 6 -dist/math-bigint/lib/math/bigfloat.pm Verbatim line length including indents exceeds 79 by 28 dist/math-bigint/lib/math/bigint.pm Apparent broken link 5 dist/math-bigint/lib/math/bigint.pm Apparent internal link is missing its forward slash 7 dist/math-bigint/lib/math/bigint.pm Verbatim line length including indents exceeds 79 by 122 -- cgit v1.2.1 From 80df1b84a5cc99da534f1bb3f5844764f192c4b6 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Wed, 10 Aug 2011 12:23:51 -0700 Subject: Rewrap some verbatim pod in Math::BigInt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I started to make Math::BigInt’s pod fit within 79 columns, but soon petered out. At least this is better than nothing. --- dist/Math-BigInt/lib/Math/BigInt.pm | 243 +++++++++++++++++++----------------- t/porting/known_pod_issues.dat | 2 +- 2 files changed, 128 insertions(+), 117 deletions(-) diff --git a/dist/Math-BigInt/lib/Math/BigInt.pm b/dist/Math-BigInt/lib/Math/BigInt.pm index 36b10490f4..3da16ded7e 100644 --- a/dist/Math-BigInt/lib/Math/BigInt.pm +++ b/dist/Math-BigInt/lib/Math/BigInt.pm @@ -18,7 +18,7 @@ package Math::BigInt; my $class = "Math::BigInt"; use 5.006002; -$VERSION = '1.995'; +$VERSION = '1.996'; @ISA = qw(Exporter); @EXPORT_OK = qw(objectify bgcd blcm); @@ -3344,9 +3344,10 @@ Math::BigInt - Arbitrary size integer/float math package $x->digit($n); # return the nth digit, counting from right $x->digit(-$n); # return the nth digit, counting from left - # The following all modify their first argument. If you want to preserve - # $x, use $z = $x->copy()->bXXX($y); See under L for why this is - # necessary when mixing $a = $b assignments with non-overloaded math. + # The following all modify their first argument. If you want to pre- + # serve $x, use $z = $x->copy()->bXXX($y); See under L for + # why this is necessary when mixing $a = $b assignments with non-over- + # loaded math. $x->bzero(); # set $x to 0 $x->bnan(); # set $x to NaN @@ -3377,10 +3378,12 @@ Math::BigInt - Arbitrary size integer/float math package $x->bpow($y); # power of arguments (x ** y) $x->blsft($y); # left shift in base 2 $x->brsft($y); # right shift in base 2 - # returns (quo,rem) or quo if in scalar context + # returns (quo,rem) or quo if in sca- + # lar context $x->blsft($y,$n); # left shift by $y places in base $n $x->brsft($y,$n); # right shift by $y places in base $n - # returns (quo,rem) or quo if in scalar context + # returns (quo,rem) or quo if in sca- + # lar context $x->band($y); # bitwise and $x->bior($y); # bitwise inclusive or @@ -3397,7 +3400,8 @@ Math::BigInt - Arbitrary size integer/float math package $x->blog($base); # logarithm of $x to base $base (f.i. 2) $x->bexp(); # calculate e ** $x where e is Euler's number - $x->round($A,$P,$mode); # round to accuracy or precision using mode $mode + $x->round($A,$P,$mode); # round to accuracy or precision using + # mode $mode $x->bround($n); # accuracy: preserve $n digits $x->bfround($n); # $n > 0: round $nth digits, # $n < 0: round to the $nth digit after the @@ -3417,36 +3421,38 @@ Math::BigInt - Arbitrary size integer/float math package my $lcm = Math::BigInt::blcm(@values); $x->length(); # return number of digits in number - ($xl,$f) = $x->length(); # length of number and length of fraction part, - # latter is always 0 digits long for BigInts + ($xl,$f) = $x->length(); # length of number and length of fraction + # part, latter is always 0 digits long + # for BigInts - $x->exponent(); # return exponent as BigInt - $x->mantissa(); # return (signed) mantissa as BigInt - $x->parts(); # return (mantissa,exponent) as BigInt - $x->copy(); # make a true copy of $x (unlike $y = $x;) - $x->as_int(); # return as BigInt (in BigInt: same as copy()) - $x->numify(); # return as scalar (might overflow!) + $x->exponent(); # return exponent as BigInt + $x->mantissa(); # return (signed) mantissa as BigInt + $x->parts(); # return (mantissa,exponent) as BigInt + $x->copy(); # make a true copy of $x (unlike $y = $x;) + $x->as_int(); # return as BigInt (in BigInt: same as copy()) + $x->numify(); # return as scalar (might overflow!) # conversion to string (do not modify their argument) - $x->bstr(); # normalized string (e.g. '3') - $x->bsstr(); # norm. string in scientific notation (e.g. '3E0') - $x->as_hex(); # as signed hexadecimal string with prefixed 0x - $x->as_bin(); # as signed binary string with prefixed 0b - $x->as_oct(); # as signed octal string with prefixed 0 + $x->bstr(); # normalized string (e.g. '3') + $x->bsstr(); # norm. string in scientific notation (e.g. '3E0') + $x->as_hex(); # as signed hexadecimal string with prefixed 0x + $x->as_bin(); # as signed binary string with prefixed 0b + $x->as_oct(); # as signed octal string with prefixed 0 # precision and accuracy (see section about rounding for more) - $x->precision(); # return P of $x (or global, if P of $x undef) - $x->precision($n); # set P of $x to $n - $x->accuracy(); # return A of $x (or global, if A of $x undef) - $x->accuracy($n); # set A $x to $n + $x->precision(); # return P of $x (or global, if P of $x undef) + $x->precision($n); # set P of $x to $n + $x->accuracy(); # return A of $x (or global, if A of $x undef) + $x->accuracy($n); # set A $x to $n # Global methods - Math::BigInt->precision(); # get/set global P for all BigInt objects - Math::BigInt->accuracy(); # get/set global A for all BigInt objects - Math::BigInt->round_mode(); # get/set global round mode, one of - # 'even', 'odd', '+inf', '-inf', 'zero', 'trunc' or 'common' - Math::BigInt->config(); # return hash containing configuration + Math::BigInt->precision(); # get/set global P for all BigInt objects + Math::BigInt->accuracy(); # get/set global A for all BigInt objects + Math::BigInt->round_mode(); # get/set global round mode, one of + # 'even', 'odd', '+inf', '-inf', 'zero', + # 'trunc' or 'common' + Math::BigInt->config(); # return hash containing configuration =head1 DESCRIPTION @@ -3527,33 +3533,33 @@ Returns a hash containing the configuration, e.g. the version number, lib loaded etc. The following hash keys are currently filled in with the appropriate information. - key Description - Example + key Description + Example ============================================================ - lib Name of the low-level math library - Math::BigInt::Calc - lib_version Version of low-level math library (see 'lib') - 0.30 - class The class name of config() you just called - Math::BigInt - upgrade To which class math operations might be upgraded - Math::BigFloat - downgrade To which class math operations might be downgraded - undef - precision Global precision - undef - accuracy Global accuracy - undef - round_mode Global round mode - even - version version number of the class you used - 1.61 - div_scale Fallback accuracy for div - 40 - trap_nan If true, traps creation of NaN via croak() - 1 - trap_inf If true, traps creation of +inf/-inf via croak() - 1 + lib Name of the low-level math library + Math::BigInt::Calc + lib_version Version of low-level math library (see 'lib') + 0.30 + class The class name of config() you just called + Math::BigInt + upgrade To which class math operations might be upgraded + Math::BigFloat + downgrade To which class math operations might be downgraded + undef + precision Global precision + undef + accuracy Global accuracy + undef + round_mode Global round mode + even + version version number of the class you used + 1.61 + div_scale Fallback accuracy for div + 40 + trap_nan If true, traps creation of NaN via croak() + 1 + trap_inf If true, traps creation of +inf/-inf via croak() + 1 The following values can be set by passing C a reference to a hash: @@ -3562,16 +3568,18 @@ The following values can be set by passing C a reference to a hash: Example: - $new_cfg = Math::BigInt->config( { trap_inf => 1, precision => 5 } ); + $new_cfg = Math::BigInt->config( + { trap_inf => 1, precision => 5 } + ); =head2 accuracy() - $x->accuracy(5); # local for $x - CLASS->accuracy(5); # global for all members of CLASS - # Note: This also applies to new()! + $x->accuracy(5); # local for $x + CLASS->accuracy(5); # global for all members of CLASS + # Note: This also applies to new()! - $A = $x->accuracy(); # read out accuracy that affects $x - $A = CLASS->accuracy(); # read out global accuracy + $A = $x->accuracy(); # read out accuracy that affects $x + $A = CLASS->accuracy(); # read out global accuracy Set or get the global or local accuracy, aka how many significant digits the results have. If you set a global accuracy, then this also applies to new()! @@ -3584,31 +3592,32 @@ In most cases, you should probably round the results explicitly using one of L, L or L or by passing the desired accuracy to the math operation as additional parameter: - my $x = Math::BigInt->new(30000); - my $y = Math::BigInt->new(7); - print scalar $x->copy()->bdiv($y, 2); # print 4300 - print scalar $x->copy()->bdiv($y)->bround(2); # print 4300 + my $x = Math::BigInt->new(30000); + my $y = Math::BigInt->new(7); + print scalar $x->copy()->bdiv($y, 2); # print 4300 + print scalar $x->copy()->bdiv($y)->bround(2); # print 4300 Please see the section about L for further details. Value must be greater than zero. Pass an undef value to disable it: - $x->accuracy(undef); - Math::BigInt->accuracy(undef); + $x->accuracy(undef); + Math::BigInt->accuracy(undef); Returns the current accuracy. For C<< $x->accuracy() >> it will return either the local accuracy, or if not defined, the global. This means the return value represents the accuracy that will be in effect for $x: - $y = Math::BigInt->new(1234567); # unrounded - print Math::BigInt->accuracy(4),"\n"; # set 4, print 4 - $x = Math::BigInt->new(123456); # $x will be automatically rounded! - print "$x $y\n"; # '123500 1234567' - print $x->accuracy(),"\n"; # will be 4 - print $y->accuracy(),"\n"; # also 4, since global is 4 - print Math::BigInt->accuracy(5),"\n"; # set to 5, print 5 - print $x->accuracy(),"\n"; # still 4 - print $y->accuracy(),"\n"; # 5, since global is 5 + $y = Math::BigInt->new(1234567); # unrounded + print Math::BigInt->accuracy(4),"\n"; # set 4, print 4 + $x = Math::BigInt->new(123456); # $x will be automatic- + # ally rounded! + print "$x $y\n"; # '123500 1234567' + print $x->accuracy(),"\n"; # will be 4 + print $y->accuracy(),"\n"; # also 4, since global is 4 + print Math::BigInt->accuracy(5),"\n"; # set to 5, print 5 + print $x->accuracy(),"\n"; # still 4 + print $y->accuracy(),"\n"; # 5, since global is 5 Note: Works also for subclasses like Math::BigFloat. Each class has it's own globals separated from Math::BigInt, but it is possible to subclass @@ -3617,15 +3626,17 @@ Math::BigInt. =head2 precision() - $x->precision(-2); # local for $x, round at the second digit right of the dot - $x->precision(2); # ditto, round at the second digit left of the dot + $x->precision(-2); # local for $x, round at the second + # digit right of the dot + $x->precision(2); # ditto, round at the second digit left + # of the dot - CLASS->precision(5); # Global for all members of CLASS - # This also applies to new()! - CLASS->precision(-5); # ditto + CLASS->precision(5); # Global for all members of CLASS + # This also applies to new()! + CLASS->precision(-5); # ditto - $P = CLASS->precision(); # read out global precision - $P = $x->precision(); # read out precision that affects $x + $P = CLASS->precision(); # read out global precision + $P = $x->precision(); # read out precision that affects $x Note: You probably want to use L instead. With L you set the number of digits each result should have, with L you @@ -3643,17 +3654,17 @@ Please see the section about L for further details. Pass an undef value to disable it: - $x->precision(undef); - Math::BigInt->precision(undef); + $x->precision(undef); + Math::BigInt->precision(undef); Returns the current precision. For C<< $x->precision() >> it will return either the local precision of $x, or if not defined, the global. This means the return value represents the prevision that will be in effect for $x: - $y = Math::BigInt->new(1234567); # unrounded - print Math::BigInt->precision(4),"\n"; # set 4, print 4 - $x = Math::BigInt->new(123456); # will be automatically rounded - print $x; # print "120000"! + $y = Math::BigInt->new(1234567); # unrounded + print Math::BigInt->precision(4),"\n"; # set 4, print 4 + $x = Math::BigInt->new(123456); # will be automatically rounded + print $x; # print "120000"! Note: Works also for subclasses like L. Each class has its own globals separated from Math::BigInt, but it is possible to subclass @@ -3762,12 +3773,12 @@ If used on an object, it will set it to one: =head2 is_one()/is_zero()/is_nan()/is_inf() - $x->is_zero(); # true if arg is +0 - $x->is_nan(); # true if arg is NaN - $x->is_one(); # true if arg is +1 - $x->is_one('-'); # true if arg is -1 - $x->is_inf(); # true if +inf - $x->is_inf('-'); # true if -inf (sign is default '+') + $x->is_zero(); # true if arg is +0 + $x->is_nan(); # true if arg is NaN + $x->is_one(); # true if arg is +1 + $x->is_one('-'); # true if arg is -1 + $x->is_inf(); # true if +inf + $x->is_inf('-'); # true if -inf (sign is default '+') These methods all test the BigInt for being one specific value and return true or false depending on the input. These are faster than doing something @@ -3831,7 +3842,7 @@ If you want $x to have a certain sign, use one of the following methods: =head2 digit() - $x->digit($n); # return the nth digit, counting from right + $x->digit($n); # return the nth digit, counting from right If C<$n> is negative, returns the digit counting from left. @@ -3866,23 +3877,23 @@ but faster. =head2 binc() - $x->binc(); # increment x by 1 + $x->binc(); # increment x by 1 =head2 bdec() - $x->bdec(); # decrement x by 1 + $x->bdec(); # decrement x by 1 =head2 badd() - $x->badd($y); # addition (add $y to $x) + $x->badd($y); # addition (add $y to $x) =head2 bsub() - $x->bsub($y); # subtraction (subtract $y from $x) + $x->bsub($y); # subtraction (subtract $y from $x) =head2 bmul() - $x->bmul($y); # multiplication (multiply $x by $y) + $x->bmul($y); # multiplication (multiply $x by $y) =head2 bmuladd() @@ -3894,16 +3905,16 @@ This method was added in v1.87 of Math::BigInt (June 2007). =head2 bdiv() - $x->bdiv($y); # divide, set $x to quotient - # return (quo,rem) or quo if scalar + $x->bdiv($y); # divide, set $x to quotient + # return (quo,rem) or quo if scalar =head2 bmod() - $x->bmod($y); # modulus (x % y) + $x->bmod($y); # modulus (x % y) =head2 bmodinv() - $x->bmodinv($mod); # modular multiplicative inverse + $x->bmodinv($mod); # modular multiplicative inverse Returns the multiplicative inverse of C<$x> modulo C<$mod>. If @@ -3942,19 +3953,19 @@ is exactly equivalent to =head2 bpow() - $x->bpow($y); # power of arguments (x ** y) + $x->bpow($y); # power of arguments (x ** y) =head2 blog() - $x->blog($base, $accuracy); # logarithm of x to the base $base + $x->blog($base, $accuracy); # logarithm of x to the base $base If C<$base> is not defined, Euler's number (e) is used: - print $x->blog(undef, 100); # log(x) to 100 digits + print $x->blog(undef, 100); # log(x) to 100 digits =head2 bexp() - $x->bexp($accuracy); # calculate e ** X + $x->bexp($accuracy); # calculate e ** X Calculates the expression C where C is Euler's number. @@ -3964,7 +3975,7 @@ See also L. =head2 bnok() - $x->bnok($y); # x over y (binomial coefficient n over k) + $x->bnok($y); # x over y (binomial coefficient n over k) Calculates the binomial coefficient n over k, also called the "choose" function. The result is equivalent to: @@ -4154,11 +4165,11 @@ Return the signed mantissa of $x as BigInt. =head2 parts() - $x->parts(); # return (mantissa,exponent) as BigInt + $x->parts(); # return (mantissa,exponent) as BigInt =head2 copy() - $x->copy(); # make a true copy of $x (unlike $y = $x;) + $x->copy(); # make a true copy of $x (unlike $y = $x;) =head2 as_int()/as_number() @@ -4178,19 +4189,19 @@ Returns a normalized string representation of C<$x>. =head2 bsstr() - $x->bsstr(); # normalized string in scientific notation + $x->bsstr(); # normalized string in scientific notation =head2 as_hex() - $x->as_hex(); # as signed hexadecimal string with prefixed 0x + $x->as_hex(); # as signed hexadecimal string with prefixed 0x =head2 as_bin() - $x->as_bin(); # as signed binary string with prefixed 0b + $x->as_bin(); # as signed binary string with prefixed 0b =head2 as_oct() - $x->as_oct(); # as signed octal string with prefixed 0 + $x->as_oct(); # as signed octal string with prefixed 0 =head2 numify() diff --git a/t/porting/known_pod_issues.dat b/t/porting/known_pod_issues.dat index 1f60461dd1..b6f55d3e75 100644 --- a/t/porting/known_pod_issues.dat +++ b/t/porting/known_pod_issues.dat @@ -148,7 +148,7 @@ dist/math-bigint/lib/math/bigfloat.pm Apparent broken link 7 dist/math-bigint/lib/math/bigfloat.pm Apparent internal link is missing its forward slash 6 dist/math-bigint/lib/math/bigint.pm Apparent broken link 5 dist/math-bigint/lib/math/bigint.pm Apparent internal link is missing its forward slash 7 -dist/math-bigint/lib/math/bigint.pm Verbatim line length including indents exceeds 79 by 122 +dist/math-bigint/lib/math/bigint.pm Verbatim line length including indents exceeds 79 by 86 dist/math-bigint/lib/math/bigint.pm empty section in previous paragraph 1 dist/math-bigint/lib/math/bigint/calcemu.pm Apparent broken link 1 dist/math-bigint/lib/math/bigint/calcemu.pm empty section in previous paragraph 3 -- cgit v1.2.1 From 44d8286067ef9ddcc99d811b6ab8d14fddc0bb81 Mon Sep 17 00:00:00 2001 From: Steffen Mueller Date: Thu, 11 Aug 2011 08:26:37 +0200 Subject: ExtUtils::ParseXS version bump: release 3.03 --- Porting/Maintainers.pl | 2 +- dist/ExtUtils-ParseXS/Changes | 2 +- dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 8bd9af9e14..d777c619e5 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -752,7 +752,7 @@ use File::Glob qw(:case); 'ExtUtils::ParseXS' => { 'MAINTAINER' => 'smueller', - 'DISTRIBUTION' => 'SMUELLER/ExtUtils-ParseXS-3.02.tar.gz', + 'DISTRIBUTION' => 'SMUELLER/ExtUtils-ParseXS-3.03.tar.gz', 'FILES' => q[dist/ExtUtils-ParseXS], 'UPSTREAM' => 'blead', }, diff --git a/dist/ExtUtils-ParseXS/Changes b/dist/ExtUtils-ParseXS/Changes index b721f85f36..4f189ca9ed 100644 --- a/dist/ExtUtils-ParseXS/Changes +++ b/dist/ExtUtils-ParseXS/Changes @@ -1,6 +1,6 @@ Revision history for Perl extension ExtUtils::ParseXS. -3.02_01 - ... +3.03 - Thu Aug 11 08:24:00 CET 2011 - Test fix: Try all @INC-derived typemap locations. (CPAN RT #70047) [Mike Sheldrake] diff --git a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm index 503ab8d1f7..eeed387e09 100644 --- a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm +++ b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm @@ -35,7 +35,7 @@ our @EXPORT_OK = qw( process_file report_error_count ); -our $VERSION = '3.02_01'; +our $VERSION = '3.03'; $VERSION = eval $VERSION if $VERSION =~ /_/; # The scalars in the line below remain as 'our' variables because pulling -- cgit v1.2.1 From ee3ace03a45521163d0977e8a8fe5387f0193e80 Mon Sep 17 00:00:00 2001 From: Tony Cook Date: Tue, 9 Aug 2011 20:31:24 +1000 Subject: workaround a type handling bug in SystemTap Dtrace 1.2 It uses a construct similar to: __typeof__((func)) x = func; but hek_key is a char[1] so the above becomes: char arg1[1] = func; which is invalid. Using a temporary allows an implicit conversion to const char * and avoids possible bugs that might be hidden by an explicit cast. --- mydtrace.h | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/mydtrace.h b/mydtrace.h index a7a4e470c6..01732742e4 100644 --- a/mydtrace.h +++ b/mydtrace.h @@ -13,16 +13,39 @@ # include "perldtrace.h" -# define ENTRY_PROBE(func, file, line, stash) \ +# if defined(STAP_PROBE_ADDR) && !defined(DEBUGGING) + +/* SystemTap 1.2 uses a construct that chokes on passing a char array + * as a char *, in this case hek_key in struct hek. Workaround it + * with a temporary. + */ + +# define ENTRY_PROBE(func, file, line, stash) \ + if (PERL_SUB_ENTRY_ENABLED()) { \ + const char *tmp_func = func; \ + PERL_SUB_ENTRY(tmp_func, file, line, stash); \ + } + +# define RETURN_PROBE(func, file, line, stash) \ + if (PERL_SUB_RETURN_ENABLED()) { \ + const char *tmp_func = func; \ + PERL_SUB_RETURN(tmp_func, file, line, stash); \ + } + +# else + +# define ENTRY_PROBE(func, file, line, stash) \ if (PERL_SUB_ENTRY_ENABLED()) { \ PERL_SUB_ENTRY(func, file, line, stash); \ } -# define RETURN_PROBE(func, file, line, stash) \ +# define RETURN_PROBE(func, file, line, stash) \ if (PERL_SUB_RETURN_ENABLED()) { \ PERL_SUB_RETURN(func, file, line, stash); \ } +# endif + # define PHASE_CHANGE_PROBE(new_phase, old_phase) \ if (PERL_PHASE_CHANGE_ENABLED()) { \ PERL_PHASE_CHANGE(new_phase, old_phase); \ -- cgit v1.2.1 From e469e61f2b416389b7fb67acaf0d21735066e6ee Mon Sep 17 00:00:00 2001 From: Chris 'BinGOs' Williams Date: Thu, 11 Aug 2011 10:07:10 +0100 Subject: Synchronise Maintainers.pl for Storable and version --- Porting/Maintainers.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index d777c619e5..dcaa2bc562 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -1666,7 +1666,7 @@ use File::Glob qw(:case); 'Storable' => { 'MAINTAINER' => 'ams', - 'DISTRIBUTION' => 'AMS/Storable-2.29.tar.gz', + 'DISTRIBUTION' => 'AMS/Storable-2.30.tar.gz', 'FILES' => q[dist/Storable], 'EXCLUDED' => [ qr{^t/Test/} ], 'UPSTREAM' => 'blead', @@ -2003,7 +2003,7 @@ use File::Glob qw(:case); 'version' => { 'MAINTAINER' => 'jpeacock', - 'DISTRIBUTION' => 'JPEACOCK/version-0.88.tar.gz', + 'DISTRIBUTION' => 'JPEACOCK/version-0.93.tar.gz', 'FILES' => q[lib/version.pm lib/version.pod lib/version.t lib/version], 'EXCLUDED' => [ qr{^t/.*\.t$}, qw{t/survey_locales}, qr{^vutil/}, -- cgit v1.2.1 From 115ff745268490ae5fb5ecaee00be54172e302e0 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Sun, 7 Aug 2011 21:09:03 +0200 Subject: Simplify embedvar.h, removing a level of macro indirection for PL_* variables. For the default (non-multiplicity) configuration, PERLVAR*() macros now directly expand their arguments to tokens such as C, instead of expanding to C. This removes over 350 lines from F, which defined macros to map from C to C and so forth. --- NetWare/interface.c | 8 +- NetWare/interface.cpp | 8 +- cpan/Devel-PPPort/parts/inc/variables | 2 +- embedvar.h | 369 ------------------- ext/B/B.pm | 2 +- ext/B/B.xs | 32 +- intrpvar.h | 657 +++++++++++++++++----------------- makedef.pl | 2 +- perl.c | 20 +- perl.h | 16 +- perlapi.c | 10 +- perlapi.h | 18 +- perlvars.h | 68 ++-- pod/perldelta.pod | 14 +- regen/embed.pl | 63 +--- util.c | 8 +- win32/perllib.c | 8 +- 17 files changed, 459 insertions(+), 846 deletions(-) diff --git a/NetWare/interface.c b/NetWare/interface.c index 0788e3aab8..2cdadca2fa 100644 --- a/NetWare/interface.c +++ b/NetWare/interface.c @@ -126,10 +126,10 @@ int RunPerl(int argc, char **argv, char **env) PerlInterpreter *new_perl = NULL; // defined in Perl.h #ifdef PERL_GLOBAL_STRUCT - #define PERLVAR(var,type) - #define PERLVARA(var,type) - #define PERLVARI(var,type,init) PL_Vars.var = init; - #define PERLVARIC(var,type,init) PL_Vars.var = init; + #define PERLVAR(prefix,var,type) + #define PERLVARA(prefix,var,type) + #define PERLVARI(prefix,var,type,init) PL_Vars.prefix##var = init; + #define PERLVARIC(prefix,var,type,init) PL_Vars.prefix##var = init; #include "perlvars.h" diff --git a/NetWare/interface.cpp b/NetWare/interface.cpp index b0f3cb3328..47fef6709c 100644 --- a/NetWare/interface.cpp +++ b/NetWare/interface.cpp @@ -120,10 +120,10 @@ int RunPerl(int argc, char **argv, char **env) //__asm{int 3}; #ifdef PERL_GLOBAL_STRUCT - #define PERLVAR(var,type) - #define PERLVARA(var,type) - #define PERLVARI(var,type,init) PL_Vars.var = init; - #define PERLVARIC(var,type,init) PL_Vars.var = init; + #define PERLVAR(prefix,var,type) + #define PERLVARA(prefix,var,type) + #define PERLVARI(prefix,var,type,init) PL_Vars.prefix##var = init; + #define PERLVARIC(prefix,var,type,init) PL_Vars.prefix##var = init; #include "perlvars.h" diff --git a/cpan/Devel-PPPort/parts/inc/variables b/cpan/Devel-PPPort/parts/inc/variables index 77b088ef58..3fbb566a98 100644 --- a/cpan/Devel-PPPort/parts/inc/variables +++ b/cpan/Devel-PPPort/parts/inc/variables @@ -383,7 +383,7 @@ other_variables() ppp_TESTVAR(PL_debstash); ppp_TESTVAR(PL_defgv); ppp_TESTVAR(PL_diehook); -#if defined(PL_phase) || defined(PL_Iphase) +#if PERL_VERSION >= 14 ppp_PARSERVAR_dummy; #else ppp_TESTVAR(PL_dirty); diff --git a/embedvar.h b/embedvar.h index 2405ee58e3..575e2e2aca 100644 --- a/embedvar.h +++ b/embedvar.h @@ -366,337 +366,6 @@ #define PL_watchok (vTHX->Iwatchok) #define PL_xmlfp (vTHX->Ixmlfp) -#else /* !MULTIPLICITY */ - -/* case 1 above */ - -#define PL_IArgv PL_Argv -#define PL_ICmd PL_Cmd -#define PL_IDBcv PL_DBcv -#define PL_IDBgv PL_DBgv -#define PL_IDBline PL_DBline -#define PL_IDBsignal PL_DBsignal -#define PL_IDBsingle PL_DBsingle -#define PL_IDBsub PL_DBsub -#define PL_IDBtrace PL_DBtrace -#define PL_IDir PL_Dir -#define PL_IEnv PL_Env -#define PL_ILIO PL_LIO -#define PL_IMem PL_Mem -#define PL_IMemParse PL_MemParse -#define PL_IMemShared PL_MemShared -#define PL_IOpPtr PL_OpPtr -#define PL_IOpSlab PL_OpSlab -#define PL_IOpSpace PL_OpSpace -#define PL_IProc PL_Proc -#define PL_ISock PL_Sock -#define PL_IStdIO PL_StdIO -#define PL_ISv PL_Sv -#define PL_IXpv PL_Xpv -#define PL_Iamagic_generation PL_amagic_generation -#define PL_Ian PL_an -#define PL_Iapiversion PL_apiversion -#define PL_Iargvgv PL_argvgv -#define PL_Iargvout_stack PL_argvout_stack -#define PL_Iargvoutgv PL_argvoutgv -#define PL_Ibasetime PL_basetime -#define PL_Ibeginav PL_beginav -#define PL_Ibeginav_save PL_beginav_save -#define PL_Iblockhooks PL_blockhooks -#define PL_Ibody_arenas PL_body_arenas -#define PL_Ibody_roots PL_body_roots -#define PL_Ibodytarget PL_bodytarget -#define PL_Ibreakable_sub_gen PL_breakable_sub_gen -#define PL_Icheckav PL_checkav -#define PL_Icheckav_save PL_checkav_save -#define PL_Ichopset PL_chopset -#define PL_Iclocktick PL_clocktick -#define PL_Icollation_ix PL_collation_ix -#define PL_Icollation_name PL_collation_name -#define PL_Icollation_standard PL_collation_standard -#define PL_Icollxfrm_base PL_collxfrm_base -#define PL_Icollxfrm_mult PL_collxfrm_mult -#define PL_Icolors PL_colors -#define PL_Icolorset PL_colorset -#define PL_Icompcv PL_compcv -#define PL_Icompiling PL_compiling -#define PL_Icomppad PL_comppad -#define PL_Icomppad_name PL_comppad_name -#define PL_Icomppad_name_fill PL_comppad_name_fill -#define PL_Icomppad_name_floor PL_comppad_name_floor -#define PL_Icop_seqmax PL_cop_seqmax -#define PL_Icryptseen PL_cryptseen -#define PL_Icurcop PL_curcop -#define PL_Icurcopdb PL_curcopdb -#define PL_Icurpad PL_curpad -#define PL_Icurpm PL_curpm -#define PL_Icurstack PL_curstack -#define PL_Icurstackinfo PL_curstackinfo -#define PL_Icurstash PL_curstash -#define PL_Icurstname PL_curstname -#define PL_Icustom_op_descs PL_custom_op_descs -#define PL_Icustom_op_names PL_custom_op_names -#define PL_Icustom_ops PL_custom_ops -#define PL_Icv_has_eval PL_cv_has_eval -#define PL_Idbargs PL_dbargs -#define PL_Idebstash PL_debstash -#define PL_Idebug PL_debug -#define PL_Idebug_pad PL_debug_pad -#define PL_Idef_layerlist PL_def_layerlist -#define PL_Idefgv PL_defgv -#define PL_Idefoutgv PL_defoutgv -#define PL_Idefstash PL_defstash -#define PL_Idelaymagic PL_delaymagic -#define PL_Idestroyhook PL_destroyhook -#define PL_Idiehook PL_diehook -#define PL_Idoswitches PL_doswitches -#define PL_Idowarn PL_dowarn -#define PL_Idumper_fd PL_dumper_fd -#define PL_Idumpindent PL_dumpindent -#define PL_Ie_script PL_e_script -#define PL_Iefloatbuf PL_efloatbuf -#define PL_Iefloatsize PL_efloatsize -#define PL_Iegid PL_egid -#define PL_Iencoding PL_encoding -#define PL_Iendav PL_endav -#define PL_Ienvgv PL_envgv -#define PL_Ierrgv PL_errgv -#define PL_Ierrors PL_errors -#define PL_Ieuid PL_euid -#define PL_Ieval_root PL_eval_root -#define PL_Ieval_start PL_eval_start -#define PL_Ievalseq PL_evalseq -#define PL_Iexit_flags PL_exit_flags -#define PL_Iexitlist PL_exitlist -#define PL_Iexitlistlen PL_exitlistlen -#define PL_Ifdpid PL_fdpid -#define PL_Ifilemode PL_filemode -#define PL_Ifirstgv PL_firstgv -#define PL_Iforkprocess PL_forkprocess -#define PL_Iformfeed PL_formfeed -#define PL_Iformtarget PL_formtarget -#define PL_Igeneration PL_generation -#define PL_Igensym PL_gensym -#define PL_Igid PL_gid -#define PL_Iglob_index PL_glob_index -#define PL_Iglobalstash PL_globalstash -#define PL_Ihash_seed PL_hash_seed -#define PL_Ihintgv PL_hintgv -#define PL_Ihints PL_hints -#define PL_Ihv_fetch_ent_mh PL_hv_fetch_ent_mh -#define PL_Iin_clean_all PL_in_clean_all -#define PL_Iin_clean_objs PL_in_clean_objs -#define PL_Iin_eval PL_in_eval -#define PL_Iin_load_module PL_in_load_module -#define PL_Iincgv PL_incgv -#define PL_Iinitav PL_initav -#define PL_Iinplace PL_inplace -#define PL_Iisarev PL_isarev -#define PL_Iknown_layers PL_known_layers -#define PL_Ilast_in_gv PL_last_in_gv -#define PL_Ilast_swash_hv PL_last_swash_hv -#define PL_Ilast_swash_key PL_last_swash_key -#define PL_Ilast_swash_klen PL_last_swash_klen -#define PL_Ilast_swash_slen PL_last_swash_slen -#define PL_Ilast_swash_tmps PL_last_swash_tmps -#define PL_Ilastfd PL_lastfd -#define PL_Ilastgotoprobe PL_lastgotoprobe -#define PL_Ilaststatval PL_laststatval -#define PL_Ilaststype PL_laststype -#define PL_Ilocalizing PL_localizing -#define PL_Ilocalpatches PL_localpatches -#define PL_Ilockhook PL_lockhook -#define PL_Imadskills PL_madskills -#define PL_Imain_cv PL_main_cv -#define PL_Imain_root PL_main_root -#define PL_Imain_start PL_main_start -#define PL_Imainstack PL_mainstack -#define PL_Imarkstack PL_markstack -#define PL_Imarkstack_max PL_markstack_max -#define PL_Imarkstack_ptr PL_markstack_ptr -#define PL_Imax_intro_pending PL_max_intro_pending -#define PL_Imaxo PL_maxo -#define PL_Imaxsysfd PL_maxsysfd -#define PL_Imemory_debug_header PL_memory_debug_header -#define PL_Imess_sv PL_mess_sv -#define PL_Imin_intro_pending PL_min_intro_pending -#define PL_Iminus_E PL_minus_E -#define PL_Iminus_F PL_minus_F -#define PL_Iminus_a PL_minus_a -#define PL_Iminus_c PL_minus_c -#define PL_Iminus_l PL_minus_l -#define PL_Iminus_n PL_minus_n -#define PL_Iminus_p PL_minus_p -#define PL_Imodcount PL_modcount -#define PL_Imodglobal PL_modglobal -#define PL_Imy_cxt_keys PL_my_cxt_keys -#define PL_Imy_cxt_list PL_my_cxt_list -#define PL_Imy_cxt_size PL_my_cxt_size -#define PL_Ina PL_na -#define PL_Inomemok PL_nomemok -#define PL_Inumeric_local PL_numeric_local -#define PL_Inumeric_name PL_numeric_name -#define PL_Inumeric_radix_sv PL_numeric_radix_sv -#define PL_Inumeric_standard PL_numeric_standard -#define PL_Iofsgv PL_ofsgv -#define PL_Ioldname PL_oldname -#define PL_Iop PL_op -#define PL_Iop_mask PL_op_mask -#define PL_Iopfreehook PL_opfreehook -#define PL_Iopsave PL_opsave -#define PL_Iorigalen PL_origalen -#define PL_Iorigargc PL_origargc -#define PL_Iorigargv PL_origargv -#define PL_Iorigenviron PL_origenviron -#define PL_Iorigfilename PL_origfilename -#define PL_Iors_sv PL_ors_sv -#define PL_Iosname PL_osname -#define PL_Ipad_reset_pending PL_pad_reset_pending -#define PL_Ipadix PL_padix -#define PL_Ipadix_floor PL_padix_floor -#define PL_Iparser PL_parser -#define PL_Ipatchlevel PL_patchlevel -#define PL_Ipeepp PL_peepp -#define PL_Iperl_destruct_level PL_perl_destruct_level -#define PL_Iperldb PL_perldb -#define PL_Iperlio PL_perlio -#define PL_Iphase PL_phase -#define PL_Ipidstatus PL_pidstatus -#define PL_Ippid PL_ppid -#define PL_Ipreambleav PL_preambleav -#define PL_Iprofiledata PL_profiledata -#define PL_Ipsig_name PL_psig_name -#define PL_Ipsig_pend PL_psig_pend -#define PL_Ipsig_ptr PL_psig_ptr -#define PL_Iptr_table PL_ptr_table -#define PL_Ireentrant_buffer PL_reentrant_buffer -#define PL_Ireentrant_retint PL_reentrant_retint -#define PL_Ireg_state PL_reg_state -#define PL_Iregdummy PL_regdummy -#define PL_Iregex_pad PL_regex_pad -#define PL_Iregex_padav PL_regex_padav -#define PL_Ireginterp_cnt PL_reginterp_cnt -#define PL_Iregistered_mros PL_registered_mros -#define PL_Iregmatch_slab PL_regmatch_slab -#define PL_Iregmatch_state PL_regmatch_state -#define PL_Irehash_seed PL_rehash_seed -#define PL_Irehash_seed_set PL_rehash_seed_set -#define PL_Ireplgv PL_replgv -#define PL_Irestartjmpenv PL_restartjmpenv -#define PL_Irestartop PL_restartop -#define PL_Irpeepp PL_rpeepp -#define PL_Irs PL_rs -#define PL_Irunops PL_runops -#define PL_Isavebegin PL_savebegin -#define PL_Isavestack PL_savestack -#define PL_Isavestack_ix PL_savestack_ix -#define PL_Isavestack_max PL_savestack_max -#define PL_Isawampersand PL_sawampersand -#define PL_Iscopestack PL_scopestack -#define PL_Iscopestack_ix PL_scopestack_ix -#define PL_Iscopestack_max PL_scopestack_max -#define PL_Iscopestack_name PL_scopestack_name -#define PL_Isecondgv PL_secondgv -#define PL_Isharehook PL_sharehook -#define PL_Isig_pending PL_sig_pending -#define PL_Isighandlerp PL_sighandlerp -#define PL_Isignalhook PL_signalhook -#define PL_Isignals PL_signals -#define PL_Islab_count PL_slab_count -#define PL_Islabs PL_slabs -#define PL_Isort_RealCmp PL_sort_RealCmp -#define PL_Isortcop PL_sortcop -#define PL_Isortstash PL_sortstash -#define PL_Isplitstr PL_splitstr -#define PL_Isrand_called PL_srand_called -#define PL_Istack_base PL_stack_base -#define PL_Istack_max PL_stack_max -#define PL_Istack_sp PL_stack_sp -#define PL_Istart_env PL_start_env -#define PL_Istashcache PL_stashcache -#define PL_Istatbuf PL_statbuf -#define PL_Istatcache PL_statcache -#define PL_Istatgv PL_statgv -#define PL_Istatname PL_statname -#define PL_Istatusvalue PL_statusvalue -#define PL_Istatusvalue_posix PL_statusvalue_posix -#define PL_Istatusvalue_vms PL_statusvalue_vms -#define PL_Istderrgv PL_stderrgv -#define PL_Istdingv PL_stdingv -#define PL_Istrtab PL_strtab -#define PL_Isub_generation PL_sub_generation -#define PL_Isubline PL_subline -#define PL_Isubname PL_subname -#define PL_Isv_arenaroot PL_sv_arenaroot -#define PL_Isv_count PL_sv_count -#define PL_Isv_no PL_sv_no -#define PL_Isv_objcount PL_sv_objcount -#define PL_Isv_root PL_sv_root -#define PL_Isv_serial PL_sv_serial -#define PL_Isv_undef PL_sv_undef -#define PL_Isv_yes PL_sv_yes -#define PL_Isys_intern PL_sys_intern -#define PL_Itaint_warn PL_taint_warn -#define PL_Itainted PL_tainted -#define PL_Itainting PL_tainting -#define PL_Ithreadhook PL_threadhook -#define PL_Itimesbuf PL_timesbuf -#define PL_Itmps_floor PL_tmps_floor -#define PL_Itmps_ix PL_tmps_ix -#define PL_Itmps_max PL_tmps_max -#define PL_Itmps_stack PL_tmps_stack -#define PL_Itop_env PL_top_env -#define PL_Itoptarget PL_toptarget -#define PL_Iuid PL_uid -#define PL_Iunicode PL_unicode -#define PL_Iunitcheckav PL_unitcheckav -#define PL_Iunitcheckav_save PL_unitcheckav_save -#define PL_Iunlockhook PL_unlockhook -#define PL_Iunsafe PL_unsafe -#define PL_Iutf8_X_L PL_utf8_X_L -#define PL_Iutf8_X_LV PL_utf8_X_LV -#define PL_Iutf8_X_LVT PL_utf8_X_LVT -#define PL_Iutf8_X_LV_LVT_V PL_utf8_X_LV_LVT_V -#define PL_Iutf8_X_T PL_utf8_X_T -#define PL_Iutf8_X_V PL_utf8_X_V -#define PL_Iutf8_X_begin PL_utf8_X_begin -#define PL_Iutf8_X_extend PL_utf8_X_extend -#define PL_Iutf8_X_non_hangul PL_utf8_X_non_hangul -#define PL_Iutf8_X_prepend PL_utf8_X_prepend -#define PL_Iutf8_alnum PL_utf8_alnum -#define PL_Iutf8_alpha PL_utf8_alpha -#define PL_Iutf8_ascii PL_utf8_ascii -#define PL_Iutf8_cntrl PL_utf8_cntrl -#define PL_Iutf8_digit PL_utf8_digit -#define PL_Iutf8_foldable PL_utf8_foldable -#define PL_Iutf8_foldclosures PL_utf8_foldclosures -#define PL_Iutf8_graph PL_utf8_graph -#define PL_Iutf8_idcont PL_utf8_idcont -#define PL_Iutf8_idstart PL_utf8_idstart -#define PL_Iutf8_lower PL_utf8_lower -#define PL_Iutf8_mark PL_utf8_mark -#define PL_Iutf8_perl_space PL_utf8_perl_space -#define PL_Iutf8_perl_word PL_utf8_perl_word -#define PL_Iutf8_posix_digit PL_utf8_posix_digit -#define PL_Iutf8_print PL_utf8_print -#define PL_Iutf8_punct PL_utf8_punct -#define PL_Iutf8_space PL_utf8_space -#define PL_Iutf8_tofold PL_utf8_tofold -#define PL_Iutf8_tolower PL_utf8_tolower -#define PL_Iutf8_totitle PL_utf8_totitle -#define PL_Iutf8_toupper PL_utf8_toupper -#define PL_Iutf8_upper PL_utf8_upper -#define PL_Iutf8_xdigit PL_utf8_xdigit -#define PL_Iutf8_xidcont PL_utf8_xidcont -#define PL_Iutf8_xidstart PL_utf8_xidstart -#define PL_Iutf8cache PL_utf8cache -#define PL_Iutf8locale PL_utf8locale -#define PL_Iwarnhook PL_warnhook -#define PL_Iwatchaddr PL_watchaddr -#define PL_Iwatchok PL_watchok -#define PL_Ixmlfp PL_xmlfp - - #endif /* MULTIPLICITY */ #if defined(PERL_GLOBAL_STRUCT) @@ -770,44 +439,6 @@ #define PL_watch_pvx (my_vars->Gwatch_pvx) #define PL_Gwatch_pvx (my_vars->Gwatch_pvx) -#else /* !PERL_GLOBAL_STRUCT */ - -#define PL_Gappctx PL_appctx -#define PL_Gcheck PL_check -#define PL_Gcsighandlerp PL_csighandlerp -#define PL_Gcurinterp PL_curinterp -#define PL_Gdo_undump PL_do_undump -#define PL_Gdollarzero_mutex PL_dollarzero_mutex -#define PL_Gfold_locale PL_fold_locale -#define PL_Ghints_mutex PL_hints_mutex -#define PL_Gkeyword_plugin PL_keyword_plugin -#define PL_Gmalloc_mutex PL_malloc_mutex -#define PL_Gmmap_page_size PL_mmap_page_size -#define PL_Gmy_ctx_mutex PL_my_ctx_mutex -#define PL_Gmy_cxt_index PL_my_cxt_index -#define PL_Gop_mutex PL_op_mutex -#define PL_Gop_seq PL_op_seq -#define PL_Gop_sequence PL_op_sequence -#define PL_Gperlio_debug_fd PL_perlio_debug_fd -#define PL_Gperlio_fd_refcnt PL_perlio_fd_refcnt -#define PL_Gperlio_fd_refcnt_size PL_perlio_fd_refcnt_size -#define PL_Gperlio_mutex PL_perlio_mutex -#define PL_Gppaddr PL_ppaddr -#ifdef OS2 -#define PL_Gsh_path PL_sh_path -#endif -#define PL_Gsig_defaulting PL_sig_defaulting -#define PL_Gsig_handlers_initted PL_sig_handlers_initted -#define PL_Gsig_ignoring PL_sig_ignoring -#define PL_Gsig_trapped PL_sig_trapped -#define PL_Gsigfpe_saved PL_sigfpe_saved -#define PL_Gsv_placeholder PL_sv_placeholder -#define PL_Gthr_key PL_thr_key -#define PL_Gtimesbase PL_timesbase -#define PL_Guse_safe_putenv PL_use_safe_putenv -#define PL_Gveto_cleanup PL_veto_cleanup -#define PL_Gwatch_pvx PL_watch_pvx - #endif /* PERL_GLOBAL_STRUCT */ /* ex: set ro: */ diff --git a/ext/B/B.pm b/ext/B/B.pm index da20925ae5..2f18065e4a 100644 --- a/ext/B/B.pm +++ b/ext/B/B.pm @@ -15,7 +15,7 @@ require Exporter; # walkoptree comes from B.xs BEGIN { - $B::VERSION = '1.30'; + $B::VERSION = '1.31'; @B::EXPORT_OK = (); # Our BOOT code needs $VERSION set, and will append to @EXPORT_OK. diff --git a/ext/B/B.xs b/ext/B/B.xs index 901554968f..0c44e45bad 100644 --- a/ext/B/B.xs +++ b/ext/B/B.xs @@ -609,10 +609,10 @@ typedef struct refcounted_he *B__RHE; #endif #ifdef MULTIPLICITY -# define ASSIGN_COMMON_ALIAS(var) \ - STMT_START { XSANY.any_i32 = offsetof(struct interpreter, var); } STMT_END +# define ASSIGN_COMMON_ALIAS(prefix, var) \ + STMT_START { XSANY.any_i32 = offsetof(struct interpreter, prefix##var); } STMT_END #else -# define ASSIGN_COMMON_ALIAS(var) \ +# define ASSIGN_COMMON_ALIAS(prefix, var) \ STMT_START { XSANY.any_ptr = (void *)&PL_##var; } STMT_END #endif @@ -657,35 +657,35 @@ BOOT: specialsv_list[6] = (SV *) pWARN_STD; cv = newXS("B::init_av", intrpvar_sv_common, file); - ASSIGN_COMMON_ALIAS(Iinitav); + ASSIGN_COMMON_ALIAS(I, initav); cv = newXS("B::check_av", intrpvar_sv_common, file); - ASSIGN_COMMON_ALIAS(Icheckav_save); + ASSIGN_COMMON_ALIAS(I, checkav_save); #if PERL_VERSION >= 9 cv = newXS("B::unitcheck_av", intrpvar_sv_common, file); - ASSIGN_COMMON_ALIAS(Iunitcheckav_save); + ASSIGN_COMMON_ALIAS(I, unitcheckav_save); #endif cv = newXS("B::begin_av", intrpvar_sv_common, file); - ASSIGN_COMMON_ALIAS(Ibeginav_save); + ASSIGN_COMMON_ALIAS(I, beginav_save); cv = newXS("B::end_av", intrpvar_sv_common, file); - ASSIGN_COMMON_ALIAS(Iendav); + ASSIGN_COMMON_ALIAS(I, endav); cv = newXS("B::main_cv", intrpvar_sv_common, file); - ASSIGN_COMMON_ALIAS(Imain_cv); + ASSIGN_COMMON_ALIAS(I, main_cv); cv = newXS("B::inc_gv", intrpvar_sv_common, file); - ASSIGN_COMMON_ALIAS(Iincgv); + ASSIGN_COMMON_ALIAS(I, incgv); cv = newXS("B::defstash", intrpvar_sv_common, file); - ASSIGN_COMMON_ALIAS(Idefstash); + ASSIGN_COMMON_ALIAS(I, defstash); cv = newXS("B::curstash", intrpvar_sv_common, file); - ASSIGN_COMMON_ALIAS(Icurstash); + ASSIGN_COMMON_ALIAS(I, curstash); cv = newXS("B::formfeed", intrpvar_sv_common, file); - ASSIGN_COMMON_ALIAS(Iformfeed); + ASSIGN_COMMON_ALIAS(I, formfeed); #ifdef USE_ITHREADS cv = newXS("B::regex_padav", intrpvar_sv_common, file); - ASSIGN_COMMON_ALIAS(Iregex_padav); + ASSIGN_COMMON_ALIAS(I, regex_padav); #endif cv = newXS("B::warnhook", intrpvar_sv_common, file); - ASSIGN_COMMON_ALIAS(Iwarnhook); + ASSIGN_COMMON_ALIAS(I, warnhook); cv = newXS("B::diehook", intrpvar_sv_common, file); - ASSIGN_COMMON_ALIAS(Idiehook); + ASSIGN_COMMON_ALIAS(I, diehook); } long diff --git a/intrpvar.h b/intrpvar.h index 4a6122faa1..84534c94c1 100644 --- a/intrpvar.h +++ b/intrpvar.h @@ -32,43 +32,43 @@ * * Important ones in the first cache line (if alignment is done right) */ -PERLVAR(Istack_sp, SV **) /* top of the stack */ +PERLVAR(I, stack_sp, SV **) /* top of the stack */ #ifdef OP_IN_REGISTER -PERLVAR(Iopsave, OP *) +PERLVAR(I, opsave, OP *) #else -PERLVAR(Iop, OP *) /* currently executing op */ +PERLVAR(I, op, OP *) /* currently executing op */ #endif -PERLVAR(Icurpad, SV **) /* active pad (lexicals+tmps) */ +PERLVAR(I, curpad, SV **) /* active pad (lexicals+tmps) */ -PERLVAR(Istack_base, SV **) -PERLVAR(Istack_max, SV **) +PERLVAR(I, stack_base, SV **) +PERLVAR(I, stack_max, SV **) -PERLVAR(Iscopestack, I32 *) /* scopes we've ENTERed */ +PERLVAR(I, scopestack, I32 *) /* scopes we've ENTERed */ /* name of the scopes we've ENTERed. Only used with -DDEBUGGING, but needs to be present always, as -DDEUBGGING must be binary compatible with non. */ -PERLVARI(Iscopestack_name, const char * *, NULL) -PERLVAR(Iscopestack_ix, I32) -PERLVAR(Iscopestack_max,I32) +PERLVARI(I, scopestack_name, const char * *, NULL) +PERLVAR(I, scopestack_ix, I32) +PERLVAR(I, scopestack_max, I32) -PERLVAR(Isavestack, ANY *) /* items that need to be restored when +PERLVAR(I, savestack, ANY *) /* items that need to be restored when LEAVEing scopes we've ENTERed */ -PERLVAR(Isavestack_ix, I32) -PERLVAR(Isavestack_max, I32) - -PERLVAR(Itmps_stack, SV **) /* mortals we've made */ -PERLVARI(Itmps_ix, I32, -1) -PERLVARI(Itmps_floor, I32, -1) -PERLVAR(Itmps_max, I32) -PERLVAR(Imodcount, I32) /* how much op_lvalue()ification in +PERLVAR(I, savestack_ix, I32) +PERLVAR(I, savestack_max, I32) + +PERLVAR(I, tmps_stack, SV **) /* mortals we've made */ +PERLVARI(I, tmps_ix, I32, -1) +PERLVARI(I, tmps_floor, I32, -1) +PERLVAR(I, tmps_max, I32) +PERLVAR(I, modcount, I32) /* how much op_lvalue()ification in assignment? */ -PERLVAR(Imarkstack, I32 *) /* stack_sp locations we're +PERLVAR(I, markstack, I32 *) /* stack_sp locations we're remembering */ -PERLVAR(Imarkstack_ptr, I32 *) -PERLVAR(Imarkstack_max, I32 *) +PERLVAR(I, markstack_ptr, I32 *) +PERLVAR(I, markstack_max, I32 *) -PERLVAR(ISv, SV *) /* used to hold temporary values */ -PERLVAR(IXpv, XPV *) /* used to hold temporary values */ +PERLVAR(I, Sv, SV *) /* used to hold temporary values */ +PERLVAR(I, Xpv, XPV *) /* used to hold temporary values */ /* =for apidoc Amn|STRLEN|PL_na @@ -81,21 +81,21 @@ C macro. =cut */ -PERLVAR(Ina, STRLEN) /* for use in SvPV when length is +PERLVAR(I, na, STRLEN) /* for use in SvPV when length is Not Applicable */ /* stat stuff */ -PERLVAR(Istatbuf, Stat_t) -PERLVAR(Istatcache, Stat_t) /* _ */ -PERLVAR(Istatgv, GV *) -PERLVARI(Istatname, SV *, NULL) +PERLVAR(I, statbuf, Stat_t) +PERLVAR(I, statcache, Stat_t) /* _ */ +PERLVAR(I, statgv, GV *) +PERLVARI(I, statname, SV *, NULL) #ifdef HAS_TIMES -PERLVAR(Itimesbuf, struct tms) +PERLVAR(I, timesbuf, struct tms) #endif /* Fields used by magic variables such as $@, $/ and so on */ -PERLVAR(Icurpm, PMOP *) /* what to do \ interps in REs from */ +PERLVAR(I, curpm, PMOP *) /* what to do \ interps in REs from */ /* =for apidoc mn|SV*|PL_rs @@ -113,60 +113,60 @@ The glob containing the output field separator - C<*,> in Perl space. =cut */ -PERLVAR(Irs, SV *) /* input record separator $/ */ -PERLVAR(Ilast_in_gv, GV *) /* GV used in last */ -PERLVAR(Iofsgv, GV *) /* GV of output field separator *, */ -PERLVAR(Idefoutgv, GV *) /* default FH for output */ -PERLVARI(Ichopset, const char *, " \n-") /* $: */ -PERLVAR(Iformtarget, SV *) -PERLVAR(Ibodytarget, SV *) -PERLVAR(Itoptarget, SV *) +PERLVAR(I, rs, SV *) /* input record separator $/ */ +PERLVAR(I, last_in_gv, GV *) /* GV used in last */ +PERLVAR(I, ofsgv, GV *) /* GV of output field separator *, */ +PERLVAR(I, defoutgv, GV *) /* default FH for output */ +PERLVARI(I, chopset, const char *, " \n-") /* $: */ +PERLVAR(I, formtarget, SV *) +PERLVAR(I, bodytarget, SV *) +PERLVAR(I, toptarget, SV *) /* Stashes */ -PERLVAR(Idefstash, HV *) /* main symbol table */ -PERLVAR(Icurstash, HV *) /* symbol table for current package */ - -PERLVAR(Irestartop, OP *) /* propagating an error from croak? */ -PERLVAR(Irestartjmpenv, JMPENV *) /* target frame for longjmp in die */ -PERLVAR(Icurcop, COP *) -PERLVAR(Icurstack, AV *) /* THE STACK */ -PERLVAR(Icurstackinfo, PERL_SI *) /* current stack + context */ -PERLVAR(Imainstack, AV *) /* the stack when nothing funny is +PERLVAR(I, defstash, HV *) /* main symbol table */ +PERLVAR(I, curstash, HV *) /* symbol table for current package */ + +PERLVAR(I, restartop, OP *) /* propagating an error from croak? */ +PERLVAR(I, restartjmpenv, JMPENV *) /* target frame for longjmp in die */ +PERLVAR(I, curcop, COP *) +PERLVAR(I, curstack, AV *) /* THE STACK */ +PERLVAR(I, curstackinfo, PERL_SI *) /* current stack + context */ +PERLVAR(I, mainstack, AV *) /* the stack when nothing funny is happening */ -PERLVAR(Itop_env, JMPENV *) /* ptr to current sigjmp environment */ -PERLVAR(Istart_env, JMPENV) /* empty startup sigjmp environment */ -PERLVARI(Ierrors, SV *, NULL) /* outstanding queued errors */ +PERLVAR(I, top_env, JMPENV *) /* ptr to current sigjmp environment */ +PERLVAR(I, start_env, JMPENV) /* empty startup sigjmp environment */ +PERLVARI(I, errors, SV *, NULL) /* outstanding queued errors */ /* statics "owned" by various functions */ -PERLVAR(Ihv_fetch_ent_mh, HE*) /* owned by hv_fetch_ent() */ +PERLVAR(I, hv_fetch_ent_mh, HE*) /* owned by hv_fetch_ent() */ -PERLVAR(Ilastgotoprobe, OP*) /* from pp_ctl.c */ +PERLVAR(I, lastgotoprobe, OP*) /* from pp_ctl.c */ /* sort stuff */ -PERLVAR(Isortcop, OP *) /* user defined sort routine */ -PERLVAR(Isortstash, HV *) /* which is in some package or other */ -PERLVAR(Ifirstgv, GV *) /* $a */ -PERLVAR(Isecondgv, GV *) /* $b */ +PERLVAR(I, sortcop, OP *) /* user defined sort routine */ +PERLVAR(I, sortstash, HV *) /* which is in some package or other */ +PERLVAR(I, firstgv, GV *) /* $a */ +PERLVAR(I, secondgv, GV *) /* $b */ /* float buffer */ -PERLVAR(Iefloatbuf, char *) -PERLVAR(Iefloatsize, STRLEN) +PERLVAR(I, efloatbuf, char *) +PERLVAR(I, efloatsize, STRLEN) /* regex stuff */ -PERLVAR(Ireg_state, struct re_save_state) +PERLVAR(I, reg_state, struct re_save_state) -PERLVAR(Iregdummy, regnode) /* from regcomp.c */ +PERLVAR(I, regdummy, regnode) /* from regcomp.c */ -PERLVARI(Idumpindent, U16, 4) /* number of blanks per dump +PERLVARI(I, dumpindent, U16, 4) /* number of blanks per dump indentation level */ -PERLVAR(Iutf8locale, bool) /* utf8 locale detected */ -PERLVARI(Irehash_seed_set, bool, FALSE) /* 582 hash initialized? */ +PERLVAR(I, utf8locale, bool) /* utf8 locale detected */ +PERLVARI(I, rehash_seed_set, bool, FALSE) /* 582 hash initialized? */ -PERLVARA(Icolors,6, char *) /* from regcomp.c */ +PERLVARA(I, colors,6, char *) /* from regcomp.c */ /* =for apidoc Amn|peep_t|PL_peepp @@ -189,7 +189,7 @@ convenient to wrap the L hook. =cut */ -PERLVARI(Ipeepp, peep_t, Perl_peep) +PERLVARI(I, peepp, peep_t, Perl_peep) /* =for apidoc Amn|peep_t|PL_rpeepp @@ -213,7 +213,7 @@ to wrap the L hook. =cut */ -PERLVARI(Irpeepp, peep_t, Perl_rpeep) +PERLVARI(I, rpeepp, peep_t, Perl_rpeep) /* =for apidoc Amn|Perl_ophook_t|PL_opfreehook @@ -227,64 +227,64 @@ When you replace this variable, it is considered a good practice to store the po =cut */ -PERLVARI(Iopfreehook, Perl_ophook_t, 0) /* op_free() hook */ +PERLVARI(I, opfreehook, Perl_ophook_t, 0) /* op_free() hook */ /* Space for U32 */ -PERLVARI(Ireginterp_cnt,I32, 0) /* Whether "Regexp" was interpolated. */ -PERLVARI(Iwatchaddr, char **, 0) -PERLVAR(Iwatchok, char *) +PERLVARI(I, reginterp_cnt,I32, 0) /* Whether "Regexp" was interpolated. */ +PERLVARI(I, watchaddr, char **, 0) +PERLVAR(I, watchok, char *) /* the currently active slab in a chain of slabs of regmatch states, * and the currently active state within that slab */ -PERLVARI(Iregmatch_slab, regmatch_slab *, NULL) -PERLVAR(Iregmatch_state, regmatch_state *) +PERLVARI(I, regmatch_slab, regmatch_slab *, NULL) +PERLVAR(I, regmatch_state, regmatch_state *) /* Put anything new that is pointer aligned here. */ -PERLVAR(Idelaymagic, U16) /* ($<,$>) = ... */ -PERLVAR(Ilocalizing, U8) /* are we processing a local() list? */ -PERLVAR(Icolorset, bool) /* from regcomp.c */ -PERLVAR(Iin_eval, U8) /* trap "fatal" errors? */ -PERLVAR(Itainted, bool) /* using variables controlled by $< */ -PERLVAR(Itainting, bool) /* doing taint checks */ +PERLVAR(I, delaymagic, U16) /* ($<,$>) = ... */ +PERLVAR(I, localizing, U8) /* are we processing a local() list? */ +PERLVAR(I, colorset, bool) /* from regcomp.c */ +PERLVAR(I, in_eval, U8) /* trap "fatal" errors? */ +PERLVAR(I, tainted, bool) /* using variables controlled by $< */ +PERLVAR(I, tainting, bool) /* doing taint checks */ /* This value may be set when embedding for full cleanup */ /* 0=none, 1=full, 2=full with checks */ /* mod_perl is special, and also assigns a meaning -1 */ -PERLVARI(Iperl_destruct_level, signed char, 0) +PERLVARI(I, perl_destruct_level, signed char, 0) /* current phase the interpreter is in */ -PERLVARI(Iphase, enum perl_phase, PERL_PHASE_CONSTRUCT) +PERLVARI(I, phase, enum perl_phase, PERL_PHASE_CONSTRUCT) -PERLVAR(Iperldb, U32) +PERLVAR(I, perldb, U32) -PERLVAR(Isignals, U32) /* Using which pre-5.8 signals */ +PERLVAR(I, signals, U32) /* Using which pre-5.8 signals */ /* pseudo environmental stuff */ -PERLVAR(Iorigargc, int) -PERLVAR(Iorigargv, char **) -PERLVAR(Ienvgv, GV *) -PERLVAR(Iincgv, GV *) -PERLVAR(Ihintgv, GV *) -PERLVAR(Iorigfilename, char *) -PERLVAR(Idiehook, SV *) -PERLVAR(Iwarnhook, SV *) +PERLVAR(I, origargc, int) +PERLVAR(I, origargv, char **) +PERLVAR(I, envgv, GV *) +PERLVAR(I, incgv, GV *) +PERLVAR(I, hintgv, GV *) +PERLVAR(I, origfilename, char *) +PERLVAR(I, diehook, SV *) +PERLVAR(I, warnhook, SV *) /* switches */ -PERLVAR(Ipatchlevel, SV *) -PERLVAR(Iapiversion, SV *) -PERLVAR(Ilocalpatches, const char * const *) -PERLVARI(Isplitstr, const char *, " ") - -PERLVAR(Iminus_c, bool) -PERLVAR(Iminus_n, bool) -PERLVAR(Iminus_p, bool) -PERLVAR(Iminus_l, bool) -PERLVAR(Iminus_a, bool) -PERLVAR(Iminus_F, bool) -PERLVAR(Idoswitches, bool) -PERLVAR(Iminus_E, bool) +PERLVAR(I, patchlevel, SV *) +PERLVAR(I, apiversion, SV *) +PERLVAR(I, localpatches, const char * const *) +PERLVARI(I, splitstr, const char *, " ") + +PERLVAR(I, minus_c, bool) +PERLVAR(I, minus_n, bool) +PERLVAR(I, minus_p, bool) +PERLVAR(I, minus_l, bool) +PERLVAR(I, minus_a, bool) +PERLVAR(I, minus_F, bool) +PERLVAR(I, doswitches, bool) +PERLVAR(I, minus_E, bool) /* @@ -295,50 +295,50 @@ The C variable which corresponds to Perl's $^W warning variable. =cut */ -PERLVAR(Idowarn, U8) -PERLVAR(Isawampersand, bool) /* must save all match strings */ -PERLVAR(Iunsafe, bool) -PERLVAR(Iexit_flags, U8) /* was exit() unexpected, etc. */ -PERLVAR(Isrand_called, bool) -PERLVARI(Iin_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */ +PERLVAR(I, dowarn, U8) +PERLVAR(I, sawampersand, bool) /* must save all match strings */ +PERLVAR(I, unsafe, bool) +PERLVAR(I, exit_flags, U8) /* was exit() unexpected, etc. */ +PERLVAR(I, srand_called, bool) +PERLVARI(I, in_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */ /* Space for a U16 */ -PERLVAR(Iinplace, char *) -PERLVAR(Ie_script, SV *) +PERLVAR(I, inplace, char *) +PERLVAR(I, e_script, SV *) /* magical thingies */ -PERLVAR(Ibasetime, Time_t) /* $^T */ -PERLVAR(Iformfeed, SV *) /* $^L */ +PERLVAR(I, basetime, Time_t) /* $^T */ +PERLVAR(I, formfeed, SV *) /* $^L */ -PERLVARI(Imaxsysfd, I32, MAXSYSFD) +PERLVARI(I, maxsysfd, I32, MAXSYSFD) /* top fd to pass to subprocesses */ -PERLVAR(Istatusvalue, I32) /* $? */ +PERLVAR(I, statusvalue, I32) /* $? */ #ifdef VMS -PERLVAR(Istatusvalue_vms,U32) +PERLVAR(I, statusvalue_vms, U32) #else -PERLVAR(Istatusvalue_posix,I32) +PERLVAR(I, statusvalue_posix, I32) #endif -PERLVARI(Isig_pending, int,0) /* Number if highest signal pending */ -PERLVAR(Ipsig_pend, int *) /* per-signal "count" of pending */ +PERLVARI(I, sig_pending, int, 0) /* Number if highest signal pending */ +PERLVAR(I, psig_pend, int *) /* per-signal "count" of pending */ /* shortcuts to various I/O objects */ -PERLVAR(Istdingv, GV *) /* *STDIN */ -PERLVAR(Istderrgv, GV *) /* *STDERR */ -PERLVAR(Idefgv, GV *) -PERLVAR(Iargvgv, GV *) /* *ARGV */ -PERLVAR(Iargvoutgv, GV *) /* *ARGVOUT */ -PERLVAR(Iargvout_stack, AV *) +PERLVAR(I, stdingv, GV *) /* *STDIN */ +PERLVAR(I, stderrgv, GV *) /* *STDERR */ +PERLVAR(I, defgv, GV *) +PERLVAR(I, argvgv, GV *) /* *ARGV */ +PERLVAR(I, argvoutgv, GV *) /* *ARGVOUT */ +PERLVAR(I, argvout_stack, AV *) /* shortcuts to regexp stuff */ -PERLVAR(Ireplgv, GV *) /* *^R */ +PERLVAR(I, replgv, GV *) /* *^R */ /* shortcuts to misc objects */ -PERLVAR(Ierrgv, GV *) /* *@ */ +PERLVAR(I, errgv, GV *) /* *@ */ /* shortcuts to debugging objects */ -PERLVAR(IDBgv, GV *) /* *DB::DB */ -PERLVAR(IDBline, GV *) /* *DB::line */ +PERLVAR(I, DBgv, GV *) /* *DB::DB */ +PERLVAR(I, DBline, GV *) /* *DB::line */ /* =for apidoc mn|GV *|PL_DBsub @@ -362,71 +362,71 @@ variable. See C. =cut */ -PERLVAR(IDBsub, GV *) /* *DB::sub */ -PERLVAR(IDBsingle, SV *) /* $DB::single */ -PERLVAR(IDBtrace, SV *) /* $DB::trace */ -PERLVAR(IDBsignal, SV *) /* $DB::signal */ -PERLVAR(Idbargs, AV *) /* args to call listed by caller function */ +PERLVAR(I, DBsub, GV *) /* *DB::sub */ +PERLVAR(I, DBsingle, SV *) /* $DB::single */ +PERLVAR(I, DBtrace, SV *) /* $DB::trace */ +PERLVAR(I, DBsignal, SV *) /* $DB::signal */ +PERLVAR(I, dbargs, AV *) /* args to call listed by caller function */ /* symbol tables */ -PERLVAR(Idebstash, HV *) /* symbol table for perldb package */ -PERLVAR(Iglobalstash, HV *) /* global keyword overrides imported here */ -PERLVAR(Icurstname, SV *) /* name of current package */ -PERLVAR(Ibeginav, AV *) /* names of BEGIN subroutines */ -PERLVAR(Iendav, AV *) /* names of END subroutines */ -PERLVAR(Iunitcheckav, AV *) /* names of UNITCHECK subroutines */ -PERLVAR(Icheckav, AV *) /* names of CHECK subroutines */ -PERLVAR(Iinitav, AV *) /* names of INIT subroutines */ -PERLVAR(Istrtab, HV *) /* shared string table */ -PERLVARI(Isub_generation,U32,1) /* incr to invalidate method cache */ +PERLVAR(I, debstash, HV *) /* symbol table for perldb package */ +PERLVAR(I, globalstash, HV *) /* global keyword overrides imported here */ +PERLVAR(I, curstname, SV *) /* name of current package */ +PERLVAR(I, beginav, AV *) /* names of BEGIN subroutines */ +PERLVAR(I, endav, AV *) /* names of END subroutines */ +PERLVAR(I, unitcheckav, AV *) /* names of UNITCHECK subroutines */ +PERLVAR(I, checkav, AV *) /* names of CHECK subroutines */ +PERLVAR(I, initav, AV *) /* names of INIT subroutines */ +PERLVAR(I, strtab, HV *) /* shared string table */ +PERLVARI(I, sub_generation, U32, 1) /* incr to invalidate method cache */ /* funky return mechanisms */ -PERLVAR(Iforkprocess, int) /* so do_open |- can return proc# */ +PERLVAR(I, forkprocess, int) /* so do_open |- can return proc# */ /* memory management */ -PERLVAR(Isv_count, I32) /* how many SV* are currently allocated */ -PERLVAR(Isv_objcount, I32) /* how many objects are currently allocated */ -PERLVAR(Isv_root, SV*) /* storage for SVs belonging to interp */ -PERLVAR(Isv_arenaroot, SV*) /* list of areas for garbage collection */ +PERLVAR(I, sv_count, I32) /* how many SV* are currently allocated */ +PERLVAR(I, sv_objcount, I32) /* how many objects are currently allocated */ +PERLVAR(I, sv_root, SV *) /* storage for SVs belonging to interp */ +PERLVAR(I, sv_arenaroot, SV *) /* list of areas for garbage collection */ /* subprocess state */ -PERLVAR(Ifdpid, AV *) /* keep fd-to-pid mappings for my_popen */ +PERLVAR(I, fdpid, AV *) /* keep fd-to-pid mappings for my_popen */ /* internal state */ -PERLVARI(Iop_mask, char *, NULL) /* masked operations for safe evals */ +PERLVARI(I, op_mask, char *, NULL) /* masked operations for safe evals */ /* current interpreter roots */ -PERLVAR(Imain_cv, CV *) -PERLVAR(Imain_root, OP *) -PERLVAR(Imain_start, OP *) -PERLVAR(Ieval_root, OP *) -PERLVAR(Ieval_start, OP *) +PERLVAR(I, main_cv, CV *) +PERLVAR(I, main_root, OP *) +PERLVAR(I, main_start, OP *) +PERLVAR(I, eval_root, OP *) +PERLVAR(I, eval_start, OP *) /* runtime control stuff */ -PERLVARI(Icurcopdb, COP *, NULL) +PERLVARI(I, curcopdb, COP *, NULL) -PERLVAR(Ifilemode, int) /* so nextargv() can preserve mode */ -PERLVAR(Ilastfd, int) /* what to preserve mode on */ -PERLVAR(Ioldname, char *) /* what to preserve mode on */ -PERLVAR(IArgv, const char **) /* stuff to free from do_aexec, vfork safe */ -PERLVAR(ICmd, char *) /* stuff to free from do_aexec, vfork safe */ +PERLVAR(I, filemode, int) /* so nextargv() can preserve mode */ +PERLVAR(I, lastfd, int) /* what to preserve mode on */ +PERLVAR(I, oldname, char *) /* what to preserve mode on */ +PERLVAR(I, Argv, const char **) /* stuff to free from do_aexec, vfork safe */ +PERLVAR(I, Cmd, char *) /* stuff to free from do_aexec, vfork safe */ /* Elements in this array have ';' appended and are injected as a single line into the tokeniser. You can't put any (literal) newlines into any program you stuff in into this array, as the point where it's injected is expecting a single physical line. */ -PERLVAR(Ipreambleav, AV *) -PERLVAR(Imess_sv, SV *) -PERLVAR(Iors_sv, SV *) /* output record separator $\ */ +PERLVAR(I, preambleav, AV *) +PERLVAR(I, mess_sv, SV *) +PERLVAR(I, ors_sv, SV *) /* output record separator $\ */ /* statics moved here for shared library purposes */ -PERLVARI(Igensym, I32, 0) /* next symbol for getsym() to define */ -PERLVARI(Icv_has_eval, bool, FALSE) /* PL_compcv includes an entereval or similar */ -PERLVAR(Itaint_warn, bool) /* taint warns instead of dying */ -PERLVARI(Ilaststype, U16, OP_STAT) -PERLVARI(Ilaststatval, int, -1) +PERLVARI(I, gensym, I32, 0) /* next symbol for getsym() to define */ +PERLVARI(I, cv_has_eval, bool, FALSE) /* PL_compcv includes an entereval or similar */ +PERLVAR(I, taint_warn, bool) /* taint warns instead of dying */ +PERLVARI(I, laststype, U16, OP_STAT) +PERLVARI(I, laststatval, int, -1) /* interpreter atexit processing */ -PERLVARI(Iexitlistlen, I32, 0) /* length of same */ -PERLVARI(Iexitlist, PerlExitListEntry *, NULL) +PERLVARI(I, exitlistlen, I32, 0) /* length of same */ +PERLVARI(I, exitlist, PerlExitListEntry *, NULL) /* list of exit functions */ /* @@ -441,38 +441,38 @@ prefixed by the package name of the extension that owns the data. =cut */ -PERLVAR(Imodglobal, HV *) /* per-interp module data */ +PERLVAR(I, modglobal, HV *) /* per-interp module data */ /* these used to be in global before 5.004_68 */ -PERLVARI(Iprofiledata, U32 *, NULL) /* table of ops, counts */ +PERLVARI(I, profiledata, U32 *, NULL) /* table of ops, counts */ -PERLVAR(Icompiling, COP) /* compiling/done executing marker */ +PERLVAR(I, compiling, COP) /* compiling/done executing marker */ -PERLVAR(Icompcv, CV *) /* currently compiling subroutine */ -PERLVAR(Icomppad, AV *) /* storage for lexically scoped temporaries */ -PERLVAR(Icomppad_name, AV *) /* variable names for "my" variables */ -PERLVAR(Icomppad_name_fill, I32) /* last "introduced" variable offset */ -PERLVAR(Icomppad_name_floor, I32) /* start of vars in innermost block */ +PERLVAR(I, compcv, CV *) /* currently compiling subroutine */ +PERLVAR(I, comppad, AV *) /* storage for lexically scoped temporaries */ +PERLVAR(I, comppad_name, AV *) /* variable names for "my" variables */ +PERLVAR(I, comppad_name_fill, I32) /* last "introduced" variable offset */ +PERLVAR(I, comppad_name_floor, I32) /* start of vars in innermost block */ #ifdef HAVE_INTERP_INTERN -PERLVAR(Isys_intern, struct interp_intern) +PERLVAR(I, sys_intern, struct interp_intern) /* platform internals */ #endif /* more statics moved here */ -PERLVAR(IDBcv, CV *) /* from perl.c */ -PERLVARI(Igeneration, int, 100) /* from op.c */ +PERLVAR(I, DBcv, CV *) /* from perl.c */ +PERLVARI(I, generation, int, 100) /* from op.c */ -PERLVARI(Iin_clean_objs,bool, FALSE) /* from sv.c */ -PERLVARI(Iin_clean_all, bool, FALSE) /* ptrs to freed SVs now legal */ -PERLVAR(Inomemok, bool) /* let malloc context handle nomem */ -PERLVARI(Isavebegin, bool, FALSE) /* save BEGINs for compiler */ +PERLVARI(I, in_clean_objs,bool, FALSE) /* from sv.c */ +PERLVARI(I, in_clean_all, bool, FALSE) /* ptrs to freed SVs now legal */ +PERLVAR(I, nomemok, bool) /* let malloc context handle nomem */ +PERLVARI(I, savebegin, bool, FALSE) /* save BEGINs for compiler */ -PERLVAR(Iuid, Uid_t) /* current real user id */ -PERLVAR(Ieuid, Uid_t) /* current effective user id */ -PERLVAR(Igid, Gid_t) /* current real group id */ -PERLVAR(Iegid, Gid_t) /* current effective group id */ -PERLVARI(Ian, U32, 0) /* malloc sequence number */ +PERLVAR(I, uid, Uid_t) /* current real user id */ +PERLVAR(I, euid, Uid_t) /* current effective user id */ +PERLVAR(I, gid, Gid_t) /* current real group id */ +PERLVAR(I, egid, Gid_t) /* current effective group id */ +PERLVARI(I, an, U32, 0) /* malloc sequence number */ #ifdef DEBUGGING /* exercise wrap-around */ @@ -480,26 +480,26 @@ PERLVARI(Ian, U32, 0) /* malloc sequence number */ #else #define PERL_COP_SEQMAX 0 #endif -PERLVARI(Icop_seqmax, U32, PERL_COP_SEQMAX) /* statement sequence number */ +PERLVARI(I, cop_seqmax, U32, PERL_COP_SEQMAX) /* statement sequence number */ #undef PERL_COP_SEQMAX -PERLVARI(Ievalseq, U32, 0) /* eval sequence number */ -PERLVAR(Iorigalen, U32) -PERLVAR(Iorigenviron, char **) +PERLVARI(I, evalseq, U32, 0) /* eval sequence number */ +PERLVAR(I, origalen, U32) +PERLVAR(I, origenviron, char **) #ifdef PERL_USES_PL_PIDSTATUS -PERLVAR(Ipidstatus, HV *) /* pid-to-status mappings for waitpid */ +PERLVAR(I, pidstatus, HV *) /* pid-to-status mappings for waitpid */ #endif -PERLVAR(Iosname, char *) /* operating system */ +PERLVAR(I, osname, char *) /* operating system */ -PERLVAR(Isighandlerp, Sighandler_t) +PERLVAR(I, sighandlerp, Sighandler_t) -PERLVARA(Ibody_roots, PERL_ARENA_ROOTS_SIZE, void*) /* array of body roots */ +PERLVARA(I, body_roots, PERL_ARENA_ROOTS_SIZE, void*) /* array of body roots */ -PERLVAR(Iunicode, U32) /* Unicode features: $ENV{PERL_UNICODE} or -C */ +PERLVAR(I, unicode, U32) /* Unicode features: $ENV{PERL_UNICODE} or -C */ -PERLVARI(Imaxo, int, MAXO) /* maximum number of ops */ +PERLVARI(I, maxo, int, MAXO) /* maximum number of ops */ -PERLVARI(Irunops, runops_proc_t, RUNOPS_DEFAULT) +PERLVARI(I, runops, runops_proc_t, RUNOPS_DEFAULT) /* =for apidoc Amn|SV|PL_sv_undef @@ -516,35 +516,35 @@ C<&PL_sv_yes>. =cut */ -PERLVAR(Isv_undef, SV) -PERLVAR(Isv_no, SV) -PERLVAR(Isv_yes, SV) +PERLVAR(I, sv_undef, SV) +PERLVAR(I, sv_no, SV) +PERLVAR(I, sv_yes, SV) -PERLVAR(Isubname, SV *) /* name of current subroutine */ +PERLVAR(I, subname, SV *) /* name of current subroutine */ -PERLVAR(Isubline, I32) /* line this subroutine began on */ -PERLVAR(Imin_intro_pending, I32) /* start of vars to introduce */ +PERLVAR(I, subline, I32) /* line this subroutine began on */ +PERLVAR(I, min_intro_pending, I32) /* start of vars to introduce */ -PERLVAR(Imax_intro_pending, I32) /* end of vars to introduce */ -PERLVAR(Ipadix, I32) /* max used index in current "register" pad */ +PERLVAR(I, max_intro_pending, I32) /* end of vars to introduce */ +PERLVAR(I, padix, I32) /* max used index in current "register" pad */ -PERLVAR(Ipadix_floor, I32) /* how low may inner block reset padix */ +PERLVAR(I, padix_floor, I32) /* how low may inner block reset padix */ -PERLVAR(Ihints, U32) /* pragma-tic compile-time flags */ +PERLVAR(I, hints, U32) /* pragma-tic compile-time flags */ -PERLVAR(Idebug, VOL U32) /* flags given to -D switch */ +PERLVAR(I, debug, VOL U32) /* flags given to -D switch */ /* Perl_Ibreakable_sub_generation_ptr was too long for VMS, hence "gen" */ -PERLVARI(Ibreakable_sub_gen, U32, 0) +PERLVARI(I, breakable_sub_gen, U32, 0) -PERLVARI(Iamagic_generation, long, 0) +PERLVARI(I, amagic_generation, long, 0) #ifdef USE_LOCALE_COLLATE -PERLVAR(Icollation_name,char *) /* Name of current collation */ -PERLVAR(Icollxfrm_base, Size_t) /* Basic overhead in *xfrm() */ -PERLVARI(Icollxfrm_mult,Size_t, 2) /* Expansion factor in *xfrm() */ -PERLVARI(Icollation_ix, U32, 0) /* Collation generation index */ -PERLVARI(Icollation_standard, bool, TRUE) +PERLVAR(I, collation_name, char *) /* Name of current collation */ +PERLVAR(I, collxfrm_base, Size_t) /* Basic overhead in *xfrm() */ +PERLVARI(I, collxfrm_mult,Size_t, 2) /* Expansion factor in *xfrm() */ +PERLVARI(I, collation_ix, U32, 0) /* Collation generation index */ +PERLVARI(I, collation_standard, bool, TRUE) /* Assume simple collation */ #endif /* USE_LOCALE_COLLATE */ @@ -554,99 +554,99 @@ PERLVARI(Icollation_standard, bool, TRUE) #else # define PERL___I 1 #endif -PERLVARI(Iutf8cache, I8, PERL___I) /* Is the utf8 caching code enabled? */ +PERLVARI(I, utf8cache, I8, PERL___I) /* Is the utf8 caching code enabled? */ #undef PERL___I #ifdef USE_LOCALE_NUMERIC -PERLVARI(Inumeric_standard, bool, TRUE) +PERLVARI(I, numeric_standard, bool, TRUE) /* Assume simple numerics */ -PERLVARI(Inumeric_local, bool, TRUE) +PERLVARI(I, numeric_local, bool, TRUE) /* Assume local numerics */ -PERLVAR(Inumeric_name, char *) /* Name of current numeric locale */ -PERLVAR(Inumeric_radix_sv, SV *) /* The radix separator if not '.' */ +PERLVAR(I, numeric_name, char *) /* Name of current numeric locale */ +PERLVAR(I, numeric_radix_sv, SV *) /* The radix separator if not '.' */ #endif /* !USE_LOCALE_NUMERIC */ /* utf8 character classes */ -PERLVAR(Iutf8_alnum, SV *) -PERLVAR(Iutf8_ascii, SV *) -PERLVAR(Iutf8_alpha, SV *) -PERLVAR(Iutf8_space, SV *) -PERLVAR(Iutf8_perl_space, SV *) -PERLVAR(Iutf8_perl_word, SV *) -PERLVAR(Iutf8_posix_digit, SV *) -PERLVAR(Iutf8_cntrl, SV *) -PERLVAR(Iutf8_graph, SV *) -PERLVAR(Iutf8_digit, SV *) -PERLVAR(Iutf8_upper, SV *) -PERLVAR(Iutf8_lower, SV *) -PERLVAR(Iutf8_print, SV *) -PERLVAR(Iutf8_punct, SV *) -PERLVAR(Iutf8_xdigit, SV *) -PERLVAR(Iutf8_mark, SV *) -PERLVAR(Iutf8_X_begin, SV *) -PERLVAR(Iutf8_X_extend, SV *) -PERLVAR(Iutf8_X_prepend, SV *) -PERLVAR(Iutf8_X_non_hangul, SV *) -PERLVAR(Iutf8_X_L, SV *) -PERLVAR(Iutf8_X_LV, SV *) -PERLVAR(Iutf8_X_LVT, SV *) -PERLVAR(Iutf8_X_T, SV *) -PERLVAR(Iutf8_X_V, SV *) -PERLVAR(Iutf8_X_LV_LVT_V, SV *) -PERLVAR(Iutf8_toupper, SV *) -PERLVAR(Iutf8_totitle, SV *) -PERLVAR(Iutf8_tolower, SV *) -PERLVAR(Iutf8_tofold, SV *) -PERLVAR(Ilast_swash_hv, HV *) -PERLVAR(Ilast_swash_tmps, U8 *) -PERLVAR(Ilast_swash_slen, STRLEN) -PERLVARA(Ilast_swash_key,10, U8) -PERLVAR(Ilast_swash_klen, U8) /* Only needs to store 0-10 */ +PERLVAR(I, utf8_alnum, SV *) +PERLVAR(I, utf8_ascii, SV *) +PERLVAR(I, utf8_alpha, SV *) +PERLVAR(I, utf8_space, SV *) +PERLVAR(I, utf8_perl_space, SV *) +PERLVAR(I, utf8_perl_word, SV *) +PERLVAR(I, utf8_posix_digit, SV *) +PERLVAR(I, utf8_cntrl, SV *) +PERLVAR(I, utf8_graph, SV *) +PERLVAR(I, utf8_digit, SV *) +PERLVAR(I, utf8_upper, SV *) +PERLVAR(I, utf8_lower, SV *) +PERLVAR(I, utf8_print, SV *) +PERLVAR(I, utf8_punct, SV *) +PERLVAR(I, utf8_xdigit, SV *) +PERLVAR(I, utf8_mark, SV *) +PERLVAR(I, utf8_X_begin, SV *) +PERLVAR(I, utf8_X_extend, SV *) +PERLVAR(I, utf8_X_prepend, SV *) +PERLVAR(I, utf8_X_non_hangul, SV *) +PERLVAR(I, utf8_X_L, SV *) +PERLVAR(I, utf8_X_LV, SV *) +PERLVAR(I, utf8_X_LVT, SV *) +PERLVAR(I, utf8_X_T, SV *) +PERLVAR(I, utf8_X_V, SV *) +PERLVAR(I, utf8_X_LV_LVT_V, SV *) +PERLVAR(I, utf8_toupper, SV *) +PERLVAR(I, utf8_totitle, SV *) +PERLVAR(I, utf8_tolower, SV *) +PERLVAR(I, utf8_tofold, SV *) +PERLVAR(I, last_swash_hv, HV *) +PERLVAR(I, last_swash_tmps, U8 *) +PERLVAR(I, last_swash_slen, STRLEN) +PERLVARA(I, last_swash_key,10, U8) +PERLVAR(I, last_swash_klen, U8) /* Only needs to store 0-10 */ #ifdef FCRYPT -PERLVARI(Icryptseen, bool, FALSE) /* has fast crypt() been initialized? */ +PERLVARI(I, cryptseen, bool, FALSE) /* has fast crypt() been initialized? */ #endif -PERLVAR(Ipad_reset_pending, bool) /* reset pad on next attempted alloc */ +PERLVAR(I, pad_reset_pending, bool) /* reset pad on next attempted alloc */ -PERLVARI(Iglob_index, int, 0) +PERLVARI(I, glob_index, int, 0) -PERLVAR(Iparser, yy_parser *) /* current parser state */ +PERLVAR(I, parser, yy_parser *) /* current parser state */ /* Array of signal handlers, indexed by signal number, through which the C signal handler dispatches. */ -PERLVAR(Ipsig_ptr, SV**) +PERLVAR(I, psig_ptr, SV **) /* Array of names of signals, indexed by signal number, for (re)use as the first argument to a signal handler. Only one block of memory is allocated for both psig_name and psig_ptr. */ -PERLVAR(Ipsig_name, SV**) +PERLVAR(I, psig_name, SV **) #if defined(PERL_IMPLICIT_SYS) -PERLVAR(IMem, struct IPerlMem*) -PERLVAR(IMemShared, struct IPerlMem*) -PERLVAR(IMemParse, struct IPerlMem*) -PERLVAR(IEnv, struct IPerlEnv*) -PERLVAR(IStdIO, struct IPerlStdIO*) -PERLVAR(ILIO, struct IPerlLIO*) -PERLVAR(IDir, struct IPerlDir*) -PERLVAR(ISock, struct IPerlSock*) -PERLVAR(IProc, struct IPerlProc*) +PERLVAR(I, Mem, struct IPerlMem *) +PERLVAR(I, MemShared, struct IPerlMem *) +PERLVAR(I, MemParse, struct IPerlMem *) +PERLVAR(I, Env, struct IPerlEnv *) +PERLVAR(I, StdIO, struct IPerlStdIO *) +PERLVAR(I, LIO, struct IPerlLIO *) +PERLVAR(I, Dir, struct IPerlDir *) +PERLVAR(I, Sock, struct IPerlSock *) +PERLVAR(I, Proc, struct IPerlProc *) #endif -PERLVAR(Iptr_table, PTR_TBL_t*) -PERLVARI(Ibeginav_save, AV*, NULL) /* save BEGIN{}s when compiling */ +PERLVAR(I, ptr_table, PTR_TBL_t *) +PERLVARI(I, beginav_save, AV *, NULL) /* save BEGIN{}s when compiling */ -PERLVAR(Ibody_arenas, void*) /* pointer to list of body-arenas */ +PERLVAR(I, body_arenas, void *) /* pointer to list of body-arenas */ #if defined(USE_ITHREADS) -PERLVAR(Iregex_pad, SV**) /* Shortcut into the array of +PERLVAR(I, regex_pad, SV **) /* Shortcut into the array of regex_padav */ -PERLVAR(Iregex_padav, AV*) /* All regex objects, indexed via the +PERLVAR(I, regex_padav, AV *) /* All regex objects, indexed via the values in op_pmoffset of pmop. Entry 0 is an SV whose PV is a "packed" list of IVs listing @@ -654,82 +654,83 @@ PERLVAR(Iregex_padav, AV*) /* All regex objects, indexed via the #endif #ifdef USE_REENTRANT_API -PERLVAR(Ireentrant_buffer, REENTR*) /* here we store the _r buffers */ +PERLVAR(I, reentrant_buffer, REENTR *) /* here we store the _r buffers */ #endif -PERLVAR(Icustom_op_names, HV*) /* Names of user defined ops */ -PERLVAR(Icustom_op_descs, HV*) /* Descriptions of user defined ops */ +PERLVAR(I, custom_op_names, HV *) /* Names of user defined ops */ +PERLVAR(I, custom_op_descs, HV *) /* Descriptions of user defined ops */ #ifdef PERLIO_LAYERS -PERLVARI(Iperlio, PerlIOl *,NULL) -PERLVARI(Iknown_layers, PerlIO_list_t *,NULL) -PERLVARI(Idef_layerlist, PerlIO_list_t *,NULL) +PERLVARI(I, perlio, PerlIOl *, NULL) +PERLVARI(I, known_layers, PerlIO_list_t *, NULL) +PERLVARI(I, def_layerlist, PerlIO_list_t *, NULL) #endif -PERLVARI(Iencoding, SV*, NULL) /* character encoding */ +PERLVARI(I, encoding, SV *, NULL) /* character encoding */ -PERLVAR(Idebug_pad, struct perl_debug_pad) /* always needed because of the re extension */ +PERLVAR(I, debug_pad, struct perl_debug_pad) /* always needed because of the re extension */ -PERLVAR(Iutf8_idstart, SV *) -PERLVAR(Iutf8_idcont, SV *) -PERLVAR(Iutf8_xidstart, SV *) -PERLVAR(Iutf8_xidcont, SV *) +PERLVAR(I, utf8_idstart, SV *) +PERLVAR(I, utf8_idcont, SV *) +PERLVAR(I, utf8_xidstart, SV *) +PERLVAR(I, utf8_xidcont, SV *) -PERLVAR(Isort_RealCmp, SVCOMPARE_t) +PERLVAR(I, sort_RealCmp, SVCOMPARE_t) -PERLVARI(Icheckav_save, AV*, NULL) /* save CHECK{}s when compiling */ -PERLVARI(Iunitcheckav_save, AV*, NULL) /* save UNITCHECK{}s when compiling */ +PERLVARI(I, checkav_save, AV *, NULL) /* save CHECK{}s when compiling */ +PERLVARI(I, unitcheckav_save, AV *, NULL) + /* save UNITCHECK{}s when compiling */ -PERLVARI(Iclocktick, long, 0) /* this many times() ticks in a second */ +PERLVARI(I, clocktick, long, 0) /* this many times() ticks in a second */ -PERLVAR(Istashcache, HV *) /* Cache to speed up S_method_common */ +PERLVAR(I, stashcache, HV *) /* Cache to speed up S_method_common */ /* Hooks to shared SVs and locks. */ -PERLVARI(Isharehook, share_proc_t, Perl_sv_nosharing) -PERLVARI(Ilockhook, share_proc_t, Perl_sv_nosharing) +PERLVARI(I, sharehook, share_proc_t, Perl_sv_nosharing) +PERLVARI(I, lockhook, share_proc_t, Perl_sv_nosharing) #ifdef NO_MATHOMS # define PERL_UNLOCK_HOOK Perl_sv_nosharing #else /* This reference ensures that the mathoms are linked with perl */ # define PERL_UNLOCK_HOOK Perl_sv_nounlocking #endif -PERLVARI(Iunlockhook, share_proc_t, PERL_UNLOCK_HOOK) +PERLVARI(I, unlockhook, share_proc_t, PERL_UNLOCK_HOOK) -PERLVARI(Ithreadhook, thrhook_proc_t, Perl_nothreadhook) +PERLVARI(I, threadhook, thrhook_proc_t, Perl_nothreadhook) /* Can shared object be destroyed */ -PERLVARI(Idestroyhook, destroyable_proc_t, Perl_sv_destroyable) +PERLVARI(I, destroyhook, destroyable_proc_t, Perl_sv_destroyable) #ifndef PERL_MICRO -PERLVARI(Isignalhook, despatch_signals_proc_t, Perl_despatch_signals) +PERLVARI(I, signalhook, despatch_signals_proc_t, Perl_despatch_signals) #endif -PERLVARI(Ihash_seed, UV, 0) /* Hash initializer */ +PERLVARI(I, hash_seed, UV, 0) /* Hash initializer */ -PERLVARI(Irehash_seed, UV, 0) /* 582 hash initializer */ +PERLVARI(I, rehash_seed, UV, 0) /* 582 hash initializer */ -PERLVARI(Iisarev, HV*, NULL) /* Reverse map of @ISA dependencies */ +PERLVARI(I, isarev, HV *, NULL) /* Reverse map of @ISA dependencies */ /* Register of known Method Resolution Orders. What this actually points to is an implementation detail (it may change to a structure incorporating a reference count - use mro_get_from_name to retrieve a C */ -PERLVAR(Iregistered_mros, HV *) +PERLVAR(I, registered_mros, HV *) /* Compile-time block start/end hooks */ -PERLVAR(Iblockhooks, AV *) +PERLVAR(I, blockhooks, AV *) /* Everything that folds to a given character, for case insensitivity regex * matching */ -PERLVARI(Iutf8_foldclosures, HV *, NULL) +PERLVARI(I, utf8_foldclosures, HV *, NULL) /* List of characters that participate in folds (except marks, etc in * multi-char folds) */ -PERLVARI(Iutf8_foldable, SV *, NULL) +PERLVARI(I, utf8_foldable, SV *, NULL) -PERLVAR(Icustom_ops, HV *) /* custom op registrations */ +PERLVAR(I, custom_ops, HV *) /* custom op registrations */ -PERLVAR(Ireentrant_retint, int) /* Integer return value from reentrant functions */ +PERLVAR(I, reentrant_retint, int) /* Integer return value from reentrant functions */ /* The last unconditional member of the interpreter structure when 5.10.0 was released. The offset of the end of this is baked into a global variable in @@ -738,47 +739,47 @@ PERLVAR(Ireentrant_retint, int) /* Integer return value from reentrant functions #define PERL_LAST_5_16_0_INTERP_MEMBER Ireentrant_retint #ifdef PERL_IMPLICIT_CONTEXT -PERLVARI(Imy_cxt_size, int, 0) /* size of PL_my_cxt_list */ -PERLVARI(Imy_cxt_list, void **, NULL) /* per-module array of MY_CXT pointers */ +PERLVARI(I, my_cxt_size, int, 0) /* size of PL_my_cxt_list */ +PERLVARI(I, my_cxt_list, void **, NULL) /* per-module array of MY_CXT pointers */ # ifdef PERL_GLOBAL_STRUCT_PRIVATE -PERLVARI(Imy_cxt_keys, const char **, NULL) /* per-module array of pointers to MY_CXT_KEY constants */ +PERLVARI(I, my_cxt_keys, const char **, NULL) /* per-module array of pointers to MY_CXT_KEY constants */ # endif #endif #ifdef PERL_TRACK_MEMPOOL /* For use with the memory debugging code in util.c */ -PERLVAR(Imemory_debug_header, struct perl_memory_debug_header) +PERLVAR(I, memory_debug_header, struct perl_memory_debug_header) #endif #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP /* File descriptor to talk to the child which dumps scalars. */ -PERLVARI(Idumper_fd, int, -1) +PERLVARI(I, dumper_fd, int, -1) #endif /* Stores the PPID */ #ifdef THREADS_HAVE_PIDS -PERLVARI(Ippid, IV, 0) +PERLVARI(I, ppid, IV, 0) #endif #ifdef PERL_MAD -PERLVARI(Imadskills, bool, FALSE) /* preserve all syntactic info */ +PERLVARI(I, madskills, bool, FALSE) /* preserve all syntactic info */ /* (MAD = Misc Attribute Decoration) */ -PERLVARI(Ixmlfp, PerlIO *,NULL) +PERLVARI(I, xmlfp, PerlIO *, NULL) #endif #ifdef PL_OP_SLAB_ALLOC -PERLVAR(IOpPtr,I32 **) -PERLVARI(IOpSpace,I32,0) -PERLVAR(IOpSlab,I32 *) +PERLVAR(I, OpPtr, I32 **) +PERLVARI(I, OpSpace, I32, 0) +PERLVAR(I, OpSlab, I32 *) #endif #ifdef PERL_DEBUG_READONLY_OPS -PERLVARI(Islabs, I32**, NULL) /* Array of slabs that have been allocated */ -PERLVARI(Islab_count, U32, 0) /* Size of the array */ +PERLVARI(I, slabs, I32**, NULL) /* Array of slabs that have been allocated */ +PERLVARI(I, slab_count, U32, 0) /* Size of the array */ #endif #ifdef DEBUG_LEAKING_SCALARS -PERLVARI(Isv_serial, U32, 0) /* SV serial number, used in sv.c */ +PERLVARI(I, sv_serial, U32, 0) /* SV serial number, used in sv.c */ #endif /* If you are adding a U8 or U16, check to see if there are 'Space' comments diff --git a/makedef.pl b/makedef.pl index 6a31582e5a..5841d69f19 100644 --- a/makedef.pl +++ b/makedef.pl @@ -177,7 +177,7 @@ sub readvar { while (<$vars>) { # All symbols have a Perl_ prefix because that's what embed.h sticks # in front of them. The A?I?S?C? is strictly speaking wrong. - next unless /\bPERLVAR(A?I?S?C?)\(([IGT])(\w+)/; + next unless /\bPERLVAR(A?I?S?C?)\(([IGT]),\s*(\w+)/; my $var = "PL_$3"; my $symbol = $proc ? &$proc($1,$2,$3) : $var; diff --git a/perl.c b/perl.c index 1f69e05de2..736a055355 100644 --- a/perl.c +++ b/perl.c @@ -3480,14 +3480,14 @@ S_init_interp(pTHX) { dVAR; #ifdef MULTIPLICITY -# define PERLVAR(var,type) -# define PERLVARA(var,n,type) +# define PERLVAR(prefix,var,type) +# define PERLVARA(prefix,var,n,type) # if defined(PERL_IMPLICIT_CONTEXT) -# define PERLVARI(var,type,init) aTHX->var = init; -# define PERLVARIC(var,type,init) aTHX->var = init; +# define PERLVARI(prefix,var,type,init) aTHX->prefix##var = init; +# define PERLVARIC(prefix,var,type,init) aTHX->prefix##var = init; # else -# define PERLVARI(var,type,init) PERL_GET_INTERP->var = init; -# define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init; +# define PERLVARI(prefix,var,type,init) PERL_GET_INTERP->var = init; +# define PERLVARIC(prefix,var,type,init) PERL_GET_INTERP->var = init; # endif # include "intrpvar.h" # undef PERLVAR @@ -3495,10 +3495,10 @@ S_init_interp(pTHX) # undef PERLVARI # undef PERLVARIC #else -# define PERLVAR(var,type) -# define PERLVARA(var,n,type) -# define PERLVARI(var,type,init) PL_##var = init; -# define PERLVARIC(var,type,init) PL_##var = init; +# define PERLVAR(prefix,var,type) +# define PERLVARA(prefix,var,n,type) +# define PERLVARI(prefix,var,type,init) PL_##var = init; +# define PERLVARIC(prefix,var,type,init) PL_##var = init; # include "intrpvar.h" # undef PERLVAR # undef PERLVARA diff --git a/perl.h b/perl.h index 79989d9583..200e416dbd 100644 --- a/perl.h +++ b/perl.h @@ -4935,10 +4935,10 @@ struct interpreter { */ /* Set up PERLVAR macros for populating structs */ -# define PERLVAR(var,type) type var; -# define PERLVARA(var,n,type) type var[n]; -# define PERLVARI(var,type,init) type var; -# define PERLVARIC(var,type,init) type var; +# define PERLVAR(prefix,var,type) type prefix##var; +# define PERLVARA(prefix,var,n,type) type prefix##var[n]; +# define PERLVARI(prefix,var,type,init) type prefix##var; +# define PERLVARIC(prefix,var,type,init) type prefix##var; struct interpreter { # include "intrpvar.h" @@ -5037,10 +5037,10 @@ struct tempsym; /* defined in pp_pack.c */ * these include variables that would have been their struct-s */ -#define PERLVAR(var,type) EXT type PL_##var; -#define PERLVARA(var,n,type) EXT type PL_##var[n]; -#define PERLVARI(var,type,init) EXT type PL_##var INIT(init); -#define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init); +#define PERLVAR(prefix,var,type) EXT type PL_##var; +#define PERLVARA(prefix,var,n,type) EXT type PL_##var[n]; +#define PERLVARI(prefix,var,type,init) EXT type PL_##var INIT(init); +#define PERLVARIC(prefix,var,type,init) EXTCONST type PL_##var INIT(init); #if !defined(MULTIPLICITY) START_EXTERN_C diff --git a/perlapi.c b/perlapi.c index 6eab07cbc1..78583377a2 100644 --- a/perlapi.c +++ b/perlapi.c @@ -34,17 +34,17 @@ START_EXTERN_C #undef PERLVARI -#define PERLVARI(v,t,i) PERLVAR(v,t) +#define PERLVARI(p,v,t,i) PERLVAR(p,v,t) #undef PERLVAR #undef PERLVARA -#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \ +#define PERLVAR(p,v,t) t* Perl_##p##v##_ptr(pTHX) \ { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); } -#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \ +#define PERLVARA(p,v,n,t) PL_##v##_t* Perl_##p##v##_ptr(pTHX) \ { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); } #undef PERLVARIC -#define PERLVARIC(v,t,i) \ - const t* Perl_##v##_ptr(pTHX) \ +#define PERLVARIC(p,v,t,i) \ + const t* Perl_##p##v##_ptr(pTHX) \ { PERL_UNUSED_CONTEXT; return (const t *)&(PL_##v); } #include "perlvars.h" diff --git a/perlapi.h b/perlapi.h index a48abed4a7..098bd915db 100644 --- a/perlapi.h +++ b/perlapi.h @@ -28,11 +28,11 @@ START_EXTERN_C #undef PERLVARA #undef PERLVARI #undef PERLVARIC -#define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHX); -#define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \ - EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX); -#define PERLVARI(v,t,i) PERLVAR(v,t) -#define PERLVARIC(v,t,i) PERLVAR(v, const t) +#define PERLVAR(p,v,t) EXTERN_C t* Perl_##p##v##_ptr(pTHX); +#define PERLVARA(p,v,n,t) typedef t PL_##v##_t[n]; \ + EXTERN_C PL_##v##_t* Perl_##p##v##_ptr(pTHX); +#define PERLVARI(p,v,t,i) PERLVAR(p,v,t) +#define PERLVARIC(p,v,t,i) PERLVAR(p,v, const t) #include "perlvars.h" @@ -62,10 +62,10 @@ EXTCONST void * const PL_force_link_funcs[] = { #undef PERLVARA #undef PERLVARI #undef PERLVARIC -#define PERLVAR(v,t) (void*)Perl_##v##_ptr, -#define PERLVARA(v,n,t) PERLVAR(v,t) -#define PERLVARI(v,t,i) PERLVAR(v,t) -#define PERLVARIC(v,t,i) PERLVAR(v,t) +#define PERLVAR(p,v,t) (void*)Perl_##p##v##_ptr, +#define PERLVARA(p,v,n,t) PERLVAR(p,v,t) +#define PERLVARI(p,v,t,i) PERLVAR(p,v,t) +#define PERLVARIC(p,v,t,i) PERLVAR(p,v,t) /* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one * cannot cast between void pointers and function pointers without diff --git a/perlvars.h b/perlvars.h index 57bd5bd859..b046fade05 100644 --- a/perlvars.h +++ b/perlvars.h @@ -25,100 +25,102 @@ /* global state */ #if defined(USE_ITHREADS) -PERLVAR(Gop_mutex, perl_mutex) /* Mutex for op refcounting */ +PERLVAR(G, op_mutex, perl_mutex) /* Mutex for op refcounting */ #endif -PERLVAR(Gcurinterp, PerlInterpreter *) +PERLVAR(G, curinterp, PerlInterpreter *) /* currently running interpreter * (initial parent interpreter under * useithreads) */ #if defined(USE_ITHREADS) -PERLVAR(Gthr_key, perl_key) /* key to retrieve per-thread struct */ +PERLVAR(G, thr_key, perl_key) /* key to retrieve per-thread struct */ #endif /* XXX does anyone even use this? */ -PERLVARI(Gdo_undump, bool, FALSE) /* -u or dump seen? */ +PERLVARI(G, do_undump, bool, FALSE) /* -u or dump seen? */ #ifndef PERL_USE_SAFE_PUTENV -PERLVARI(Guse_safe_putenv, bool, TRUE) +PERLVARI(G, use_safe_putenv, bool, TRUE) #endif #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS)||defined(FAKE_DEFAULT_SIGNAL_HANDLERS) -PERLVARI(Gsig_handlers_initted, int, 0) +PERLVARI(G, sig_handlers_initted, int, 0) #endif #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS -PERLVARA(Gsig_ignoring, SIG_SIZE, int) /* which signals we are ignoring */ +PERLVARA(G, sig_ignoring, SIG_SIZE, int) + /* which signals we are ignoring */ #endif #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS -PERLVARA(Gsig_defaulting, SIG_SIZE, int) +PERLVARA(G, sig_defaulting, SIG_SIZE, int) #endif /* XXX signals are process-wide anyway, so we * ignore the implications of this for threading */ #ifndef HAS_SIGACTION -PERLVARI(Gsig_trapped, int, 0) +PERLVARI(G, sig_trapped, int, 0) #endif #ifndef PERL_MICRO /* If Perl has to ignore SIGPFE, this is its saved state. * See perl.h macros PERL_FPU_INIT and PERL_FPU_{PRE,POST}_EXEC. */ -PERLVAR(Gsigfpe_saved, Sighandler_t) -PERLVARI(Gcsighandlerp, Sighandler_t, Perl_csighandler) /* Pointer to C-level sighandler */ +PERLVAR(G, sigfpe_saved, Sighandler_t) +PERLVARI(G, csighandlerp, Sighandler_t, Perl_csighandler) + /* Pointer to C-level sighandler */ #endif /* This is constant on most architectures, a global on OS/2 */ #ifdef OS2 -PERLVARI(Gsh_path, char *, SH_PATH) /* full path of shell */ +PERLVARI(G, sh_path, char *, SH_PATH) /* full path of shell */ #endif #ifdef USE_PERLIO # if defined(USE_ITHREADS) -PERLVAR(Gperlio_mutex, perl_mutex) /* Mutex for perlio fd refcounts */ +PERLVAR(G, perlio_mutex, perl_mutex) /* Mutex for perlio fd refcounts */ # endif -PERLVARI(Gperlio_fd_refcnt, int*, 0) /* Pointer to array of fd refcounts. */ -PERLVARI(Gperlio_fd_refcnt_size, int, 0) /* Size of the array */ -PERLVARI(Gperlio_debug_fd, int, 0) /* the fd to write perlio debug into, 0 means not set yet */ +PERLVARI(G, perlio_fd_refcnt, int *, 0) /* Pointer to array of fd refcounts. */ +PERLVARI(G, perlio_fd_refcnt_size, int, 0) /* Size of the array */ +PERLVARI(G, perlio_debug_fd, int, 0) /* the fd to write perlio debug into, 0 means not set yet */ #endif #ifdef HAS_MMAP -PERLVARI(Gmmap_page_size, IV, 0) +PERLVARI(G, mmap_page_size, IV, 0) #endif #if defined(USE_ITHREADS) -PERLVAR(Ghints_mutex, perl_mutex) /* Mutex for refcounted he refcounting */ +PERLVAR(G, hints_mutex, perl_mutex) /* Mutex for refcounted he refcounting */ #endif #ifdef DEBUGGING -PERLVAR(Gwatch_pvx, char*) +PERLVAR(G, watch_pvx, char *) #endif #ifdef PERL_GLOBAL_STRUCT -PERLVAR(Gppaddr, Perl_ppaddr_t*) /* or opcode.h */ -PERLVAR(Gcheck, Perl_check_t *) /* or opcode.h */ -PERLVARA(Gfold_locale, 256, unsigned char) /* or perl.h */ +PERLVAR(G, ppaddr, Perl_ppaddr_t *) /* or opcode.h */ +PERLVAR(G, check, Perl_check_t *) /* or opcode.h */ +PERLVARA(G, fold_locale, 256, unsigned char) /* or perl.h */ #endif #ifdef PERL_NEED_APPCTX -PERLVAR(Gappctx, void*) /* the application context */ +PERLVAR(G, appctx, void*) /* the application context */ #endif #if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE) -PERLVAR(Gtimesbase, struct tms) +PERLVAR(G, timesbase, struct tms) #endif /* allocate a unique index to every module that calls MY_CXT_INIT */ #ifdef PERL_IMPLICIT_CONTEXT # ifdef USE_ITHREADS -PERLVAR(Gmy_ctx_mutex, perl_mutex) +PERLVAR(G, my_ctx_mutex, perl_mutex) # endif -PERLVARI(Gmy_cxt_index, int, 0) +PERLVARI(G, my_cxt_index, int, 0) #endif /* this is currently set without MUTEX protection, so keep it a type which * can be set atomically (ie not a bit field) */ -PERLVARI(Gveto_cleanup, int, FALSE) /* exit without cleanup */ +PERLVARI(G, veto_cleanup, int, FALSE) /* exit without cleanup */ /* =for apidoc AmUx|Perl_keyword_plugin_t|PL_keyword_plugin @@ -173,19 +175,19 @@ the Perl core) will normally return C. =cut */ -PERLVARI(Gkeyword_plugin, Perl_keyword_plugin_t, Perl_keyword_plugin_standard) +PERLVARI(G, keyword_plugin, Perl_keyword_plugin_t, Perl_keyword_plugin_standard) -PERLVAR(Gop_sequence, HV*) /* dump.c */ -PERLVARI(Gop_seq, UV, 0) /* dump.c */ +PERLVAR(G, op_sequence, HV *) /* dump.c */ +PERLVARI(G, op_seq, UV, 0) /* dump.c */ #ifdef USE_ITHREADS -PERLVAR(Gdollarzero_mutex, perl_mutex) /* Modifying $0 */ +PERLVAR(G, dollarzero_mutex, perl_mutex) /* Modifying $0 */ #endif /* Restricted hashes placeholder value. * The contents are never used, only the address. */ -PERLVAR(Gsv_placeholder, SV) +PERLVAR(G, sv_placeholder, SV) #if defined(MYMALLOC) && defined(USE_ITHREADS) -PERLVAR(Gmalloc_mutex, perl_mutex) /* Mutex for malloc */ +PERLVAR(G, malloc_mutex, perl_mutex) /* Mutex for malloc */ #endif diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 31b50ba910..ba0d3a51f2 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -105,6 +105,13 @@ XXX =item * +L has been upgraded from version 1.30 to version 1.31 + +The XS code has changed slightly, as it was too tightly coupled to +the contents of the header F + +=item * + L has been upgraded from version 1.9600 to version 1.9800 =item * @@ -422,7 +429,12 @@ be noted as well. =item * -XXX +F has been simplified, and one level of macro indirection for +PL_* variables has been removed for the default (non-multiplicity) +configuration. PERLVAR*() macros now directly expand their arguments to +tokens such as C, instead of expanding to C, with +F defining a macro to map C to C. XS code +which has unwarranted chumminess with the implementation may need updating. =back diff --git a/regen/embed.pl b/regen/embed.pl index 232af368c2..71422bbaa8 100755 --- a/regen/embed.pl +++ b/regen/embed.pl @@ -368,7 +368,7 @@ sub readvars { or die "embed.pl: Can't open $file: $!\n"; while () { s/[ \t]*#.*//; # Delete comments. - if (/PERLVARA?I?C?\($pre(\w+)/) { + if (/PERLVARA?I?C?\($pre,\s*(\w+)/) { warn "duplicate symbol $1 while processing $file line $.\n" if $seen{$1}++; } @@ -392,11 +392,6 @@ sub multon ($$$) { hide("PL_$sym", "($ptr$pre$sym)"); } -sub multoff ($$) { - my ($sym,$pre) = @_; - return hide("PL_$pre$sym", "PL_$sym"); -} - my $em = open_print_header('embed.h'); print $em <<'END'; @@ -593,22 +588,6 @@ for $sym (@intrp) { print $em <<'END'; -#else /* !MULTIPLICITY */ - -/* case 1 above */ - -END - -for $sym (@intrp) { - print $em multoff($sym,'I'); -} - -print $em <<'END'; - -END - -print $em <<'END'; - #endif /* MULTIPLICITY */ #if defined(PERL_GLOBAL_STRUCT) @@ -624,18 +603,6 @@ for $sym (@globvar) { print $em <<'END'; -#else /* !PERL_GLOBAL_STRUCT */ - -END - -for $sym (@globvar) { - print $em "#ifdef OS2\n" if $sym eq 'sh_path'; - print $em multoff($sym,'G'); - print $em "#endif\n" if $sym eq 'sh_path'; -} - -print $em <<'END'; - #endif /* PERL_GLOBAL_STRUCT */ END @@ -656,11 +623,11 @@ START_EXTERN_C #undef PERLVARA #undef PERLVARI #undef PERLVARIC -#define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHX); -#define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \ - EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX); -#define PERLVARI(v,t,i) PERLVAR(v,t) -#define PERLVARIC(v,t,i) PERLVAR(v, const t) +#define PERLVAR(p,v,t) EXTERN_C t* Perl_##p##v##_ptr(pTHX); +#define PERLVARA(p,v,n,t) typedef t PL_##v##_t[n]; \ + EXTERN_C PL_##v##_t* Perl_##p##v##_ptr(pTHX); +#define PERLVARI(p,v,t,i) PERLVAR(p,v,t) +#define PERLVARIC(p,v,t,i) PERLVAR(p,v, const t) #include "perlvars.h" @@ -690,10 +657,10 @@ EXTCONST void * const PL_force_link_funcs[] = { #undef PERLVARA #undef PERLVARI #undef PERLVARIC -#define PERLVAR(v,t) (void*)Perl_##v##_ptr, -#define PERLVARA(v,n,t) PERLVAR(v,t) -#define PERLVARI(v,t,i) PERLVAR(v,t) -#define PERLVARIC(v,t,i) PERLVAR(v,t) +#define PERLVAR(p,v,t) (void*)Perl_##p##v##_ptr, +#define PERLVARA(p,v,n,t) PERLVAR(p,v,t) +#define PERLVARI(p,v,t,i) PERLVAR(p,v,t) +#define PERLVARIC(p,v,t,i) PERLVAR(p,v,t) /* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one * cannot cast between void pointers and function pointers without @@ -767,17 +734,17 @@ print $capi <<'EOT'; START_EXTERN_C #undef PERLVARI -#define PERLVARI(v,t,i) PERLVAR(v,t) +#define PERLVARI(p,v,t,i) PERLVAR(p,v,t) #undef PERLVAR #undef PERLVARA -#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \ +#define PERLVAR(p,v,t) t* Perl_##p##v##_ptr(pTHX) \ { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); } -#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \ +#define PERLVARA(p,v,n,t) PL_##v##_t* Perl_##p##v##_ptr(pTHX) \ { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); } #undef PERLVARIC -#define PERLVARIC(v,t,i) \ - const t* Perl_##v##_ptr(pTHX) \ +#define PERLVARIC(p,v,t,i) \ + const t* Perl_##p##v##_ptr(pTHX) \ { PERL_UNUSED_CONTEXT; return (const t *)&(PL_##v); } #include "perlvars.h" diff --git a/util.c b/util.c index e22a97f721..a5ec8ea11f 100644 --- a/util.c +++ b/util.c @@ -5870,10 +5870,10 @@ Perl_init_global_struct(pTHX) # undef PERLVARA # undef PERLVARI # undef PERLVARIC -# define PERLVAR(var,type) /**/ -# define PERLVARA(var,n,type) /**/ -# define PERLVARI(var,type,init) plvarsp->var = init; -# define PERLVARIC(var,type,init) plvarsp->var = init; +# define PERLVAR(prefix,var,type) /**/ +# define PERLVARA(prefix,var,n,type) /**/ +# define PERLVARI(prefix,var,type,init) plvarsp->prefix##var = init; +# define PERLVARIC(prefix,var,type,init) plvarsp->prefix##var = init; # include "perlvars.h" # undef PERLVAR # undef PERLVARA diff --git a/win32/perllib.c b/win32/perllib.c index ff212102f6..526a4a18d5 100644 --- a/win32/perllib.c +++ b/win32/perllib.c @@ -232,10 +232,10 @@ RunPerl(int argc, char **argv, char **env) } #ifdef PERL_GLOBAL_STRUCT -#define PERLVAR(var,type) /**/ -#define PERLVARA(var,type) /**/ -#define PERLVARI(var,type,init) PL_Vars.var = init; -#define PERLVARIC(var,type,init) PL_Vars.var = init; +#define PERLVAR(prefix,var,type) /**/ +#define PERLVARA(prefix,var,type) /**/ +#define PERLVARI(prefix,var,type,init) PL_Vars.prefix##var = init; +#define PERLVARIC(prefix,var,type,init) PL_Vars.prefix##var = init; #include "perlvars.h" #undef PERLVAR #undef PERLVARA -- cgit v1.2.1 From 5179f97822e5dcfebaf2a3fb412a1523d4009429 Mon Sep 17 00:00:00 2001 From: Steffen Mueller Date: Thu, 11 Aug 2011 11:33:11 +0200 Subject: ExtUtils::ParseXS: Check that an XSUB with CODE&RETVAL has an OUTPUT If an XS paragraph/function definition that has a CODE section using RETVAL, then we need an OUTPUT section or else things will go sour. This adds a check for that condition and produces a friendly error message. See CPAN RT #69536. --- dist/ExtUtils-ParseXS/Changes | 3 +++ dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm | 23 +++++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/dist/ExtUtils-ParseXS/Changes b/dist/ExtUtils-ParseXS/Changes index 4f189ca9ed..e8533baf8f 100644 --- a/dist/ExtUtils-ParseXS/Changes +++ b/dist/ExtUtils-ParseXS/Changes @@ -1,5 +1,8 @@ Revision history for Perl extension ExtUtils::ParseXS. + - No detects and throws a warning if there is a CODE section using + RETVAL, but no OUTPUT section. [CPAN RT #69536] + 3.03 - Thu Aug 11 08:24:00 CET 2011 - Test fix: Try all @INC-derived typemap locations. (CPAN RT #70047) diff --git a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm index eeed387e09..e63b133f76 100644 --- a/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm +++ b/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm @@ -35,7 +35,7 @@ our @EXPORT_OK = qw( process_file report_error_count ); -our $VERSION = '3.03'; +our $VERSION = '3.03_01'; $VERSION = eval $VERSION if $VERSION =~ /_/; # The scalars in the line below remain as 'our' variables because pulling @@ -597,6 +597,9 @@ EOF } } + # These are set if OUTPUT is found and/or CODE using RETVAL + $self->{have_OUTPUT} = $self->{have_CODE_with_RETVAL} = 0; + my ($wantRETVAL); # do code if (/^\s*NOT_IMPLEMENTED_YET/) { @@ -631,7 +634,10 @@ EOF print "\tPUTBACK;\n\treturn;\n"; } elsif ($self->check_keyword("CODE")) { - $self->print_section(); + my $consumed_code = $self->print_section(); + if ($consumed_code =~ /\bRETVAL\b/) { + $self->{have_CODE_with_RETVAL} = 1; + } } elsif (defined($class) and $func_name eq "DESTROY") { print "\n\t"; @@ -672,8 +678,14 @@ EOF # $wantRETVAL set if 'RETVAL =' autogenerated ($wantRETVAL, $self->{ret_type}) = (0, 'void') if $RETVAL_no_return; undef %{ $self->{outargs} }; + $self->process_keyword("POSTCALL|OUTPUT|ALIAS|ATTRS|PROTOTYPE|OVERLOAD"); + # A CODE section with RETVAL, but no OUTPUT? FAIL! + if ($self->{have_CODE_with_RETVAL} and not $self->{have_OUTPUT} and $self->{ret_type} ne 'void') { + $self->Warn("Warning: Found a 'CODE' section which seems to be using 'RETVAL' but no 'OUTPUT' section."); + } + generate_output( { type => $self->{var_types}->{$_}, num => $self->{args_match}->{$_}, @@ -1000,12 +1012,17 @@ sub print_section { # the "do" is required for right semantics do { $_ = shift(@{ $self->{line} }) } while !/\S/ && @{ $self->{line} }; + my $consumed_code = ''; + print("#line ", $self->{line_no}->[@{ $self->{line_no} } - @{ $self->{line} } -1], " \"$self->{filepathname}\"\n") if $self->{WantLineNumbers} && !/^\s*#\s*line\b/ && !/^#if XSubPPtmp/; for (; defined($_) && !/^$self->{BLOCK_re}/o; $_ = shift(@{ $self->{line} })) { print "$_\n"; + $consumed_code .= "$_\n"; } print 'ExtUtils::ParseXS::CountLines'->end_marker, "\n" if $self->{WantLineNumbers}; + + return $consumed_code; } sub merge_section { @@ -1137,6 +1154,8 @@ sub INPUT_handler { sub OUTPUT_handler { my $self = shift; + $self->{have_OUTPUT} = 1; + $_ = shift; for (; !/^$self->{BLOCK_re}/o; $_ = shift(@{ $self->{line} })) { next unless /\S/; -- cgit v1.2.1 From e64345f82d66a32f6da47acf482e7e6c9282b433 Mon Sep 17 00:00:00 2001 From: Steffen Mueller Date: Thu, 11 Aug 2011 13:21:05 +0200 Subject: API to explicitly select to export XSUB symbols or not This adds a few additional macros to XSUB.h: XS_INTERNAL and XS_EXTERNAL are versions of the XS macro that explicitly use internal (static) linking or not. XSPROTO_INTERNAL and XSPROTO_EXTERNAL are the obvious equivalents for XSPROTO (which is apparently not public yet we support its use in SWIG...). The XS and XSPROTO macros themselves are not defined to not use STATIC, but this may (should?) be changed in the future. --- XSUB.h | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/XSUB.h b/XSUB.h index 5b5e3c81d2..630fe7c4dd 100644 --- a/XSUB.h +++ b/XSUB.h @@ -50,6 +50,15 @@ Used to access elements on the XSUB's stack. Macro to declare an XSUB and its C parameter list. This is handled by C. +=for apidoc AmU||XS_INTERNAL +Macro to declare an XSUB and its C parameter list without exporting the symbols. +This is handled by C and generally preferable over exporting the XSUB +symbols unnecessarily. This is handled by C. + +=for apidoc AmU||XS_EXTERNAL +Macro to declare an XSUB and its C parameter list explicitly exporting the symbols. +This is handled by C. + =for apidoc Ams||dAX Sets up the C variable. This is usually handled automatically by C by calling C. @@ -107,27 +116,52 @@ is a lexical $_ in scope. * Don't forget to change the __attribute__unused__ version of XS() * below too if you change XSPROTO() here. */ -#define XSPROTO(name) void name(pTHX_ CV* cv) + +/* XSPROTO_INTERNAL and XS_INTERNAL are the static-linkage variants + * of the default XSPROTO/XS macros. They are enabled by + * a special XS verb that is still tbd. + * + * XSPROTO_EXTERNAL/XS_EXTERNAL are (for now) exactly the same as + * XSPROTO/XS, but if the default wrt. linkage changes in future, they + * will allow users to explicitly mark XSUBs for exporting their + * symbols. + */ + +#define XSPROTO_EXTERNAL(name) void name(pTHX_ CV* cv) +#define XSPROTO_INTERNAL(name) STATIC void name(pTHX_ CV* cv) +#define XSPROTO(name) XSPROTO_EXTERNAL(name) #undef XS +#undef XS_EXTERNAL +#undef XS_INTERNAL #if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING) -# define XS(name) __declspec(dllexport) XSPROTO(name) +# define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO_EXTERNAL(name) +# define XS_INTERNAL(name) __declspec(dllexport) XSPROTO_INTERNAL(name) #endif #if defined(__SYMBIAN32__) -# define XS(name) EXPORT_C XSPROTO(name) +# define XS_EXTERNAL(name) EXPORT_C XSPROTO_EXTERNAL(name) +# define XS_INTERNAL(name) EXPORT_C XSPROTO_INTERNAL(name) #endif -#ifndef XS +#ifndef XS_EXTERNAL # if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus) -# define XS(name) void name(pTHX_ CV* cv __attribute__unused__) +# define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__) +# define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__) # else # ifdef __cplusplus -# define XS(name) extern "C" XSPROTO(name) +# define XS_EXTERNAL(name) extern "C" XSPROTO_EXTERNAL(name) +# define XS_INTERNAL(name) extern "C" XSPROTO_INTERNAL(name) # else -# define XS(name) XSPROTO(name) +# define XS_EXTERNAL(name) XSPROTO_EXTERNAL(name) +# define XS_INTERNAL(name) XSPROTO_INTERNAL(name) # endif # endif #endif +/* We currently default to exporting XSUB symbols */ +#define XS(name) XS_EXTERNAL(name) +/* Apparently needed for SWIG: */ +#define XSPROTO(name) XSPROTO_EXTERNAL(name) + #define dAX const I32 ax = (I32)(MARK - PL_stack_base + 1) #define dAXMARK \ -- cgit v1.2.1 From 86a64801a038eae8c8c1c6f0ba6a8b40aeb8fa8d Mon Sep 17 00:00:00 2001 From: Gerard Goossen Date: Thu, 11 Aug 2011 09:34:32 +0200 Subject: Move context propagation and finalize_optree from do_eval to newPROG Aborting after errors found by finalize_optree in do_eval wasn't done properly and would cause memory problems. This patch moves the context propagation and finalize_optree to newPROG such that the normal error handling is done. The eval context blk_gimme is used to communicate the context. --- op.c | 14 ++++++++++++++ pp_ctl.c | 16 +--------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/op.c b/op.c index a1443850f3..fabffe10aa 100644 --- a/op.c +++ b/op.c @@ -2704,11 +2704,23 @@ Perl_newPROG(pTHX_ OP *o) PERL_ARGS_ASSERT_NEWPROG; if (PL_in_eval) { + PERL_CONTEXT *cx; if (PL_eval_root) return; PL_eval_root = newUNOP(OP_LEAVEEVAL, ((PL_in_eval & EVAL_KEEPERR) ? OPf_SPECIAL : 0), o); + + cx = &cxstack[cxstack_ix]; + assert(CxTYPE(cx) == CXt_EVAL); + + if ((cx->blk_gimme & G_WANT) == G_VOID) + scalarvoid(PL_eval_root); + else if ((cx->blk_gimme & G_WANT) == G_ARRAY) + list(PL_eval_root); + else + scalar(PL_eval_root); + /* don't use LINKLIST, since PL_eval_root might indirect through * a rather expensive function call and LINKLIST evaluates its * argument more than once */ @@ -2717,6 +2729,8 @@ Perl_newPROG(pTHX_ OP *o) OpREFCNT_set(PL_eval_root, 1); PL_eval_root->op_next = 0; CALL_PEEP(PL_eval_start); + finalize_optree(PL_eval_root); + } else { if (o->op_type == OP_STUB) { diff --git a/pp_ctl.c b/pp_ctl.c index f226e0d940..c0a16e4e42 100644 --- a/pp_ctl.c +++ b/pp_ctl.c @@ -3471,6 +3471,7 @@ S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq) CvEVAL_on(PL_compcv); assert(CxTYPE(&cxstack[cxstack_ix]) == CXt_EVAL); cxstack[cxstack_ix].blk_eval.cv = PL_compcv; + cxstack[cxstack_ix].blk_gimme = gimme; CvOUTSIDE_SEQ(PL_compcv) = seq; CvOUTSIDE(PL_compcv) = MUTABLE_CV(SvREFCNT_inc_simple(outside)); @@ -3527,7 +3528,6 @@ S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq) SV *namesv; const char *msg; - parse_error: cx = NULL; namesv = NULL; PERL_UNUSED_VAR(newsp); @@ -3589,20 +3589,6 @@ S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq) } else SAVEFREEOP(PL_eval_root); - /* Set the context for this new optree. - * Propagate the context from the eval(). */ - if ((gimme & G_WANT) == G_VOID) - scalarvoid(PL_eval_root); - else if ((gimme & G_WANT) == G_ARRAY) - list(PL_eval_root); - else - scalar(PL_eval_root); - - finalize_optree(PL_eval_root); - - if (PL_parser->error_count) /* finalize_optree might have generated new error */ - goto parse_error; - DEBUG_x(dump_eval()); /* Register with debugger: */ -- cgit v1.2.1 From eb796c7f1a47acbd996034731639c1bb76e31a19 Mon Sep 17 00:00:00 2001 From: Gerard Goossen Date: Tue, 9 Aug 2011 20:35:06 +0200 Subject: Move bareword checking from the peephole optimizer to finalize_optree. Fixes [perl #95998] The bareword checking is moved from the peephole optimizer to finalize_optree. newRANGE needs additional bareword checking because the constants may be optimized away by 'gen_constant_list'. The OPpCONST_STRICT flag is removed after giving an error about a bareword to prevent giving multiple errors about the same bareword. --- embed.fnc | 2 +- op.c | 17 +++++++++++------ proto.h | 2 +- t/lib/strict/subs | 2 +- t/op/sigdispatch.t | 6 +++--- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/embed.fnc b/embed.fnc index e2309108b4..4da1d75eec 100644 --- a/embed.fnc +++ b/embed.fnc @@ -1641,7 +1641,7 @@ s |OP * |dup_attrlist |NN OP *o s |void |apply_attrs |NN HV *stash|NN SV *target|NULLOK OP *attrs|bool for_my s |void |apply_attrs_my |NN HV *stash|NN OP *target|NULLOK OP *attrs|NN OP **imopsp s |void |bad_type |I32 n|NN const char *t|NN const char *name|NN const OP *kid -s |void |no_bareword_allowed|NN const OP *o +s |void |no_bareword_allowed|NN OP *o sR |OP* |no_fh_allowed|NN OP *o sR |OP* |too_few_arguments|NN OP *o|NN const char* name sR |OP* |too_many_arguments|NN OP *o|NN const char* name diff --git a/op.c b/op.c index fabffe10aa..af2f3cac57 100644 --- a/op.c +++ b/op.c @@ -365,7 +365,7 @@ S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid) } STATIC void -S_no_bareword_allowed(pTHX_ const OP *o) +S_no_bareword_allowed(pTHX_ OP *o) { PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED; @@ -374,6 +374,7 @@ S_no_bareword_allowed(pTHX_ const OP *o) qerror(Perl_mess(aTHX_ "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use", SVfARG(cSVOPo_sv))); + o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */ } /* "register" allocation */ @@ -1479,6 +1480,9 @@ S_finalize_op(pTHX_ OP* o) break; case OP_CONST: + if (cSVOPo->op_private & OPpCONST_STRICT) + no_bareword_allowed(o); + /* FALLTHROUGH */ #ifdef USE_ITHREADS case OP_HINTSEVAL: case OP_METHOD_NAMED: @@ -5565,6 +5569,12 @@ Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right) flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0; flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0; + /* check barewords before they might be optimized aways */ + if (flip->op_private && cSVOPx(left)->op_private & OPpCONST_STRICT) + no_bareword_allowed(left); + if (flop->op_private && cSVOPx(right)->op_private & OPpCONST_STRICT) + no_bareword_allowed(right); + flip->op_next = o; if (!flip->op_private || !flop->op_private) LINKLIST(o); /* blow off optimizer unless constant */ @@ -9669,11 +9679,6 @@ Perl_rpeep(pTHX_ register OP *o) } break; - case OP_CONST: - if (cSVOPo->op_private & OPpCONST_STRICT) - no_bareword_allowed(o); - break; - case OP_CONCAT: if (o->op_next && o->op_next->op_type == OP_STRINGIFY) { if (o->op_next->op_private & OPpTARGET_MY) { diff --git a/proto.h b/proto.h index 1807b2f4a6..b267253edd 100644 --- a/proto.h +++ b/proto.h @@ -5552,7 +5552,7 @@ STATIC OP* S_new_logop(pTHX_ I32 type, I32 flags, OP **firstp, OP **otherp) #define PERL_ARGS_ASSERT_NEW_LOGOP \ assert(firstp); assert(otherp) -STATIC void S_no_bareword_allowed(pTHX_ const OP *o) +STATIC void S_no_bareword_allowed(pTHX_ OP *o) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED \ assert(o) diff --git a/t/lib/strict/subs b/t/lib/strict/subs index 394c8d1390..84bf874b25 100644 --- a/t/lib/strict/subs +++ b/t/lib/strict/subs @@ -433,7 +433,7 @@ foo: ret bar ######## -# TODO infinite loop breaks some strict checking +# infinite loop breaks some strict checking use strict 'subs'; sub foo { 1 while 1; diff --git a/t/op/sigdispatch.t b/t/op/sigdispatch.t index d36c357fd2..e08e35f3af 100644 --- a/t/op/sigdispatch.t +++ b/t/op/sigdispatch.t @@ -50,7 +50,7 @@ SKIP: { my $gotit = 0; $SIG{USR1} = sub { $gotit++ }; - kill SIGUSR1, $$; + kill 'SIGUSR1', $$; is $gotit, 0, 'Haven\'t received third signal yet'; my $old = POSIX::SigSet->new(); @@ -58,7 +58,7 @@ SKIP: { is $gotit, 1, 'Received third signal'; { - kill SIGUSR1, $$; + kill 'SIGUSR1', $$; local $SIG{USR1} = sub { die "FAIL\n" }; POSIX::sigprocmask(&POSIX::SIG_BLOCK, undef, $old); ok $old->ismember(&POSIX::SIGUSR1), 'SIGUSR1 is blocked'; @@ -73,7 +73,7 @@ TODO: } POSIX::sigprocmask(&POSIX::SIG_BLOCK, $new); - kill SIGUSR1, $$; + kill 'SIGUSR1', $$; is $gotit, 1, 'Haven\'t received fifth signal yet'; POSIX::sigprocmask(&POSIX::SIG_UNBLOCK, $new, $old); ok $old->ismember(&POSIX::SIGUSR1), 'SIGUSR1 was still blocked'; -- cgit v1.2.1 From 1766075810712c2dd8a5fd6ced3ee862f7de045c Mon Sep 17 00:00:00 2001 From: "Craig A. Berry" Date: Fri, 12 Aug 2011 07:51:10 -0500 Subject: Better st_ino_size probe in configure.com. Follow-up to adf2bd2837. This is being used for compile-time comparisons; sizeof may be compile-time, but is apparently not available before macro substitution, leading to problems like: ....^ %CC-I-IGNOREEXTRA, Spurious token(s) ignored on preprocessor directive line. at line number 2837 in file MDA0:[SMOKE.blead]pp_sys.c;1 --- configure.com | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/configure.com b/configure.com index b298ffa764..2e41dae26a 100644 --- a/configure.com +++ b/configure.com @@ -5113,6 +5113,33 @@ $ echo4 "I'm disabling large file support." $ uselargefiles = "undef" $ ENDIF $! +$! Check for st_ino size. +$! +$ st_ino_size = 4 +$ OS +$ WS "#include " +$ WS "#include " +$ WS "#if defined(__DECC) || defined(__DECCXX)" +$ WS "#include +$ WS "#endif" +$ WS "int main() { +$ WS "#''uselargefiles' _LARGEFILE" +$ WS "#ifdef _LARGEFILE" +$ WS " printf(""%d\n"", sizeof(__ino64_t));" +$ WS "#else" +$ WS " printf(""%d\n"", sizeof(unsigned short)*3);" +$ WS "#endif" +$ WS " exit(0);" +$ WS "}" +$ CS +$ GOSUB link_ok +$ IF link_status .EQ. good_link +$ THEN +$ GOSUB just_mcr_it +$ st_ino_size = tmp +$ ENDIF +$ echo "Your st_ino size is ''st_ino_size' bytes." +$! $! Tests for hard link, symbolic links, and 7.3 + CRTL features $! $ d_lchown = "undef" @@ -6709,12 +6736,7 @@ $ WC "src='" + src + "'" $ WC "ssizetype='int'" $ WC "startperl=" + startperl ! This one's special--no enclosing single quotes $ WC "static_ext='" + static_ext + "'" -$ IF uselargefiles .OR. uselargefiles .eqs. "define" -$ THEN -$ WC "st_ino_size='sizeof(__ino64_t)'" -$ ELSE -$ WC "st_ino_size='(sizeof(unsigned short)*3)'" -$ ENDIF +$ WC "st_ino_size='" + st_ino_size + "'" $ WC "st_ino_sign='1'" $ WC "stdchar='" + stdchar + "'" $ WC "stdio_base='((*fp)->_base)'" -- cgit v1.2.1 From 93e6f00ed5ef68c787902ea1f88084f619b59561 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Thu, 11 Aug 2011 22:15:05 -0700 Subject: Revert "[perl #95550] Remove prototypes from (l)stat" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It turns out this problem is more knotty than I initially realised. stat had a prototype of (*), even though it could be called with no arguments. Since the (*) prototype does not parse its argument the same way that stat parses *its* argument, I thought that changing (*) to (;*) would be no better, since it’s still not correct. So I simply set the prototype to undef. My thinking was faulty, for two reasons: • The prototype serves to indicate the precedence, not just the types of arguments. An undefined prototype on an overridable prefix func- tion implies that it takes a list. So this causes problems for the imminent &CORE::subs feature, as there is not yet a clean mechanism for CVs to parse their arguments. • The (*) prototype character does not parse the same way as *any* built-in function with that character in its prototype. So stat is no worse than any other built-in. It doesn’t make sense to remove the prototype from stat without removing it from about 40 other built-in functions; and that’s where pedantry conflicts with usefulness. This commit restores the (*) prototype to stat and lstat. The next commit will give it a (;*) prototype, as that matches it more closely. It’s not perfect, but it’s no worse that other built-ins with a * in their prototypes. --- op.c | 4 ++-- pod/perldelta.pod | 6 ------ t/op/cproto.t | 4 ++-- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/op.c b/op.c index af2f3cac57..b42069a634 100644 --- a/op.c +++ b/op.c @@ -10282,8 +10282,8 @@ Perl_core_prototype(pTHX_ SV *sv, const char *name, const STRLEN len, case KEY_and : case KEY_chop: case KEY_chomp: case KEY_cmp : case KEY_exec: case KEY_eq : case KEY_ge : case KEY_gt : case KEY_le : - case KEY_lstat : case KEY_lt : case KEY_ne : case KEY_or : - case KEY_stat : case KEY_system: case KEY_x : case KEY_xor: + case KEY_lt : case KEY_ne : case KEY_or : + case KEY_system: case KEY_x : case KEY_xor : return NULL; case KEY_keys: case KEY_values: case KEY_each: retsetpvs("+"); diff --git a/pod/perldelta.pod b/pod/perldelta.pod index ba0d3a51f2..120cafec0a 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -462,12 +462,6 @@ was just wrong. =item * -The prototypes for the core functions C and C have been -removed, as they were incorrect, because their syntax cannot be replicated -by Perl subroutines. - -=item * - Most dereferencing operators (C<${}>, etc.) used to call C twice on a tied operand when doing a symbolic dereference (looking up a variable by name, which is not permitted under C). Only C<&{}> did diff --git a/t/op/cproto.t b/t/op/cproto.t index e1f3125dfc..7d63c6893f 100644 --- a/t/op/cproto.t +++ b/t/op/cproto.t @@ -140,7 +140,7 @@ local undef localtime (;$) lock (\[$@%*]) log (_) -lstat undef +lstat (*) lt undef m undef map undef @@ -227,7 +227,7 @@ split undef sprintf ($@) sqrt (_) srand (;$) -stat undef +stat (*) state undef study undef sub undef -- cgit v1.2.1 From 465bc0f5bf04702adf1825f8db8511ecc5c3adfc Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Thu, 11 Aug 2011 22:19:50 -0700 Subject: =?UTF-8?q?Change=20(l)stat=E2=80=99s=20prototype=20from=20*=20to?= =?UTF-8?q?=20;*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since the argument is optional, we need a semicolon. This commit accomplishes that by setting the OA_OPTIONAL flag for the appropriate entries in PL_opargs. This should not affect anything else, as ck_ftst (the check routine for [l]stat) doesn’t even look at PL_opargs. It also has to tweak the prototype-generation logic slightly, because PL_opargs also has OA_DEFGV set. I think this is insignificant enough not to warrant a delta entry. --- op.c | 4 +++- opcode.h | 4 ++-- regen/opcodes | 4 ++-- t/op/cproto.t | 4 ++-- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/op.c b/op.c index b42069a634..0ab2d1e1e7 100644 --- a/op.c +++ b/op.c @@ -10314,7 +10314,9 @@ Perl_core_prototype(pTHX_ SV *sv, const char *name, const STRLEN len, defgv = PL_opargs[i] & OA_DEFGV; oa = PL_opargs[i] >> OASHIFT; while (oa) { - if (oa & OA_OPTIONAL && !seen_question && (!defgv || n)) { + if (oa & OA_OPTIONAL && !seen_question && ( + !defgv || n || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF + )) { seen_question = 1; str[n++] = ';'; } diff --git a/opcode.h b/opcode.h index fb64ae271b..73c81dd747 100644 --- a/opcode.h +++ b/opcode.h @@ -1939,8 +1939,8 @@ EXTCONST U32 PL_opargs[] = { 0x01116404, /* ssockopt */ 0x00006b04, /* getsockname */ 0x00006b04, /* getpeername */ - 0x00006c80, /* lstat */ - 0x00006c80, /* stat */ + 0x0000ec80, /* lstat */ + 0x0000ec80, /* stat */ 0x00006c84, /* ftrread */ 0x00006c84, /* ftrwrite */ 0x00006c84, /* ftrexec */ diff --git a/regen/opcodes b/regen/opcodes index 2611111ff5..ec9c5a76d7 100644 --- a/regen/opcodes +++ b/regen/opcodes @@ -379,8 +379,8 @@ getpeername getpeername ck_fun is% Fs # Stat calls. OP_IS_FILETEST wants them consecutive. -lstat lstat ck_ftst u- F -stat stat ck_ftst u- F +lstat lstat ck_ftst u- F? +stat stat ck_ftst u- F? ftrread -R ck_ftst isu- F-+ ftrwrite -W ck_ftst isu- F-+ ftrexec -X ck_ftst isu- F-+ diff --git a/t/op/cproto.t b/t/op/cproto.t index 7d63c6893f..9711f824ae 100644 --- a/t/op/cproto.t +++ b/t/op/cproto.t @@ -140,7 +140,7 @@ local undef localtime (;$) lock (\[$@%*]) log (_) -lstat (*) +lstat (;*) lt undef m undef map undef @@ -227,7 +227,7 @@ split undef sprintf ($@) sqrt (_) srand (;$) -stat (*) +stat (;*) state undef study undef sub undef -- cgit v1.2.1 From 9825ce0e87f6a08192647f1352c92da16d377a04 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Fri, 12 Aug 2011 06:24:56 -0700 Subject: Revert "Oops! Update B::Deparse for the (l)stat proto change" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit db147d7ee1c1aca547b1d63ef7141e56821a3ae2. This is no longer necessary, as of this commit’s grandparent. --- dist/B-Deparse/Deparse.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/B-Deparse/Deparse.pm b/dist/B-Deparse/Deparse.pm index 08129933a5..848b2fa7a3 100644 --- a/dist/B-Deparse/Deparse.pm +++ b/dist/B-Deparse/Deparse.pm @@ -26,7 +26,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring ($] < 5.009 ? 'PMf_SKIPWHITE' : qw(RXf_SKIPWHITE)), ($] < 5.011 ? 'CVf_LOCKED' : 'OPpREVERSE_INPLACE'), ($] < 5.013 ? () : 'PMf_NONDESTRUCT'); -$VERSION = "1.07"; +$VERSION = "1.06"; use strict; use vars qw/$AUTOLOAD/; use warnings (); @@ -1553,7 +1553,7 @@ sub keyword { : "CORE::$name"; } if ( - $name !~ /^(?:chom?p|exec|system|l?stat)\z/ + $name !~ /^(?:chom?p|exec|system)\z/ && !defined eval{prototype "CORE::$name"} ) { return $name } if ( -- cgit v1.2.1 From f4ef369354bb1dbebc128000108d3c4964e1cbf0 Mon Sep 17 00:00:00 2001 From: "Craig A. Berry" Date: Fri, 12 Aug 2011 09:09:30 -0500 Subject: Clean up MANIFEST before creating a new one. This is a follow-up to e4ac890e26c, which changed behavior from appending to an existing MANIFEST to creating a new one. On VMS, that would give us multiple versions, which probably wouldn't matter except that the tests insist that there is one and only one copy of every file they've created and they only clean up the highest version. The easiest way to handle this is to make sure we clean up first before creating a new MANIFEST file. --- dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm b/dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm index 62e9877982..40df070af7 100644 --- a/dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm +++ b/dist/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm @@ -730,6 +730,7 @@ sub _fix_manifest { } if ( $must_rewrite ) { + 1 while unlink $MANIFEST; # avoid multiple versions on VMS open MANIFEST, ">", $MANIFEST or die "(must_rewrite=$must_rewrite) Could not open >$MANIFEST: $!"; for (my $i=0; $i<=$#manifest; $i+=2) { print MANIFEST "$manifest[$i]\n"; -- cgit v1.2.1 From 7eb971ee54c13db586d1afe434b0fa7d3fb759af Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Mon, 8 Aug 2011 08:40:44 -0700 Subject: [perl #95546] Allow () after __FILE__, etc. This commit makes the __FILE__, __LINE__ and __PACKAGE__ token parse the same way as nullary functions. It adds two extra rules to perly.y to allow the op to be created in toke.c, instead of directly inside the parser. --- perly.act | 129 ++--- perly.h | 264 +++++----- perly.tab | 1601 +++++++++++++++++++++++++++++++------------------------------ perly.y | 9 +- toke.c | 24 +- 5 files changed, 1037 insertions(+), 990 deletions(-) diff --git a/perly.act b/perly.act index bd3cffba68..aba008fe3c 100644 --- a/perly.act +++ b/perly.act @@ -1510,12 +1510,25 @@ case 2: case 188: #line 1236 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 189: +#line 1238 "perly.y" + { (yyval.opval) = (ps[(1) - (3)].val.opval); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'('); + TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')'); + ;} + break; + + case 190: +#line 1243 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (1)].val.opval))); ;} break; - case 189: -#line 1239 "perly.y" + case 191: +#line 1246 "perly.y" { (yyval.opval) = (IVAL((ps[(1) - (3)].val.i_tkval)) == OP_NOT) ? newUNOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0, newSVOP(OP_CONST, 0, newSViv(0))) : newOP(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_SPECIAL); @@ -1526,8 +1539,8 @@ case 2: ;} break; - case 190: -#line 1248 "perly.y" + case 192: +#line 1255 "perly.y" { (yyval.opval) = newUNOP(IVAL((ps[(1) - (4)].val.i_tkval)), 0, (ps[(3) - (4)].val.opval)); TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o'); TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'('); @@ -1535,16 +1548,16 @@ case 2: ;} break; - case 191: -#line 1254 "perly.y" + case 193: +#line 1261 "perly.y" { (yyval.opval) = pmruntime((ps[(1) - (4)].val.opval), (ps[(3) - (4)].val.opval), 1); TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'('); TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')'); ;} break; - case 194: -#line 1261 "perly.y" + case 196: +#line 1268 "perly.y" { (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), newSVOP(OP_CONST, 0, newSVpvs("Unimplemented"))); @@ -1552,8 +1565,8 @@ case 2: ;} break; - case 196: -#line 1271 "perly.y" + case 198: +#line 1278 "perly.y" { (yyval.opval) = my_attrs((ps[(2) - (3)].val.opval),(ps[(3) - (3)].val.opval)); DO_MAD( token_getmad((ps[(1) - (3)].val.i_tkval),(yyval.opval),'d'); @@ -1563,47 +1576,37 @@ case 2: ;} break; - case 197: -#line 1279 "perly.y" + case 199: +#line 1286 "perly.y" { (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval))); TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'d'); ;} break; - case 198: -#line 1286 "perly.y" + case 200: +#line 1293 "perly.y" { (yyval.opval) = sawparens((ps[(2) - (3)].val.opval)); TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'('); TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')'); ;} break; - case 199: -#line 1291 "perly.y" + case 201: +#line 1298 "perly.y" { (yyval.opval) = sawparens(newNULLLIST()); TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'('); TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')'); ;} break; - case 200: -#line 1296 "perly.y" - { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} - break; - - case 201: -#line 1298 "perly.y" - { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} - break; - case 202: -#line 1300 "perly.y" +#line 1303 "perly.y" { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} break; case 203: #line 1305 "perly.y" - { (yyval.opval) = (OP*)NULL; ;} + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} break; case 204: @@ -1612,94 +1615,104 @@ case 2: break; case 205: -#line 1311 "perly.y" +#line 1312 "perly.y" { (yyval.opval) = (OP*)NULL; ;} break; case 206: -#line 1313 "perly.y" +#line 1314 "perly.y" { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} break; case 207: -#line 1317 "perly.y" - { (yyval.i_tkval) = (ps[(1) - (1)].val.i_tkval); ;} +#line 1318 "perly.y" + { (yyval.opval) = (OP*)NULL; ;} break; case 208: -#line 1319 "perly.y" - { munge_qwlist_to_paren_list((ps[(1) - (1)].val.opval)); ;} +#line 1320 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} break; case 209: -#line 1321 "perly.y" - { (yyval.i_tkval) = (ps[(3) - (3)].val.i_tkval); ;} +#line 1324 "perly.y" + { (yyval.i_tkval) = (ps[(1) - (1)].val.i_tkval); ;} break; case 210: -#line 1327 "perly.y" - { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); ;} +#line 1326 "perly.y" + { munge_qwlist_to_paren_list((ps[(1) - (1)].val.opval)); ;} break; case 211: -#line 1331 "perly.y" +#line 1328 "perly.y" + { (yyval.i_tkval) = (ps[(3) - (3)].val.i_tkval); ;} + break; + + case 212: +#line 1334 "perly.y" + { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); ;} + break; + + case 213: +#line 1338 "perly.y" { (yyval.opval) = newCVREF(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval)); TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'&'); ;} break; - case 212: -#line 1337 "perly.y" + case 214: +#line 1344 "perly.y" { (yyval.opval) = newSVREF((ps[(2) - (2)].val.opval)); TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'$'); ;} break; - case 213: -#line 1343 "perly.y" + case 215: +#line 1350 "perly.y" { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval)); TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'@'); ;} break; - case 214: -#line 1349 "perly.y" + case 216: +#line 1356 "perly.y" { (yyval.opval) = newHVREF((ps[(2) - (2)].val.opval)); TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'%'); ;} break; - case 215: -#line 1355 "perly.y" + case 217: +#line 1362 "perly.y" { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval)); TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'l'); ;} break; - case 216: -#line 1361 "perly.y" + case 218: +#line 1368 "perly.y" { (yyval.opval) = newGVREF(0,(ps[(2) - (2)].val.opval)); TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'*'); ;} break; - case 217: -#line 1368 "perly.y" + case 219: +#line 1375 "perly.y" { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;} break; - case 218: -#line 1370 "perly.y" + case 220: +#line 1377 "perly.y" { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;} break; - case 219: -#line 1372 "perly.y" + case 221: +#line 1379 "perly.y" { (yyval.opval) = op_scope((ps[(1) - (1)].val.opval)); ;} break; - case 220: -#line 1375 "perly.y" + case 222: +#line 1382 "perly.y" { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} break; @@ -1710,6 +1723,6 @@ case 2: /* Generated from: - * 8bdd3d69bab2a9d77e0557f3b46a8845e8de190fafce0bc37841a105bbcacaa5 perly.y + * 7fb05fb0a9bd3f1c047696941084a07f2d9928ccde2dd343a19d32cf51669760 perly.y * 738ca60a0b4cb075902435e976a2f393d438e8e6e32ba81e037dd773b75c87b5 regen_perly.pl * ex: set ro: */ diff --git a/perly.h b/perly.h index 49a325e398..30f838e644 100644 --- a/perly.h +++ b/perly.h @@ -59,71 +59,72 @@ PMFUNC = 268, PRIVATEREF = 269, QWLIST = 270, - FUNC0SUB = 271, - UNIOPSUB = 272, - LSTOPSUB = 273, - PLUGEXPR = 274, - PLUGSTMT = 275, - LABEL = 276, - FORMAT = 277, - SUB = 278, - ANONSUB = 279, - PACKAGE = 280, - USE = 281, - WHILE = 282, - UNTIL = 283, - IF = 284, - UNLESS = 285, - ELSE = 286, - ELSIF = 287, - CONTINUE = 288, - FOR = 289, - GIVEN = 290, - WHEN = 291, - DEFAULT = 292, - LOOPEX = 293, - DOTDOT = 294, - YADAYADA = 295, - FUNC0 = 296, - FUNC1 = 297, - FUNC = 298, - UNIOP = 299, - LSTOP = 300, - RELOP = 301, - EQOP = 302, - MULOP = 303, - ADDOP = 304, - DOLSHARP = 305, - DO = 306, - HASHBRACK = 307, - NOAMP = 308, - LOCAL = 309, - MY = 310, - MYSUB = 311, - REQUIRE = 312, - COLONATTR = 313, - PREC_LOW = 314, - DOROP = 315, - OROP = 316, - ANDOP = 317, - NOTOP = 318, - ASSIGNOP = 319, - DORDOR = 320, - OROR = 321, - ANDAND = 322, - BITOROP = 323, - BITANDOP = 324, - SHIFTOP = 325, - MATCHOP = 326, - REFGEN = 327, - UMINUS = 328, - POWOP = 329, - POSTDEC = 330, - POSTINC = 331, - PREDEC = 332, - PREINC = 333, - ARROW = 334, - PEG = 335 + FUNC0OP = 271, + FUNC0SUB = 272, + UNIOPSUB = 273, + LSTOPSUB = 274, + PLUGEXPR = 275, + PLUGSTMT = 276, + LABEL = 277, + FORMAT = 278, + SUB = 279, + ANONSUB = 280, + PACKAGE = 281, + USE = 282, + WHILE = 283, + UNTIL = 284, + IF = 285, + UNLESS = 286, + ELSE = 287, + ELSIF = 288, + CONTINUE = 289, + FOR = 290, + GIVEN = 291, + WHEN = 292, + DEFAULT = 293, + LOOPEX = 294, + DOTDOT = 295, + YADAYADA = 296, + FUNC0 = 297, + FUNC1 = 298, + FUNC = 299, + UNIOP = 300, + LSTOP = 301, + RELOP = 302, + EQOP = 303, + MULOP = 304, + ADDOP = 305, + DOLSHARP = 306, + DO = 307, + HASHBRACK = 308, + NOAMP = 309, + LOCAL = 310, + MY = 311, + MYSUB = 312, + REQUIRE = 313, + COLONATTR = 314, + PREC_LOW = 315, + DOROP = 316, + OROP = 317, + ANDOP = 318, + NOTOP = 319, + ASSIGNOP = 320, + DORDOR = 321, + OROR = 322, + ANDAND = 323, + BITOROP = 324, + BITANDOP = 325, + SHIFTOP = 326, + MATCHOP = 327, + REFGEN = 328, + UMINUS = 329, + POWOP = 330, + POSTDEC = 331, + POSTINC = 332, + PREDEC = 333, + PREINC = 334, + ARROW = 335, + PEG = 336 }; #endif /* Tokens. */ @@ -140,71 +141,72 @@ #define PMFUNC 268 #define PRIVATEREF 269 #define QWLIST 270 -#define FUNC0SUB 271 -#define UNIOPSUB 272 -#define LSTOPSUB 273 -#define PLUGEXPR 274 -#define PLUGSTMT 275 -#define LABEL 276 -#define FORMAT 277 -#define SUB 278 -#define ANONSUB 279 -#define PACKAGE 280 -#define USE 281 -#define WHILE 282 -#define UNTIL 283 -#define IF 284 -#define UNLESS 285 -#define ELSE 286 -#define ELSIF 287 -#define CONTINUE 288 -#define FOR 289 -#define GIVEN 290 -#define WHEN 291 -#define DEFAULT 292 -#define LOOPEX 293 -#define DOTDOT 294 -#define YADAYADA 295 -#define FUNC0 296 -#define FUNC1 297 -#define FUNC 298 -#define UNIOP 299 -#define LSTOP 300 -#define RELOP 301 -#define EQOP 302 -#define MULOP 303 -#define ADDOP 304 -#define DOLSHARP 305 -#define DO 306 -#define HASHBRACK 307 -#define NOAMP 308 -#define LOCAL 309 -#define MY 310 -#define MYSUB 311 -#define REQUIRE 312 -#define COLONATTR 313 -#define PREC_LOW 314 -#define DOROP 315 -#define OROP 316 -#define ANDOP 317 -#define NOTOP 318 -#define ASSIGNOP 319 -#define DORDOR 320 -#define OROR 321 -#define ANDAND 322 -#define BITOROP 323 -#define BITANDOP 324 -#define SHIFTOP 325 -#define MATCHOP 326 -#define REFGEN 327 -#define UMINUS 328 -#define POWOP 329 -#define POSTDEC 330 -#define POSTINC 331 -#define PREDEC 332 -#define PREINC 333 -#define ARROW 334 -#define PEG 335 +#define FUNC0OP 271 +#define FUNC0SUB 272 +#define UNIOPSUB 273 +#define LSTOPSUB 274 +#define PLUGEXPR 275 +#define PLUGSTMT 276 +#define LABEL 277 +#define FORMAT 278 +#define SUB 279 +#define ANONSUB 280 +#define PACKAGE 281 +#define USE 282 +#define WHILE 283 +#define UNTIL 284 +#define IF 285 +#define UNLESS 286 +#define ELSE 287 +#define ELSIF 288 +#define CONTINUE 289 +#define FOR 290 +#define GIVEN 291 +#define WHEN 292 +#define DEFAULT 293 +#define LOOPEX 294 +#define DOTDOT 295 +#define YADAYADA 296 +#define FUNC0 297 +#define FUNC1 298 +#define FUNC 299 +#define UNIOP 300 +#define LSTOP 301 +#define RELOP 302 +#define EQOP 303 +#define MULOP 304 +#define ADDOP 305 +#define DOLSHARP 306 +#define DO 307 +#define HASHBRACK 308 +#define NOAMP 309 +#define LOCAL 310 +#define MY 311 +#define MYSUB 312 +#define REQUIRE 313 +#define COLONATTR 314 +#define PREC_LOW 315 +#define DOROP 316 +#define OROP 317 +#define ANDOP 318 +#define NOTOP 319 +#define ASSIGNOP 320 +#define DORDOR 321 +#define OROR 322 +#define ANDAND 323 +#define BITOROP 324 +#define BITANDOP 325 +#define SHIFTOP 326 +#define MATCHOP 327 +#define REFGEN 328 +#define UMINUS 329 +#define POWOP 330 +#define POSTDEC 331 +#define POSTINC 332 +#define PREDEC 333 +#define PREINC 334 +#define ARROW 335 +#define PEG 336 @@ -240,6 +242,6 @@ typedef union YYSTYPE /* Generated from: - * 8bdd3d69bab2a9d77e0557f3b46a8845e8de190fafce0bc37841a105bbcacaa5 perly.y + * 7fb05fb0a9bd3f1c047696941084a07f2d9928ccde2dd343a19d32cf51669760 perly.y * 738ca60a0b4cb075902435e976a2f393d438e8e6e32ba81e037dd773b75c87b5 regen_perly.pl * ex: set ro: */ diff --git a/perly.tab b/perly.tab index ae983ba9b2..c8c757d2ce 100644 --- a/perly.tab +++ b/perly.tab @@ -6,20 +6,20 @@ #define YYFINAL 14 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 2683 +#define YYLAST 2772 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 100 +#define YYNTOKENS 101 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 63 /* YYNRULES -- Number of rules. */ -#define YYNRULES 220 +#define YYNRULES 222 /* YYNRULES -- Number of states. */ -#define YYNSTATES 446 +#define YYNSTATES 449 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 335 +#define YYMAXUTOK 336 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -30,16 +30,16 @@ static const yytype_uint8 yytranslate[] = 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 87, 2, 2, 15, 17, 19, 2, - 98, 97, 18, 14, 76, 13, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 79, 20, - 2, 2, 2, 78, 16, 2, 2, 2, 2, 2, + 2, 2, 2, 88, 2, 2, 15, 17, 19, 2, + 99, 98, 18, 14, 77, 13, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 80, 20, + 2, 2, 2, 79, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11, 2, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 9, 2, 10, 88, 2, 2, 2, + 2, 2, 2, 9, 2, 10, 89, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -58,9 +58,9 @@ static const yytype_uint8 yytranslate[] = 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, - 80, 81, 82, 83, 84, 85, 86, 89, 90, 91, - 92, 93, 94, 95, 96, 99 + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 78, 81, 82, 83, 84, 85, 86, 87, 90, 91, + 92, 93, 94, 95, 96, 97, 100 }; #if YYDEBUG @@ -87,92 +87,92 @@ static const yytype_uint16 yyprhs[] = 595, 599, 601, 604, 606, 608, 610, 612, 614, 616, 621, 627, 629, 631, 635, 640, 644, 646, 649, 652, 654, 657, 660, 662, 665, 667, 670, 672, 676, 678, - 682, 687, 692, 694, 696, 698, 700, 704, 707, 711, - 714, 716, 718, 720, 721, 723, 724, 726, 728, 729, - 733, 735, 738, 741, 744, 747, 750, 753, 755, 757, - 759 + 682, 684, 688, 693, 698, 700, 702, 704, 706, 710, + 713, 717, 720, 722, 724, 726, 727, 729, 730, 732, + 734, 735, 739, 741, 744, 747, 750, 753, 756, 759, + 761, 763, 765 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { - 101, 0, -1, -1, 3, 102, 109, 113, -1, -1, - 4, 103, 152, -1, -1, 5, 104, 108, -1, -1, - 6, 105, 116, -1, -1, 7, 106, 114, -1, -1, - 8, 107, 113, -1, 9, 109, 113, 10, -1, -1, - -1, 9, 112, 113, 10, -1, -1, -1, 113, 114, - -1, 116, -1, 115, -1, 33, 116, -1, 33, 115, - -1, 32, -1, 99, -1, 34, 132, 129, 108, -1, - 35, 130, 133, 134, 135, 137, -1, 68, 130, 133, - 134, 135, 137, -1, 37, 21, 21, 20, -1, -1, - 38, 130, 117, 21, 21, 151, 20, -1, 41, 153, - 109, 126, 97, 111, 120, -1, 42, 153, 109, 128, - 97, 111, 120, -1, 47, 153, 109, 110, 126, 97, - 111, -1, 48, 153, 109, 126, 97, 111, -1, 49, - 108, -1, 39, 153, 109, 124, 97, 122, 111, 121, - -1, 40, 153, 109, 125, 97, 122, 111, 121, -1, - 46, 153, 109, 127, 20, 124, 20, 122, 127, 97, - 111, -1, 46, 67, 109, 155, 153, 126, 97, 111, - 121, -1, 46, 157, 153, 109, 126, 97, 111, 121, - -1, 46, 153, 109, 126, 97, 111, 121, -1, 108, - 121, -1, -1, 37, 21, 21, 9, 109, 118, 113, - 10, -1, 119, 20, -1, 20, -1, 1, -1, 138, - -1, 138, 41, 138, -1, 138, 42, 138, -1, 138, - 39, 138, -1, 138, 40, 125, -1, 138, 46, 138, - -1, 138, 48, 138, -1, -1, 43, 111, -1, 44, - 153, 126, 97, 111, 120, -1, -1, 45, 108, -1, - -1, -1, 119, -1, -1, 138, -1, 138, -1, 138, - -1, 123, -1, 125, -1, 21, -1, -1, -1, -1, - -1, 21, -1, -1, 24, -1, -1, 70, 24, -1, - 70, -1, 70, 24, -1, 70, -1, 108, -1, 20, - -1, 138, 74, 138, -1, 138, 73, 138, -1, 138, - 72, 138, -1, 139, -1, 139, 76, -1, 139, 76, - 148, -1, 148, -1, 57, 162, 139, -1, 55, 98, - 162, 138, 97, -1, 148, 96, 142, 153, 152, 97, - -1, 148, 96, 142, -1, 22, 162, 151, -1, 23, - 162, 98, 152, 97, -1, 57, 151, -1, 55, 98, - 152, 97, -1, -1, 30, 131, 108, 141, 151, -1, - 22, -1, 157, -1, 161, 9, 138, 20, 10, -1, - 157, 11, 138, 12, -1, 148, 96, 11, 138, 12, - -1, 143, 11, 138, 12, -1, 157, 9, 138, 20, - 10, -1, 148, 96, 9, 138, 20, 10, -1, 143, - 9, 138, 20, 10, -1, 148, 96, 98, 97, -1, - 148, 96, 98, 138, 97, -1, 143, 153, 138, 97, - -1, 143, 153, 97, -1, 98, 138, 97, 11, 138, - 12, -1, 27, 11, 138, 12, -1, 98, 97, 11, - 138, 12, -1, 148, 77, 148, -1, 148, 91, 148, - -1, 148, 60, 148, -1, 148, 61, 148, -1, 148, - 85, 148, -1, 148, 58, 148, -1, 148, 59, 148, - -1, 148, 84, 148, -1, 148, 83, 148, -1, 148, - 51, 148, -1, 148, 82, 148, -1, 148, 81, 148, - -1, 148, 80, 148, -1, 148, 86, 148, -1, 13, - 148, -1, 14, 148, -1, 87, 148, -1, 88, 148, - -1, 148, 93, -1, 148, 92, -1, 95, 148, -1, - 94, 148, -1, 11, 138, 12, -1, 11, 12, -1, - 64, 138, 20, 10, -1, 64, 20, 10, -1, 36, - 131, 134, 135, 108, -1, 63, 148, -1, 63, 108, - -1, 63, 21, 153, 97, -1, 63, 21, 153, 138, - 97, -1, 63, 157, 153, 97, -1, 63, 157, 153, - 138, 97, -1, 144, -1, 145, -1, 146, -1, 147, - -1, 148, 78, 148, 79, 148, -1, 89, 148, -1, - 149, -1, 66, 148, -1, 98, 138, 97, -1, 27, - -1, 98, 97, -1, 157, -1, 161, -1, 159, -1, - 158, -1, 160, -1, 143, -1, 158, 11, 138, 12, - -1, 158, 9, 138, 20, 10, -1, 24, -1, 156, - -1, 156, 153, 97, -1, 156, 153, 138, 97, -1, - 65, 21, 151, -1, 50, -1, 50, 148, -1, 75, - 139, -1, 56, -1, 56, 108, -1, 56, 148, -1, - 69, -1, 69, 148, -1, 29, -1, 29, 148, -1, - 53, -1, 53, 98, 97, -1, 28, -1, 54, 98, - 97, -1, 54, 98, 138, 97, -1, 25, 98, 139, - 97, -1, 21, -1, 140, -1, 52, -1, 31, -1, - 67, 150, 136, -1, 67, 150, -1, 98, 138, 97, - -1, 98, 97, -1, 157, -1, 159, -1, 158, -1, - -1, 139, -1, -1, 138, -1, 98, -1, -1, 27, - 154, 98, -1, 157, -1, 19, 162, -1, 15, 162, - -1, 16, 162, -1, 17, 162, -1, 62, 162, -1, - 18, 162, -1, 21, -1, 157, -1, 108, -1, 26, - -1 + 102, 0, -1, -1, 3, 103, 110, 114, -1, -1, + 4, 104, 153, -1, -1, 5, 105, 109, -1, -1, + 6, 106, 117, -1, -1, 7, 107, 115, -1, -1, + 8, 108, 114, -1, 9, 110, 114, 10, -1, -1, + -1, 9, 113, 114, 10, -1, -1, -1, 114, 115, + -1, 117, -1, 116, -1, 34, 117, -1, 34, 116, + -1, 33, -1, 100, -1, 35, 133, 130, 109, -1, + 36, 131, 134, 135, 136, 138, -1, 69, 131, 134, + 135, 136, 138, -1, 38, 21, 21, 20, -1, -1, + 39, 131, 118, 21, 21, 152, 20, -1, 42, 154, + 110, 127, 98, 112, 121, -1, 43, 154, 110, 129, + 98, 112, 121, -1, 48, 154, 110, 111, 127, 98, + 112, -1, 49, 154, 110, 127, 98, 112, -1, 50, + 109, -1, 40, 154, 110, 125, 98, 123, 112, 122, + -1, 41, 154, 110, 126, 98, 123, 112, 122, -1, + 47, 154, 110, 128, 20, 125, 20, 123, 128, 98, + 112, -1, 47, 68, 110, 156, 154, 127, 98, 112, + 122, -1, 47, 158, 154, 110, 127, 98, 112, 122, + -1, 47, 154, 110, 127, 98, 112, 122, -1, 109, + 122, -1, -1, 38, 21, 21, 9, 110, 119, 114, + 10, -1, 120, 20, -1, 20, -1, 1, -1, 139, + -1, 139, 42, 139, -1, 139, 43, 139, -1, 139, + 40, 139, -1, 139, 41, 126, -1, 139, 47, 139, + -1, 139, 49, 139, -1, -1, 44, 112, -1, 45, + 154, 127, 98, 112, 121, -1, -1, 46, 109, -1, + -1, -1, 120, -1, -1, 139, -1, 139, -1, 139, + -1, 124, -1, 126, -1, 21, -1, -1, -1, -1, + -1, 21, -1, -1, 24, -1, -1, 71, 24, -1, + 71, -1, 71, 24, -1, 71, -1, 109, -1, 20, + -1, 139, 75, 139, -1, 139, 74, 139, -1, 139, + 73, 139, -1, 140, -1, 140, 77, -1, 140, 77, + 149, -1, 149, -1, 58, 163, 140, -1, 56, 99, + 163, 139, 98, -1, 149, 97, 143, 154, 153, 98, + -1, 149, 97, 143, -1, 22, 163, 152, -1, 23, + 163, 99, 153, 98, -1, 58, 152, -1, 56, 99, + 153, 98, -1, -1, 31, 132, 109, 142, 152, -1, + 22, -1, 158, -1, 162, 9, 139, 20, 10, -1, + 158, 11, 139, 12, -1, 149, 97, 11, 139, 12, + -1, 144, 11, 139, 12, -1, 158, 9, 139, 20, + 10, -1, 149, 97, 9, 139, 20, 10, -1, 144, + 9, 139, 20, 10, -1, 149, 97, 99, 98, -1, + 149, 97, 99, 139, 98, -1, 144, 154, 139, 98, + -1, 144, 154, 98, -1, 99, 139, 98, 11, 139, + 12, -1, 27, 11, 139, 12, -1, 99, 98, 11, + 139, 12, -1, 149, 78, 149, -1, 149, 92, 149, + -1, 149, 61, 149, -1, 149, 62, 149, -1, 149, + 86, 149, -1, 149, 59, 149, -1, 149, 60, 149, + -1, 149, 85, 149, -1, 149, 84, 149, -1, 149, + 52, 149, -1, 149, 83, 149, -1, 149, 82, 149, + -1, 149, 81, 149, -1, 149, 87, 149, -1, 13, + 149, -1, 14, 149, -1, 88, 149, -1, 89, 149, + -1, 149, 94, -1, 149, 93, -1, 96, 149, -1, + 95, 149, -1, 11, 139, 12, -1, 11, 12, -1, + 65, 139, 20, 10, -1, 65, 20, 10, -1, 37, + 132, 135, 136, 109, -1, 64, 149, -1, 64, 109, + -1, 64, 21, 154, 98, -1, 64, 21, 154, 139, + 98, -1, 64, 158, 154, 98, -1, 64, 158, 154, + 139, 98, -1, 145, -1, 146, -1, 147, -1, 148, + -1, 149, 79, 149, 80, 149, -1, 90, 149, -1, + 150, -1, 67, 149, -1, 99, 139, 98, -1, 27, + -1, 99, 98, -1, 158, -1, 162, -1, 160, -1, + 159, -1, 161, -1, 144, -1, 159, 11, 139, 12, + -1, 159, 9, 139, 20, 10, -1, 24, -1, 157, + -1, 157, 154, 98, -1, 157, 154, 139, 98, -1, + 66, 21, 152, -1, 51, -1, 51, 149, -1, 76, + 140, -1, 57, -1, 57, 109, -1, 57, 149, -1, + 70, -1, 70, 149, -1, 30, -1, 30, 149, -1, + 54, -1, 54, 99, 98, -1, 28, -1, 28, 99, + 98, -1, 29, -1, 55, 99, 98, -1, 55, 99, + 139, 98, -1, 25, 99, 140, 98, -1, 21, -1, + 141, -1, 53, -1, 32, -1, 68, 151, 137, -1, + 68, 151, -1, 99, 139, 98, -1, 99, 98, -1, + 158, -1, 160, -1, 159, -1, -1, 140, -1, -1, + 139, -1, 99, -1, -1, 27, 155, 99, -1, 158, + -1, 19, 163, -1, 15, 163, -1, 16, 163, -1, + 17, 163, -1, 63, 163, -1, 18, 163, -1, 21, + -1, 158, -1, 109, -1, 26, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -196,11 +196,11 @@ static const yytype_uint16 yyrline[] = 1077, 1085, 1097, 1098, 1099, 1100, 1101, 1106, 1110, 1112, 1116, 1121, 1123, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1149, 1160, 1162, 1164, 1169, 1182, 1187, 1192, 1196, 1200, - 1204, 1208, 1212, 1216, 1220, 1222, 1225, 1229, 1235, 1238, - 1247, 1253, 1258, 1259, 1260, 1266, 1270, 1278, 1285, 1290, - 1295, 1297, 1299, 1304, 1306, 1311, 1312, 1316, 1319, 1318, - 1326, 1330, 1336, 1342, 1348, 1354, 1360, 1367, 1369, 1371, - 1374 + 1204, 1208, 1212, 1216, 1220, 1222, 1225, 1229, 1235, 1237, + 1242, 1245, 1254, 1260, 1265, 1266, 1267, 1273, 1277, 1285, + 1292, 1297, 1302, 1304, 1306, 1311, 1313, 1318, 1319, 1323, + 1326, 1325, 1333, 1337, 1343, 1349, 1355, 1361, 1367, 1374, + 1376, 1378, 1381 }; #endif @@ -213,11 +213,11 @@ static const char *const yytname[] = "GRAMBARESTMT", "GRAMFULLSTMT", "GRAMSTMTSEQ", "'{'", "'}'", "'['", "']'", "'-'", "'+'", "'$'", "'@'", "'%'", "'*'", "'&'", "';'", "WORD", "METHOD", "FUNCMETH", "THING", "PMFUNC", "PRIVATEREF", "QWLIST", - "FUNC0SUB", "UNIOPSUB", "LSTOPSUB", "PLUGEXPR", "PLUGSTMT", "LABEL", - "FORMAT", "SUB", "ANONSUB", "PACKAGE", "USE", "WHILE", "UNTIL", "IF", - "UNLESS", "ELSE", "ELSIF", "CONTINUE", "FOR", "GIVEN", "WHEN", "DEFAULT", - "LOOPEX", "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC", "UNIOP", - "LSTOP", "RELOP", "EQOP", "MULOP", "ADDOP", "DOLSHARP", "DO", + "FUNC0OP", "FUNC0SUB", "UNIOPSUB", "LSTOPSUB", "PLUGEXPR", "PLUGSTMT", + "LABEL", "FORMAT", "SUB", "ANONSUB", "PACKAGE", "USE", "WHILE", "UNTIL", + "IF", "UNLESS", "ELSE", "ELSIF", "CONTINUE", "FOR", "GIVEN", "WHEN", + "DEFAULT", "LOOPEX", "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC", + "UNIOP", "LSTOP", "RELOP", "EQOP", "MULOP", "ADDOP", "DOLSHARP", "DO", "HASHBRACK", "NOAMP", "LOCAL", "MY", "MYSUB", "REQUIRE", "COLONATTR", "PREC_LOW", "DOROP", "OROP", "ANDOP", "NOTOP", "','", "ASSIGNOP", "'?'", "':'", "DORDOR", "OROR", "ANDAND", "BITOROP", "BITANDOP", "SHIFTOP", @@ -248,38 +248,39 @@ static const yytype_uint16 yytoknum[] = 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 44, 319, 63, 58, - 320, 321, 322, 323, 324, 325, 326, 33, 126, 327, - 328, 329, 330, 331, 332, 333, 334, 41, 40, 335 + 313, 314, 315, 316, 317, 318, 319, 44, 320, 63, + 58, 321, 322, 323, 324, 325, 326, 327, 33, 126, + 328, 329, 330, 331, 332, 333, 334, 335, 41, 40, + 336 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 100, 102, 101, 103, 101, 104, 101, 105, 101, - 106, 101, 107, 101, 108, 109, 110, 111, 112, 113, - 113, 114, 114, 115, 115, 116, 116, 116, 116, 116, - 116, 117, 116, 116, 116, 116, 116, 116, 116, 116, - 116, 116, 116, 116, 116, 118, 116, 116, 116, 119, - 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, - 121, 121, 122, 123, 123, 124, 124, 125, 126, 127, - 128, 129, 129, 130, 131, 132, 133, 134, 134, 135, - 135, 135, 136, 136, 137, 137, 138, 138, 138, 138, - 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, - 140, 141, 140, 142, 142, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, - 145, 146, 146, 146, 146, 146, 147, 147, 147, 147, - 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 149, 149, 150, 150, - 150, 150, 150, 151, 151, 152, 152, 153, 154, 153, - 155, 156, 157, 158, 159, 160, 161, 162, 162, 162, - 162 + 0, 101, 103, 102, 104, 102, 105, 102, 106, 102, + 107, 102, 108, 102, 109, 110, 111, 112, 113, 114, + 114, 115, 115, 116, 116, 117, 117, 117, 117, 117, + 117, 118, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 119, 117, 117, 117, 120, + 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, + 122, 122, 123, 124, 124, 125, 125, 126, 127, 128, + 129, 130, 130, 131, 132, 133, 134, 135, 135, 136, + 136, 136, 137, 137, 138, 138, 139, 139, 139, 139, + 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, + 141, 142, 141, 143, 143, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, + 146, 147, 147, 147, 147, 147, 148, 148, 148, 148, + 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, + 151, 151, 151, 151, 151, 152, 152, 153, 153, 154, + 155, 154, 156, 157, 158, 159, 160, 161, 162, 163, + 163, 163, 163 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -304,10 +305,10 @@ static const yytype_uint8 yyr2[] = 3, 1, 2, 1, 1, 1, 1, 1, 1, 4, 5, 1, 1, 3, 4, 3, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 3, 1, 3, - 4, 4, 1, 1, 1, 1, 3, 2, 3, 2, - 1, 1, 1, 0, 1, 0, 1, 1, 0, 3, - 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1 + 1, 3, 4, 4, 1, 1, 1, 1, 3, 2, + 3, 2, 1, 1, 1, 0, 1, 0, 1, 1, + 0, 3, 1, 2, 2, 2, 2, 2, 2, 1, + 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -315,729 +316,747 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 0, 2, 4, 6, 8, 10, 12, 0, 15, 205, + 0, 2, 4, 6, 8, 10, 12, 0, 15, 207, 0, 0, 0, 19, 1, 19, 0, 0, 0, 0, - 0, 0, 0, 0, 192, 0, 0, 171, 0, 161, - 188, 184, 74, 195, 74, 176, 194, 186, 0, 0, - 179, 203, 0, 0, 0, 0, 0, 0, 182, 0, - 0, 0, 0, 0, 0, 0, 206, 89, 193, 168, - 152, 153, 154, 155, 92, 158, 5, 172, 163, 166, - 165, 167, 164, 15, 7, 49, 48, 25, 75, 73, - 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, - 73, 26, 60, 9, 0, 50, 0, 11, 22, 21, - 0, 0, 142, 0, 133, 134, 217, 220, 219, 218, - 212, 213, 214, 216, 211, 203, 0, 0, 0, 185, - 0, 77, 177, 0, 0, 205, 180, 181, 217, 204, - 99, 218, 0, 215, 192, 147, 146, 163, 0, 0, - 203, 159, 0, 197, 200, 202, 201, 183, 178, 135, - 136, 157, 140, 139, 162, 0, 0, 0, 0, 90, - 0, 0, 208, 207, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 194, 0, 0, 171, 0, 161, + 188, 190, 184, 74, 197, 74, 176, 196, 186, 0, + 0, 179, 205, 0, 0, 0, 0, 0, 0, 182, + 0, 0, 0, 0, 0, 0, 0, 208, 89, 195, + 168, 152, 153, 154, 155, 92, 158, 5, 172, 163, + 166, 165, 167, 164, 15, 7, 49, 48, 25, 75, + 73, 0, 73, 0, 0, 0, 0, 0, 0, 0, + 0, 73, 26, 60, 9, 0, 50, 0, 11, 22, + 21, 0, 0, 142, 0, 133, 134, 219, 222, 221, + 220, 214, 215, 216, 218, 213, 205, 0, 0, 0, + 0, 185, 0, 77, 177, 0, 0, 207, 180, 181, + 219, 206, 99, 220, 0, 217, 194, 147, 146, 163, + 0, 0, 205, 159, 0, 199, 202, 204, 203, 183, + 178, 135, 136, 157, 140, 139, 162, 0, 0, 0, + 0, 90, 0, 0, 210, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 138, 137, 0, 0, 0, 0, 0, 0, 0, 19, - 72, 0, 0, 31, 15, 15, 15, 15, 15, 15, - 0, 15, 15, 37, 0, 0, 44, 47, 0, 0, - 0, 0, 0, 0, 24, 23, 20, 141, 97, 205, - 0, 0, 101, 78, 79, 187, 189, 0, 0, 0, - 93, 0, 0, 144, 0, 175, 199, 0, 83, 196, - 0, 160, 88, 87, 86, 91, 0, 0, 0, 115, - 0, 128, 124, 125, 121, 122, 119, 0, 131, 130, - 129, 127, 126, 123, 132, 120, 0, 0, 103, 0, - 96, 104, 173, 0, 0, 0, 0, 0, 0, 0, - 71, 0, 76, 77, 0, 0, 65, 0, 0, 0, - 0, 0, 15, 16, 0, 77, 61, 53, 54, 67, - 51, 52, 55, 56, 0, 191, 117, 203, 81, 0, - 190, 100, 0, 148, 0, 150, 0, 143, 198, 82, - 0, 0, 0, 108, 209, 114, 0, 0, 0, 112, - 0, 205, 174, 0, 106, 0, 169, 0, 14, 27, - 79, 15, 30, 0, 0, 66, 0, 0, 68, 70, - 0, 0, 210, 64, 69, 0, 0, 50, 0, 0, - 0, 79, 98, 102, 80, 145, 94, 149, 151, 118, - 0, 111, 156, 0, 107, 113, 0, 109, 170, 105, - 0, 45, 203, 62, 62, 0, 0, 0, 0, 65, - 0, 0, 0, 0, 116, 110, 95, 85, 84, 28, - 19, 0, 0, 0, 18, 57, 57, 0, 60, 0, - 0, 0, 36, 29, 0, 32, 60, 60, 19, 0, - 0, 33, 34, 0, 43, 62, 60, 35, 46, 38, - 39, 0, 58, 0, 60, 0, 42, 17, 0, 41, - 0, 0, 0, 57, 40, 59 + 0, 0, 138, 137, 0, 0, 0, 0, 0, 0, + 0, 19, 72, 0, 0, 31, 15, 15, 15, 15, + 15, 15, 0, 15, 15, 37, 0, 0, 44, 47, + 0, 0, 0, 0, 0, 0, 24, 23, 20, 141, + 97, 207, 0, 0, 189, 101, 78, 79, 187, 191, + 0, 0, 0, 93, 0, 0, 144, 0, 175, 201, + 0, 83, 198, 0, 160, 88, 87, 86, 91, 0, + 0, 0, 115, 0, 128, 124, 125, 121, 122, 119, + 0, 131, 130, 129, 127, 126, 123, 132, 120, 0, + 0, 103, 0, 96, 104, 173, 0, 0, 0, 0, + 0, 0, 0, 71, 0, 76, 77, 0, 0, 65, + 0, 0, 0, 0, 0, 15, 16, 0, 77, 61, + 53, 54, 67, 51, 52, 55, 56, 0, 193, 117, + 205, 81, 0, 192, 100, 0, 148, 0, 150, 0, + 143, 200, 82, 0, 0, 0, 108, 211, 114, 0, + 0, 0, 112, 0, 207, 174, 0, 106, 0, 169, + 0, 14, 27, 79, 15, 30, 0, 0, 66, 0, + 0, 68, 70, 0, 0, 212, 64, 69, 0, 0, + 50, 0, 0, 0, 79, 98, 102, 80, 145, 94, + 149, 151, 118, 0, 111, 156, 0, 107, 113, 0, + 109, 170, 105, 0, 45, 205, 62, 62, 0, 0, + 0, 0, 65, 0, 0, 0, 0, 116, 110, 95, + 85, 84, 28, 19, 0, 0, 0, 18, 57, 57, + 0, 60, 0, 0, 0, 36, 29, 0, 32, 60, + 60, 19, 0, 0, 33, 34, 0, 43, 62, 60, + 35, 46, 38, 39, 0, 58, 0, 60, 0, 42, + 17, 0, 41, 0, 0, 0, 57, 40, 59 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 7, 8, 9, 10, 11, 12, 13, 108, 15, - 359, 405, 418, 100, 216, 98, 99, 285, 400, 94, - 421, 206, 402, 354, 344, 298, 347, 356, 350, 281, - 191, 120, 190, 283, 224, 309, 239, 399, 95, 57, - 58, 307, 270, 59, 60, 61, 62, 63, 64, 65, - 143, 130, 66, 164, 248, 351, 67, 68, 69, 70, - 71, 72, 110 + -1, 7, 8, 9, 10, 11, 12, 13, 109, 15, + 362, 408, 421, 101, 218, 99, 100, 288, 403, 95, + 424, 208, 405, 357, 347, 301, 350, 359, 353, 284, + 193, 122, 192, 286, 227, 312, 242, 402, 96, 58, + 59, 310, 273, 60, 61, 62, 63, 64, 65, 66, + 145, 132, 67, 166, 251, 354, 68, 69, 70, 71, + 72, 73, 111 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -374 +#define YYPACT_NINF -394 static const yytype_int16 yypact[] = { - 767, -374, -374, -374, -374, -374, -374, 43, -374, 2422, - 38, 967, 876, -374, -374, -374, 1546, 2422, 2422, 667, - 667, 667, 667, 667, -374, 667, 667, -374, -25, 85, - -374, 2422, -374, -374, -374, 2422, -374, 3, 6, 16, - 1370, 310, 667, 1458, 1632, 97, 2422, 68, 2422, 2422, - 2422, 2422, 2422, 2422, 2422, 1718, 160, 45, -374, 28, - -374, -374, -374, -374, 2509, -374, -374, -12, 42, 56, - -374, -374, 110, -374, -374, -374, -374, -374, -374, -374, - 115, -374, -12, -12, -12, -12, 9, -12, -12, 38, - -374, -374, 101, -374, 130, 1630, 876, -374, -374, -374, - 421, 512, -374, 87, 335, 335, -374, -374, -374, -374, - -374, -374, -374, -374, -374, 2422, 65, 2422, 2422, 327, - 38, 141, 2509, 71, 1806, 310, -374, 327, 1281, 45, - -374, 1206, 2422, -374, -12, -374, 327, 55, 163, 123, - 2422, 327, 1894, 111, -374, -374, -374, 327, 45, 335, - 335, 335, 224, 224, 177, 118, 2422, 2422, 2422, 2422, - 2422, 2422, -374, -374, 1982, 2422, 2422, 2422, 2422, 2422, - 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422, - -374, -374, 59, 2070, 2422, 2422, 2422, 2422, 2422, -374, - 172, 185, 192, -374, -374, -374, -374, -374, -374, -374, - -12, -374, -374, -374, 185, 38, -374, -374, 2422, 2422, - 2422, 2422, 2422, 2422, -374, -374, -374, -374, -374, 2422, - -72, 98, -374, -374, 142, -374, -374, 271, 122, 2422, - 45, 2158, 2246, -374, 211, -374, -374, 328, 206, -374, - 2422, 227, 188, 188, -374, 2509, 167, 112, 161, -374, - 407, 2587, 1531, 298, 409, 212, 2509, 2470, 1177, 1177, - 1252, 1356, 1443, 1044, 335, 335, 2422, 2422, -374, 2334, - -12, -374, -374, 420, 191, 144, 217, 152, 241, 603, - -374, 38, -374, 141, 149, 245, 2422, 2422, 2422, 2422, - 256, 1056, -374, -374, 2422, 141, -374, 160, -374, 160, - 160, 160, 160, 160, 190, -374, -374, 2422, 264, 38, - -374, -374, 425, -374, 498, -374, 511, -374, -374, -374, - 155, 2422, 283, -374, -374, -374, 2422, 279, 196, -374, - 518, 2422, -374, 284, -374, 285, -374, 286, -374, -374, - 142, -374, -374, 281, 209, 160, 210, 233, 160, -374, - 250, -12, -374, -374, -374, 251, 289, 1055, 2422, 2422, - 257, 142, -374, -374, -374, -374, -374, -374, -374, -374, - 202, -374, 2548, 351, -374, -374, 272, -374, -374, -374, - 174, -374, 2422, -374, -374, 361, 361, 2422, 361, 2422, - 274, 295, 361, 174, -374, -374, -374, -374, -374, -374, - -374, 366, 361, 361, -374, 44, 44, 299, 101, 386, - 361, 361, -374, -374, 694, -374, 101, 101, -374, 361, - -12, -374, -374, 361, -374, -374, 101, -374, -374, -374, - -374, 785, -374, 2422, 101, 1145, -374, -374, 312, -374, - 313, 361, 361, 44, -374, -374 + 683, -394, -394, -394, -394, -394, -394, 6, -394, 2536, + 16, 977, 885, -394, -394, -394, 1650, 2536, 2536, 220, + 220, 220, 220, 220, -394, 220, 220, -394, -97, 52, + -26, -394, 2536, -394, -394, -394, 2536, -394, -16, -2, + 10, 1472, 1383, 220, 1561, 1737, 13, 2536, 23, 2536, + 2536, 2536, 2536, 2536, 2536, 2536, 1824, 115, 39, -394, + 61, -394, -394, -394, -394, 2597, -394, -394, -12, 80, + 127, -394, -394, 111, -394, -394, -394, -394, -394, -394, + -394, 124, -394, -12, -12, -12, -12, 27, -12, -12, + 16, -394, -394, 102, -394, 132, 1559, 885, -394, -394, + -394, 424, 517, -394, 32, 681, 681, -394, -394, -394, + -394, -394, -394, -394, -394, -394, 2536, 59, 2536, 2536, + 64, 300, 16, 158, 2597, 85, 1913, 1383, -394, 300, + 1293, 39, -394, 1217, 2536, -394, -12, -394, 300, 73, + 185, 91, 2536, 300, 2002, 125, -394, -394, -394, 300, + 39, 681, 681, 681, 237, 237, 186, 112, 2536, 2536, + 2536, 2536, 2536, 2536, -394, -394, 2091, 2536, 2536, 2536, + 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, + 2536, 2536, -394, -394, 26, 2180, 2536, 2536, 2536, 2536, + 2536, -394, 177, 194, 195, -394, -394, -394, -394, -394, + -394, -394, -12, -394, -394, -394, 194, 16, -394, -394, + 2536, 2536, 2536, 2536, 2536, 2536, -394, -394, -394, -394, + -394, 2536, -17, 40, -394, -394, -394, 156, -394, -394, + 228, 133, 2536, 39, 2269, 2358, -394, 223, -394, -394, + 281, 206, -394, 2536, 225, 167, 167, -394, 2597, 180, + 54, 145, -394, 330, 2675, 246, 329, 505, 409, 2597, + 2558, 1055, 1055, 1264, 1369, 1457, 1013, 681, 681, 2536, + 2536, -394, 2447, -12, -394, -394, 333, 204, 96, 219, + 100, 238, 609, -394, 16, -394, 158, 60, 231, 2536, + 2536, 2536, 2536, 241, 1067, -394, -394, 2536, 158, -394, + 115, -394, 115, 115, 115, 115, 115, 159, -394, -394, + 2536, 235, 16, -394, -394, 336, -394, 410, -394, 503, + -394, -394, -394, 119, 2536, 252, -394, -394, -394, 2536, + 275, 144, -394, 516, 2536, -394, 258, -394, 260, -394, + 262, -394, -394, 156, -394, -394, 254, 178, 115, 192, + 193, 115, -394, 198, -12, -394, -394, -394, 218, 299, + 224, 2536, 2536, 226, 156, -394, -394, -394, -394, -394, + -394, -394, -394, 147, -394, 2636, 313, -394, -394, 244, + -394, -394, -394, 110, -394, 2536, -394, -394, 327, 327, + 2536, 327, 2536, 247, 248, 327, 110, -394, -394, -394, + -394, -394, -394, -394, 331, 327, 327, -394, 123, 123, + 249, 102, 358, 327, 327, -394, -394, 701, -394, 102, + 102, -394, 327, -12, -394, -394, 327, -394, -394, 102, + -394, -394, -394, -394, 793, -394, 2536, 102, 1157, -394, + -394, 282, -394, 284, 327, 327, 123, -394, -394 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -374, -374, -374, -374, -374, -374, -374, -374, 2, -57, - -374, 2104, -374, -7, 369, 311, -6, -374, -374, -281, - -372, -116, -373, -374, 25, -176, -253, -20, -374, -374, - -1, 383, -374, 225, -239, -300, -374, 54, -9, -40, - -374, -374, -374, -374, -374, -374, -374, -374, 77, -374, - -374, -109, -122, -65, -374, -374, -374, 7, 417, 418, - -374, -374, 37 + -394, -394, -394, -394, -394, -394, -394, -394, 2, -57, + -394, -85, -394, -7, 372, 298, -1, -394, -394, -283, + -393, -102, -342, -394, 8, -169, -229, -39, -394, -394, + -15, 366, -394, 207, -196, -279, -394, 21, -9, -41, + -394, -394, -394, -394, -394, -394, -394, -394, 196, -394, + -394, -111, -123, -65, -394, -394, -394, 7, 354, 364, + -394, -394, 36 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -193 +#define YYTABLE_NINF -195 static const yytype_int16 yytable[] = { - 56, 129, 183, 228, 159, 93, 218, 103, 101, 148, - 353, 403, 74, 92, 92, 162, 189, 194, 195, 196, - 197, 199, 201, 202, 19, 305, 109, 109, 109, 109, - 109, 235, 109, 109, 422, 139, 162, 160, 355, 161, - 380, 360, 126, 14, 340, 135, 155, 73, 131, 109, - 137, 184, 435, 185, 144, 162, 361, 111, 112, 113, - 114, 393, 115, 116, 184, 186, 185, 187, 266, 231, - 267, 445, 232, 117, 19, 129, 198, 220, 132, 133, - 193, 268, 162, 19, 20, 21, 163, 419, 420, 204, - 215, 203, 230, 200, 104, 105, 118, 304, 92, 217, - 129, 123, 92, 92, 124, 390, 391, 163, 119, 221, - 306, 346, 122, 349, 125, 227, 56, 127, 140, 188, - 136, 159, 222, 141, 323, 147, 163, 149, 150, 151, - 152, 153, 131, 237, 407, 292, 192, 286, 287, 288, - 289, 290, 291, 234, 293, 294, 205, 242, 243, 244, - 207, 246, 247, 163, 353, 250, 334, 269, 341, 156, - 157, 158, 229, 219, 336, 223, 142, 369, 225, 342, - 156, 157, 158, 233, 273, 274, 275, 276, 277, 278, - 438, 238, 279, 73, 156, 157, 158, 322, 240, 271, - 156, 157, 158, 280, 397, 156, 157, 158, 363, 297, - 299, 300, 301, 302, 303, 331, 282, 296, 374, 376, - 56, 333, 308, 284, 394, 241, 156, 157, 158, 311, - 312, 317, 314, 316, 156, 157, 158, 156, 157, 158, - 319, 320, 156, 157, 158, 358, 245, 335, 321, 156, - 157, 158, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 327, 328, 324, - 330, 337, 158, 156, 157, 158, 343, 129, 156, 157, - 158, 19, 168, 401, 156, 157, 158, 345, 299, 348, - 299, 92, 357, 339, 381, 348, 387, 362, 364, 156, - 157, 158, 424, 371, 377, 378, 379, 352, 178, 373, - 429, 430, 382, 179, 180, 181, 383, 384, 182, 389, - 436, 365, 370, 156, 157, 158, -193, -193, 439, 73, - 182, 16, 56, 17, 18, 19, 20, 21, 22, 23, - 385, 128, 25, 26, 27, 28, 107, 29, 30, 31, - 32, 33, 129, 156, 157, 158, 34, 386, 388, 348, - 348, 156, 157, 158, 392, 433, 166, -193, 168, 169, - 35, 395, 36, 37, 38, 39, 40, 41, 310, 396, - 404, 410, 42, 43, 44, 45, 46, 47, 348, 48, - 345, 97, 398, 177, 178, 49, 415, 168, 169, 179, - 180, 181, 411, 414, 182, 398, 423, 50, 51, 52, - 156, 157, 158, 372, 53, 54, 425, 214, 55, 441, - 442, 431, 177, 178, 409, 440, 92, 121, 179, 180, - 181, -13, 75, 182, 348, 318, 179, 180, 181, 295, - 73, 182, 16, 92, 17, 18, 19, 20, 21, 22, - 23, 76, 24, 25, 26, 27, 28, 413, 29, 30, - 31, 32, 33, 77, 96, 78, 79, 34, 80, 81, - 82, 83, 84, 85, 145, 146, 0, 86, 87, 88, - 89, 35, 0, 36, 37, 38, 39, 40, 41, 156, - 157, 158, 0, 42, 43, 44, 45, 46, 47, 90, - 48, 0, 156, 157, 158, 178, 49, 156, 157, 158, - 179, 180, 181, 0, 325, 182, 0, 0, 50, 51, - 52, 0, -3, 75, 0, 53, 54, 332, 0, 55, - 91, 73, 366, 16, 0, 17, 18, 19, 20, 21, - 22, 23, 76, 24, 25, 26, 27, 28, 0, 29, - 30, 31, 32, 33, 77, 96, 78, 79, 34, 80, - 81, 82, 83, 84, 85, 0, 0, 0, 86, 87, - 88, 89, 35, 0, 36, 37, 38, 39, 40, 41, - 156, 157, 158, 0, 42, 43, 44, 45, 46, 47, - 90, 48, 0, 156, 157, 158, 0, 49, 0, 0, - 156, 157, 158, 0, 0, 367, 0, 0, 0, 50, - 51, 52, 0, 0, 75, 0, 53, 54, 368, 0, - 55, 91, 73, 338, 16, 375, 17, 18, 19, 20, - 21, 22, 23, 76, 24, 25, 26, 27, 28, 0, - 29, 30, 31, 32, 33, 77, 96, 78, 79, 34, - 80, 81, 82, 83, 84, 85, 0, 0, 0, 86, - 87, 88, 89, 35, 0, 36, 37, 38, 39, 40, - 41, 0, 0, 0, 0, 42, 43, 44, 45, 46, - 47, 90, 48, 0, 0, 0, 73, 0, 49, 0, - 0, 0, 19, 0, 0, 0, 0, 0, 106, 0, - 50, 51, 52, 107, 0, 75, 0, 53, 54, 0, - 0, 55, 91, 73, 428, 16, 0, 17, 18, 19, - 20, 21, 22, 23, 76, 24, 25, 26, 27, 28, - 0, 29, 30, 31, 32, 33, 77, 96, 78, 79, - 34, 80, 81, 82, 83, 84, 85, 0, 0, 0, - 86, 87, 88, 89, 35, 0, 36, 37, 38, 39, - 40, 41, 0, 0, 0, 0, 42, 43, 44, 45, - 46, 47, 90, 48, 0, 0, 0, 0, 0, 49, - 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, - 0, 50, 51, 52, 0, 0, 75, 0, 53, 54, - 0, 0, 55, 91, 73, 437, 16, 0, 17, 18, - 19, 20, 21, 22, 23, 76, 24, 25, 26, 27, - 28, 0, 29, 30, 31, 32, 33, 77, 96, 78, - 79, 34, 80, 81, 82, 83, 84, 85, 0, 0, - 0, 86, 87, 88, 89, 35, 0, 36, 37, 38, - 39, 40, 41, 0, 0, 0, 0, 42, 43, 44, - 45, 46, 47, 90, 48, 0, 0, 0, 0, 0, - 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 50, 51, 52, 0, 0, 75, 0, 53, - 54, 0, 0, 55, 91, 73, 0, 16, 0, 17, - 18, 19, 20, 21, 22, 23, 76, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 32, 33, 77, 96, - 78, 79, 34, 80, 81, 82, 83, 84, 85, 0, - 0, 0, 86, 87, 88, 89, 35, 0, 36, 37, - 38, 39, 40, 41, 0, 0, 0, 0, 42, 43, - 44, 45, 46, 47, 90, 48, 0, 0, 0, 0, - 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 50, 51, 52, 0, 0, 75, 0, - 53, 54, 0, 0, 55, 91, 73, 0, 16, 0, - 17, 18, 19, 20, 21, 22, 23, 76, 24, 25, - 26, 27, 28, 0, 29, 30, 31, 32, 33, 77, - 0, 78, 79, 34, 80, 81, 82, 83, 84, 85, - 0, 0, 0, 86, 87, 88, 89, 35, 0, 36, - 37, 38, 39, 40, 41, 0, 0, 0, 0, 42, - 43, 44, 45, 46, 47, 90, 48, 0, 0, 0, - 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 51, 52, 75, 0, 0, - 0, 53, 54, 0, 0, 55, 91, 16, 0, 17, - 18, 19, 20, 21, 22, 23, -63, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 32, 33, 0, 0, - 0, 0, 34, 0, 208, 209, 210, 211, 0, 0, - 0, 212, 0, 213, 168, 169, 35, 0, 36, 37, - 38, 39, 40, 41, 0, 0, 0, 0, 42, 43, - 44, 45, 46, 47, 0, 48, 0, 156, 157, 158, - 178, 49, 0, 0, 0, 179, 180, 181, 0, 0, - 182, 0, 0, 50, 51, 52, 75, 0, 0, 0, - 53, 54, -68, 0, 55, 0, 16, 0, 17, 18, - 19, 20, 21, 22, 23, 0, 24, 25, 26, 27, - 28, 0, 29, 30, 31, 32, 33, 0, 0, 0, - 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 35, 0, 36, 37, 38, - 39, 40, 41, 0, 0, 0, -163, 42, 43, 44, - 45, 46, 47, 0, 48, 184, 0, 185, -163, 0, - 49, 0, 0, 0, 0, 0, -163, 0, 0, 0, - 0, 0, 50, 51, 52, 166, 167, 168, 169, 53, - 54, 0, -63, 55, 0, -163, -163, -163, -163, 0, - 0, 0, -163, 0, -163, 0, 0, -163, 0, 174, - 175, 176, 177, 178, -163, -163, -163, -163, 179, 180, - 181, 0, 0, 182, 0, 0, 0, 0, -163, -163, - -163, -192, -163, -163, -163, -163, -163, -163, -163, -163, - -163, -163, -163, -192, 0, 0, 0, -163, -163, -163, - 0, -192, -163, -163, 0, 0, 0, 0, 0, 0, - 166, 167, 168, 169, 0, 0, 0, 0, 0, 0, - -192, -192, -192, -192, 0, 0, 0, -192, 0, -192, - 0, 0, -192, 0, 0, 175, 176, 177, 178, -192, - -192, -192, -192, 179, 180, 181, 0, 0, 182, 0, - 0, 0, 0, -192, -192, -192, 0, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, 0, 0, - 0, 0, -192, -192, -192, 0, 0, -192, -192, 73, - 0, 16, 0, 17, 18, 19, 20, 21, 22, 23, + 57, 131, 118, 185, 231, 220, 14, 104, 102, 150, + 94, 356, 75, 93, 93, 164, 425, 191, 196, 197, + 198, 199, 201, 203, 204, 74, 110, 110, 110, 110, + 110, 238, 110, 110, 142, 269, 141, 270, 19, 20, + 21, 19, 19, 128, 219, 406, 137, 157, 271, 133, + 110, 139, 309, 448, 164, 146, 112, 113, 114, 115, + 161, 116, 117, 119, 383, 358, 326, 195, 363, 344, + 162, 234, 163, 120, 235, 131, 206, 222, 134, 135, + 345, 308, 186, 125, 187, 396, 438, 165, 164, 186, + 343, 187, 205, 233, 202, 200, 217, 126, 307, 93, + 164, 131, 364, 93, 93, 158, 159, 160, 337, 127, + 223, 237, 339, 158, 159, 160, 161, 230, 57, 74, + 190, 349, 144, 352, 225, 272, 165, 158, 159, 160, + 400, 372, 393, 394, 133, 240, 188, 295, 189, 289, + 290, 291, 292, 293, 294, 194, 296, 297, 207, 245, + 246, 247, 209, 249, 250, 356, 377, 253, 221, 397, + 165, 410, 224, 232, 158, 159, 160, 422, 423, 158, + 159, 160, 165, 158, 159, 160, 276, 277, 278, 279, + 280, 281, 226, 228, 282, 158, 159, 160, 158, 159, + 160, 274, 158, 159, 160, 236, 241, 243, 283, 366, + 325, 300, 302, 303, 304, 305, 306, 441, 334, 299, + 244, 379, 57, 105, 106, 285, 287, 158, 159, 160, + 158, 159, 160, 315, 336, 317, 319, 311, 121, 74, + 322, 314, 124, 320, 323, 19, 324, 129, 361, 338, + 138, 107, 160, 143, 327, 149, 108, 151, 152, 153, + 154, 155, 346, 158, 159, 160, 19, 365, 340, 367, + 330, 331, 374, 333, 210, 211, 212, 213, 380, 131, + 381, 214, 382, 215, 404, 385, 386, 158, 159, 160, + 348, 302, 351, 302, 93, 360, 342, 384, 351, 390, + 387, 388, 158, 159, 160, 376, 389, 158, 159, 160, + 355, 158, 159, 160, 409, -195, 411, 170, 171, 427, + 415, 158, 159, 160, 368, 373, 391, 432, 433, 392, + 419, 420, -68, 398, 395, 57, 313, 439, 429, 430, + -195, -195, 179, 180, 184, 442, 407, 435, 181, 182, + 183, 437, 399, 184, 131, 413, 414, 426, 158, 159, + 160, 418, 351, 351, 158, 159, 160, 248, 436, 446, + 447, 170, 171, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 428, 321, + 444, 351, 445, 348, 98, 401, 179, 180, 168, -195, + 170, 171, 181, 182, 183, 216, 417, 184, 401, 443, + 412, 123, 147, 158, 159, 160, 158, 159, 160, 158, + 159, 160, 148, 298, 434, 179, 180, 416, 0, 93, + 0, 181, 182, 183, -13, 76, 184, 351, 328, 0, + 0, 335, 0, 74, 369, 16, 93, 17, 18, 19, + 20, 21, 22, 23, 77, 24, 25, 26, 27, 28, + 0, 29, 30, 31, 32, 33, 34, 78, 97, 79, + 80, 35, 81, 82, 83, 84, 85, 86, 0, 0, + 170, 87, 88, 89, 90, 36, 0, 37, 38, 39, + 40, 41, 42, 158, 159, 160, 0, 43, 44, 45, + 46, 47, 48, 91, 49, 0, 180, 0, 0, 0, + 50, 181, 182, 183, 0, 0, 184, 0, 370, 0, + 0, 0, 51, 52, 53, 0, 0, -3, 76, 54, + 55, 0, 0, 56, 92, 375, 74, 0, 16, 0, + 17, 18, 19, 20, 21, 22, 23, 77, 24, 25, + 26, 27, 28, 0, 29, 30, 31, 32, 33, 34, + 78, 97, 79, 80, 35, 81, 82, 83, 84, 85, + 86, 0, 0, 0, 87, 88, 89, 90, 36, 0, + 37, 38, 39, 40, 41, 42, 158, 159, 160, 0, + 43, 44, 45, 46, 47, 48, 91, 49, 0, 158, + 159, 160, 180, 50, 0, 0, 0, 181, 182, 183, + 0, 371, 184, 0, 0, 51, 52, 53, 0, 0, + 76, 0, 54, 55, 378, 0, 56, 92, 74, 341, + 16, 0, 17, 18, 19, 20, 21, 22, 23, 77, + 24, 25, 26, 27, 28, 0, 29, 30, 31, 32, + 33, 34, 78, 97, 79, 80, 35, 81, 82, 83, + 84, 85, 86, 0, 0, 0, 87, 88, 89, 90, + 36, 0, 37, 38, 39, 40, 41, 42, 0, 0, + 0, 0, 43, 44, 45, 46, 47, 48, 91, 49, + 0, 0, 0, 0, 0, 50, 1, 2, 3, 4, + 5, 6, 0, 0, 0, 0, 0, 51, 52, 53, + 0, 0, 76, 0, 54, 55, 0, 0, 56, 92, + 74, 431, 16, 0, 17, 18, 19, 20, 21, 22, + 23, 77, 24, 25, 26, 27, 28, 0, 29, 30, + 31, 32, 33, 34, 78, 97, 79, 80, 35, 81, + 82, 83, 84, 85, 86, 0, 0, 0, 87, 88, + 89, 90, 36, 0, 37, 38, 39, 40, 41, 42, + 0, 0, 0, 0, 43, 44, 45, 46, 47, 48, + 91, 49, 0, 181, 182, 183, 0, 50, 184, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, + 52, 53, 0, 0, 76, 0, 54, 55, 0, 0, + 56, 92, 74, 440, 16, 0, 17, 18, 19, 20, + 21, 22, 23, 77, 24, 25, 26, 27, 28, 0, + 29, 30, 31, 32, 33, 34, 78, 97, 79, 80, + 35, 81, 82, 83, 84, 85, 86, 0, 0, 0, + 87, 88, 89, 90, 36, 0, 37, 38, 39, 40, + 41, 42, 0, 0, 0, 0, 43, 44, 45, 46, + 47, 48, 91, 49, 0, 0, 0, 0, 0, 50, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 51, 52, 53, 0, 0, 76, 0, 54, 55, + 0, 0, 56, 92, 74, 0, 16, 0, 17, 18, + 19, 20, 21, 22, 23, 77, 24, 25, 26, 27, + 28, 0, 29, 30, 31, 32, 33, 34, 78, 97, + 79, 80, 35, 81, 82, 83, 84, 85, 86, 0, + 0, 0, 87, 88, 89, 90, 36, 0, 37, 38, + 39, 40, 41, 42, 0, 0, 0, 0, 43, 44, + 45, 46, 47, 48, 91, 49, 0, 0, 0, 0, + 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 51, 52, 53, 0, 0, 76, 0, + 54, 55, 0, 0, 56, 92, 74, 0, 16, 0, + 17, 18, 19, 20, 21, 22, 23, 77, 24, 25, + 26, 27, 28, 0, 29, 30, 31, 32, 33, 34, + 78, 0, 79, 80, 35, 81, 82, 83, 84, 85, + 86, 0, 0, 0, 87, 88, 89, 90, 36, 0, + 37, 38, 39, 40, 41, 42, 0, 0, 0, 0, + 43, 44, 45, 46, 47, 48, 91, 49, 0, 0, + 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 51, 52, 53, 76, 0, + 0, 0, 54, 55, 170, 171, 56, 92, 16, 0, + 17, 18, 19, 20, 21, 22, 23, -63, 24, 25, + 26, 27, 28, 0, 29, 30, 31, 32, 33, 34, + 180, 0, 0, 0, 35, 181, 182, 183, 0, 0, + 184, 0, 0, 0, 168, 169, 170, 171, 36, 0, + 37, 38, 39, 40, 41, 42, 0, 0, 0, 0, + 43, 44, 45, 46, 47, 48, 0, 49, 176, 177, + 178, 179, 180, 50, 0, 0, 0, 181, 182, 183, + 0, 0, 184, 0, 0, 51, 52, 53, 76, 0, + 0, 0, 54, 55, 0, 0, 56, 0, 16, 0, + 17, 18, 19, 20, 21, 22, 23, 0, 24, 25, + 26, 27, 28, 0, 29, 30, 31, 32, 33, 34, + 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, + 37, 38, 39, 40, 41, 42, 0, -163, 0, 0, + 43, 44, 45, 46, 47, 48, 186, 49, 187, -163, + 0, 0, 0, 50, 0, 0, 0, -163, 0, 0, + 0, 0, 0, 0, 0, 51, 52, 53, 0, 0, + 0, 0, 54, 55, 0, -63, 56, -163, -163, -163, + -163, 0, 0, 0, -163, 0, -163, 0, 0, -163, + 0, 0, 0, 0, 0, 0, -163, -163, -163, -163, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -163, -163, -163, -194, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -194, 0, 0, 0, -163, + -163, -163, 0, -194, -163, -163, 0, 0, 0, 0, + 0, 0, 0, 168, 169, 170, 171, 0, 0, 0, + 0, 0, 0, -194, -194, -194, -194, 0, 0, 0, + -194, 0, -194, 0, 0, -194, 0, 0, 177, 178, + 179, 180, -194, -194, -194, -194, 181, 182, 183, 0, + 0, 184, 0, 0, 0, 0, -194, -194, -194, 0, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, 0, 0, 0, 0, -194, -194, -194, 0, 0, + -194, -194, 74, 0, 16, 0, 17, 18, 19, 20, + 21, 22, 23, 0, 130, 25, 26, 27, 28, 108, + 29, 30, 31, 32, 33, 34, 0, 0, 0, 0, + 35, 0, 0, 0, 0, 0, 0, 0, 168, 169, + 170, 171, 0, 0, 36, 0, 37, 38, 39, 40, + 41, 42, 0, 0, 0, 0, 43, 44, 45, 46, + 47, 48, 0, 49, 178, 179, 180, 0, 0, 50, + 0, 181, 182, 183, 0, 0, 184, 0, 0, 0, + 0, 51, 52, 53, 0, 0, 0, 0, 54, 55, + 0, 74, 56, 16, 0, 17, 18, 19, 20, 21, + 22, 23, 0, 24, 25, 26, 27, 28, 0, 29, + 30, 31, 32, 33, 34, 0, 0, 0, 0, 35, + 0, 0, 0, 0, 0, 0, 168, 169, 170, 171, + 0, 0, 0, 36, 0, 37, 38, 39, 40, 41, + 42, 0, 0, 0, 0, 43, 44, 45, 46, 47, + 48, 0, 49, 179, 180, 0, 0, 0, 50, 181, + 182, 183, 0, 0, 184, 0, 0, 0, 0, 0, + 51, 52, 53, 0, 0, 0, 0, 54, 55, 0, + 74, 56, 16, 0, 17, 18, 19, 20, 21, 22, + 23, 0, 136, 25, 26, 27, 28, 0, 29, 30, + 31, 32, 33, 34, 0, 0, 0, 0, 35, 210, + 211, 212, 213, 0, 0, 0, 214, 0, 215, 0, + 0, 0, 36, 0, 37, 38, 39, 40, 41, 42, + 0, 0, 0, 0, 43, 44, 45, 46, 47, 48, + 0, 49, 158, 159, 160, 0, 0, 50, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, + 52, 53, 0, 0, 0, 0, 54, 55, 0, 0, + 56, 16, 103, 17, 18, 19, 20, 21, 22, 23, 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 32, 33, 0, 0, 0, 0, 34, 0, 0, 0, - 0, 0, 0, 0, 166, 167, 168, 169, 0, 0, - 35, 0, 36, 37, 38, 39, 40, 41, 0, 0, - 0, 0, 42, 43, 44, 45, 46, 47, 0, 48, - 176, 177, 178, 0, 0, 49, 0, 179, 180, 181, - 0, 0, 182, 0, 0, 0, 0, 50, 51, 52, - 0, 0, 0, 0, 53, 54, 0, 73, 55, 16, - 0, 17, 18, 19, 20, 21, 22, 23, 0, 134, - 25, 26, 27, 28, 0, 29, 30, 31, 32, 33, - 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, - 0, 166, 167, 168, 169, 0, 0, 0, 35, 0, - 36, 37, 38, 39, 40, 41, 0, 0, 0, 0, - 42, 43, 44, 45, 46, 47, 0, 48, 177, 178, - 0, 0, 0, 49, 179, 180, 181, 0, 0, 182, - 0, 0, 0, 0, 0, 50, 51, 52, 0, 0, - 0, 0, 53, 54, 0, 0, 55, 16, 102, 17, - 18, 19, 20, 21, 22, 23, 0, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 32, 33, 0, 0, - 0, 0, 34, 0, 0, 0, 0, 0, 0, -193, - 0, 168, 169, 0, 0, 0, 35, 0, 36, 37, - 38, 39, 40, 41, 0, 0, 0, 0, 42, 43, - 44, 45, 46, 47, 0, 48, 177, 178, 0, 0, - 0, 49, 179, 180, 181, 0, 0, 182, 0, 0, - 0, 0, 0, 50, 51, 52, 0, 0, 0, 0, - 53, 54, 0, 16, 55, 17, 18, 19, 20, 21, - 22, 23, 138, 24, 25, 26, 27, 28, 0, 29, - 30, 31, 32, 33, 0, 0, 0, 0, 34, 208, - 209, 210, 211, 0, 0, 0, 212, 0, 213, 0, - 0, 0, 35, 0, 36, 37, 38, 39, 40, 41, - 0, 0, 0, 0, 42, 43, 44, 45, 46, 47, - 0, 48, 156, 157, 158, 0, 0, 49, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, - 51, 52, 0, 0, 0, 0, 53, 54, 0, 16, - 55, 17, 18, 19, 20, 21, 22, 23, 0, 24, - 25, 26, 27, 28, 0, 29, 30, 31, 32, 33, - 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, - 36, 37, 38, 39, 40, 41, 0, 0, 0, 0, - 42, 43, 44, 45, 46, 47, 0, 48, 0, 0, - 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 50, 51, 52, 0, 0, - 0, 0, 53, 54, 0, 154, 55, 16, 0, 17, - 18, 19, 20, 21, 22, 23, 0, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 32, 33, 0, 0, - 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 0, 36, 37, - 38, 39, 40, 41, 0, 0, 0, 0, 42, 43, - 44, 45, 46, 47, 0, 48, 0, 0, 0, 0, - 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 50, 51, 52, 0, 0, 0, 0, - 53, 54, 0, 226, 55, 16, 0, 17, 18, 19, + 32, 33, 34, 0, 0, 0, 0, 35, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 38, 39, 40, 41, 42, 0, + 0, 0, 0, 43, 44, 45, 46, 47, 48, 0, + 49, 0, 0, 0, 0, 0, 50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, + 53, 0, 0, 0, 0, 54, 55, 0, 16, 56, + 17, 18, 19, 20, 21, 22, 23, 140, 24, 25, + 26, 27, 28, 0, 29, 30, 31, 32, 33, 34, + 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, + 37, 38, 39, 40, 41, 42, 0, 0, 0, 0, + 43, 44, 45, 46, 47, 48, 0, 49, 0, 0, + 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 51, 52, 53, 0, 0, + 0, 0, 54, 55, 0, 16, 56, 17, 18, 19, 20, 21, 22, 23, 0, 24, 25, 26, 27, 28, - 0, 29, 30, 31, 32, 33, 0, 0, 0, 0, - 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 35, 0, 36, 37, 38, 39, - 40, 41, 0, 0, 0, 0, 42, 43, 44, 45, - 46, 47, 0, 48, 0, 0, 0, 0, 0, 49, + 0, 29, 30, 31, 32, 33, 34, 0, 0, 0, + 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 38, 39, + 40, 41, 42, 0, 0, 0, 0, 43, 44, 45, + 46, 47, 48, 0, 49, 0, 0, 0, 0, 0, + 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 52, 53, 0, 0, 0, 0, 54, + 55, 0, 156, 56, 16, 0, 17, 18, 19, 20, + 21, 22, 23, 0, 24, 25, 26, 27, 28, 0, + 29, 30, 31, 32, 33, 34, 0, 0, 0, 0, + 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 0, 37, 38, 39, 40, + 41, 42, 0, 0, 0, 0, 43, 44, 45, 46, + 47, 48, 0, 49, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 50, 51, 52, 0, 0, 0, 0, 53, 54, - 0, 236, 55, 16, 0, 17, 18, 19, 20, 21, + 0, 51, 52, 53, 0, 0, 0, 0, 54, 55, + 0, 229, 56, 16, 0, 17, 18, 19, 20, 21, 22, 23, 0, 24, 25, 26, 27, 28, 0, 29, - 30, 31, 32, 33, 0, 0, 0, 0, 34, 0, + 30, 31, 32, 33, 34, 0, 0, 0, 0, 35, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 38, 39, 40, 41, + 42, 0, 0, 0, 0, 43, 44, 45, 46, 47, + 48, 0, 49, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 0, 36, 37, 38, 39, 40, 41, - 0, 0, 0, 0, 42, 43, 44, 45, 46, 47, - 0, 48, 0, 0, 0, 0, 0, 49, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, - 51, 52, 0, 0, 0, 0, 53, 54, 0, 249, - 55, 16, 0, 17, 18, 19, 20, 21, 22, 23, + 51, 52, 53, 0, 0, 0, 0, 54, 55, 0, + 239, 56, 16, 0, 17, 18, 19, 20, 21, 22, + 23, 0, 24, 25, 26, 27, 28, 0, 29, 30, + 31, 32, 33, 34, 0, 0, 0, 0, 35, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 36, 0, 37, 38, 39, 40, 41, 42, + 0, 0, 0, 0, 43, 44, 45, 46, 47, 48, + 0, 49, 0, 0, 0, 0, 0, 50, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, + 52, 53, 0, 0, 0, 0, 54, 55, 0, 252, + 56, 16, 0, 17, 18, 19, 20, 21, 22, 23, 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 32, 33, 0, 0, 0, 0, 34, 0, 0, 0, + 32, 33, 34, 0, 0, 0, 0, 35, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 38, 39, 40, 41, 42, 0, + 0, 0, 0, 43, 44, 45, 46, 47, 48, 0, + 49, 0, 0, 0, 0, 0, 50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, + 53, 0, 0, 0, 0, 54, 55, 0, 275, 56, + 16, 0, 17, 18, 19, 20, 21, 22, 23, 0, + 24, 25, 26, 27, 28, 0, 29, 30, 31, 32, + 33, 34, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 35, 0, 36, 37, 38, 39, 40, 41, 0, 0, - 0, 0, 42, 43, 44, 45, 46, 47, 0, 48, - 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 50, 51, 52, - 0, 0, 0, 0, 53, 54, 0, 272, 55, 16, + 36, 0, 37, 38, 39, 40, 41, 42, 0, 0, + 0, 0, 43, 44, 45, 46, 47, 48, 0, 49, + 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 52, 53, + 0, 0, 0, 0, 54, 55, 0, 316, 56, 16, 0, 17, 18, 19, 20, 21, 22, 23, 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, 32, 33, - 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, - 36, 37, 38, 39, 40, 41, 0, 0, 0, 0, - 42, 43, 44, 45, 46, 47, 0, 48, 0, 0, - 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 50, 51, 52, 0, 0, - 0, 0, 53, 54, 0, 313, 55, 16, 0, 17, + 34, 0, 0, 0, 0, 35, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 38, 39, 40, 41, 42, 0, 0, 0, + 0, 43, 44, 45, 46, 47, 48, 0, 49, 0, + 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 51, 52, 53, 0, + 0, 0, 0, 54, 55, 0, 318, 56, 16, 0, + 17, 18, 19, 20, 21, 22, 23, 0, 24, 25, + 26, 27, 28, 0, 29, 30, 31, 32, 33, 34, + 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, + 37, 38, 39, 40, 41, 42, 0, 0, 0, 0, + 43, 44, 45, 46, 47, 48, 0, 49, 0, 0, + 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 51, 52, 53, 0, 0, + 0, 0, 54, 55, 0, 332, 56, 16, 0, 17, 18, 19, 20, 21, 22, 23, 0, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 32, 33, 0, 0, - 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 0, 36, 37, - 38, 39, 40, 41, 0, 0, 0, 0, 42, 43, - 44, 45, 46, 47, 0, 48, 0, 0, 0, 0, - 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 50, 51, 52, 0, 0, 0, 0, - 53, 54, 0, 315, 55, 16, 0, 17, 18, 19, - 20, 21, 22, 23, 0, 24, 25, 26, 27, 28, - 0, 29, 30, 31, 32, 33, 0, 0, 0, 0, - 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 35, 0, 36, 37, 38, 39, - 40, 41, 0, 0, 0, 0, 42, 43, 44, 45, - 46, 47, 0, 48, 0, 0, 0, 0, 0, 49, + 27, 28, 0, 29, 30, 31, 32, 33, 34, 0, + 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 38, 39, 40, 41, 42, 0, 0, 0, 0, 43, + 44, 45, 46, 47, 48, 0, 49, 0, 0, 0, + 167, 0, 50, 0, 0, 0, 0, 168, 169, 170, + 171, 0, 0, 0, 51, 52, 53, 0, 0, 0, + 0, 54, 55, 0, 0, 56, 172, 173, 329, 174, + 175, 176, 177, 178, 179, 180, 0, 0, 0, 167, + 181, 182, 183, 0, 0, 184, 168, 169, 170, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 50, 51, 52, 0, 0, 0, 0, 53, 54, - 0, 329, 55, 16, 0, 17, 18, 19, 20, 21, - 22, 23, 0, 24, 25, 26, 27, 28, 0, 29, - 30, 31, 32, 33, 0, 0, 0, 0, 34, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 0, 36, 37, 38, 39, 40, 41, - 0, 0, 0, 0, 42, 43, 44, 45, 46, 47, - 406, 48, 408, 0, 0, 0, 412, 49, 0, 0, - 0, 0, 0, 0, 0, 0, 416, 417, 0, 50, - 51, 52, 0, 0, 426, 427, 53, 54, 0, 0, - 55, 165, 0, 432, 0, 0, 0, 434, 166, 167, - 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 443, 444, 170, 171, 326, - 172, 173, 174, 175, 176, 177, 178, 0, 0, 0, - 165, 179, 180, 181, 0, 0, 182, 166, 167, 168, - 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 178, 0, 0, 0, 165, - 179, 180, 181, 0, 0, 182, 166, 167, 168, 169, + 0, 0, 0, 0, 0, 172, 173, 0, 174, 175, + 176, 177, 178, 179, 180, 0, 0, 0, 167, 181, + 182, 183, 0, 0, 184, 168, 169, 170, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 171, 0, 172, 173, - 174, 175, 176, 177, 178, 0, 0, 0, -193, 179, - 180, 181, 0, 0, 182, 166, 167, 168, 169, 0, + 0, 0, 0, 0, 0, 173, 0, 174, 175, 176, + 177, 178, 179, 180, 0, 0, 0, -195, 181, 182, + 183, 0, 0, 184, 168, 169, 170, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 172, 173, 174, - 175, 176, 177, 178, 0, 0, 0, 0, 179, 180, - 181, 0, 0, 182 + 0, 0, 0, 0, 0, 0, 174, 175, 176, 177, + 178, 179, 180, 0, 0, 0, 0, 181, 182, 183, + 0, 0, 184 }; static const yytype_int16 yycheck[] = { - 9, 41, 67, 125, 76, 11, 115, 16, 15, 49, - 291, 384, 10, 11, 12, 27, 73, 82, 83, 84, - 85, 86, 87, 88, 15, 97, 19, 20, 21, 22, - 23, 140, 25, 26, 406, 44, 27, 9, 291, 11, - 340, 294, 40, 0, 283, 43, 55, 9, 41, 42, - 43, 9, 425, 11, 47, 27, 295, 20, 21, 22, - 23, 361, 25, 26, 9, 9, 11, 11, 9, 134, - 11, 443, 137, 98, 15, 115, 67, 117, 41, 42, - 81, 22, 27, 15, 16, 17, 98, 43, 44, 90, - 96, 89, 132, 86, 17, 18, 11, 219, 96, 12, - 140, 98, 100, 101, 98, 358, 359, 98, 31, 118, - 12, 287, 35, 289, 98, 124, 125, 40, 21, 9, - 43, 76, 120, 46, 12, 48, 98, 50, 51, 52, - 53, 54, 125, 142, 387, 200, 21, 194, 195, 196, - 197, 198, 199, 20, 201, 202, 45, 156, 157, 158, - 20, 160, 161, 98, 435, 164, 12, 98, 9, 72, - 73, 74, 125, 98, 12, 24, 98, 12, 97, 20, - 72, 73, 74, 10, 183, 184, 185, 186, 187, 188, - 433, 70, 189, 9, 72, 73, 74, 20, 11, 182, - 72, 73, 74, 21, 20, 72, 73, 74, 307, 208, - 209, 210, 211, 212, 213, 270, 21, 205, 12, 331, - 219, 20, 70, 21, 12, 97, 72, 73, 74, 97, - 229, 10, 231, 232, 72, 73, 74, 72, 73, 74, - 24, 240, 72, 73, 74, 292, 159, 20, 11, 72, - 73, 74, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 266, 267, 98, - 269, 20, 74, 72, 73, 74, 21, 307, 72, 73, - 74, 15, 60, 382, 72, 73, 74, 286, 287, 288, - 289, 279, 291, 281, 341, 294, 351, 97, 24, 72, - 73, 74, 408, 10, 10, 10, 10, 290, 86, 20, - 416, 417, 21, 91, 92, 93, 97, 97, 96, 20, - 426, 309, 321, 72, 73, 74, 92, 93, 434, 9, - 96, 11, 331, 13, 14, 15, 16, 17, 18, 19, - 97, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 382, 72, 73, 74, 36, 97, 97, 358, - 359, 72, 73, 74, 97, 420, 58, 59, 60, 61, - 50, 10, 52, 53, 54, 55, 56, 57, 97, 97, - 9, 97, 62, 63, 64, 65, 66, 67, 387, 69, - 389, 12, 380, 85, 86, 75, 20, 60, 61, 91, - 92, 93, 97, 400, 96, 393, 97, 87, 88, 89, - 72, 73, 74, 326, 94, 95, 20, 96, 98, 97, - 97, 418, 85, 86, 389, 435, 414, 34, 91, 92, - 93, 0, 1, 96, 433, 97, 91, 92, 93, 204, - 9, 96, 11, 431, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 393, 27, 28, + 9, 42, 99, 68, 127, 116, 0, 16, 15, 50, + 11, 294, 10, 11, 12, 27, 409, 74, 83, 84, + 85, 86, 87, 88, 89, 9, 19, 20, 21, 22, + 23, 142, 25, 26, 21, 9, 45, 11, 15, 16, + 17, 15, 15, 41, 12, 387, 44, 56, 22, 42, + 43, 44, 12, 446, 27, 48, 20, 21, 22, 23, + 77, 25, 26, 11, 343, 294, 12, 82, 297, 9, + 9, 136, 11, 99, 139, 116, 91, 118, 42, 43, + 20, 98, 9, 99, 11, 364, 428, 99, 27, 9, + 286, 11, 90, 134, 87, 68, 97, 99, 221, 97, + 27, 142, 298, 101, 102, 73, 74, 75, 12, 99, + 119, 20, 12, 73, 74, 75, 77, 126, 127, 9, + 9, 290, 99, 292, 122, 99, 99, 73, 74, 75, + 20, 12, 361, 362, 127, 144, 9, 202, 11, 196, + 197, 198, 199, 200, 201, 21, 203, 204, 46, 158, + 159, 160, 20, 162, 163, 438, 12, 166, 99, 12, + 99, 390, 98, 127, 73, 74, 75, 44, 45, 73, + 74, 75, 99, 73, 74, 75, 185, 186, 187, 188, + 189, 190, 24, 98, 191, 73, 74, 75, 73, 74, + 75, 184, 73, 74, 75, 10, 71, 11, 21, 310, + 20, 210, 211, 212, 213, 214, 215, 436, 273, 207, + 98, 334, 221, 17, 18, 21, 21, 73, 74, 75, + 73, 74, 75, 232, 20, 234, 235, 71, 32, 9, + 24, 98, 36, 10, 243, 15, 11, 41, 295, 20, + 44, 21, 75, 47, 99, 49, 26, 51, 52, 53, + 54, 55, 21, 73, 74, 75, 15, 98, 20, 24, + 269, 270, 10, 272, 40, 41, 42, 43, 10, 310, + 10, 47, 10, 49, 385, 21, 98, 73, 74, 75, + 289, 290, 291, 292, 282, 294, 284, 344, 297, 354, + 98, 98, 73, 74, 75, 20, 98, 73, 74, 75, + 293, 73, 74, 75, 389, 59, 391, 61, 62, 411, + 395, 73, 74, 75, 312, 324, 98, 419, 420, 20, + 405, 406, 98, 10, 98, 334, 98, 429, 413, 414, + 93, 94, 86, 87, 97, 437, 9, 422, 92, 93, + 94, 426, 98, 97, 385, 98, 98, 98, 73, 74, + 75, 20, 361, 362, 73, 74, 75, 161, 423, 444, + 445, 61, 62, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 20, 98, + 98, 390, 98, 392, 12, 383, 86, 87, 59, 60, + 61, 62, 92, 93, 94, 97, 403, 97, 396, 438, + 392, 35, 48, 73, 74, 75, 73, 74, 75, 73, + 74, 75, 48, 206, 421, 86, 87, 396, -1, 417, + -1, 92, 93, 94, 0, 1, 97, 436, 98, -1, + -1, 98, -1, 9, 98, 11, 434, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, -1, -1, + 61, 47, 48, 49, 50, 51, -1, 53, 54, 55, + 56, 57, 58, 73, 74, 75, -1, 63, 64, 65, + 66, 67, 68, 69, 70, -1, 87, -1, -1, -1, + 76, 92, 93, 94, -1, -1, 97, -1, 98, -1, + -1, -1, 88, 89, 90, -1, -1, 0, 1, 95, + 96, -1, -1, 99, 100, 329, 9, -1, 11, -1, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, -1, -1, -1, 47, 48, 49, 50, 51, -1, + 53, 54, 55, 56, 57, 58, 73, 74, 75, -1, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 73, + 74, 75, 87, 76, -1, -1, -1, 92, 93, 94, + -1, 98, 97, -1, -1, 88, 89, 90, -1, -1, + 1, -1, 95, 96, 98, -1, 99, 100, 9, 10, + 11, -1, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, -1, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, -1, -1, -1, 47, 48, 49, 50, + 51, -1, 53, 54, 55, 56, 57, 58, -1, -1, + -1, -1, 63, 64, 65, 66, 67, 68, 69, 70, + -1, -1, -1, -1, -1, 76, 3, 4, 5, 6, + 7, 8, -1, -1, -1, -1, -1, 88, 89, 90, + -1, -1, 1, -1, 95, 96, -1, -1, 99, 100, + 9, 10, 11, -1, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 47, 47, -1, 46, 47, 48, - 49, 50, -1, 52, 53, 54, 55, 56, 57, 72, - 73, 74, -1, 62, 63, 64, 65, 66, 67, 68, - 69, -1, 72, 73, 74, 86, 75, 72, 73, 74, - 91, 92, 93, -1, 97, 96, -1, -1, 87, 88, - 89, -1, 0, 1, -1, 94, 95, 97, -1, 98, - 99, 9, 97, 11, -1, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, -1, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, -1, -1, -1, 46, 47, - 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, - 72, 73, 74, -1, 62, 63, 64, 65, 66, 67, - 68, 69, -1, 72, 73, 74, -1, 75, -1, -1, - 72, 73, 74, -1, -1, 97, -1, -1, -1, 87, - 88, 89, -1, -1, 1, -1, 94, 95, 97, -1, - 98, 99, 9, 10, 11, 97, 13, 14, 15, 16, + 39, 40, 41, 42, 43, -1, -1, -1, 47, 48, + 49, 50, 51, -1, 53, 54, 55, 56, 57, 58, + -1, -1, -1, -1, 63, 64, 65, 66, 67, 68, + 69, 70, -1, 92, 93, 94, -1, 76, 97, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 88, + 89, 90, -1, -1, 1, -1, 95, 96, -1, -1, + 99, 100, 9, 10, 11, -1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, -1, -1, -1, 46, - 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, - 57, -1, -1, -1, -1, 62, 63, 64, 65, 66, - 67, 68, 69, -1, -1, -1, 9, -1, 75, -1, - -1, -1, 15, -1, -1, -1, -1, -1, 21, -1, - 87, 88, 89, 26, -1, 1, -1, 94, 95, -1, - -1, 98, 99, 9, 10, 11, -1, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, -1, -1, -1, - 46, 47, 48, 49, 50, -1, 52, 53, 54, 55, - 56, 57, -1, -1, -1, -1, 62, 63, 64, 65, - 66, 67, 68, 69, -1, -1, -1, -1, -1, 75, - 3, 4, 5, 6, 7, 8, -1, -1, -1, -1, - -1, 87, 88, 89, -1, -1, 1, -1, 94, 95, - -1, -1, 98, 99, 9, 10, 11, -1, 13, 14, + 37, 38, 39, 40, 41, 42, 43, -1, -1, -1, + 47, 48, 49, 50, 51, -1, 53, 54, 55, 56, + 57, 58, -1, -1, -1, -1, 63, 64, 65, 66, + 67, 68, 69, 70, -1, -1, -1, -1, -1, 76, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 88, 89, 90, -1, -1, 1, -1, 95, 96, + -1, -1, 99, 100, 9, -1, 11, -1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, -1, -1, - -1, 46, 47, 48, 49, 50, -1, 52, 53, 54, - 55, 56, 57, -1, -1, -1, -1, 62, 63, 64, - 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, - 75, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 87, 88, 89, -1, -1, 1, -1, 94, - 95, -1, -1, 98, 99, 9, -1, 11, -1, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, -1, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, -1, - -1, -1, 46, 47, 48, 49, 50, -1, 52, 53, - 54, 55, 56, 57, -1, -1, -1, -1, 62, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, - -1, 75, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 87, 88, 89, -1, -1, 1, -1, - 94, 95, -1, -1, 98, 99, 9, -1, 11, -1, + 35, 36, 37, 38, 39, 40, 41, 42, 43, -1, + -1, -1, 47, 48, 49, 50, 51, -1, 53, 54, + 55, 56, 57, 58, -1, -1, -1, -1, 63, 64, + 65, 66, 67, 68, 69, 70, -1, -1, -1, -1, + -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 88, 89, 90, -1, -1, 1, -1, + 95, 96, -1, -1, 99, 100, 9, -1, 11, -1, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, + 33, -1, 35, 36, 37, 38, 39, 40, 41, 42, + 43, -1, -1, -1, 47, 48, 49, 50, 51, -1, + 53, 54, 55, 56, 57, 58, -1, -1, -1, -1, + 63, 64, 65, 66, 67, 68, 69, 70, -1, -1, + -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 88, 89, 90, 1, -1, + -1, -1, 95, 96, 61, 62, 99, 100, 11, -1, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, - -1, 34, 35, 36, 37, 38, 39, 40, 41, 42, - -1, -1, -1, 46, 47, 48, 49, 50, -1, 52, - 53, 54, 55, 56, 57, -1, -1, -1, -1, 62, - 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, - -1, -1, 75, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 87, 88, 89, 1, -1, -1, - -1, 94, 95, -1, -1, 98, 99, 11, -1, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, -1, 27, 28, 29, 30, 31, -1, -1, - -1, -1, 36, -1, 39, 40, 41, 42, -1, -1, - -1, 46, -1, 48, 60, 61, 50, -1, 52, 53, - 54, 55, 56, 57, -1, -1, -1, -1, 62, 63, - 64, 65, 66, 67, -1, 69, -1, 72, 73, 74, - 86, 75, -1, -1, -1, 91, 92, 93, -1, -1, - 96, -1, -1, 87, 88, 89, 1, -1, -1, -1, - 94, 95, 97, -1, 98, -1, 11, -1, 13, 14, - 15, 16, 17, 18, 19, -1, 21, 22, 23, 24, - 25, -1, 27, 28, 29, 30, 31, -1, -1, -1, - -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 50, -1, 52, 53, 54, - 55, 56, 57, -1, -1, -1, 0, 62, 63, 64, - 65, 66, 67, -1, 69, 9, -1, 11, 12, -1, - 75, -1, -1, -1, -1, -1, 20, -1, -1, -1, - -1, -1, 87, 88, 89, 58, 59, 60, 61, 94, - 95, -1, 97, 98, -1, 39, 40, 41, 42, -1, - -1, -1, 46, -1, 48, -1, -1, 51, -1, 82, - 83, 84, 85, 86, 58, 59, 60, 61, 91, 92, - 93, -1, -1, 96, -1, -1, -1, -1, 72, 73, - 74, 0, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 12, -1, -1, -1, 91, 92, 93, - -1, 20, 96, 97, -1, -1, -1, -1, -1, -1, - 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, - 39, 40, 41, 42, -1, -1, -1, 46, -1, 48, - -1, -1, 51, -1, -1, 83, 84, 85, 86, 58, - 59, 60, 61, 91, 92, 93, -1, -1, 96, -1, - -1, -1, -1, 72, 73, 74, -1, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, -1, -1, - -1, -1, 91, 92, 93, -1, -1, 96, 97, 9, - -1, 11, -1, 13, 14, 15, 16, 17, 18, 19, + 87, -1, -1, -1, 37, 92, 93, 94, -1, -1, + 97, -1, -1, -1, 59, 60, 61, 62, 51, -1, + 53, 54, 55, 56, 57, 58, -1, -1, -1, -1, + 63, 64, 65, 66, 67, 68, -1, 70, 83, 84, + 85, 86, 87, 76, -1, -1, -1, 92, 93, 94, + -1, -1, 97, -1, -1, 88, 89, 90, 1, -1, + -1, -1, 95, 96, -1, -1, 99, -1, 11, -1, + 13, 14, 15, 16, 17, 18, 19, -1, 21, 22, + 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, + -1, -1, -1, -1, 37, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 51, -1, + 53, 54, 55, 56, 57, 58, -1, 0, -1, -1, + 63, 64, 65, 66, 67, 68, 9, 70, 11, 12, + -1, -1, -1, 76, -1, -1, -1, 20, -1, -1, + -1, -1, -1, -1, -1, 88, 89, 90, -1, -1, + -1, -1, 95, 96, -1, 98, 99, 40, 41, 42, + 43, -1, -1, -1, 47, -1, 49, -1, -1, 52, + -1, -1, -1, -1, -1, -1, 59, 60, 61, 62, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 73, 74, 75, 0, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 12, -1, -1, -1, 92, + 93, 94, -1, 20, 97, 98, -1, -1, -1, -1, + -1, -1, -1, 59, 60, 61, 62, -1, -1, -1, + -1, -1, -1, 40, 41, 42, 43, -1, -1, -1, + 47, -1, 49, -1, -1, 52, -1, -1, 84, 85, + 86, 87, 59, 60, 61, 62, 92, 93, 94, -1, + -1, 97, -1, -1, -1, -1, 73, 74, 75, -1, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, -1, -1, -1, -1, 92, 93, 94, -1, -1, + 97, 98, 9, -1, 11, -1, 13, 14, 15, 16, + 17, 18, 19, -1, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, + 37, -1, -1, -1, -1, -1, -1, -1, 59, 60, + 61, 62, -1, -1, 51, -1, 53, 54, 55, 56, + 57, 58, -1, -1, -1, -1, 63, 64, 65, 66, + 67, 68, -1, 70, 85, 86, 87, -1, -1, 76, + -1, 92, 93, 94, -1, -1, 97, -1, -1, -1, + -1, 88, 89, 90, -1, -1, -1, -1, 95, 96, + -1, 9, 99, 11, -1, 13, 14, 15, 16, 17, + 18, 19, -1, 21, 22, 23, 24, 25, -1, 27, + 28, 29, 30, 31, 32, -1, -1, -1, -1, 37, + -1, -1, -1, -1, -1, -1, 59, 60, 61, 62, + -1, -1, -1, 51, -1, 53, 54, 55, 56, 57, + 58, -1, -1, -1, -1, 63, 64, 65, 66, 67, + 68, -1, 70, 86, 87, -1, -1, -1, 76, 92, + 93, 94, -1, -1, 97, -1, -1, -1, -1, -1, + 88, 89, 90, -1, -1, -1, -1, 95, 96, -1, + 9, 99, 11, -1, 13, 14, 15, 16, 17, 18, + 19, -1, 21, 22, 23, 24, 25, -1, 27, 28, + 29, 30, 31, 32, -1, -1, -1, -1, 37, 40, + 41, 42, 43, -1, -1, -1, 47, -1, 49, -1, + -1, -1, 51, -1, 53, 54, 55, 56, 57, 58, + -1, -1, -1, -1, 63, 64, 65, 66, 67, 68, + -1, 70, 73, 74, 75, -1, -1, 76, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 88, + 89, 90, -1, -1, -1, -1, 95, 96, -1, -1, + 99, 11, 12, 13, 14, 15, 16, 17, 18, 19, -1, 21, 22, 23, 24, 25, -1, 27, 28, 29, - 30, 31, -1, -1, -1, -1, 36, -1, -1, -1, - -1, -1, -1, -1, 58, 59, 60, 61, -1, -1, - 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, - -1, -1, 62, 63, 64, 65, 66, 67, -1, 69, - 84, 85, 86, -1, -1, 75, -1, 91, 92, 93, - -1, -1, 96, -1, -1, -1, -1, 87, 88, 89, - -1, -1, -1, -1, 94, 95, -1, 9, 98, 11, - -1, 13, 14, 15, 16, 17, 18, 19, -1, 21, - 22, 23, 24, 25, -1, 27, 28, 29, 30, 31, - -1, -1, -1, -1, 36, -1, -1, -1, -1, -1, - -1, 58, 59, 60, 61, -1, -1, -1, 50, -1, - 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, - 62, 63, 64, 65, 66, 67, -1, 69, 85, 86, - -1, -1, -1, 75, 91, 92, 93, -1, -1, 96, - -1, -1, -1, -1, -1, 87, 88, 89, -1, -1, - -1, -1, 94, 95, -1, -1, 98, 11, 12, 13, - 14, 15, 16, 17, 18, 19, -1, 21, 22, 23, - 24, 25, -1, 27, 28, 29, 30, 31, -1, -1, - -1, -1, 36, -1, -1, -1, -1, -1, -1, 58, - -1, 60, 61, -1, -1, -1, 50, -1, 52, 53, - 54, 55, 56, 57, -1, -1, -1, -1, 62, 63, - 64, 65, 66, 67, -1, 69, 85, 86, -1, -1, - -1, 75, 91, 92, 93, -1, -1, 96, -1, -1, - -1, -1, -1, 87, 88, 89, -1, -1, -1, -1, - 94, 95, -1, 11, 98, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, -1, 27, - 28, 29, 30, 31, -1, -1, -1, -1, 36, 39, - 40, 41, 42, -1, -1, -1, 46, -1, 48, -1, - -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, - -1, -1, -1, -1, 62, 63, 64, 65, 66, 67, - -1, 69, 72, 73, 74, -1, -1, 75, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 87, - 88, 89, -1, -1, -1, -1, 94, 95, -1, 11, - 98, 13, 14, 15, 16, 17, 18, 19, -1, 21, - 22, 23, 24, 25, -1, 27, 28, 29, 30, 31, - -1, -1, -1, -1, 36, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 50, -1, - 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, - 62, 63, 64, 65, 66, 67, -1, 69, -1, -1, - -1, -1, -1, 75, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 87, 88, 89, -1, -1, - -1, -1, 94, 95, -1, 97, 98, 11, -1, 13, - 14, 15, 16, 17, 18, 19, -1, 21, 22, 23, - 24, 25, -1, 27, 28, 29, 30, 31, -1, -1, - -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 50, -1, 52, 53, - 54, 55, 56, 57, -1, -1, -1, -1, 62, 63, - 64, 65, 66, 67, -1, 69, -1, -1, -1, -1, - -1, 75, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 87, 88, 89, -1, -1, -1, -1, - 94, 95, -1, 97, 98, 11, -1, 13, 14, 15, + 30, 31, 32, -1, -1, -1, -1, 37, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 51, -1, 53, 54, 55, 56, 57, 58, -1, + -1, -1, -1, 63, 64, 65, 66, 67, 68, -1, + 70, -1, -1, -1, -1, -1, 76, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 88, 89, + 90, -1, -1, -1, -1, 95, 96, -1, 11, 99, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, + -1, -1, -1, -1, 37, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 51, -1, + 53, 54, 55, 56, 57, 58, -1, -1, -1, -1, + 63, 64, 65, 66, 67, 68, -1, 70, -1, -1, + -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 88, 89, 90, -1, -1, + -1, -1, 95, 96, -1, 11, 99, 13, 14, 15, 16, 17, 18, 19, -1, 21, 22, 23, 24, 25, - -1, 27, 28, 29, 30, 31, -1, -1, -1, -1, - 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 50, -1, 52, 53, 54, 55, - 56, 57, -1, -1, -1, -1, 62, 63, 64, 65, - 66, 67, -1, 69, -1, -1, -1, -1, -1, 75, + -1, 27, 28, 29, 30, 31, 32, -1, -1, -1, + -1, 37, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 51, -1, 53, 54, 55, + 56, 57, 58, -1, -1, -1, -1, 63, 64, 65, + 66, 67, 68, -1, 70, -1, -1, -1, -1, -1, + 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 88, 89, 90, -1, -1, -1, -1, 95, + 96, -1, 98, 99, 11, -1, 13, 14, 15, 16, + 17, 18, 19, -1, 21, 22, 23, 24, 25, -1, + 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, + 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 51, -1, 53, 54, 55, 56, + 57, 58, -1, -1, -1, -1, 63, 64, 65, 66, + 67, 68, -1, 70, -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 87, 88, 89, -1, -1, -1, -1, 94, 95, - -1, 97, 98, 11, -1, 13, 14, 15, 16, 17, + -1, 88, 89, 90, -1, -1, -1, -1, 95, 96, + -1, 98, 99, 11, -1, 13, 14, 15, 16, 17, 18, 19, -1, 21, 22, 23, 24, 25, -1, 27, - 28, 29, 30, 31, -1, -1, -1, -1, 36, -1, + 28, 29, 30, 31, 32, -1, -1, -1, -1, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, - -1, -1, -1, -1, 62, 63, 64, 65, 66, 67, - -1, 69, -1, -1, -1, -1, -1, 75, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 87, - 88, 89, -1, -1, -1, -1, 94, 95, -1, 97, - 98, 11, -1, 13, 14, 15, 16, 17, 18, 19, + -1, -1, -1, 51, -1, 53, 54, 55, 56, 57, + 58, -1, -1, -1, -1, 63, 64, 65, 66, 67, + 68, -1, 70, -1, -1, -1, -1, -1, 76, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 88, 89, 90, -1, -1, -1, -1, 95, 96, -1, + 98, 99, 11, -1, 13, 14, 15, 16, 17, 18, + 19, -1, 21, 22, 23, 24, 25, -1, 27, 28, + 29, 30, 31, 32, -1, -1, -1, -1, 37, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 51, -1, 53, 54, 55, 56, 57, 58, + -1, -1, -1, -1, 63, 64, 65, 66, 67, 68, + -1, 70, -1, -1, -1, -1, -1, 76, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 88, + 89, 90, -1, -1, -1, -1, 95, 96, -1, 98, + 99, 11, -1, 13, 14, 15, 16, 17, 18, 19, -1, 21, 22, 23, 24, 25, -1, 27, 28, 29, - 30, 31, -1, -1, -1, -1, 36, -1, -1, -1, + 30, 31, 32, -1, -1, -1, -1, 37, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 51, -1, 53, 54, 55, 56, 57, 58, -1, + -1, -1, -1, 63, 64, 65, 66, 67, 68, -1, + 70, -1, -1, -1, -1, -1, 76, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 88, 89, + 90, -1, -1, -1, -1, 95, 96, -1, 98, 99, + 11, -1, 13, 14, 15, 16, 17, 18, 19, -1, + 21, 22, 23, 24, 25, -1, 27, 28, 29, 30, + 31, 32, -1, -1, -1, -1, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, - -1, -1, 62, 63, 64, 65, 66, 67, -1, 69, - -1, -1, -1, -1, -1, 75, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 87, 88, 89, - -1, -1, -1, -1, 94, 95, -1, 97, 98, 11, + 51, -1, 53, 54, 55, 56, 57, 58, -1, -1, + -1, -1, 63, 64, 65, 66, 67, 68, -1, 70, + -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 88, 89, 90, + -1, -1, -1, -1, 95, 96, -1, 98, 99, 11, -1, 13, 14, 15, 16, 17, 18, 19, -1, 21, 22, 23, 24, 25, -1, 27, 28, 29, 30, 31, - -1, -1, -1, -1, 36, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 50, -1, - 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, - 62, 63, 64, 65, 66, 67, -1, 69, -1, -1, - -1, -1, -1, 75, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 87, 88, 89, -1, -1, - -1, -1, 94, 95, -1, 97, 98, 11, -1, 13, + 32, -1, -1, -1, -1, 37, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 51, + -1, 53, 54, 55, 56, 57, 58, -1, -1, -1, + -1, 63, 64, 65, 66, 67, 68, -1, 70, -1, + -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 88, 89, 90, -1, + -1, -1, -1, 95, 96, -1, 98, 99, 11, -1, + 13, 14, 15, 16, 17, 18, 19, -1, 21, 22, + 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, + -1, -1, -1, -1, 37, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 51, -1, + 53, 54, 55, 56, 57, 58, -1, -1, -1, -1, + 63, 64, 65, 66, 67, 68, -1, 70, -1, -1, + -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 88, 89, 90, -1, -1, + -1, -1, 95, 96, -1, 98, 99, 11, -1, 13, 14, 15, 16, 17, 18, 19, -1, 21, 22, 23, - 24, 25, -1, 27, 28, 29, 30, 31, -1, -1, - -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 50, -1, 52, 53, - 54, 55, 56, 57, -1, -1, -1, -1, 62, 63, - 64, 65, 66, 67, -1, 69, -1, -1, -1, -1, - -1, 75, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 87, 88, 89, -1, -1, -1, -1, - 94, 95, -1, 97, 98, 11, -1, 13, 14, 15, - 16, 17, 18, 19, -1, 21, 22, 23, 24, 25, - -1, 27, 28, 29, 30, 31, -1, -1, -1, -1, - 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 50, -1, 52, 53, 54, 55, - 56, 57, -1, -1, -1, -1, 62, 63, 64, 65, - 66, 67, -1, 69, -1, -1, -1, -1, -1, 75, + 24, 25, -1, 27, 28, 29, 30, 31, 32, -1, + -1, -1, -1, 37, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 51, -1, 53, + 54, 55, 56, 57, 58, -1, -1, -1, -1, 63, + 64, 65, 66, 67, 68, -1, 70, -1, -1, -1, + 52, -1, 76, -1, -1, -1, -1, 59, 60, 61, + 62, -1, -1, -1, 88, 89, 90, -1, -1, -1, + -1, 95, 96, -1, -1, 99, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, -1, -1, -1, 52, + 92, 93, 94, -1, -1, 97, 59, 60, 61, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 87, 88, 89, -1, -1, -1, -1, 94, 95, - -1, 97, 98, 11, -1, 13, 14, 15, 16, 17, - 18, 19, -1, 21, 22, 23, 24, 25, -1, 27, - 28, 29, 30, 31, -1, -1, -1, -1, 36, -1, + -1, -1, -1, -1, -1, 78, 79, -1, 81, 82, + 83, 84, 85, 86, 87, -1, -1, -1, 52, 92, + 93, 94, -1, -1, 97, 59, 60, 61, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, - -1, -1, -1, -1, 62, 63, 64, 65, 66, 67, - 386, 69, 388, -1, -1, -1, 392, 75, -1, -1, - -1, -1, -1, -1, -1, -1, 402, 403, -1, 87, - 88, 89, -1, -1, 410, 411, 94, 95, -1, -1, - 98, 51, -1, 419, -1, -1, -1, 423, 58, 59, - 60, 61, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 441, 442, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, -1, -1, -1, - 51, 91, 92, 93, -1, -1, 96, 58, 59, 60, - 61, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 77, 78, -1, 80, - 81, 82, 83, 84, 85, 86, -1, -1, -1, 51, - 91, 92, 93, -1, -1, 96, 58, 59, 60, 61, + -1, -1, -1, -1, -1, 79, -1, 81, 82, 83, + 84, 85, 86, 87, -1, -1, -1, 52, 92, 93, + 94, -1, -1, 97, 59, 60, 61, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 78, -1, 80, 81, - 82, 83, 84, 85, 86, -1, -1, -1, 51, 91, - 92, 93, -1, -1, 96, 58, 59, 60, 61, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 80, 81, 82, - 83, 84, 85, 86, -1, -1, -1, -1, 91, 92, - 93, -1, -1, 96 + -1, -1, -1, -1, -1, -1, 81, 82, 83, 84, + 85, 86, 87, -1, -1, -1, -1, 92, 93, 94, + -1, -1, 97 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 3, 4, 5, 6, 7, 8, 101, 102, 103, - 104, 105, 106, 107, 0, 109, 11, 13, 14, 15, + 0, 3, 4, 5, 6, 7, 8, 102, 103, 104, + 105, 106, 107, 108, 0, 110, 11, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 27, - 28, 29, 30, 31, 36, 50, 52, 53, 54, 55, - 56, 57, 62, 63, 64, 65, 66, 67, 69, 75, - 87, 88, 89, 94, 95, 98, 138, 139, 140, 143, - 144, 145, 146, 147, 148, 149, 152, 156, 157, 158, - 159, 160, 161, 9, 108, 1, 20, 32, 34, 35, - 37, 38, 39, 40, 41, 42, 46, 47, 48, 49, - 68, 99, 108, 116, 119, 138, 33, 114, 115, 116, - 113, 113, 12, 138, 148, 148, 21, 26, 108, 157, - 162, 162, 162, 162, 162, 162, 162, 98, 11, 148, - 131, 131, 148, 98, 98, 98, 108, 148, 21, 139, - 151, 157, 162, 162, 21, 108, 148, 157, 20, 138, - 21, 148, 98, 150, 157, 158, 159, 148, 139, 148, - 148, 148, 148, 148, 97, 138, 72, 73, 74, 76, - 9, 11, 27, 98, 153, 51, 58, 59, 60, 61, - 77, 78, 80, 81, 82, 83, 84, 85, 86, 91, - 92, 93, 96, 153, 9, 11, 9, 11, 9, 109, - 132, 130, 21, 130, 153, 153, 153, 153, 67, 153, - 157, 153, 153, 108, 130, 45, 121, 20, 39, 40, - 41, 42, 46, 48, 115, 116, 114, 12, 151, 98, - 139, 138, 108, 24, 134, 97, 97, 138, 152, 162, - 139, 153, 153, 10, 20, 151, 97, 138, 70, 136, - 11, 97, 138, 138, 138, 148, 138, 138, 154, 97, - 138, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 9, 11, 22, 98, - 142, 157, 97, 138, 138, 138, 138, 138, 138, 113, - 21, 129, 21, 133, 21, 117, 109, 109, 109, 109, - 109, 109, 153, 109, 109, 133, 108, 138, 125, 138, - 138, 138, 138, 138, 152, 97, 12, 141, 70, 135, - 97, 97, 138, 97, 138, 97, 138, 10, 97, 24, - 138, 11, 20, 12, 98, 97, 79, 138, 138, 97, - 138, 153, 97, 20, 12, 20, 12, 20, 10, 108, - 134, 9, 20, 21, 124, 138, 125, 126, 138, 125, - 128, 155, 157, 119, 123, 126, 127, 138, 109, 110, - 126, 134, 97, 151, 24, 108, 97, 97, 97, 12, - 138, 10, 148, 20, 12, 97, 152, 10, 10, 10, - 135, 109, 21, 97, 97, 97, 97, 153, 97, 20, - 126, 126, 97, 135, 12, 10, 97, 20, 108, 137, - 118, 151, 122, 122, 9, 111, 111, 126, 111, 124, - 97, 97, 111, 137, 113, 20, 111, 111, 112, 43, - 44, 120, 120, 97, 121, 20, 111, 111, 10, 121, - 121, 113, 111, 153, 111, 122, 121, 10, 126, 121, - 127, 97, 97, 111, 111, 120 + 28, 29, 30, 31, 32, 37, 51, 53, 54, 55, + 56, 57, 58, 63, 64, 65, 66, 67, 68, 70, + 76, 88, 89, 90, 95, 96, 99, 139, 140, 141, + 144, 145, 146, 147, 148, 149, 150, 153, 157, 158, + 159, 160, 161, 162, 9, 109, 1, 20, 33, 35, + 36, 38, 39, 40, 41, 42, 43, 47, 48, 49, + 50, 69, 100, 109, 117, 120, 139, 34, 115, 116, + 117, 114, 114, 12, 139, 149, 149, 21, 26, 109, + 158, 163, 163, 163, 163, 163, 163, 163, 99, 11, + 99, 149, 132, 132, 149, 99, 99, 99, 109, 149, + 21, 140, 152, 158, 163, 163, 21, 109, 149, 158, + 20, 139, 21, 149, 99, 151, 158, 159, 160, 149, + 140, 149, 149, 149, 149, 149, 98, 139, 73, 74, + 75, 77, 9, 11, 27, 99, 154, 52, 59, 60, + 61, 62, 78, 79, 81, 82, 83, 84, 85, 86, + 87, 92, 93, 94, 97, 154, 9, 11, 9, 11, + 9, 110, 133, 131, 21, 131, 154, 154, 154, 154, + 68, 154, 158, 154, 154, 109, 131, 46, 122, 20, + 40, 41, 42, 43, 47, 49, 116, 117, 115, 12, + 152, 99, 140, 139, 98, 109, 24, 135, 98, 98, + 139, 153, 163, 140, 154, 154, 10, 20, 152, 98, + 139, 71, 137, 11, 98, 139, 139, 139, 149, 139, + 139, 155, 98, 139, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 9, + 11, 22, 99, 143, 158, 98, 139, 139, 139, 139, + 139, 139, 114, 21, 130, 21, 134, 21, 118, 110, + 110, 110, 110, 110, 110, 154, 110, 110, 134, 109, + 139, 126, 139, 139, 139, 139, 139, 153, 98, 12, + 142, 71, 136, 98, 98, 139, 98, 139, 98, 139, + 10, 98, 24, 139, 11, 20, 12, 99, 98, 80, + 139, 139, 98, 139, 154, 98, 20, 12, 20, 12, + 20, 10, 109, 135, 9, 20, 21, 125, 139, 126, + 127, 139, 126, 129, 156, 158, 120, 124, 127, 128, + 139, 110, 111, 127, 135, 98, 152, 24, 109, 98, + 98, 98, 12, 139, 10, 149, 20, 12, 98, 153, + 10, 10, 10, 136, 110, 21, 98, 98, 98, 98, + 154, 98, 20, 127, 127, 98, 136, 12, 10, 98, + 20, 109, 138, 119, 152, 123, 123, 9, 112, 112, + 127, 112, 125, 98, 98, 112, 138, 114, 20, 112, + 112, 113, 44, 45, 121, 121, 98, 122, 20, 112, + 112, 10, 122, 122, 114, 112, 154, 112, 123, 122, + 10, 127, 122, 128, 98, 98, 112, 112, 121 }; typedef enum { @@ -1051,11 +1070,11 @@ static const toketypes yy_type_tab[] = toketype_ival, toketype_ival, toketype_ival, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_p_tkval, - toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, + toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_p_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, - toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, + toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, @@ -1074,6 +1093,6 @@ static const toketypes yy_type_tab[] = }; /* Generated from: - * 8bdd3d69bab2a9d77e0557f3b46a8845e8de190fafce0bc37841a105bbcacaa5 perly.y + * 7fb05fb0a9bd3f1c047696941084a07f2d9928ccde2dd343a19d32cf51669760 perly.y * 738ca60a0b4cb075902435e976a2f393d438e8e6e32ba81e037dd773b75c87b5 regen_perly.pl * ex: set ro: */ diff --git a/perly.y b/perly.y index 9c308a3853..ec030b9933 100644 --- a/perly.y +++ b/perly.y @@ -74,7 +74,7 @@ %token '{' '}' '[' ']' '-' '+' '$' '@' '%' '*' '&' ';' %token WORD METHOD FUNCMETH THING PMFUNC PRIVATEREF QWLIST -%token FUNC0SUB UNIOPSUB LSTOPSUB +%token FUNC0OP FUNC0SUB UNIOPSUB LSTOPSUB %token PLUGEXPR PLUGSTMT %token LABEL %token FORMAT SUB ANONSUB PACKAGE USE @@ -1232,6 +1232,13 @@ term : termbinop TOKEN_GETMAD($2,$$,'('); TOKEN_GETMAD($3,$$,')'); } + | FUNC0OP /* Same as above, but op created in toke.c */ + { $$ = $1; } + | FUNC0OP '(' ')' + { $$ = $1; + TOKEN_GETMAD($2,$$,'('); + TOKEN_GETMAD($3,$$,')'); + } | FUNC0SUB /* Sub treated as nullop */ { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($1)); } diff --git a/toke.c b/toke.c index ef215a5cb3..1bf7e18c86 100644 --- a/toke.c +++ b/toke.c @@ -224,6 +224,7 @@ static const char* const lex_state_names[] = { * LOOPX : loop exiting command (goto, last, dump, etc) * FTST : file test operator * FUN0 : zero-argument function + * FUN0OP : zero-argument function, with its op created in this file * FUN1 : not used, except for not, which isn't a UNIOP * BOop : bitwise or or xor * BAop : bitwise and @@ -254,6 +255,7 @@ static const char* const lex_state_names[] = { #define LOOPX(f) return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)LOOPEX)) #define FTST(f) return (pl_yylval.ival=f, PL_expect=XTERMORDORDOR, PL_bufptr=s, REPORT((int)UNIOP)) #define FUN0(f) return (pl_yylval.ival=f, PL_expect=XOPERATOR, PL_bufptr=s, REPORT((int)FUNC0)) +#define FUN0OP(f) return (pl_yylval.opval=f, CLINE, PL_expect=XOPERATOR, PL_bufptr=s, REPORT((int)FUNC0OP)) #define FUN1(f) return (pl_yylval.ival=f, PL_expect=XOPERATOR, PL_bufptr=s, REPORT((int)FUNC1)) #define BOop(f) return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)BITOROP))) #define BAop(f) return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)BITANDOP))) @@ -346,6 +348,7 @@ static struct debug_tokens { { FORMAT, TOKENTYPE_NONE, "FORMAT" }, { FUNC, TOKENTYPE_OPNUM, "FUNC" }, { FUNC0, TOKENTYPE_OPNUM, "FUNC0" }, + { FUNC0OP, TOKENTYPE_OPVAL, "FUNC0OP" }, { FUNC0SUB, TOKENTYPE_OPVAL, "FUNC0SUB" }, { FUNC1, TOKENTYPE_OPNUM, "FUNC1" }, { FUNCMETH, TOKENTYPE_OPVAL, "FUNCMETH" }, @@ -6923,21 +6926,24 @@ Perl_yylex(pTHX) } case KEY___FILE__: - pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0, - newSVpv(CopFILE(PL_curcop),0)); - TERM(THING); + FUN0OP( + pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0, + newSVpv(CopFILE(PL_curcop),0)) + ); case KEY___LINE__: - pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0, - Perl_newSVpvf(aTHX_ "%"IVdf, (IV)CopLINE(PL_curcop))); - TERM(THING); + FUN0OP( + (OP*)newSVOP(OP_CONST, 0, + Perl_newSVpvf(aTHX_ "%"IVdf, (IV)CopLINE(PL_curcop))) + ); case KEY___PACKAGE__: - pl_yylval.opval = (OP*)newSVOP(OP_CONST, 0, + FUN0OP( + (OP*)newSVOP(OP_CONST, 0, (PL_curstash ? newSVhek(HvNAME_HEK(PL_curstash)) - : &PL_sv_undef)); - TERM(THING); + : &PL_sv_undef)) + ); case KEY___DATA__: case KEY___END__: { -- cgit v1.2.1 From cfa52385fa426b5ecdf72e96623216af58cd2d77 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Mon, 8 Aug 2011 08:46:22 -0700 Subject: Add __FILE__ and its minions to perlfunc This takes the place of documenting __FILE__() syntax. By adding these to perlfunc, they are covered by the description of the syntax at the top of perlfunc. Hopefully this will appease those who think we should not be teaching it to new bees. --- pod/perlfunc.pod | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index 062f0f2bee..264fbdcbcd 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -162,7 +162,8 @@ C, C, C X C, C, C, C, C, C, C, -C, C, C, C, C, C, C +C<__FILE__>, C, C, C<__LINE__>, C, C<__PACKAGE__>, +C, C, C, C, =item Keywords related to the switch feature @@ -1983,6 +1984,11 @@ on your own, though. Portability issues: L. +=item __FILE__ +X<__FILE__> + +A special token that returns the name of the file in which it occurs. + =item fileno FILEHANDLE X @@ -2967,6 +2973,11 @@ characters, not physical bytes. For how many bytes a string encoded as UTF-8 would take up, use C (you'll have to C first). See L and L. +=item __LINE__ +X<__LINE__> + +A special token that compiles to the current line number. + =item link OLDFILE,NEWFILE X @@ -4577,6 +4588,11 @@ On systems that support a close-on-exec flag on files, that flag is set on all newly opened file descriptors whose Cs are I than the current value of $^F (by default 2 for C). See L. +=item __PACKAGE__ +X<__PACKAGE__> + +A special token that returns the name of the package in which it occurs. + =item pop ARRAY X X -- cgit v1.2.1 From c1ca05f02b1d795748a97ee05b8c69ce712090ad Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Fri, 12 Aug 2011 09:10:04 -0700 Subject: Test __FILE__() syntax --- t/comp/bproto.t | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/t/comp/bproto.t b/t/comp/bproto.t index 70748be551..68b9786f6c 100644 --- a/t/comp/bproto.t +++ b/t/comp/bproto.t @@ -8,7 +8,7 @@ BEGIN { @INC = '../lib'; } -print "1..10\n"; +print "1..13\n"; my $i = 1; @@ -41,4 +41,7 @@ q[ scalar(&foo,$bar); grep(not($bar), $bar); grep(not($bar, $bar), $bar); grep((not $bar, $bar, $bar), $bar); + __FILE__(); + __LINE__(); + __PACKAGE__(); ]; -- cgit v1.2.1 From 135c0b08fa622fdfc35bb98fe891d70f59a7a3af Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Fri, 12 Aug 2011 12:29:07 -0700 Subject: perldelta for __FILE__() --- pod/perldelta.pod | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 120cafec0a..2b5b4e1051 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -28,6 +28,12 @@ here, but most should go in the L section. [ List each enhancement as a =head2 entry ] +=head2 C<__FILE__()> Syntax + +The C<__FILE__>, C<__LINE__> and C<__PACKAGE__> tokens can now be written +with an empty pair of parentheses after them. This makes them parse the +same way as C