In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/e9fb18e45b1f91aa054cc8f7722759bb3d9bdf8e?hp=17b0bd7713345613d9d19e31a82f42fc48ddcfc5>

- Log -----------------------------------------------------------------
commit e9fb18e45b1f91aa054cc8f7722759bb3d9bdf8e
Author: David Mitchell <[email protected]>
Date:   Tue Sep 27 11:52:07 2016 +0100

    padrange, aelemfast: use label for private bits
    
    Change the output of Concise etc:
    
        $ perl -MO=Concise -e'my (@a,$b,$c); $a[5];'
    
    from:
    
        3  <0> padrange[@a:1,2; $b:1,2; $c:1,2] vM/LVINTRO,3
        ...
        5  <0> aelemfast_lex[@a:1,2] sR/5
    
    to:
    
        3  <0> padrange[@a:1,2; $b:1,2; $c:1,2] vM/LVINTRO,range=3
        ...
        5  <0> aelemfast_lex[@a:1,2] sR/key=5
    
    See http://nntp.perl.org/group/perl.perl5.porters/220208.

M       ext/B/t/optree_misc.t
M       ext/B/t/optree_samples.t
M       ext/B/t/optree_varinit.t
M       lib/B/Op_private.pm
M       opcode.h
M       regen/op_private

commit e1e26374b6830fb0b701a313db8784720200d0b5
Author: David Mitchell <[email protected]>
Date:   Tue Sep 27 11:44:42 2016 +0100

    OP_AVHVSWITCH: make op_private bits 0..1 symbolic
    
    Add OPpAVHVSWITCH_MASK and make Concise etc display the offset as
    /offset=2 rather than /2.

M       lib/B/Op_private.pm
M       opcode.h
M       pp.c
M       regen/op_private
-----------------------------------------------------------------------

Summary of changes:
 ext/B/t/optree_misc.t    | 40 ++++++++++++++++++++--------------------
 ext/B/t/optree_samples.t |  4 ++--
 ext/B/t/optree_varinit.t |  4 ++--
 lib/B/Op_private.pm      |  7 +++++--
 opcode.h                 | 12 ++++++++----
 pp.c                     |  2 +-
 regen/op_private         | 12 +++++++++---
 7 files changed, 47 insertions(+), 34 deletions(-)

diff --git a/ext/B/t/optree_misc.t b/ext/B/t/optree_misc.t
index 2d6b80f..6505f65 100644
--- a/ext/B/t/optree_misc.t
+++ b/ext/B/t/optree_misc.t
@@ -37,11 +37,11 @@ checkOptree ( name  => 'OP_AELEMFAST opclass',
 # 3        <;> nextstate(main 636 optree_misc.t:25) v:>,<,%,{ ->4
 # 6        <2> add[t6] sK/2 ->7
 # -           <1> ex-aelem sK/2 ->5
-# 4              <0> aelemfast_lex[@x:634,636] sR/127 ->5
+# 4              <0> aelemfast_lex[@x:634,636] sR/key=127 ->5
 # -              <0> ex-const s ->-
 # -           <1> ex-aelem sK/2 ->6
 # -              <1> ex-rv2av sKR/1 ->-
-# 5                 <#> aelemfast[*y] s/128 ->6
+# 5                 <#> aelemfast[*y] s/key=128 ->6
 # -              <0> ex-const s/FOLD ->-
 EOT_EOT
 # 7  <1> leavesub[1 ref] K/REFC,1 ->(end)
@@ -54,11 +54,11 @@ EOT_EOT
 # 3        <;> nextstate(main 636 optree_misc.t:27) v:>,<,%,{ ->4
 # 6        <2> add[t4] sK/2 ->7
 # -           <1> ex-aelem sK/2 ->5
-# 4              <0> aelemfast_lex[@x:634,636] sR/127 ->5
+# 4              <0> aelemfast_lex[@x:634,636] sR/key=127 ->5
 # -              <0> ex-const s ->-
 # -           <1> ex-aelem sK/2 ->6
 # -              <1> ex-rv2av sKR/1 ->-
-# 5                 <$> aelemfast(*y) s/128 ->6
+# 5                 <$> aelemfast(*y) s/key=128 ->6
 # -              <0> ex-const s/FOLD ->-
 EONT_EONT
 
@@ -201,13 +201,13 @@ checkOptree ( name      => 'padrange',
 # -     <@> lineseq KP ->f
 # 1        <;> nextstate(main 1 -e:1) v:>,<,% ->2
 # -        <@> list vKP ->3
-# 2           <0> padrange[$x:1,2; $y:1,2] vM/LVINTRO,2 ->3
+# 2           <0> padrange[$x:1,2; $y:1,2] vM/LVINTRO,range=2 ->3
 # -           <0> padsv[$x:1,2] vM/LVINTRO ->-
 # -           <0> padsv[$y:1,2] vM/LVINTRO ->-
 # 3        <;> nextstate(main 2 -e:1) v:>,<,% ->4
 # 8        <2> aassign[t4] vKS/COM_AGG ->9
 # -           <1> ex-list lKP ->5
-# 4              <0> padrange[$x:1,2; $y:1,2] /2 ->5
+# 4              <0> padrange[$x:1,2; $y:1,2] /range=2 ->5
 # -              <0> padsv[$x:1,2] s ->-
 # -              <0> padsv[$y:1,2] s ->-
 # -           <1> ex-list lK ->8
@@ -221,7 +221,7 @@ checkOptree ( name      => 'padrange',
 # c              <1> rv2av[t5] lK/1 ->d
 # b                 <#> gv[*a] s ->c
 # -           <1> ex-list lKPRM* ->e
-# d              <0> padrange[$x:1,2; $y:1,2] RM/2 ->e
+# d              <0> padrange[$x:1,2; $y:1,2] RM/range=2 ->e
 # -              <0> padsv[$x:1,2] sRM* ->-
 # -              <0> padsv[$y:1,2] sRM* ->-
 EOT_EOT
@@ -229,13 +229,13 @@ EOT_EOT
 # -     <@> lineseq KP ->f
 # 1        <;> nextstate(main 1 -e:1) v:>,<,% ->2
 # -        <@> list vKP ->3
-# 2           <0> padrange[$x:1,2; $y:1,2] vM/LVINTRO,2 ->3
+# 2           <0> padrange[$x:1,2; $y:1,2] vM/LVINTRO,range=2 ->3
 # -           <0> padsv[$x:1,2] vM/LVINTRO ->-
 # -           <0> padsv[$y:1,2] vM/LVINTRO ->-
 # 3        <;> nextstate(main 2 -e:1) v:>,<,% ->4
 # 8        <2> aassign[t4] vKS/COM_AGG ->9
 # -           <1> ex-list lKP ->5
-# 4              <0> padrange[$x:1,2; $y:1,2] /2 ->5
+# 4              <0> padrange[$x:1,2; $y:1,2] /range=2 ->5
 # -              <0> padsv[$x:1,2] s ->-
 # -              <0> padsv[$y:1,2] s ->-
 # -           <1> ex-list lK ->8
@@ -249,7 +249,7 @@ EOT_EOT
 # c              <1> rv2av[t5] lK/1 ->d
 # b                 <$> gv(*a) s ->c
 # -           <1> ex-list lKPRM* ->e
-# d              <0> padrange[$x:1,2; $y:1,2] RM/2 ->e
+# d              <0> padrange[$x:1,2; $y:1,2] RM/range=2 ->e
 # -              <0> padsv[$x:1,2] sRM* ->-
 # -              <0> padsv[$y:1,2] sRM* ->-
 EONT_EONT
@@ -268,7 +268,7 @@ checkOptree ( name      => 'padrange and @_',
 # 1        <;> nextstate(main 1 p3:1) v:>,<,% ->2
 # 3        <2> aassign[t5] vKS ->4
 # -           <1> ex-list lK ->-
-# 2              <0> padrange[$a:1,4; $b:1,4] */LVINTRO,2 ->3
+# 2              <0> padrange[$a:1,4; $b:1,4] */LVINTRO,range=2 ->3
 # -              <1> rv2av[t4] lK/1 ->-
 # -                 <#> gv[*_] s ->-
 # -           <1> ex-list lKPRM* ->3
@@ -282,13 +282,13 @@ checkOptree ( name      => 'padrange and @_',
 # 7              <1> rv2av[t9] lK/1 ->8
 # 6                 <#> gv[*X::_] s ->7
 # -           <1> ex-list lKPRM* ->9
-# 8              <0> padrange[$c:2,4; $d:2,4] RM/LVINTRO,2 ->9
+# 8              <0> padrange[$c:2,4; $d:2,4] RM/LVINTRO,range=2 ->9
 # -              <0> padsv[$c:2,4] sRM*/LVINTRO ->-
 # -              <0> padsv[$d:2,4] sRM*/LVINTRO ->-
 # a        <;> nextstate(Y 3 p3:4) v:>,<,%,{ ->b
 # c        <2> aassign[t15] KS ->d
 # -           <1> ex-list lK ->-
-# b              <0> padrange[$e:3,4; $f:3,4] */LVINTRO,2 ->c
+# b              <0> padrange[$e:3,4; $f:3,4] */LVINTRO,range=2 ->c
 # -              <1> rv2av[t14] lK/1 ->-
 # -                 <#> gv[*_] s ->-
 # -           <1> ex-list lKPRM* ->c
@@ -301,7 +301,7 @@ EOT_EOT
 # 1        <;> nextstate(main 1 p3:1) v:>,<,% ->2
 # 3        <2> aassign[t5] vKS ->4
 # -           <1> ex-list lK ->-
-# 2              <0> padrange[$a:1,4; $b:1,4] */LVINTRO,2 ->3
+# 2              <0> padrange[$a:1,4; $b:1,4] */LVINTRO,range=2 ->3
 # -              <1> rv2av[t4] lK/1 ->-
 # -                 <$> gv(*_) s ->-
 # -           <1> ex-list lKPRM* ->3
@@ -315,13 +315,13 @@ EOT_EOT
 # 7              <1> rv2av[t9] lK/1 ->8
 # 6                 <$> gv(*X::_) s ->7
 # -           <1> ex-list lKPRM* ->9
-# 8              <0> padrange[$c:2,4; $d:2,4] RM/LVINTRO,2 ->9
+# 8              <0> padrange[$c:2,4; $d:2,4] RM/LVINTRO,range=2 ->9
 # -              <0> padsv[$c:2,4] sRM*/LVINTRO ->-
 # -              <0> padsv[$d:2,4] sRM*/LVINTRO ->-
 # a        <;> nextstate(Y 3 p3:4) v:>,<,%,{ ->b
 # c        <2> aassign[t15] KS ->d
 # -           <1> ex-list lK ->-
-# b              <0> padrange[$e:3,4; $f:3,4] */LVINTRO,2 ->c
+# b              <0> padrange[$e:3,4; $f:3,4] */LVINTRO,range=2 ->c
 # -              <1> rv2av[t14] lK/1 ->-
 # -                 <$> gv(*_) s ->-
 # -           <1> ex-list lKPRM* ->c
@@ -339,7 +339,7 @@ checkOptree ( name      => 'consolidate padranges',
 # -     <@> lineseq KP ->5
 # 1        <;> nextstate(main 900 optree_misc.t:334) v:>,<,% ->2
 # -        <@> list vKP ->-
-# 2           <0> padrange[$a:900,902; $b:900,902; $c:901,902; $d:901,902] 
vM/LVINTRO,4 ->3
+# 2           <0> padrange[$a:900,902; $b:900,902; $c:901,902; $d:901,902] 
vM/LVINTRO,range=4 ->3
 # -           <0> padsv[$a:900,902] vM/LVINTRO ->-
 # -           <0> padsv[$b:900,902] vM/LVINTRO ->-
 # -        <;> nextstate(main 901 optree_misc.t:334) v:>,<,% ->-
@@ -354,7 +354,7 @@ EOT_EOT
 # -     <@> lineseq KP ->5
 # 1        <;> nextstate(main 900 optree_misc.t:334) v:>,<,% ->2
 # -        <@> list vKP ->-
-# 2           <0> padrange[$a:900,902; $b:900,902; $c:901,902; $d:901,902] 
vM/LVINTRO,4 ->3
+# 2           <0> padrange[$a:900,902; $b:900,902; $c:901,902; $d:901,902] 
vM/LVINTRO,range=4 ->3
 # -           <0> padsv[$a:900,902] vM/LVINTRO ->-
 # -           <0> padsv[$b:900,902] vM/LVINTRO ->-
 # -        <;> nextstate(main 901 optree_misc.t:334) v:>,<,% ->-
@@ -377,7 +377,7 @@ checkOptree ( name      => 'consolidate padranges and 
singletons',
 # -     <@> lineseq KP ->5
 # 1        <;> nextstate(main 903 optree_misc.t:371) v:>,<,% ->2
 # -        <@> list vKP ->-
-# 2           <0> padrange[$a:903,910; $b:903,910; $c:904,910; $d:905,910; 
$e:905,910; @f:906,910; $g:907,910; $h:908,910; $i:908,910; %j:909,910] 
vM/LVINTRO,10 ->3
+# 2           <0> padrange[$a:903,910; $b:903,910; $c:904,910; $d:905,910; 
$e:905,910; @f:906,910; $g:907,910; $h:908,910; $i:908,910; %j:909,910] 
vM/LVINTRO,range=10 ->3
 # -           <0> padsv[$a:903,910] vM/LVINTRO ->-
 # -           <0> padsv[$b:903,910] vM/LVINTRO ->-
 # -        <;> nextstate(main 904 optree_misc.t:371) v:>,<,% ->-
@@ -405,7 +405,7 @@ EOT_EOT
 # -     <@> lineseq KP ->5
 # 1        <;> nextstate(main 903 optree_misc.t:371) v:>,<,% ->2
 # -        <@> list vKP ->-
-# 2           <0> padrange[$a:903,910; $b:903,910; $c:904,910; $d:905,910; 
$e:905,910; @f:906,910; $g:907,910; $h:908,910; $i:908,910; %j:909,910] 
vM/LVINTRO,10 ->3
+# 2           <0> padrange[$a:903,910; $b:903,910; $c:904,910; $d:905,910; 
$e:905,910; @f:906,910; $g:907,910; $h:908,910; $i:908,910; %j:909,910] 
vM/LVINTRO,range=10 ->3
 # -           <0> padsv[$a:903,910] vM/LVINTRO ->-
 # -           <0> padsv[$b:903,910] vM/LVINTRO ->-
 # -        <;> nextstate(main 904 optree_misc.t:371) v:>,<,% ->-
diff --git a/ext/B/t/optree_samples.t b/ext/B/t/optree_samples.t
index c6288d9..4a509a7 100644
--- a/ext/B/t/optree_samples.t
+++ b/ext/B/t/optree_samples.t
@@ -710,13 +710,13 @@ checkOptree ( name        => 'my $a; my @b; my %c; return 
1',
              bcopts    => '-exec',
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
 # 1  <;> nextstate(main 991 (eval 17):1) v
-# 2  <0> padrange[$a:991,994; @b:992,994; %c:993,994] vM/LVINTRO,3
+# 2  <0> padrange[$a:991,994; @b:992,994; %c:993,994] vM/LVINTRO,range=3
 # 3  <;> nextstate(main 994 (eval 17):1) v:{
 # 4  <$> const[IV 1] s
 # 5  <1> leavesub[1 ref] K/REFC,1
 EOT_EOT
 # 1  <;> nextstate(main 991 (eval 17):1) v
-# 2  <0> padrange[$a:991,994; @b:992,994; %c:993,994] vM/LVINTRO,3
+# 2  <0> padrange[$a:991,994; @b:992,994; %c:993,994] vM/LVINTRO,range=3
 # 3  <;> nextstate(main 994 (eval 17):1) v:{
 # 4  <$> const(IV 1) s
 # 5  <1> leavesub[1 ref] K/REFC,1
diff --git a/ext/B/t/optree_varinit.t b/ext/B/t/optree_varinit.t
index 6d2038d..5938048 100644
--- a/ext/B/t/optree_varinit.t
+++ b/ext/B/t/optree_varinit.t
@@ -390,14 +390,14 @@ checkOptree ( name        => 'my ($a,$b)=()',
 # 1  <0> enter 
 # 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
-# 4  <0> padrange[$a:1,2; $b:1,2] RM/LVINTRO,2
+# 4  <0> padrange[$a:1,2; $b:1,2] RM/LVINTRO,range=2
 # 5  <2> aassign[t3] vKS
 # 6  <@> leave[1 ref] vKP/REFC
 EOT_EOT
 # 1  <0> enter 
 # 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
-# 4  <0> padrange[$a:1,2; $b:1,2] RM/LVINTRO,2
+# 4  <0> padrange[$a:1,2; $b:1,2] RM/LVINTRO,range=2
 # 5  <2> aassign[t3] vKS
 # 6  <@> leave[1 ref] vKP/REFC
 EONT_EONT
diff --git a/lib/B/Op_private.pm b/lib/B/Op_private.pm
index 0e77dc9..8a25ec6 100644
--- a/lib/B/Op_private.pm
+++ b/lib/B/Op_private.pm
@@ -175,6 +175,8 @@ my @bf = (
         bitmask   => 3,
     },
     {
+        label     => 'offset',
+        mask_def  => 'OPpAVHVSWITCH_MASK',
         bitmin    => 0,
         bitmax    => 1,
         bitmask   => 3,
@@ -194,7 +196,7 @@ my @bf = (
         bitmask   => 15,
     },
     {
-        label     => '-',
+        label     => 'range',
         mask_def  => 'OPpPADRANGE_COUNTMASK',
         bitcount_def => 'OPpPADRANGE_COUNTSHIFT',
         bitmin    => 0,
@@ -202,7 +204,7 @@ my @bf = (
         bitmask   => 127,
     },
     {
-        label     => '-',
+        label     => 'key',
         bitmin    => 0,
         bitmax    => 7,
         bitmask   => 255,
@@ -594,6 +596,7 @@ our %defines = (
     OPpASSIGN_COMMON_RC1     =>  32,
     OPpASSIGN_COMMON_SCALAR  =>  64,
     OPpASSIGN_CV_TO_GV       => 128,
+    OPpAVHVSWITCH_MASK       =>   3,
     OPpCONST_BARE            =>  64,
     OPpCONST_ENTERED         =>  16,
     OPpCONST_NOVER           =>   2,
diff --git a/opcode.h b/opcode.h
index 24f5a67..1f2674f 100644
--- a/opcode.h
+++ b/opcode.h
@@ -2216,6 +2216,7 @@ END_EXTERN_C
 #define OPpSORT_INTEGER         0x02
 #define OPpTRANS_TO_UTF         0x02
 #define OPpARG2_MASK            0x03
+#define OPpAVHVSWITCH_MASK      0x03
 #define OPpARGELEM_HV           0x04
 #define OPpCONST_SHORTCIRCUIT   0x04
 #define OPpDONT_INIT_GV         0x04
@@ -2407,6 +2408,9 @@ EXTCONST char PL_op_private_labels[] = {
     'T','A','R','G','M','Y','\0',
     'U','N','I','\0',
     'U','T','F','\0',
+    'k','e','y','\0',
+    'o','f','f','s','e','t','\0',
+    'r','a','n','g','e','\0',
 
 };
 
@@ -2425,11 +2429,11 @@ EXTCONST char PL_op_private_labels[] = {
 EXTCONST I16 PL_op_private_bitfields[] = {
     0, 8, -1,
     0, 8, -1,
-    0, -1, -1,
-    0, 8, -1,
-    0, 8, -1,
+    0, 534, -1,
     0, 8, -1,
     0, 8, -1,
+    0, 541, -1,
+    0, 530, -1,
     1, -1, 0, 507, 1, 26, 2, 276, -1,
     4, -1, 1, 157, 2, 164, 3, 171, -1,
     4, -1, 0, 507, 1, 26, 2, 276, 3, 103, -1,
@@ -3313,7 +3317,7 @@ EXTCONST U8 PL_op_private_valid[] = {
     /* ONCE       */ (OPpARG1_MASK),
     /* CUSTOM     */ (0xff),
     /* COREARGS   */ 
(OPpCOREARGS_DEREF1|OPpCOREARGS_DEREF2|OPpCOREARGS_SCALARMOD|OPpCOREARGS_PUSHMARK),
-    /* AVHVSWITCH */ (3|OPpMAYBE_LVSUB),
+    /* AVHVSWITCH */ (OPpAVHVSWITCH_MASK|OPpMAYBE_LVSUB),
     /* RUNCV      */ (OPpOFFBYONE),
     /* FC         */ (OPpARG1_MASK),
     /* PADCV      */ (0),
diff --git a/pp.c b/pp.c
index ea49b01..baf48b9 100644
--- a/pp.c
+++ b/pp.c
@@ -6367,7 +6367,7 @@ PP(pp_avhvswitch)
     dVAR; dSP;
     return PL_ppaddr[
                (SvTYPE(TOPs) == SVt_PVAV ? OP_AEACH : OP_EACH)
-                   + (PL_op->op_private & 3)
+                   + (PL_op->op_private & OPpAVHVSWITCH_MASK)
           ](aTHX);
 }
 
diff --git a/regen/op_private b/regen/op_private
index 4781442..4adedbf 100644
--- a/regen/op_private
+++ b/regen/op_private
@@ -593,7 +593,7 @@ addbits('substr', 4 => qw(OPpSUBSTR_REPL_FIRST REPL1ST));
 addbits('padrange',
     # bits 0..6 hold target range
     '0..6' =>  {
-            label         => '-',
+            label         => 'range',
             mask_def      => 'OPpPADRANGE_COUNTMASK',
             bitcount_def  => 'OPpPADRANGE_COUNTSHIFT',
           }
@@ -605,7 +605,7 @@ addbits('padrange',
 for (qw(aelemfast aelemfast_lex)) {
     addbits($_,
         '0..7' =>  {
-                label     => '-',
+                label     => 'key',
               }
     );
 }
@@ -760,7 +760,13 @@ addbits('multideref',
 
 
 
-addbits('avhvswitch', '0..1' => { });
+addbits('avhvswitch',
+    '0..1' => {
+                   mask_def  => 'OPpAVHVSWITCH_MASK',
+                   label     => 'offset',
+    }
+);
+
 
 addbits('argelem',
    '1..2' =>  {

--
Perl5 Master Repository

Reply via email to