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
