|
|
faeaaf0 |
--- perl-5.8.8/ext/B/B/Deparse.pm-28
|
|
|
faeaaf0 |
+++ perl-5.8.8/ext/B/B/Deparse.pm
|
|
|
faeaaf0 |
@@ -19,7 +19,7 @@
|
|
|
faeaaf0 |
CVf_METHOD CVf_LOCKED CVf_LVALUE CVf_ASSERTION
|
|
|
faeaaf0 |
PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE PMf_SKIPWHITE
|
|
|
faeaaf0 |
PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED);
|
|
|
faeaaf0 |
-$VERSION = 0.71;
|
|
|
faeaaf0 |
+$VERSION = 0.71_01;
|
|
|
faeaaf0 |
use strict;
|
|
|
faeaaf0 |
use vars qw/$AUTOLOAD/;
|
|
|
faeaaf0 |
use warnings ();
|
|
|
faeaaf0 |
@@ -1711,6 +1711,32 @@
|
|
|
faeaaf0 |
return $self->{'curcv'}->PADLIST->ARRAYelt(1)->ARRAYelt($targ);
|
|
|
faeaaf0 |
}
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
+sub anon_hash_or_list {
|
|
|
faeaaf0 |
+ my $self = shift;
|
|
|
faeaaf0 |
+ my $op = shift;
|
|
|
faeaaf0 |
+
|
|
|
faeaaf0 |
+ my($pre, $post) = @{{"anonlist" => ["[","]"],
|
|
|
faeaaf0 |
+ "anonhash" => ["{","}"]}->{$op->name}};
|
|
|
faeaaf0 |
+ my($expr, @exprs);
|
|
|
faeaaf0 |
+ $op = $op->first->sibling; # skip pushmark
|
|
|
faeaaf0 |
+ for (; !null($op); $op = $op->sibling) {
|
|
|
faeaaf0 |
+ $expr = $self->deparse($op, 6);
|
|
|
faeaaf0 |
+ push @exprs, $expr;
|
|
|
faeaaf0 |
+ }
|
|
|
faeaaf0 |
+ return $pre . join(", ", @exprs) . $post;
|
|
|
faeaaf0 |
+}
|
|
|
faeaaf0 |
+
|
|
|
faeaaf0 |
+sub pp_anonlist {
|
|
|
faeaaf0 |
+ my ($self, $op) = @_;
|
|
|
faeaaf0 |
+ if ($op->flags & OPf_SPECIAL) {
|
|
|
faeaaf0 |
+ return $self->anon_hash_or_list($op);
|
|
|
faeaaf0 |
+ }
|
|
|
faeaaf0 |
+ warn "Unexpected op pp_" . $op->name() . " without OPf_SPECIAL";
|
|
|
faeaaf0 |
+ return 'XXX';
|
|
|
faeaaf0 |
+}
|
|
|
faeaaf0 |
+
|
|
|
faeaaf0 |
+*pp_anonhash = \&pp_anonlist;
|
|
|
faeaaf0 |
+
|
|
|
faeaaf0 |
sub pp_refgen {
|
|
|
faeaaf0 |
my $self = shift;
|
|
|
faeaaf0 |
my($op, $cx) = @_;
|
|
|
faeaaf0 |
@@ -1718,15 +1744,7 @@
|
|
|
faeaaf0 |
if ($kid->name eq "null") {
|
|
|
faeaaf0 |
$kid = $kid->first;
|
|
|
faeaaf0 |
if ($kid->name eq "anonlist" || $kid->name eq "anonhash") {
|
|
|
faeaaf0 |
- my($pre, $post) = @{{"anonlist" => ["[","]"],
|
|
|
faeaaf0 |
- "anonhash" => ["{","}"]}->{$kid->name}};
|
|
|
faeaaf0 |
- my($expr, @exprs);
|
|
|
faeaaf0 |
- $kid = $kid->first->sibling; # skip pushmark
|
|
|
faeaaf0 |
- for (; !null($kid); $kid = $kid->sibling) {
|
|
|
faeaaf0 |
- $expr = $self->deparse($kid, 6);
|
|
|
faeaaf0 |
- push @exprs, $expr;
|
|
|
faeaaf0 |
- }
|
|
|
faeaaf0 |
- return $pre . join(", ", @exprs) . $post;
|
|
|
faeaaf0 |
+ return $self->anon_hash_or_list($op);
|
|
|
faeaaf0 |
} elsif (!null($kid->sibling) and
|
|
|
faeaaf0 |
$kid->sibling->name eq "anoncode") {
|
|
|
faeaaf0 |
return "sub " .
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
--- perl-5.8.8/ext/B/t/concise-xs.t.orig 2007-06-22 13:35:00.000000000 -0400
|
|
|
faeaaf0 |
+++ perl-5.8.8/ext/B/t/concise-xs.t 2007-06-22 13:35:22.000000000 -0400
|
|
|
faeaaf0 |
@@ -95,7 +95,7 @@
|
|
|
faeaaf0 |
# One 5.009-only test to go when no 6; is integrated (25344)
|
|
|
faeaaf0 |
use Test::More tests => ( 1 * !!$Config::Config{useithreads}
|
|
|
faeaaf0 |
+ 1 * ($] > 5.009)
|
|
|
faeaaf0 |
- + 778);
|
|
|
faeaaf0 |
+ + 781);
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
require_ok("B::Concise");
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
--- perl-5.8.8/ext/B/t/f_map.t-7
|
|
|
faeaaf0 |
+++ perl-5.8.8/ext/B/t/f_map.t
|
|
|
faeaaf0 |
@@ -512,14 +512,13 @@
|
|
|
faeaaf0 |
# 9 <#> gvsv[*_] s
|
|
|
faeaaf0 |
# a <1> lc[t4] sK/1
|
|
|
faeaaf0 |
# b <$> const[IV 1] s
|
|
|
faeaaf0 |
-# c <@> anonhash sKRM/1
|
|
|
faeaaf0 |
-# d <1> srefgen sK/1
|
|
|
faeaaf0 |
+# c <@> anonhash sK*/1
|
|
|
faeaaf0 |
# goto 7
|
|
|
faeaaf0 |
-# e <0> pushmark s
|
|
|
faeaaf0 |
-# f <#> gv[*hashes] s
|
|
|
faeaaf0 |
-# g <1> rv2av[t2] lKRM*/1
|
|
|
faeaaf0 |
-# h <2> aassign[t8] KS/COMMON
|
|
|
faeaaf0 |
-# i <1> leavesub[1 ref] K/REFC,1
|
|
|
faeaaf0 |
+# d <0> pushmark s
|
|
|
faeaaf0 |
+# e <#> gv[*hashes] s
|
|
|
faeaaf0 |
+# f <1> rv2av[t2] lKRM*/1
|
|
|
faeaaf0 |
+# g <2> aassign[t8] KS/COMMON
|
|
|
faeaaf0 |
+# h <1> leavesub[1 ref] K/REFC,1
|
|
|
faeaaf0 |
EOT_EOT
|
|
|
faeaaf0 |
# 1 <;> nextstate(main 601 (eval 32):1) v
|
|
|
faeaaf0 |
# 2 <0> pushmark s
|
|
|
faeaaf0 |
@@ -532,12 +531,11 @@
|
|
|
faeaaf0 |
# 9 <$> gvsv(*_) s
|
|
|
faeaaf0 |
# a <1> lc[t2] sK/1
|
|
|
faeaaf0 |
# b <$> const(IV 1) s
|
|
|
faeaaf0 |
-# c <@> anonhash sKRM/1
|
|
|
faeaaf0 |
-# d <1> srefgen sK/1
|
|
|
faeaaf0 |
+# c <@> anonhash sK*/1
|
|
|
faeaaf0 |
# goto 7
|
|
|
faeaaf0 |
-# e <0> pushmark s
|
|
|
faeaaf0 |
-# f <$> gv(*hashes) s
|
|
|
faeaaf0 |
-# g <1> rv2av[t1] lKRM*/1
|
|
|
faeaaf0 |
-# h <2> aassign[t5] KS/COMMON
|
|
|
faeaaf0 |
-# i <1> leavesub[1 ref] K/REFC,1
|
|
|
faeaaf0 |
+# d <0> pushmark s
|
|
|
faeaaf0 |
+# e <$> gv(*hashes) s
|
|
|
faeaaf0 |
+# f <1> rv2av[t1] lKRM*/1
|
|
|
faeaaf0 |
+# g <2> aassign[t5] KS/COMMON
|
|
|
faeaaf0 |
+# h <1> leavesub[1 ref] K/REFC,1
|
|
|
faeaaf0 |
EONT_EONT
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
--- perl-5.8.8/ext/B/t/f_sort.t-9
|
|
|
faeaaf0 |
+++ perl-5.8.8/ext/B/t/f_sort.t
|
|
|
faeaaf0 |
@@ -516,25 +516,24 @@
|
|
|
faeaaf0 |
# e match(/"=(\\d+)"/) l/RTIME
|
|
|
faeaaf0 |
# f <#> gvsv[*_] s
|
|
|
faeaaf0 |
# g <1> uc[t17] sK/1
|
|
|
faeaaf0 |
-# h <@> anonlist sKRM/1
|
|
|
faeaaf0 |
-# i <1> srefgen sK/1
|
|
|
faeaaf0 |
-# j <@> leave lKP
|
|
|
faeaaf0 |
+# h <@> anonlist sK*/1
|
|
|
faeaaf0 |
+# i <@> leave lKP
|
|
|
faeaaf0 |
# goto 9
|
|
|
faeaaf0 |
-# k <@> sort lKMS*
|
|
|
faeaaf0 |
-# l <@> mapstart lK*
|
|
|
faeaaf0 |
-# m <|> mapwhile(other->n)[t26] lK
|
|
|
faeaaf0 |
-# n <#> gv[*_] s
|
|
|
faeaaf0 |
-# o <1> rv2sv sKM/DREFAV,1
|
|
|
faeaaf0 |
-# p <1> rv2av[t4] sKR/1
|
|
|
faeaaf0 |
-# q <$> const[IV 0] s
|
|
|
faeaaf0 |
-# r <2> aelem sK/2
|
|
|
faeaaf0 |
+# j <@> sort lKMS*
|
|
|
faeaaf0 |
+# k <@> mapstart lK*
|
|
|
faeaaf0 |
+# l <|> mapwhile(other->m)[t26] lK
|
|
|
faeaaf0 |
+# m <#> gv[*_] s
|
|
|
faeaaf0 |
+# n <1> rv2sv sKM/DREFAV,1
|
|
|
faeaaf0 |
+# o <1> rv2av[t4] sKR/1
|
|
|
faeaaf0 |
+# p <$> const[IV 0] s
|
|
|
faeaaf0 |
+# q <2> aelem sK/2
|
|
|
faeaaf0 |
# - <@> scope lK
|
|
|
faeaaf0 |
-# goto m
|
|
|
faeaaf0 |
-# s <0> pushmark s
|
|
|
faeaaf0 |
-# t <#> gv[*new] s
|
|
|
faeaaf0 |
-# u <1> rv2av[t2] lKRM*/1
|
|
|
faeaaf0 |
-# v <2> aassign[t27] KS/COMMON
|
|
|
faeaaf0 |
-# w <1> leavesub[1 ref] K/REFC,1
|
|
|
faeaaf0 |
+# goto l
|
|
|
faeaaf0 |
+# r <0> pushmark s
|
|
|
faeaaf0 |
+# s <#> gv[*new] s
|
|
|
faeaaf0 |
+# t <1> rv2av[t2] lKRM*/1
|
|
|
faeaaf0 |
+# u <2> aassign[t27] KS/COMMON
|
|
|
faeaaf0 |
+# v <1> leavesub[1 ref] K/REFC,1
|
|
|
faeaaf0 |
EOT_EOT
|
|
|
faeaaf0 |
# 1 <;> nextstate(main 609 (eval 34):3) v
|
|
|
faeaaf0 |
# 2 <0> pushmark s
|
|
|
faeaaf0 |
@@ -552,25 +551,24 @@
|
|
|
faeaaf0 |
# e match(/"=(\\d+)"/) l/RTIME
|
|
|
faeaaf0 |
# f <$> gvsv(*_) s
|
|
|
faeaaf0 |
# g <1> uc[t9] sK/1
|
|
|
faeaaf0 |
-# h <@> anonlist sKRM/1
|
|
|
faeaaf0 |
-# i <1> srefgen sK/1
|
|
|
faeaaf0 |
-# j <@> leave lKP
|
|
|
faeaaf0 |
+# h <@> anonlist sK*/1
|
|
|
faeaaf0 |
+# i <@> leave lKP
|
|
|
faeaaf0 |
# goto 9
|
|
|
faeaaf0 |
-# k <@> sort lKMS*
|
|
|
faeaaf0 |
-# l <@> mapstart lK*
|
|
|
faeaaf0 |
-# m <|> mapwhile(other->n)[t12] lK
|
|
|
faeaaf0 |
-# n <$> gv(*_) s
|
|
|
faeaaf0 |
-# o <1> rv2sv sKM/DREFAV,1
|
|
|
faeaaf0 |
-# p <1> rv2av[t2] sKR/1
|
|
|
faeaaf0 |
-# q <$> const(IV 0) s
|
|
|
faeaaf0 |
-# r <2> aelem sK/2
|
|
|
faeaaf0 |
+# j <@> sort lKMS*
|
|
|
faeaaf0 |
+# k <@> mapstart lK*
|
|
|
faeaaf0 |
+# l <|> mapwhile(other->m)[t12] lK
|
|
|
faeaaf0 |
+# m <$> gv(*_) s
|
|
|
faeaaf0 |
+# n <1> rv2sv sKM/DREFAV,1
|
|
|
faeaaf0 |
+# o <1> rv2av[t2] sKR/1
|
|
|
faeaaf0 |
+# p <$> const(IV 0) s
|
|
|
faeaaf0 |
+# q <2> aelem sK/2
|
|
|
faeaaf0 |
# - <@> scope lK
|
|
|
faeaaf0 |
-# goto m
|
|
|
faeaaf0 |
-# s <0> pushmark s
|
|
|
faeaaf0 |
-# t <$> gv(*new) s
|
|
|
faeaaf0 |
-# u <1> rv2av[t1] lKRM*/1
|
|
|
faeaaf0 |
-# v <2> aassign[t13] KS/COMMON
|
|
|
faeaaf0 |
-# w <1> leavesub[1 ref] K/REFC,1
|
|
|
faeaaf0 |
+# goto l
|
|
|
faeaaf0 |
+# r <0> pushmark s
|
|
|
faeaaf0 |
+# s <$> gv(*new) s
|
|
|
faeaaf0 |
+# t <1> rv2av[t1] lKRM*/1
|
|
|
faeaaf0 |
+# u <2> aassign[t13] KS/COMMON
|
|
|
faeaaf0 |
+# v <1> leavesub[1 ref] K/REFC,1
|
|
|
faeaaf0 |
EONT_EONT
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
--- perl-5.8.8/ext/Devel/Peek/t/Peek.t-8
|
|
|
faeaaf0 |
+++ perl-5.8.8/ext/Devel/Peek/t/Peek.t
|
|
|
faeaaf0 |
@@ -165,7 +165,7 @@
|
|
|
faeaaf0 |
FLAGS = \\(ROK\\)
|
|
|
faeaaf0 |
RV = $ADDR
|
|
|
faeaaf0 |
SV = PVAV\\($ADDR\\) at $ADDR
|
|
|
faeaaf0 |
- REFCNT = 2
|
|
|
faeaaf0 |
+ REFCNT = 1
|
|
|
faeaaf0 |
FLAGS = \\(\\)
|
|
|
faeaaf0 |
IV = 0
|
|
|
faeaaf0 |
NV = 0
|
|
|
faeaaf0 |
@@ -188,7 +188,7 @@
|
|
|
faeaaf0 |
FLAGS = \\(ROK\\)
|
|
|
faeaaf0 |
RV = $ADDR
|
|
|
faeaaf0 |
SV = PVHV\\($ADDR\\) at $ADDR
|
|
|
faeaaf0 |
- REFCNT = 2
|
|
|
faeaaf0 |
+ REFCNT = 1
|
|
|
faeaaf0 |
FLAGS = \\(SHAREKEYS\\)
|
|
|
faeaaf0 |
IV = 1
|
|
|
faeaaf0 |
NV = $FLOAT
|
|
|
faeaaf0 |
@@ -284,7 +284,7 @@
|
|
|
faeaaf0 |
FLAGS = \\(ROK\\)
|
|
|
faeaaf0 |
RV = $ADDR
|
|
|
faeaaf0 |
SV = PVHV\\($ADDR\\) at $ADDR
|
|
|
faeaaf0 |
- REFCNT = 2
|
|
|
faeaaf0 |
+ REFCNT = 1
|
|
|
faeaaf0 |
FLAGS = \\(OBJECT,SHAREKEYS\\)
|
|
|
faeaaf0 |
IV = 0
|
|
|
faeaaf0 |
NV = 0
|
|
|
faeaaf0 |
@@ -353,7 +353,7 @@
|
|
|
faeaaf0 |
FLAGS = \\(ROK\\)
|
|
|
faeaaf0 |
RV = $ADDR
|
|
|
faeaaf0 |
SV = PVHV\\($ADDR\\) at $ADDR
|
|
|
faeaaf0 |
- REFCNT = 2
|
|
|
faeaaf0 |
+ REFCNT = 1
|
|
|
faeaaf0 |
FLAGS = \\(SHAREKEYS,HASKFLAGS\\)
|
|
|
faeaaf0 |
UV = 1
|
|
|
faeaaf0 |
NV = $FLOAT
|
|
|
faeaaf0 |
@@ -379,7 +379,7 @@
|
|
|
faeaaf0 |
FLAGS = \\(ROK\\)
|
|
|
faeaaf0 |
RV = $ADDR
|
|
|
faeaaf0 |
SV = PVHV\\($ADDR\\) at $ADDR
|
|
|
faeaaf0 |
- REFCNT = 2
|
|
|
faeaaf0 |
+ REFCNT = 1
|
|
|
faeaaf0 |
FLAGS = \\(SHAREKEYS,HASKFLAGS\\)
|
|
|
faeaaf0 |
UV = 1
|
|
|
faeaaf0 |
NV = 0
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
--- perl-5.8.8/op.c-137
|
|
|
faeaaf0 |
+++ perl-5.8.8/op.c
|
|
|
faeaaf0 |
@@ -2230,6 +2230,8 @@
|
|
|
faeaaf0 |
pp_pushmark();
|
|
|
faeaaf0 |
CALLRUNOPS(aTHX);
|
|
|
faeaaf0 |
PL_op = curop;
|
|
|
faeaaf0 |
+ assert (!(curop->op_flags & OPf_SPECIAL));
|
|
|
faeaaf0 |
+ assert(curop->op_type == OP_RANGE);
|
|
|
faeaaf0 |
pp_anonlist();
|
|
|
faeaaf0 |
PL_tmps_floor = oldtmps_floor;
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
@@ -4861,15 +4863,13 @@
|
|
|
faeaaf0 |
OP *
|
|
|
faeaaf0 |
Perl_newANONLIST(pTHX_ OP *o)
|
|
|
faeaaf0 |
{
|
|
|
faeaaf0 |
- return newUNOP(OP_REFGEN, 0,
|
|
|
faeaaf0 |
- mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
|
|
|
faeaaf0 |
+ return convert(OP_ANONLIST, OPf_SPECIAL, o);
|
|
|
faeaaf0 |
}
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
OP *
|
|
|
faeaaf0 |
Perl_newANONHASH(pTHX_ OP *o)
|
|
|
faeaaf0 |
{
|
|
|
faeaaf0 |
- return newUNOP(OP_REFGEN, 0,
|
|
|
faeaaf0 |
- mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
|
|
|
faeaaf0 |
+ return convert(OP_ANONHASH, OPf_SPECIAL, o);
|
|
|
faeaaf0 |
}
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
OP *
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
--- perl-5.8.8/op.h-26
|
|
|
faeaaf0 |
+++ perl-5.8.8/op.h
|
|
|
faeaaf0 |
@@ -103,5 +103,7 @@
|
|
|
faeaaf0 |
* (runtime property) */
|
|
|
faeaaf0 |
/* On OP_AELEMFAST, indiciates pad var */
|
|
|
faeaaf0 |
+ /* On OP_ANONHASH and OP_ANONLIST, create a
|
|
|
faeaaf0 |
+ reference to the new anon hash or array */
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
/* old names; don't use in new code, but don't break them, either */
|
|
|
faeaaf0 |
#define OPf_LIST OPf_WANT_LIST
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
--- perl-5.8.8/pp.c-101
|
|
|
faeaaf0 |
+++ perl-5.8.8/pp.c
|
|
|
faeaaf0 |
@@ -4036,16 +4036,17 @@
|
|
|
faeaaf0 |
{
|
|
|
faeaaf0 |
dSP; dMARK; dORIGMARK;
|
|
|
faeaaf0 |
const I32 items = SP - MARK;
|
|
|
faeaaf0 |
- SV * const av = sv_2mortal((SV*)av_make(items, MARK+1));
|
|
|
faeaaf0 |
+ SV * const av = (SV *) av_make(items, MARK+1);
|
|
|
faeaaf0 |
SP = ORIGMARK; /* av_make() might realloc stack_sp */
|
|
|
faeaaf0 |
- XPUSHs(av);
|
|
|
faeaaf0 |
+ XPUSHs(sv_2mortal((PL_op->op_flags & OPf_SPECIAL)
|
|
|
faeaaf0 |
+ ? newRV_noinc(av) : av));
|
|
|
faeaaf0 |
RETURN;
|
|
|
faeaaf0 |
}
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
PP(pp_anonhash)
|
|
|
faeaaf0 |
{
|
|
|
faeaaf0 |
dSP; dMARK; dORIGMARK;
|
|
|
faeaaf0 |
- HV* const hv = (HV*)sv_2mortal((SV*)newHV());
|
|
|
faeaaf0 |
+ HV* const hv = newHV();
|
|
|
faeaaf0 |
|
|
|
faeaaf0 |
while (MARK < SP) {
|
|
|
faeaaf0 |
SV * const key = *++MARK;
|
|
|
faeaaf0 |
@@ -4057,7 +4058,8 @@
|
|
|
faeaaf0 |
(void)hv_store_ent(hv,key,val,0);
|
|
|
faeaaf0 |
}
|
|
|
faeaaf0 |
SP = ORIGMARK;
|
|
|
faeaaf0 |
- XPUSHs((SV*)hv);
|
|
|
faeaaf0 |
+ XPUSHs(sv_2mortal((PL_op->op_flags & OPf_SPECIAL)
|
|
|
faeaaf0 |
+ ? newRV_noinc((SV*) hv) : (SV*)hv));
|
|
|
faeaaf0 |
RETURN;
|
|
|
faeaaf0 |
}
|