diff options
Diffstat (limited to 'regen')
-rw-r--r-- | regen/op_private | 11 | ||||
-rwxr-xr-x | regen/opcode.pl | 2 | ||||
-rw-r--r-- | regen/opcodes | 1 |
3 files changed, 12 insertions, 2 deletions
diff --git a/regen/op_private b/regen/op_private index 94e0009425..d9082e7709 100644 --- a/regen/op_private +++ b/regen/op_private @@ -300,7 +300,8 @@ for (qw(nextstate dbstate)) { addbits($_, 7 => qw(OPpLVAL_INTRO LVINTRO)) for qw(gvsv rv2sv rv2hv rv2gv rv2av aelem helem aslice split hslice delete padsv padav padhv enteriter entersub padrange - pushmark cond_expr refassign lvref lvrefslice lvavref multideref), + pushmark cond_expr refassign lvref lvrefslice lvavref multideref + multiconcat), 'list', # this gets set in my_attrs() for some reason ; @@ -807,6 +808,14 @@ for (qw(index rindex)) { addbits($_, 6 => qw(OPpINDEX_BOOLNEG NEG)); } +addbits('multiconcat', + # 7 OPpLVAL_INTRO + 6 => qw(OPpMULTICONCAT_APPEND APPEND), # $x .= .... + 5 => qw(OPpMULTICONCAT_FAKE FAKE), # sprintf() optimised to MC. + # 4 OPpTARGET_MY + 3 => qw(OPpMULTICONCAT_STRINGIFY STRINGIFY), # "$a$b...", (for Deparse.pm) +); + 1; diff --git a/regen/opcode.pl b/regen/opcode.pl index d1c0faf6dc..01178668cd 100755 --- a/regen/opcode.pl +++ b/regen/opcode.pl @@ -55,7 +55,7 @@ while (<OPS>) { $args = '' unless defined $args; warn qq[Description "$desc" duplicates $seen{$desc}\n] - if $seen{$desc} and $key !~ "transr|(?:intro|clone)cv|lvref"; + if $seen{$desc} and $key !~ "concat|transr|(?:intro|clone)cv|lvref"; die qq[Opcode "$key" duplicates $seen{$key}\n] if $seen{$key}; die qq[Opcode "freed" is reserved for the slab allocator\n] if $key eq 'freed'; diff --git a/regen/opcodes b/regen/opcodes index 096c6fe823..5aa8a94fa5 100644 --- a/regen/opcodes +++ b/regen/opcodes @@ -131,6 +131,7 @@ i_add integer addition (+) ck_null ifsT2 S S subtract subtraction (-) ck_null IfsT2 S S i_subtract integer subtraction (-) ck_null ifsT2 S S concat concatenation (.) or string ck_concat fsT2 S S +multiconcat concatenation (.) or string ck_null sT+ stringify string ck_stringify fsT@ S left_shift left bitshift (<<) ck_bitop fsT2 S S |