Change 33955 by [EMAIL PROTECTED] on 2008/05/31 01:54:46 Integrate: [ 33851] Fix for [perl #51848] Deparse interpolation in regex literal [ 33854] DEBUG_LEAKING_SCALARS wasn't reporting the correct line number of SVs allocated at runtime [ 33869] Subject: [PATCH] correct errors / omissions in documenting DOES From: Ricardo SIGNES <[EMAIL PROTECTED]> Date: Mon, 19 May 2008 10:14:02 -0400 Message-ID: <[EMAIL PROTECTED]> [ 33874] Subject: Re: [PATCH: TODO Tests] Re: [perl #53806] No complain about bareword From: "Rafael Garcia-Suarez" <[EMAIL PROTECTED]> Date: Tue, 20 May 2008 09:45:19 +0200 Message-ID: <[EMAIL PROTECTED]> [ 33876] Subject: Re: [PATCH: TODO Tests] Re: [perl #53806] No complain about bareword From: "Rafael Garcia-Suarez" <[EMAIL PROTECTED]> Date: Tue, 20 May 2008 10:14:28 +0200 Message-ID: <[EMAIL PROTECTED]> [ 33890] The TODO tests of change 33876 were actually fixed by change 33874. [ 33896] Eliminate POSIX::int_macro_int, and all the complex AUTOLOAD fandango that creates closures round it. Instead, wrap WEXITSTATUS, WIFEXITED, WIFSIGNALED, WIFSTOPPED, WSTOPSIG and WTERMSIG directly with XS. The shared library is slightly larger, but dynamic memory usage savings beat this, even within one thread of one process. Simpler code too. [ 33897] Replaced the WEXITSTATUS, WIFEXITED, WIFSIGNALED, WIFSTOPPED, WSTOPSIG and WTERMSIG wrappers with one wrapper using the XS "ALIAS" feature. This gets the shared object size back below the size before the removal of int_macro_int. It looks like there are other space savings to be made this way. [ 33898] Subject: Re: [perl #54566] assertion failure fiddling with @ISA From: "Rafael Garcia-Suarez" <[EMAIL PROTECTED]> Date: Wed, 21 May 2008 14:42:48 +0200 Message-ID: <[EMAIL PROTECTED]> [ 33909] Subject: [DOC PATCH] Memoize.pm refers to old title of "Higher Order Perl" From: Moritz Lenz <[EMAIL PROTECTED]> Date: Thu, 22 May 2008 15:47:04 +0200 Message-ID: <[EMAIL PROTECTED]> [ 33927] Subject: [PATCH] lib.pm should not warn about loading .par files From: Paul Fenwick <[EMAIL PROTECTED]> Date: Thu, 22 May 2008 23:24:34 +1000 Message-ID: <[EMAIL PROTECTED]> [ 33936] My recent changes to POSIX.xs forgot that WEXITSTATUS etc may not even be defined. This fix changes the error message from "Your vendor has not defined POSIX macro %s, used" to "POSIX::%s not implemented on this architecture", which I assume is not going to break anything. [ 33937] [perl #54758] Perl 5.10 memory corruption When @a = sort @a is pessimised if @a has magic, growing the stack requires various pointers to be reset in case the stack gets reallocated. [ 33939] Revert part of #31039 [ 33949] Subject: [PATCH] Propagate new i_gdbm*ndbm variables From: Andy Dougherty <[EMAIL PROTECTED]> Date: Thu, 29 May 2008 12:43:29 -0400 (EDT) Message-ID: <[EMAIL PROTECTED]> [ 33951] Add index() tests for embedded nulls Subject: Re: [perl #53746] bug with index() matching beyond end of string when \0 bytes (00000000) are involved From: Abigail <[EMAIL PROTECTED]> Date: Tue, 6 May 2008 14:57:36 +0200 Message-Id: <[EMAIL PROTECTED]> [ 33952] [perl #53746] bug with index() matching beyond end of string An off-by-one error meant that index($str,...) was effectively being executed as index("$str\0", ...). Probably introduced by change #26511.
Affected files ... ... //depot/maint-5.10/perl/Configure#10 integrate ... //depot/maint-5.10/perl/Cross/config.sh-arm-linux#6 integrate ... //depot/maint-5.10/perl/NetWare/config.wc#6 integrate ... //depot/maint-5.10/perl/Porting/config.sh#6 integrate ... //depot/maint-5.10/perl/configure.com#9 integrate ... //depot/maint-5.10/perl/epoc/config.sh#6 integrate ... //depot/maint-5.10/perl/ext/B/B/Deparse.pm#7 integrate ... //depot/maint-5.10/perl/ext/B/t/concise-xs.t#3 integrate ... //depot/maint-5.10/perl/ext/B/t/deparse.t#6 integrate ... //depot/maint-5.10/perl/ext/POSIX/POSIX.pm#4 integrate ... //depot/maint-5.10/perl/ext/POSIX/POSIX.xs#4 integrate ... //depot/maint-5.10/perl/lib/Memoize.pm#2 integrate ... //depot/maint-5.10/perl/lib/UNIVERSAL.pm#2 integrate ... //depot/maint-5.10/perl/lib/lib_pm.PL#2 integrate ... //depot/maint-5.10/perl/lib/strict.t#2 integrate ... //depot/maint-5.10/perl/mg.c#13 integrate ... //depot/maint-5.10/perl/plan9/config_sh.sample#6 integrate ... //depot/maint-5.10/perl/pod/perlobj.pod#2 integrate ... //depot/maint-5.10/perl/pod/perltodo.pod#12 integrate ... //depot/maint-5.10/perl/pp_sort.c#2 integrate ... //depot/maint-5.10/perl/sv.c#19 integrate ... //depot/maint-5.10/perl/symbian/config.sh#6 integrate ... //depot/maint-5.10/perl/t/lib/strict/subs#2 integrate ... //depot/maint-5.10/perl/t/op/index.t#3 integrate ... //depot/maint-5.10/perl/toke.c#8 integrate ... //depot/maint-5.10/perl/uconfig.sh#7 integrate ... //depot/maint-5.10/perl/util.c#5 integrate ... //depot/maint-5.10/perl/win32/config.bc#6 integrate ... //depot/maint-5.10/perl/win32/config.ce#6 integrate ... //depot/maint-5.10/perl/win32/config.gc#7 integrate ... //depot/maint-5.10/perl/win32/config.vc#7 integrate ... //depot/maint-5.10/perl/win32/config.vc64#7 integrate Differences ... ==== //depot/maint-5.10/perl/Configure#10 (xtext) ==== Index: perl/Configure --- perl/Configure#9~33904~ 2008-05-21 09:37:54.000000000 -0700 +++ perl/Configure 2008-05-30 18:54:46.000000000 -0700 @@ -25,7 +25,7 @@ # $Id: Head.U 6 2006-08-25 22:21:46Z rmanfredi $ # -# Generated on Tue May 20 17:29:22 CEST 2008 [metaconfig 3.5 PL0] +# Generated on Tue May 27 17:17:47 CEST 2008 [metaconfig 3.5 PL0] # (with additional metaconfig patches by [EMAIL PROTECTED]) cat >c1$$ <<EOF @@ -19093,7 +19093,7 @@ fi fi fi - $rm_try + $rm -f core try.core core.try.* case "$fflushNULL" in x) $cat >&4 <<EOM Your fflush(NULL) works okay for output streams. ==== //depot/maint-5.10/perl/Cross/config.sh-arm-linux#6 (text) ==== Index: perl/Cross/config.sh-arm-linux --- perl/Cross/config.sh-arm-linux#5~33894~ 2008-05-20 16:39:57.000000000 -0700 +++ perl/Cross/config.sh-arm-linux 2008-05-30 18:54:46.000000000 -0700 @@ -625,6 +625,8 @@ i_fp='undef' i_fp_class='undef' i_gdbm='undef' +i_gdbm_ndbm='undef' +i_gdbmndbm='undef' i_grp='define' i_ieeefp='undef' i_inttypes='define' ==== //depot/maint-5.10/perl/NetWare/config.wc#6 (text) ==== Index: perl/NetWare/config.wc --- perl/NetWare/config.wc#5~33894~ 2008-05-20 16:39:57.000000000 -0700 +++ perl/NetWare/config.wc 2008-05-30 18:54:46.000000000 -0700 @@ -608,6 +608,8 @@ i_fp='undef' i_fp_class='undef' i_gdbm='undef' +i_gdbm_ndbm='undef' +i_gdbmndbm='undef' i_grp='undef' i_ieeefp='undef' i_inttypes='undef' ==== //depot/maint-5.10/perl/Porting/config.sh#6 (text) ==== Index: perl/Porting/config.sh --- perl/Porting/config.sh#5~33894~ 2008-05-20 16:39:57.000000000 -0700 +++ perl/Porting/config.sh 2008-05-30 18:54:46.000000000 -0700 @@ -638,6 +638,8 @@ i_fp='undef' i_fp_class='undef' i_gdbm='define' +i_gdbm_ndbm='undef' +i_gdbmndbm='undef' i_grp='define' i_ieeefp='undef' i_inttypes='define' ==== //depot/maint-5.10/perl/configure.com#9 (text) ==== Index: perl/configure.com --- perl/configure.com#8~33894~ 2008-05-20 16:39:57.000000000 -0700 +++ perl/configure.com 2008-05-30 18:54:46.000000000 -0700 @@ -6232,6 +6232,8 @@ $ WC "i_fp='undef'" $ WC "i_fp_class='undef'" $ WC "i_gdbm='undef'" +$ WC "i_gdbm_ndbm='undef'" +$ WC "i_gdbmndbm='undef'" $ WC "i_grp='" + i_grp + "'" $ WC "i_ieeefp='undef'" $ WC "i_inttypes='" + i_inttypes + "'" ==== //depot/maint-5.10/perl/epoc/config.sh#6 (text) ==== Index: perl/epoc/config.sh --- perl/epoc/config.sh#5~33894~ 2008-05-20 16:39:57.000000000 -0700 +++ perl/epoc/config.sh 2008-05-30 18:54:46.000000000 -0700 @@ -571,6 +571,8 @@ i_fp='undef' i_fp_class='undef' i_gdbm='undef' +i_gdbm_ndbm='undef' +i_gdbmndbm='undef' i_grp='undef' i_ieeefp='undef' i_inttypes='undef' ==== //depot/maint-5.10/perl/ext/B/B/Deparse.pm#7 (text) ==== Index: perl/ext/B/B/Deparse.pm --- perl/ext/B/B/Deparse.pm#6~33947~ 2008-05-28 18:09:23.000000000 -0700 +++ perl/ext/B/B/Deparse.pm 2008-05-30 18:54:46.000000000 -0700 @@ -4062,6 +4062,16 @@ return "tr" . double_delim($from, $to) . $flags; } +sub re_dq_disambiguate { + my ($first, $last) = @_; + # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]" + ($last =~ /^[A-Z\\\^\[\]_?]/ && + $first =~ s/([EMAIL PROTECTED])\^$/${1}{^}/) # "${^}W" etc + || ($last =~ /^[{\[\w_]/ && + $first =~ s/([EMAIL PROTECTED])([A-Za-z_]\w*)$/${1}{$2}/); + return $first . $last; +} + # Like dq(), but different sub re_dq { my $self = shift; @@ -4077,14 +4087,7 @@ } elsif ($type eq "concat") { my $first = $self->re_dq($op->first, $extended); my $last = $self->re_dq($op->last, $extended); - - # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]" - ($last =~ /^[A-Z\\\^\[\]_?]/ && - $first =~ s/([EMAIL PROTECTED])\^$/${1}{^}/) # "${^}W" etc - || ($last =~ /^[{\[\w_]/ && - $first =~ s/([EMAIL PROTECTED])([A-Za-z_]\w*)$/${1}{$2}/); - - return $first . $last; + return re_dq_disambiguate($first, $last); } elsif ($type eq "uc") { return '\U' . $self->re_dq($op->first->sibling, $extended) . '\E'; } elsif ($type eq "lc") { @@ -4156,7 +4159,9 @@ my $str = ''; $kid = $kid->first->sibling; while (!null($kid)) { - $str .= $self->re_dq($kid, $extended); + my $first = $str; + my $last = $self->re_dq($kid, $extended); + $str = re_dq_disambiguate($first, $last); $kid = $kid->sibling; } return $str, 1; ==== //depot/maint-5.10/perl/ext/B/t/concise-xs.t#3 (text) ==== Index: perl/ext/B/t/concise-xs.t --- perl/ext/B/t/concise-xs.t#2~33881~ 2008-05-20 05:48:04.000000000 -0700 +++ perl/ext/B/t/concise-xs.t 2008-05-30 18:54:46.000000000 -0700 @@ -180,7 +180,13 @@ skip => [qw/ _POSIX_JOB_CONTROL /, # platform varying # Might be XS or imported from Fcntl, depending on your # perl version: - qw / S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISREG /], + qw / S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISREG /, + # Might be XS or AUTOLOADed, depending on your perl + # version: + qw /WEXITSTATUS WIFEXITED WIFSIGNALED WIFSTOPPED + WSTOPSIG WTERMSIG/, + 'int_macro_int', # Removed in POSIX 1.16 + ], perl => [qw/ import croak AUTOLOAD /], XS => [qw/ write wctomb wcstombs uname tzset tzname @@ -194,7 +200,7 @@ mblen lseek log10 localeconv ldexp lchown isxdigit isupper isspace ispunct isprint islower isgraph isdigit iscntrl isalpha - isalnum int_macro_int getcwd frexp fpathconf + isalnum getcwd frexp fpathconf fmod floor dup2 dup difftime cuserid ctime ctermid cosh constant close clock ceil bootstrap atan asin asctime acos access abort ==== //depot/maint-5.10/perl/ext/B/t/deparse.t#6 (text) ==== Index: perl/ext/B/t/deparse.t --- perl/ext/B/t/deparse.t#5~33947~ 2008-05-28 18:09:23.000000000 -0700 +++ perl/ext/B/t/deparse.t 2008-05-30 18:54:46.000000000 -0700 @@ -27,7 +27,7 @@ require feature; feature->import(':5.10'); } -use Test::More tests => 60; +use Test::More tests => 61; use B::Deparse; my $deparse = B::Deparse->new(); @@ -416,3 +416,7 @@ elsif ($a and $b) { x(); } elsif ($a or $b) { x(); } else { x(); } +#### +# 54 interpolation in regexps +my($y, $t); +/x${y}z$t/; ==== //depot/maint-5.10/perl/ext/POSIX/POSIX.pm#4 (text) ==== Index: perl/ext/POSIX/POSIX.pm --- perl/ext/POSIX/POSIX.pm#3~33881~ 2008-05-20 05:48:04.000000000 -0700 +++ perl/ext/POSIX/POSIX.pm 2008-05-30 18:54:46.000000000 -0700 @@ -4,7 +4,7 @@ our(@ISA, %EXPORT_TAGS, @EXPORT_OK, @EXPORT, $AUTOLOAD, %SIGRT) = (); -our $VERSION = "1.15"; +our $VERSION = "1.16"; use AutoLoader; @@ -35,10 +35,6 @@ XSLoader::load 'POSIX', $VERSION; -my %NON_CONSTS - = (map {($_,1)} qw(WEXITSTATUS WIFEXITED WIFSIGNALED WIFSTOPPED WSTOPSIG - WTERMSIG)); - sub AUTOLOAD { no strict; no warnings 'uninitialized'; @@ -50,15 +46,9 @@ local $! = 0; my $constname = $AUTOLOAD; $constname =~ s/.*:://; - if ($NON_CONSTS{$constname}) { - my ($val, $error) = &int_macro_int($constname, $_[0]); - croak $error if $error; - *$AUTOLOAD = sub { &int_macro_int($constname, $_[0]) }; - } else { - my ($error, $val) = constant($constname); - croak $error if $error; - *$AUTOLOAD = sub { $val }; - } + my ($error, $val) = constant($constname); + croak $error if $error; + *$AUTOLOAD = sub { $val }; goto &$AUTOLOAD; } ==== //depot/maint-5.10/perl/ext/POSIX/POSIX.xs#4 (text) ==== Index: perl/ext/POSIX/POSIX.xs --- perl/ext/POSIX/POSIX.xs#3~33881~ 2008-05-20 05:48:04.000000000 -0700 +++ perl/ext/POSIX/POSIX.xs 2008-05-30 18:54:46.000000000 -0700 @@ -394,116 +394,6 @@ #include "const-c.inc" -/* These were implemented in the old "constant" subroutine. They are actually - macros that take an integer argument and return an integer result. */ -static int -int_macro_int (const char *name, STRLEN len, IV *arg_result) { - /* Initially switch on the length of the name. */ - /* This code has been edited from a "constant" function generated by: - -use ExtUtils::Constant qw (constant_types C_constant XS_constant); - -my $types = {map {($_, 1)} qw(IV)}; -my @names = (qw(WEXITSTATUS WIFEXITED - WIFSIGNALED WIFSTOPPED WSTOPSIG WTERMSIG)); - -print constant_types(); # macro defs -foreach (C_constant ("POSIX", 'int_macro_int', 'IV', $types, undef, 5, @names) ) { - print $_, "\n"; # C constant subs -} -print "#### XS Section:\n"; -print XS_constant ("POSIX", $types); - */ - - switch (len) { - case 8: - /* Names all of length 8. */ - /* WSTOPSIG WTERMSIG */ - /* Offset 1 gives the best switch position. */ - switch (name[1]) { - case 'S': - if (memEQ(name, "WSTOPSIG", 8)) { - /* ^ */ -#ifdef WSTOPSIG - int i = *arg_result; - *arg_result = WSTOPSIG(WMUNGE(i)); - return PERL_constant_ISIV; -#else - return PERL_constant_NOTDEF; -#endif - } - break; - case 'T': - if (memEQ(name, "WTERMSIG", 8)) { - /* ^ */ -#ifdef WTERMSIG - int i = *arg_result; - *arg_result = WTERMSIG(WMUNGE(i)); - return PERL_constant_ISIV; -#else - return PERL_constant_NOTDEF; -#endif - } - break; - } - break; - case 9: - if (memEQ(name, "WIFEXITED", 9)) { -#ifdef WIFEXITED - int i = *arg_result; - *arg_result = WIFEXITED(WMUNGE(i)); - return PERL_constant_ISIV; -#else - return PERL_constant_NOTDEF; -#endif - } - break; - case 10: - if (memEQ(name, "WIFSTOPPED", 10)) { -#ifdef WIFSTOPPED - int i = *arg_result; - *arg_result = WIFSTOPPED(WMUNGE(i)); - return PERL_constant_ISIV; -#else - return PERL_constant_NOTDEF; -#endif - } - break; - case 11: - /* Names all of length 11. */ - /* WEXITSTATUS WIFSIGNALED */ - /* Offset 1 gives the best switch position. */ - switch (name[1]) { - case 'E': - if (memEQ(name, "WEXITSTATUS", 11)) { - /* ^ */ -#ifdef WEXITSTATUS - int i = *arg_result; - *arg_result = WEXITSTATUS(WMUNGE(i)); - return PERL_constant_ISIV; -#else - return PERL_constant_NOTDEF; -#endif - } - break; - case 'I': - if (memEQ(name, "WIFSIGNALED", 11)) { - /* ^ */ -#ifdef WIFSIGNALED - int i = *arg_result; - *arg_result = WIFSIGNALED(WMUNGE(i)); - return PERL_constant_ISIV; -#else - return PERL_constant_NOTDEF; -#endif - } - break; - } - break; - } - return PERL_constant_NOTFOUND; -} - static void restore_sigmask(pTHX_ SV *osset_sv) { @@ -756,47 +646,64 @@ INCLUDE: const-xs.inc -void -int_macro_int(sv, iv) - PREINIT: - dXSTARG; - STRLEN len; - int type; - INPUT: - SV * sv; - const char * s = SvPV(sv, len); - IV iv; - PPCODE: - /* Change this to int_macro_int(s, len, &iv, &nv); - if you need to return both NVs and IVs */ - type = int_macro_int(s, len, &iv); - /* Return 1 or 2 items. First is error message, or undef if no error. - Second, if present, is found value */ - switch (type) { - case PERL_constant_NOTFOUND: - sv = sv_2mortal(newSVpvf("%s is not a valid POSIX macro", s)); - EXTEND(SP, 1); - PUSHs(&PL_sv_undef); - PUSHs(sv); - break; - case PERL_constant_NOTDEF: - sv = sv_2mortal(newSVpvf( - "Your vendor has not defined POSIX macro %s, used", s)); - EXTEND(SP, 1); - PUSHs(&PL_sv_undef); - PUSHs(sv); - break; - case PERL_constant_ISIV: - PUSHi(iv); - break; - default: - sv = sv_2mortal(newSVpvf( - "Unexpected return type %d while processing POSIX macro %s, used", - type, s)); - EXTEND(SP, 1); - PUSHs(&PL_sv_undef); - PUSHs(sv); - } +int +WEXITSTATUS(status) + int status + ALIAS: + POSIX::WIFEXITED = 1 + POSIX::WIFSIGNALED = 2 + POSIX::WIFSTOPPED = 3 + POSIX::WSTOPSIG = 4 + POSIX::WTERMSIG = 5 + CODE: + switch(ix) { + case 0: +#ifdef WEXITSTATUS + RETVAL = WEXITSTATUS(status); +#else + not_here("WEXITSTATUS"); +#endif + break; + case 1: +#ifdef WIFEXITED + RETVAL = WIFEXITED(status); +#else + not_here("WIFEXITED"); +#endif + break; + case 2: +#ifdef WIFSIGNALED + RETVAL = WIFSIGNALED(status); +#else + not_here("WIFSIGNALED"); +#endif + break; + case 3: +#ifdef WIFSTOPPED + RETVAL = WIFSTOPPED(status); +#else + not_here("WIFSTOPPED"); +#endif + break; + case 4: +#ifdef WSTOPSIG + RETVAL = WSTOPSIG(status); +#else + not_here("WSTOPSIG"); +#endif + break; + case 5: +#ifdef WTERMSIG + RETVAL = WTERMSIG(status); +#else + not_here("WTERMSIG"); +#endif + break; + default: + Perl_croak(aTHX_ "Illegal alias %d for POSIX::W*", ix); + } + OUTPUT: + RETVAL int isalnum(charstring) ==== //depot/maint-5.10/perl/lib/Memoize.pm#2 (text) ==== Index: perl/lib/Memoize.pm --- perl/lib/Memoize.pm#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/lib/Memoize.pm 2008-05-30 18:54:46.000000000 -0700 @@ -1003,11 +1003,10 @@ Perl Journal, issue #13. (This article is also included in the Memoize distribution as `article.html'.) -My upcoming book will discuss memoization (and many other fascinating -topics) in tremendous detail. It will be published by Morgan Kaufmann -in 2002, possibly under the title I<Perl Advanced Techniques -Handbook>. It will also be available on-line for free. For more -information, visit http://perl.plover.com/book/ . +The author's book I<Higher Order Perl> (2005, ISBN 1558607013, published +by Morgan Kaufmann) discusses memoization (and many other fascinating +topics) in tremendous detail. It will also be available on-line for free. +For more information, visit http://perl.plover.com/book/ . To join a mailing list for announcements about C<Memoize>, send an empty message to C<[EMAIL PROTECTED]>. This mailing ==== //depot/maint-5.10/perl/lib/UNIVERSAL.pm#2 (text) ==== Index: perl/lib/UNIVERSAL.pm --- perl/lib/UNIVERSAL.pm#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/lib/UNIVERSAL.pm 2008-05-30 18:54:46.000000000 -0700 @@ -117,8 +117,9 @@ mandates an inheritance relationship. Other relationships include aggregation, delegation, and mocking.) -By default, classes in Perl only perform the C<UNIVERSAL> role. To mark that -your own classes perform other roles, override C<DOES> appropriately. +By default, classes in Perl only perform the C<UNIVERSAL> role, as well as the +role of all classes in their inheritance. In other words, by default C<DOES> +responds identically to C<isa>. There is a relationship between roles and classes, as each class implies the existence of a role of the same name. There is also a relationship between ==== //depot/maint-5.10/perl/lib/lib_pm.PL#2 (text) ==== Index: perl/lib/lib_pm.PL --- perl/lib/lib_pm.PL#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/lib/lib_pm.PL 2008-05-30 18:54:46.000000000 -0700 @@ -58,7 +58,7 @@ print OUT <<'!NO!SUBS!'; our @ORIG_INC = @INC; # take a handy copy of 'original' value -our $VERSION = '0.5565'; +our $VERSION = '0.56'; my $Is_MacOS = $^O eq 'MacOS'; my $Mac_FS; if ($Is_MacOS) { @@ -79,7 +79,7 @@ $path = _nativize($path); - if (-e $path && ! -d _) { + if ($path !~ /\.par$/i && -e $path && ! -d _) { require Carp; Carp::carp("Parameter to use lib must be directory, not file"); } ==== //depot/maint-5.10/perl/lib/strict.t#2 (text) ==== Index: perl/lib/strict.t --- perl/lib/strict.t#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/lib/strict.t 2008-05-30 18:54:46.000000000 -0700 @@ -84,17 +84,20 @@ $expected =~ s|(\./)?abc\.pm|:abc.pm|g if $^O eq 'MacOS'; $expected =~ s|./abc|:abc|g if $^O eq 'MacOS'; my $prefix = ($results =~ s/^PREFIX\n//) ; + my $TODO = $prog =~ m/^#\s*TODO:/; if ( $results =~ s/^SKIPPED\n//) { print "$results\n" ; } elsif (($prefix and $results !~ /^\Q$expected/) or (!$prefix and $results ne $expected)){ - print STDERR "PROG: $switch\n$prog\n"; - print STDERR "EXPECTED:\n$expected\n"; - print STDERR "GOT:\n$results\n"; + if (! $TODO) { + print STDERR "PROG: $switch\n$prog\n"; + print STDERR "EXPECTED:\n$expected\n"; + print STDERR "GOT:\n$results\n"; + } print "not "; } - print "ok " . ++$i . "\n"; + print "ok " . ++$i . ($TODO ? " # TODO" : "") . "\n"; foreach (@temps) { unlink $_ if $_ } } ==== //depot/maint-5.10/perl/mg.c#13 (text) ==== Index: perl/mg.c --- perl/mg.c#12~33953~ 2008-05-30 16:12:33.000000000 -0700 +++ perl/mg.c 2008-05-30 18:54:46.000000000 -0700 @@ -1531,7 +1531,7 @@ stash = GvSTASH( SvTYPE(mg->mg_obj) == SVt_PVGV ? (GV*)mg->mg_obj - : (GV*)SvMAGIC(mg->mg_obj)->mg_obj + : (GV*)mg_find(mg->mg_obj, PERL_MAGIC_isa)->mg_obj ); if (stash) @@ -1555,7 +1555,7 @@ stash = GvSTASH( SvTYPE(mg->mg_obj) == SVt_PVGV ? (GV*)mg->mg_obj - : (GV*)SvMAGIC(mg->mg_obj)->mg_obj + : (GV*)mg_find(mg->mg_obj, PERL_MAGIC_isa)->mg_obj ); if (stash) ==== //depot/maint-5.10/perl/plan9/config_sh.sample#6 (text) ==== Index: perl/plan9/config_sh.sample --- perl/plan9/config_sh.sample#5~33894~ 2008-05-20 16:39:57.000000000 -0700 +++ perl/plan9/config_sh.sample 2008-05-30 18:54:46.000000000 -0700 @@ -619,6 +619,8 @@ i_fp='undef' i_fp_class='undef' i_gdbm='undef' +i_gdbm_ndbm='undef' +i_gdbmndbm='undef' i_grp='define' i_ieeefp='undef' i_inttypes='define' ==== //depot/maint-5.10/perl/pod/perlobj.pod#2 (text) ==== Index: perl/pod/perlobj.pod --- perl/pod/perlobj.pod#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/pod/perlobj.pod 2008-05-30 18:54:46.000000000 -0700 @@ -407,6 +407,13 @@ C<blessed> returns the name of the package the argument has been blessed into, or C<undef>. +=item DOES(ROLE) + +C<DOES> returns I<true> if its object claims to perform the role C<ROLE>. + +By default, the response to C<DOES> is the same as the response to ISA. For +more information on C<DOES> and other universal methods, see L<UNIVERSAL>. + =item can(METHOD) X<can> ==== //depot/maint-5.10/perl/pod/perltodo.pod#12 (text) ==== Index: perl/pod/perltodo.pod --- perl/pod/perltodo.pod#11~33954~ 2008-05-30 17:29:21.000000000 -0700 +++ perl/pod/perltodo.pod 2008-05-30 18:54:46.000000000 -0700 @@ -551,18 +551,6 @@ the perl API that comes from writing modules that use XS to interface to C. -=head2 investigate removing int_macro_int from POSIX.xs - -As a hang over from the original C<constant> implementation, F<POSIX.xs> -contains a function C<int_macro_int> which in conjunction with C<AUTOLOAD> is -used to wrap the C functions C<WEXITSTATUS>, C<WIFEXITED>, C<WIFSIGNALED>, -C<WIFSTOPPED>, C<WSTOPSIG> and C<WTERMSIG>. It's probably worth replacing -this complexity with 5 simple direct wrappings of those 5 functions. - -However, it would be interesting if someone could measure the memory usage -before and after, both for the case of C<use POSIX();> and the case of -actually calling the Perl space functions. - =head2 safely supporting POSIX SA_SIGINFO Some years ago Jarkko supplied patches to provide support for the POSIX ==== //depot/maint-5.10/perl/pp_sort.c#2 (text) ==== Index: perl/pp_sort.c --- perl/pp_sort.c#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/pp_sort.c 2008-05-30 18:54:46.000000000 -0700 @@ -1553,11 +1553,12 @@ max = AvFILL(av) + 1; if (SvMAGICAL(av)) { MEXTEND(SP, max); - p2 = SP; for (i=0; i < max; i++) { SV **svp = av_fetch(av, i, FALSE); *SP++ = (svp) ? *svp : NULL; } + SP--; + p1 = p2 = SP - (max-1); } else { if (SvREADONLY(av)) @@ -1713,7 +1714,7 @@ SvREADONLY_off(av); else if (av && !sorting_av) { /* simulate pp_aassign of tied AV */ - SV** const base = ORIGMARK+1; + SV** const base = MARK+1; for (i=0; i < max; i++) { base[i] = newSVsv(base[i]); } ==== //depot/maint-5.10/perl/sv.c#19 (text) ==== Index: perl/sv.c --- perl/sv.c#18~33953~ 2008-05-30 16:12:33.000000000 -0700 +++ perl/sv.c 2008-05-30 18:54:46.000000000 -0700 @@ -246,13 +246,12 @@ SvREFCNT(sv) = 1; SvFLAGS(sv) = 0; sv->sv_debug_optype = PL_op ? PL_op->op_type : 0; - sv->sv_debug_line = (U16) (PL_parser - ? PL_parser->copline == NOLINE - ? PL_curcop + sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE + ? PL_parser->copline + : PL_curcop ? CopLINE(PL_curcop) : 0 - : PL_parser->copline - : 0); + ); sv->sv_debug_inpad = 0; sv->sv_debug_cloned = 0; sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL; ==== //depot/maint-5.10/perl/symbian/config.sh#6 (text) ==== Index: perl/symbian/config.sh --- perl/symbian/config.sh#5~33894~ 2008-05-20 16:39:57.000000000 -0700 +++ perl/symbian/config.sh 2008-05-30 18:54:46.000000000 -0700 @@ -546,6 +546,8 @@ i_fp='undef' i_fp_class='undef' i_gdbm='undef' +i_gdbm_ndbm='undef' +i_gdbmndbm='undef' i_grp='undef' i_ieeefp='undef' i_inttypes='undef' ==== //depot/maint-5.10/perl/t/lib/strict/subs#2 (text) ==== Index: perl/t/lib/strict/subs --- perl/t/lib/strict/subs#1~32694~ 2007-12-22 01:23:09.000000000 -0800 +++ perl/t/lib/strict/subs 2008-05-30 18:54:46.000000000 -0700 @@ -393,3 +393,18 @@ EXPECT Bareword "FOO" not allowed while "strict subs" in use at - line 2. Execution of - aborted due to compilation errors. +######## +# [perl #53806] No complain about bareword +use strict 'subs'; +print FOO . "\n"; +EXPECT +Bareword "FOO" not allowed while "strict subs" in use at - line 3. +Execution of - aborted due to compilation errors. +######## +# [perl #53806] No complain about bareword +use strict 'subs'; +$ENV{PATH} = ""; +system(FOO . "\n"); +EXPECT +Bareword "FOO" not allowed while "strict subs" in use at - line 4. +Execution of - aborted due to compilation errors. ==== //depot/maint-5.10/perl/t/op/index.t#3 (xtext) ==== Index: perl/t/op/index.t --- perl/t/op/index.t#2~33920~ 2008-05-24 09:04:48.000000000 -0700 +++ perl/t/op/index.t 2008-05-30 18:54:46.000000000 -0700 @@ -7,7 +7,7 @@ } use strict; -plan( tests => 69 ); +plan( tests => 111 ); run_tests() unless caller; @@ -160,4 +160,42 @@ is(index($t, 'xyz'), 4, "0xfffffffd and utf8cache"); } + +# Tests for NUL characters. +{ + my @tests = ( + ["", -1, -1, -1], + ["foo", -1, -1, -1], + ["\0", 0, -1, -1], + ["\0\0", 0, 0, -1], + ["\0\0\0", 0, 0, 0], + ["foo\0", 3, -1, -1], + ["foo\0foo\0\0", 3, 7, -1], + ); + foreach my $l (1 .. 3) { + my $q = "\0" x $l; + my $i = 0; + foreach my $test (@tests) { + $i ++; + my $str = $$test [0]; + my $res = $$test [$l]; + + { + is (index ($str, $q), $res, "Find NUL character(s)"); + } + + # + # Bug #53746 shows a difference between variables and literals, + # so test literals as well. + # + my $test_str = qq {is (index ("$str", "$q"), $res, } . + qq {"Find NUL character(s)")}; + $test_str =~ s/\0/\\0/g; + + eval $test_str; + die $@ if $@; + } + } +} + } ==== //depot/maint-5.10/perl/toke.c#8 (text) ==== Index: perl/toke.c --- perl/toke.c#7~33953~ 2008-05-30 16:12:33.000000000 -0700 +++ perl/toke.c 2008-05-30 18:54:46.000000000 -0700 @@ -5596,10 +5596,10 @@ /* Call it a bare word */ + bareword: if (PL_hints & HINT_STRICT_SUBS) pl_yylval.opval->op_private |= OPpCONST_STRICT; else { - bareword: if (lastchar != '-') { if (ckWARN(WARN_RESERVED)) { d = PL_tokenbuf; ==== //depot/maint-5.10/perl/uconfig.sh#7 (xtext) ==== Index: perl/uconfig.sh --- perl/uconfig.sh#6~33894~ 2008-05-20 16:39:57.000000000 -0700 +++ perl/uconfig.sh 2008-05-30 18:54:46.000000000 -0700 @@ -533,6 +533,8 @@ i_fp='undef' i_fp_class='undef' i_gdbm='undef' +i_gdbm_ndbm='undef' +i_gdbmndbm='undef' i_grp='undef' i_ieeefp='undef' i_inttypes='undef' ==== //depot/maint-5.10/perl/util.c#5 (text) ==== Index: perl/util.c --- perl/util.c#4~33614~ 2008-03-31 09:59:07.000000000 -0700 +++ perl/util.c 2008-05-30 18:54:46.000000000 -0700 @@ -435,9 +435,9 @@ if (little >= lend) return (char*)big; { - char first = *little++; + char first = *little; const char *s, *x; - bigend -= lend - little; + bigend -= lend - little++; OUTER: while (big <= bigend) { if (*big++ == first) { ==== //depot/maint-5.10/perl/win32/config.bc#6 (text) ==== Index: perl/win32/config.bc --- perl/win32/config.bc#5~33894~ 2008-05-20 16:39:57.000000000 -0700 +++ perl/win32/config.bc 2008-05-30 18:54:46.000000000 -0700 @@ -613,6 +613,8 @@ i_fp='undef' i_fp_class='undef' i_gdbm='undef' +i_gdbm_ndbm='undef' +i_gdbmndbm='undef' i_grp='undef' i_ieeefp='undef' i_inttypes='undef' ==== //depot/maint-5.10/perl/win32/config.ce#6 (text) ==== Index: perl/win32/config.ce --- perl/win32/config.ce#5~33894~ 2008-05-20 16:39:57.000000000 -0700 +++ perl/win32/config.ce 2008-05-30 18:54:46.000000000 -0700 @@ -606,6 +606,8 @@ i_fp='undef' i_fp_class='undef' i_gdbm='undef' +i_gdbm_ndbm='undef' +i_gdbmndbm='undef' i_grp='undef' i_ieeefp='undef' i_inttypes='undef' ==== //depot/maint-5.10/perl/win32/config.gc#7 (text) ==== Index: perl/win32/config.gc --- perl/win32/config.gc#6~33894~ 2008-05-20 16:39:57.000000000 -0700 +++ perl/win32/config.gc 2008-05-30 18:54:46.000000000 -0700 @@ -613,6 +613,8 @@ i_fp='undef' i_fp_class='undef' i_gdbm='undef' +i_gdbm_ndbm='undef' +i_gdbmndbm='undef' i_grp='undef' i_ieeefp='undef' i_inttypes='undef' ==== //depot/maint-5.10/perl/win32/config.vc#7 (text) ==== Index: perl/win32/config.vc --- perl/win32/config.vc#6~33894~ 2008-05-20 16:39:57.000000000 -0700 +++ perl/win32/config.vc 2008-05-30 18:54:46.000000000 -0700 @@ -613,6 +613,8 @@ i_fp='undef' i_fp_class='undef' i_gdbm='undef' +i_gdbm_ndbm='undef' +i_gdbmndbm='undef' i_grp='undef' i_ieeefp='undef' i_inttypes='undef' ==== //depot/maint-5.10/perl/win32/config.vc64#7 (text) ==== Index: perl/win32/config.vc64 --- perl/win32/config.vc64#6~33894~ 2008-05-20 16:39:57.000000000 -0700 +++ perl/win32/config.vc64 2008-05-30 18:54:46.000000000 -0700 @@ -613,6 +613,8 @@ i_fp='undef' i_fp_class='undef' i_gdbm='undef' +i_gdbm_ndbm='undef' +i_gdbmndbm='undef' i_grp='undef' i_ieeefp='undef' i_inttypes='undef' End of Patch.