summaryrefslogtreecommitdiff
path: root/regen
diff options
context:
space:
mode:
Diffstat (limited to 'regen')
-rw-r--r--regen/op_private11
-rwxr-xr-xregen/opcode.pl2
-rw-r--r--regen/opcodes1
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