This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
padrange, aelemfast: use label for private bits
authorDavid Mitchell <davem@iabyn.com>
Tue, 27 Sep 2016 10:52:07 +0000 (11:52 +0100)
committerDavid Mitchell <davem@iabyn.com>
Tue, 27 Sep 2016 11:01:32 +0000 (12:01 +0100)
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.

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

index 2d6b80f..6505f65 100644 (file)
@@ -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:>,<,% ->-
index c6288d9..4a509a7 100644 (file)
@@ -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
index 6d2038d..5938048 100644 (file)
@@ -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
index 9259c77..8a25ec6 100644 (file)
@@ -196,7 +196,7 @@ my @bf = (
         bitmask   => 15,
     },
     {
-        label     => '-',
+        label     => 'range',
         mask_def  => 'OPpPADRANGE_COUNTMASK',
         bitcount_def => 'OPpPADRANGE_COUNTSHIFT',
         bitmin    => 0,
@@ -204,7 +204,7 @@ my @bf = (
         bitmask   => 127,
     },
     {
-        label     => '-',
+        label     => 'key',
         bitmin    => 0,
         bitmax    => 7,
         bitmask   => 255,
index 3189a05..1f2674f 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -2408,7 +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',
 
 };
 
@@ -2427,11 +2429,11 @@ EXTCONST char PL_op_private_labels[] = {
 EXTCONST I16 PL_op_private_bitfields[] = {
     0, 8, -1,
     0, 8, -1,
-    0, 530, -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,
index b74ff2f..4adedbf 100644 (file)
@@ -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',
               }
     );
 }