]> git.pld-linux.org Git - packages/perl-rpm-build-perl.git/blame - perl-rpm-build-perl-perl5.22.patch
- rebuild with perl 5.30.0
[packages/perl-rpm-build-perl.git] / perl-rpm-build-perl-perl5.22.patch
CommitLineData
cc3f43f5
JB
1From b73a37a7eb615693b5516068360f61d5b4e8f241 Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
3Date: Tue, 16 Jun 2015 18:20:20 +0200
4Subject: [PATCH] Adjust to perl-5.22
5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8
9Perl 5.22 brought changes in class/method opcodes, see perl commit
10
11commit b46e009d94293e069270690750f6c669c6d0ce22
12Author: syber <syber@crazypanda.ru>
13Date: Thu Sep 4 22:08:59 2014 +0400
14
15 Make OP_METHOD* to be of new class METHOP
16
17and optimizations in anoncode, see perl commit
18
19commit 01762542fcff2d3eb5e0fd287f28e872a0cfd5a4
20Author: Father Chrysostomos <sprout@cpan.org>
21Date: Sat Oct 18 10:23:26 2014 -0700
22
23 Use srefgen for anoncode
24
25and GV to IV optimizations when calling some subroutines.
26
27This patch implements the changes to make tests passing with perl
285.22 and previous versions too.
29
30CPAN RT#104885
31
32Signed-off-by: Petr Písař <ppisar@redhat.com>
33---
34 lib/B/PerlReq.pm | 24 +++++++++++++++++++-----
35 lib/B/Walker.pm | 9 ++++++++-
36 t/01-B-PerlReq.t | 3 +++
37 3 files changed, 30 insertions(+), 6 deletions(-)
38
39diff --git a/lib/B/PerlReq.pm b/lib/B/PerlReq.pm
40index 303454f..2e2a2ba 100644
41--- a/lib/B/PerlReq.pm
42+++ b/lib/B/PerlReq.pm
43@@ -44,7 +44,7 @@ our @Skip = (
44
45 our ($Strict, $Relaxed, $Verbose, $Debug);
46
47-use B::Walker qw(const_sv);
48+use B::Walker qw(const_methop const_sv);
49
50 sub RequiresPerl ($) {
51 my $v = shift;
52@@ -273,8 +273,13 @@ my %TryCV;
53 sub grok_try {
54 return unless $INC{"Try/Tiny.pm"};
55 my (undef, $op) = @_;
56- return unless $op->name eq "refgen";
57- $op = $op->first->first->sibling;
58+ if ($op->name eq "srefgen") {
59+ $op = $op->first->first;
60+ } elsif ($op->name eq "refgen") {
61+ $op = $op->first->first->sibling;
62+ } else {
63+ return;
64+ }
65 return unless $op->name eq "anoncode";
66 my $cv = padval($op->targ);
67 $TryCV{$$cv} = 1;
68@@ -304,7 +309,13 @@ sub grok_entersub ($) {
69 $op = $op->sibling;
70 }
71 if ($op->name eq "method_named") {
72- my $method = const_sv($op)->PV;
73+ my $method;
74+ if (ref($op) eq 'B::METHOP') {
75+ $method = const_methop($op);
76+ } else {
77+ $method = const_sv($op);
78+ }
79+ $method = $method->PV;
80 return unless $methods{$method};
81 return unless $args->name eq "const";
82 my $sv = const_sv($args);
83@@ -316,7 +327,10 @@ sub grok_entersub ($) {
84 elsif ($op->first->name eq "gv") {
85 $op = $op->first;
86 use B::Walker qw(padval);
87- my $func = padval($op->padix)->NAME;
88+ my $padval = padval($op->padix);
89+ # perl 5.22 sometimes optimizes to B::IV
90+ return unless ref $padval eq 'B::GV';
91+ my $func = $padval->NAME;
92 return unless $funcs{$func};
93 $funcs{$func}->($func, $args);
94 }
95diff --git a/lib/B/Walker.pm b/lib/B/Walker.pm
96index b71f204..9e3083c 100644
97--- a/lib/B/Walker.pm
98+++ b/lib/B/Walker.pm
99@@ -6,7 +6,7 @@ use strict;
100
101 require Exporter;
102 our @ISA = qw(Exporter);
103-our @EXPORT_OK = qw(padname padval const_sv walk);
104+our @EXPORT_OK = qw(padname padval const_methop const_sv walk);
105
106 our $CV;
107
108@@ -27,6 +27,13 @@ sub const_sv ($) {
109 return $sv;
110 }
111
112+sub const_methop ($) {
113+ my $op = shift;
114+ my $sv = $op->meth_sv;
115+ $sv = padval($op->targ) unless $$sv;
116+ return $sv;
117+}
118+
119 our $Level = 0;
120 our $Line;
121 our $Sub;
122diff --git a/t/01-B-PerlReq.t b/t/01-B-PerlReq.t
123index 7233cb6..6e02759 100644
124--- a/t/01-B-PerlReq.t
125+++ b/t/01-B-PerlReq.t
126@@ -139,4 +139,7 @@ EOF
127
128 cmp_ok "perl(Cwd.pm) >= 1.0", "eq", grok q(use Cwd 0==0);
129
130+# perl 5.22 sometimes optimizes to B::IV leading to crash
131+cmp_ok "$d", "eq", grok qq(sub foo{} foo; require $m;);
132+
133 #END { $? = 0; }
134--
1352.1.0
136
This page took 0.108048 seconds and 4 git commands to generate.