]> git.vpit.fr Git - perl/modules/Variable-Magic.git/commitdiff
Add support for 5.37.3's PADSV_STORE optimization rt144052
authorRichard Leach <hydahy@cpan.org>
Tue, 20 Sep 2022 21:16:06 +0000 (23:16 +0200)
committerVincent Pit <vpit@cpan.org>
Tue, 20 Sep 2022 21:17:53 +0000 (23:17 +0200)
Teach B.pm-related tests about this new thing.

This fixes RT #144052.

t/18-opinfo.t
t/40-threads.t
t/41-clone.t

index bcc70a0b8355ecc96198d4d5da3dc4e2e7af664c..0147a6c612715f80549ab44761a83a89cd55c99a 100644 (file)
@@ -16,10 +16,19 @@ my $is_5130_release = ("$]" == 5.013 && !$Config{git_describe}) ? 1 : 0;
 my $aelem     = "$]" <= 5.008_003 ? 'aelem'
                                   : ("$]" < 5.013 or $is_5130_release)
                                                    ? 'aelemfast'
-                                                   : 'sassign';
-my $aelemf    = ("$]" < 5.013 or $is_5130_release) ? 'aelemfast' : 'sassign';
-my $aelemf_op = ($aelemf eq 'sassign')
-                   ? 'B::BINOP' : $Config{useithreads} ? 'B::PADOP' : 'B::SVOP';
+                                  : ("$]" < 5.037_003)
+                                                   ? 'sassign'
+                                                   : 'padsv_store';
+my $aelemf    = ("$]" < 5.013 or $is_5130_release) ? 'aelemfast'
+                                  : ("$]" < 5.037_003) ? 'sassign'
+                                                       : 'padsv_store';
+
+my $assign_op    = ("$]" < 5.037_003) ? 'sassign': 'padsv_store';
+my $assign_op_cl = ("$]" < 5.037_003) ? 'B::BINOP': 'B::UNOP';
+
+my $aelemf_op = ($aelemf eq 'sassign')     ? 'B::BINOP'
+              : ($aelemf eq 'padsv_store') ? 'B::UNOP'
+              : $Config{useithreads} ? 'B::PADOP' : 'B::SVOP';
 my $meth_op   = ("$]" < 5.021_005) ? 'B::SVOP' : 'B::METHOP';
 my $trutf_op  = ($Config{useithreads} && "$]" >= 5.008_009)
                    ? 'B::PADOP' : 'B::SVOP';
@@ -36,7 +45,7 @@ my @tests = (
                                                    [ $deref,    $deref_op   ] ],
  [ 'get', '$c',    'my $c = 1',  '++$c',           [ 'preinc',  'B::UNOP'   ] ],
  [ 'get', '$c',    'my $c = 1',  '$c ** 2',        [ 'pow',     'B::BINOP'  ] ],
- [ 'get', '$c',    'my $c = 1',  'my $x = $c',     [ 'sassign', 'B::BINOP'  ] ],
+ [ 'get', '$c',    'my $c = 1',  'my $x = $c',     [ $assign_op, $assign_op_cl ] ],
  [ 'get', '$c',    'my $c = 1',  '1 if $c',        [ 'and',     'B::LOGOP'  ] ],
  [ 'get', '$c',    'my $c = []', 'ref $c',         [ 'ref',     'B::UNOP'   ] ],
  [ 'get', '$c',    'my $c = $0', '-f $c',          [ 'ftfile',  'B::UNOP'   ] ],
index 151116bab11f44b9aebe5b25a1e6240380d8576a..85d51934635b395a1801f4378fe6d2b54f8eaa68 100644 (file)
@@ -33,12 +33,15 @@ sub try {
     set     => sub {
      my $op = $_[-1];
 
+     my $assign_op    = ("$]" < 5.037_003) ? 'sassign': 'padsv_store';
+     my $assign_op_cl = ("$]" < 5.037_003) ? 'B::BINOP': 'B::UNOP';
+
      if ($op_info eq 'object') {
       is_deeply { class => ref($op),   name => $op->name },
-                { class => 'B::BINOP', name => 'sassign' },
+                { class => $assign_op_cl, name => $assign_op },
                 "op object in thread $tid is correct";
      } else {
-      is $op, 'sassign', "op name in thread $tid is correct";
+      is $op, $assign_op, "op name in thread $tid is correct";
      }
 
      return 0;
index 2058cc58ed67c14cec7219ef5cb71f3ccad802f4..a35a2a57303ee8c811d1971dbba66c0be9a97379 100644 (file)
@@ -32,12 +32,15 @@ sub spawn_wiz {
     my $op = $_[-1];
     my $tid = threads->tid();
 
+     my $assign_op    = ("$]" < 5.037_003) ? 'sassign': 'padsv_store';
+     my $assign_op_cl = ("$]" < 5.037_003) ? 'B::BINOP': 'B::UNOP';
+
     if ($op_info == VMG_OP_INFO_OBJECT) {
      is_deeply { class => ref($op),   name => $op->name },
-               { class => 'B::BINOP', name => 'sassign' },
+               { class => $assign_op_cl, name => $assign_op },
                "op object in thread $tid is correct";
     } else {
-     is $op, 'sassign', "op name in thread $tid is correct";
+     is $op, $assign_op, "op name in thread $tid is correct";
     }
 
     return 0