summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Williamson <khw@cpan.org>2019-11-04 14:55:16 -0700
committerKarl Williamson <khw@cpan.org>2019-11-06 21:22:24 -0700
commit6507ac8375250fed048a612594c6d6d4f5ac2613 (patch)
tree71960002a13d469db40c6018f35eecc1f81ed45f
parent00bd451dcd3aeb82c9155d46e0f39afac4e75a7a (diff)
downloadperl-6507ac8375250fed048a612594c6d6d4f5ac2613.tar.gz
Change names of some OPpTRANS flags
These two flags will shortly become obsolete, replaced by ones with different meanings. This flag makes the new ones the normal ones, and makes the old names synonyms so that code that refers to them can compile.
-rw-r--r--lib/B/Op_private.pm26
-rw-r--r--op.h5
-rw-r--r--opcode.h150
-rw-r--r--regen/op_private8
4 files changed, 97 insertions, 92 deletions
diff --git a/lib/B/Op_private.pm b/lib/B/Op_private.pm
index 39753b85b2..888852808d 100644
--- a/lib/B/Op_private.pm
+++ b/lib/B/Op_private.pm
@@ -150,13 +150,13 @@ $bits{$_}{7} = 'OPpPV_IS_UTF8' for qw(dump goto last next redo);
$bits{$_}{6} = 'OPpREFCOUNTED' for qw(leave leaveeval leavesub leavesublv leavewrite);
$bits{$_}{2} = 'OPpSLICEWARNING' for qw(aslice hslice padav padhv rv2av rv2hv);
$bits{$_}{4} = 'OPpTARGET_MY' for qw(abs add atan2 chdir chmod chomp chown chr chroot concat cos crypt divide exec exp flock getpgrp getppid getpriority hex i_add i_divide i_modulo i_multiply i_subtract index int kill left_shift length link log mkdir modulo multiconcat multiply nbit_and nbit_or nbit_xor ncomplement oct ord pow push rand rename right_shift rindex rmdir schomp scomplement setpgrp setpriority sin sleep sqrt srand stringify subtract symlink system time unlink unshift utime wait waitpid);
+$bits{$_}{0} = 'OPpTRANS_CAN_FORCE_UTF8' for qw(trans transr);
$bits{$_}{5} = 'OPpTRANS_COMPLEMENT' for qw(trans transr);
$bits{$_}{7} = 'OPpTRANS_DELETE' for qw(trans transr);
-$bits{$_}{0} = 'OPpTRANS_FROM_UTF' for qw(trans transr);
$bits{$_}{6} = 'OPpTRANS_GROWS' for qw(trans transr);
$bits{$_}{2} = 'OPpTRANS_IDENTICAL' for qw(trans transr);
$bits{$_}{3} = 'OPpTRANS_SQUASH' for qw(trans transr);
-$bits{$_}{1} = 'OPpTRANS_TO_UTF' for qw(trans transr);
+$bits{$_}{1} = 'OPpTRANS_USE_SVOP' for qw(trans transr);
$bits{$_}{5} = 'OPpTRUEBOOL' for qw(grepwhile index length padav padhv pos ref rindex rv2av rv2hv subst);
my @bf = (
@@ -686,13 +686,13 @@ our %defines = (
OPpSPLIT_LEX => 8,
OPpSUBSTR_REPL_FIRST => 16,
OPpTARGET_MY => 16,
+ OPpTRANS_CAN_FORCE_UTF8 => 1,
OPpTRANS_COMPLEMENT => 32,
OPpTRANS_DELETE => 128,
- OPpTRANS_FROM_UTF => 1,
OPpTRANS_GROWS => 64,
OPpTRANS_IDENTICAL => 4,
OPpTRANS_SQUASH => 8,
- OPpTRANS_TO_UTF => 2,
+ OPpTRANS_USE_SVOP => 2,
OPpTRUEBOOL => 32,
);
@@ -789,13 +789,13 @@ our %labels = (
OPpSPLIT_LEX => 'LEX',
OPpSUBSTR_REPL_FIRST => 'REPL1ST',
OPpTARGET_MY => 'TARGMY',
+ OPpTRANS_CAN_FORCE_UTF8 => 'CAN_FORCE_UTF8',
OPpTRANS_COMPLEMENT => 'COMPL',
OPpTRANS_DELETE => 'DEL',
- OPpTRANS_FROM_UTF => '<UTF',
OPpTRANS_GROWS => 'GROWS',
OPpTRANS_IDENTICAL => 'IDENT',
OPpTRANS_SQUASH => 'SQUASH',
- OPpTRANS_TO_UTF => '>UTF',
+ OPpTRANS_USE_SVOP => 'USE_SVOP',
OPpTRUEBOOL => 'BOOL',
);
@@ -846,7 +846,7 @@ our %ops_using = (
OPpSPLIT_ASSIGN => [qw(split)],
OPpSUBSTR_REPL_FIRST => [qw(substr)],
OPpTARGET_MY => [qw(abs add atan2 chdir chmod chomp chown chr chroot concat cos crypt divide exec exp flock getpgrp getppid getpriority hex i_add i_divide i_modulo i_multiply i_subtract index int kill left_shift length link log mkdir modulo multiconcat multiply nbit_and nbit_or nbit_xor ncomplement oct ord pow push rand rename right_shift rindex rmdir schomp scomplement setpgrp setpriority sin sleep sqrt srand stringify subtract symlink system time unlink unshift utime wait waitpid)],
- OPpTRANS_COMPLEMENT => [qw(trans transr)],
+ OPpTRANS_CAN_FORCE_UTF8 => [qw(trans transr)],
OPpTRUEBOOL => [qw(grepwhile index length padav padhv pos ref rindex rv2av rv2hv subst)],
);
@@ -887,11 +887,11 @@ $ops_using{OPpSORT_STABLE} = $ops_using{OPpSORT_DESCEND};
$ops_using{OPpSORT_UNSTABLE} = $ops_using{OPpSORT_DESCEND};
$ops_using{OPpSPLIT_IMPLIM} = $ops_using{OPpSPLIT_ASSIGN};
$ops_using{OPpSPLIT_LEX} = $ops_using{OPpSPLIT_ASSIGN};
-$ops_using{OPpTRANS_DELETE} = $ops_using{OPpTRANS_COMPLEMENT};
-$ops_using{OPpTRANS_FROM_UTF} = $ops_using{OPpTRANS_COMPLEMENT};
-$ops_using{OPpTRANS_GROWS} = $ops_using{OPpTRANS_COMPLEMENT};
-$ops_using{OPpTRANS_IDENTICAL} = $ops_using{OPpTRANS_COMPLEMENT};
-$ops_using{OPpTRANS_SQUASH} = $ops_using{OPpTRANS_COMPLEMENT};
-$ops_using{OPpTRANS_TO_UTF} = $ops_using{OPpTRANS_COMPLEMENT};
+$ops_using{OPpTRANS_COMPLEMENT} = $ops_using{OPpTRANS_CAN_FORCE_UTF8};
+$ops_using{OPpTRANS_DELETE} = $ops_using{OPpTRANS_CAN_FORCE_UTF8};
+$ops_using{OPpTRANS_GROWS} = $ops_using{OPpTRANS_CAN_FORCE_UTF8};
+$ops_using{OPpTRANS_IDENTICAL} = $ops_using{OPpTRANS_CAN_FORCE_UTF8};
+$ops_using{OPpTRANS_SQUASH} = $ops_using{OPpTRANS_CAN_FORCE_UTF8};
+$ops_using{OPpTRANS_USE_SVOP} = $ops_using{OPpTRANS_CAN_FORCE_UTF8};
# ex: set ro:
diff --git a/op.h b/op.h
index cc9f1afc1c..3ce9890617 100644
--- a/op.h
+++ b/op.h
@@ -170,8 +170,9 @@ Deprecated. Use C<GIMME_V> instead.
* from data in regen/op_private */
-#define OPpTRANS_ALL (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE)
-
+#define OPpTRANS_ALL (OPpTRANS_USE_SVOP|OPpTRANS_CAN_FORCE_UTF8|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE)
+#define OPpTRANS_FROM_UTF OPpTRANS_USE_SVOP
+#define OPpTRANS_TO_UTF OPpTRANS_CAN_FORCE_UTF8
/* Mask for OP_ENTERSUB flags, the absence of which must be propagated
diff --git a/opcode.h b/opcode.h
index ba3bd9e668..021ea6b344 100644
--- a/opcode.h
+++ b/opcode.h
@@ -2203,7 +2203,7 @@ END_EXTERN_C
#define OPpPADHV_ISKEYS 0x01
#define OPpRV2HV_ISKEYS 0x01
#define OPpSORT_NUMERIC 0x01
-#define OPpTRANS_FROM_UTF 0x01
+#define OPpTRANS_CAN_FORCE_UTF8 0x01
#define OPpARGELEM_AV 0x02
#define OPpCONST_NOVER 0x02
#define OPpCOREARGS_DEREF2 0x02
@@ -2212,7 +2212,7 @@ END_EXTERN_C
#define OPpHINT_STRICT_REFS 0x02
#define OPpITER_REVERSED 0x02
#define OPpSORT_INTEGER 0x02
-#define OPpTRANS_TO_UTF 0x02
+#define OPpTRANS_USE_SVOP 0x02
#define OPpARG2_MASK 0x03
#define OPpAVHVSWITCH_MASK 0x03
#define OPpARGELEM_HV 0x04
@@ -2331,8 +2331,6 @@ EXTCONST char PL_op_private_labels[] = {
'$','M','O','D','\0',
'+','1','\0',
'-','\0',
- '<','U','T','F','\0',
- '>','U','T','F','\0',
'A','M','P','E','R','\0',
'A','P','P','E','N','D','\0',
'A','S','S','I','G','N','\0',
@@ -2342,6 +2340,7 @@ EXTCONST char PL_op_private_labels[] = {
'B','O','O','L','\0',
'B','O','O','L','?','\0',
'B','Y','T','E','S','\0',
+ 'C','A','N','_','F','O','R','C','E','_','U','T','F','8','\0',
'C','O','M','P','L','\0',
'C','O','M','_','A','G','G','\0',
'C','O','M','_','R','C','1','\0',
@@ -2420,6 +2419,7 @@ EXTCONST char PL_op_private_labels[] = {
'T','A','R','G','M','Y','\0',
'U','N','I','\0',
'U','N','S','T','A','B','L','E','\0',
+ 'U','S','E','_','S','V','O','P','\0',
'U','T','F','\0',
'k','e','y','\0',
'o','f','f','s','e','t','\0',
@@ -2442,14 +2442,14 @@ EXTCONST char PL_op_private_labels[] = {
EXTCONST I16 PL_op_private_bitfields[] = {
0, 8, -1,
0, 8, -1,
- 0, 583, -1,
+ 0, 597, -1,
0, 8, -1,
0, 8, -1,
- 0, 590, -1,
- 0, 579, -1,
- 1, -1, 0, 547, 1, 40, 2, 290, -1,
- 4, -1, 1, 171, 2, 178, 3, 185, -1,
- 4, -1, 0, 547, 1, 40, 2, 290, 3, 117, -1,
+ 0, 604, -1,
+ 0, 593, -1,
+ 1, -1, 0, 552, 1, 30, 2, 295, -1,
+ 4, -1, 1, 176, 2, 183, 3, 190, -1,
+ 4, -1, 0, 552, 1, 30, 2, 295, 3, 122, -1,
};
@@ -2874,75 +2874,75 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = {
EXTCONST U16 PL_op_private_bitdefs[] = {
0x0003, /* scalar, prototype, refgen, srefgen, readline, regcmaybe, regcreset, regcomp, substcont, chop, schop, defined, undef, study, preinc, i_preinc, predec, i_predec, postinc, i_postinc, postdec, i_postdec, negate, i_negate, not, complement, ucfirst, lcfirst, uc, lc, quotemeta, aeach, avalues, each, pop, shift, grepstart, mapstart, mapwhile, range, and, or, dor, andassign, orassign, dorassign, argcheck, argdefelem, method, method_named, method_super, method_redir, method_redir_super, entergiven, leavegiven, enterwhen, leavewhen, untie, tied, dbmclose, getsockname, getpeername, lstat, stat, readlink, readdir, telldir, rewinddir, closedir, localtime, alarm, require, dofile, entertry, ghbyname, gnbyname, gpbyname, shostent, snetent, sprotoent, sservent, gpwnam, gpwuid, ggrnam, ggrgid, lock, once, fc, anonconst */
- 0x2f3c, 0x4119, /* pushmark */
+ 0x2fdc, 0x41b9, /* pushmark */
0x00bd, /* wantarray, runcv */
- 0x0578, 0x19b0, 0x41cc, 0x3c88, 0x3465, /* const */
- 0x2f3c, 0x35b9, /* gvsv */
- 0x1815, /* gv */
+ 0x0438, 0x1a50, 0x426c, 0x3d28, 0x3505, /* const */
+ 0x2fdc, 0x3659, /* gvsv */
+ 0x18b5, /* gv */
0x0067, /* gelem, lt, i_lt, gt, i_gt, le, i_le, ge, i_ge, eq, i_eq, ne, i_ne, ncmp, i_ncmp, slt, sgt, sle, sge, seq, sne, scmp, bit_and, bit_xor, bit_or, sbit_and, sbit_xor, sbit_or, smartmatch, lslice, xor */
- 0x2f3c, 0x4118, 0x03d7, /* padsv */
- 0x2f3c, 0x4118, 0x06f4, 0x302c, 0x3e09, /* padav */
- 0x2f3c, 0x4118, 0x06f4, 0x0790, 0x302c, 0x3e08, 0x2aa1, /* padhv */
- 0x2f3c, 0x1b98, 0x03d6, 0x302c, 0x3388, 0x41c4, 0x0003, /* rv2gv */
- 0x2f3c, 0x35b8, 0x03d6, 0x41c4, 0x0003, /* rv2sv */
- 0x302c, 0x0003, /* av2arylen, akeys, values, keys */
- 0x32fc, 0x0fd8, 0x0d34, 0x028c, 0x44c8, 0x41c4, 0x0003, /* rv2cv */
- 0x06f4, 0x0790, 0x0003, /* ref */
+ 0x2fdc, 0x41b8, 0x03d7, /* padsv */
+ 0x2fdc, 0x41b8, 0x05b4, 0x30cc, 0x3ea9, /* padav */
+ 0x2fdc, 0x41b8, 0x05b4, 0x0650, 0x30cc, 0x3ea8, 0x2b41, /* padhv */
+ 0x2fdc, 0x1c38, 0x03d6, 0x30cc, 0x3428, 0x4264, 0x0003, /* rv2gv */
+ 0x2fdc, 0x3658, 0x03d6, 0x4264, 0x0003, /* rv2sv */
+ 0x30cc, 0x0003, /* av2arylen, akeys, values, keys */
+ 0x339c, 0x1078, 0x0dd4, 0x014c, 0x4568, 0x4264, 0x0003, /* rv2cv */
+ 0x05b4, 0x0650, 0x0003, /* ref */
0x018f, /* bless, glob, sprintf, formline, unpack, pack, join, anonlist, anonhash, splice, warn, die, reset, exit, close, pipe_op, fileno, umask, binmode, tie, dbmopen, sselect, select, getc, read, enterwrite, sysopen, sysseek, sysread, syswrite, eof, tell, seek, truncate, fcntl, ioctl, send, recv, socket, sockpair, bind, connect, listen, accept, shutdown, gsockopt, ssockopt, open_dir, seekdir, gmtime, shmget, shmctl, shmread, shmwrite, msgget, msgctl, msgsnd, msgrcv, semop, semget, semctl, ghbyaddr, gnbyaddr, gpbynumber, gsbyname, gsbyport, syscall */
- 0x379c, 0x36b8, 0x27f4, 0x2730, 0x0003, /* backtick */
- 0x06f5, /* subst */
- 0x10dc, 0x2118, 0x0914, 0x3f4c, 0x24a8, 0x01e4, 0x0141, /* trans, transr */
- 0x0f1c, 0x0618, 0x0067, /* sassign */
- 0x0bd8, 0x0ad4, 0x09d0, 0x302c, 0x06e8, 0x0067, /* aassign */
- 0x4570, 0x0003, /* chomp, schomp, ncomplement, scomplement, sin, cos, exp, log, sqrt, int, hex, oct, abs, ord, chr, chroot, rmdir */
- 0x06f4, 0x302c, 0x0003, /* pos */
- 0x4570, 0x0067, /* pow, multiply, i_multiply, divide, i_divide, modulo, i_modulo, add, i_add, subtract, i_subtract, left_shift, right_shift, nbit_and, nbit_xor, nbit_or */
- 0x1498, 0x0067, /* repeat */
- 0x3218, 0x4570, 0x0067, /* concat */
- 0x2f3c, 0x0358, 0x1b94, 0x4570, 0x42ac, 0x0003, /* multiconcat */
- 0x4570, 0x018f, /* stringify, atan2, rand, srand, crypt, push, unshift, flock, chdir, chown, unlink, chmod, utime, rename, link, symlink, mkdir, waitpid, system, exec, kill, getpgrp, setpgrp, getpriority, setpriority, sleep */
- 0x06f4, 0x4570, 0x0003, /* length */
- 0x39f0, 0x302c, 0x012b, /* substr */
- 0x302c, 0x0067, /* vec */
- 0x3198, 0x06f4, 0x4570, 0x018f, /* index, rindex */
- 0x2f3c, 0x35b8, 0x06f4, 0x302c, 0x3e08, 0x41c4, 0x0003, /* rv2av */
+ 0x383c, 0x3758, 0x2894, 0x27d0, 0x0003, /* backtick */
+ 0x05b5, /* subst */
+ 0x117c, 0x21b8, 0x09b4, 0x3fec, 0x2548, 0x4884, 0x07c1, /* trans, transr */
+ 0x0fbc, 0x04d8, 0x0067, /* sassign */
+ 0x0c78, 0x0b74, 0x0a70, 0x30cc, 0x05a8, 0x0067, /* aassign */
+ 0x4610, 0x0003, /* chomp, schomp, ncomplement, scomplement, sin, cos, exp, log, sqrt, int, hex, oct, abs, ord, chr, chroot, rmdir */
+ 0x05b4, 0x30cc, 0x0003, /* pos */
+ 0x4610, 0x0067, /* pow, multiply, i_multiply, divide, i_divide, modulo, i_modulo, add, i_add, subtract, i_subtract, left_shift, right_shift, nbit_and, nbit_xor, nbit_or */
+ 0x1538, 0x0067, /* repeat */
+ 0x32b8, 0x4610, 0x0067, /* concat */
+ 0x2fdc, 0x0218, 0x1c34, 0x4610, 0x434c, 0x0003, /* multiconcat */
+ 0x4610, 0x018f, /* stringify, atan2, rand, srand, crypt, push, unshift, flock, chdir, chown, unlink, chmod, utime, rename, link, symlink, mkdir, waitpid, system, exec, kill, getpgrp, setpgrp, getpriority, setpriority, sleep */
+ 0x05b4, 0x4610, 0x0003, /* length */
+ 0x3a90, 0x30cc, 0x012b, /* substr */
+ 0x30cc, 0x0067, /* vec */
+ 0x3238, 0x05b4, 0x4610, 0x018f, /* index, rindex */
+ 0x2fdc, 0x3658, 0x05b4, 0x30cc, 0x3ea8, 0x4264, 0x0003, /* rv2av */
0x025f, /* aelemfast, aelemfast_lex */
- 0x2f3c, 0x2e38, 0x03d6, 0x302c, 0x0067, /* aelem, helem */
- 0x2f3c, 0x302c, 0x3e09, /* aslice, hslice */
- 0x302d, /* kvaslice, kvhslice */
- 0x2f3c, 0x3d58, 0x2b54, 0x0003, /* delete */
- 0x43f8, 0x0003, /* exists */
- 0x2f3c, 0x35b8, 0x06f4, 0x0790, 0x302c, 0x3e08, 0x41c4, 0x2aa1, /* rv2hv */
- 0x2f3c, 0x2e38, 0x1154, 0x1ab0, 0x302c, 0x41c4, 0x0003, /* multideref */
- 0x2f3c, 0x35b8, 0x0430, 0x2c4c, 0x2569, /* split */
- 0x2f3c, 0x21d9, /* list */
- 0x46dc, 0x4038, 0x13f0, 0x288c, 0x3ae8, 0x2984, 0x3521, /* sort */
- 0x288c, 0x0003, /* reverse */
- 0x06f4, 0x0003, /* grepwhile */
- 0x2cd8, 0x0003, /* flip, flop */
- 0x2f3c, 0x0003, /* cond_expr */
- 0x2f3c, 0x0fd8, 0x03d6, 0x028c, 0x44c8, 0x41c4, 0x2641, /* entersub */
- 0x3858, 0x0003, /* leavesub, leavesublv, leavewrite, leaveeval */
+ 0x2fdc, 0x2ed8, 0x03d6, 0x30cc, 0x0067, /* aelem, helem */
+ 0x2fdc, 0x30cc, 0x3ea9, /* aslice, hslice */
+ 0x30cd, /* kvaslice, kvhslice */
+ 0x2fdc, 0x3df8, 0x2bf4, 0x0003, /* delete */
+ 0x4498, 0x0003, /* exists */
+ 0x2fdc, 0x3658, 0x05b4, 0x0650, 0x30cc, 0x3ea8, 0x4264, 0x2b41, /* rv2hv */
+ 0x2fdc, 0x2ed8, 0x11f4, 0x1b50, 0x30cc, 0x4264, 0x0003, /* multideref */
+ 0x2fdc, 0x3658, 0x02f0, 0x2cec, 0x2609, /* split */
+ 0x2fdc, 0x2279, /* list */
+ 0x477c, 0x40d8, 0x1490, 0x292c, 0x3b88, 0x2a24, 0x35c1, /* sort */
+ 0x292c, 0x0003, /* reverse */
+ 0x05b4, 0x0003, /* grepwhile */
+ 0x2d78, 0x0003, /* flip, flop */
+ 0x2fdc, 0x0003, /* cond_expr */
+ 0x2fdc, 0x1078, 0x03d6, 0x014c, 0x4568, 0x4264, 0x26e1, /* entersub */
+ 0x38f8, 0x0003, /* leavesub, leavesublv, leavewrite, leaveeval */
0x02aa, 0x0003, /* argelem */
0x00bc, 0x018f, /* caller */
- 0x23b5, /* nextstate, dbstate */
- 0x2ddc, 0x3859, /* leave */
- 0x2f3c, 0x35b8, 0x104c, 0x3b65, /* enteriter */
- 0x3b65, /* iter */
- 0x2ddc, 0x0067, /* leaveloop */
- 0x47fc, 0x0003, /* last, next, redo, dump, goto */
- 0x379c, 0x36b8, 0x27f4, 0x2730, 0x018f, /* open */
- 0x1d50, 0x1fac, 0x1e68, 0x1c24, 0x0003, /* ftrread, ftrwrite, ftrexec, fteread, ftewrite, fteexec */
- 0x1d50, 0x1fac, 0x1e68, 0x0003, /* ftis, ftsize, ftmtime, ftatime, ftctime, ftrowned, fteowned, ftzero, ftsock, ftchr, ftblk, ftfile, ftdir, ftpipe, ftsuid, ftsgid, ftsvtx, ftlink, fttty, fttext, ftbinary */
- 0x4571, /* wait, getppid, time */
- 0x38f4, 0x0df0, 0x084c, 0x4648, 0x22c4, 0x0003, /* entereval */
- 0x30fc, 0x0018, 0x1304, 0x1221, /* coreargs */
- 0x302c, 0x00c7, /* avhvswitch */
- 0x2f3c, 0x01fb, /* padrange */
- 0x2f3c, 0x4118, 0x04f6, 0x2a0c, 0x1908, 0x0067, /* refassign */
- 0x2f3c, 0x4118, 0x04f6, 0x2a0c, 0x1908, 0x0003, /* lvref */
- 0x2f3d, /* lvrefslice */
- 0x2f3c, 0x4118, 0x0003, /* lvavref */
+ 0x2455, /* nextstate, dbstate */
+ 0x2e7c, 0x38f9, /* leave */
+ 0x2fdc, 0x3658, 0x10ec, 0x3c05, /* enteriter */
+ 0x3c05, /* iter */
+ 0x2e7c, 0x0067, /* leaveloop */
+ 0x49bc, 0x0003, /* last, next, redo, dump, goto */
+ 0x383c, 0x3758, 0x2894, 0x27d0, 0x018f, /* open */
+ 0x1df0, 0x204c, 0x1f08, 0x1cc4, 0x0003, /* ftrread, ftrwrite, ftrexec, fteread, ftewrite, fteexec */
+ 0x1df0, 0x204c, 0x1f08, 0x0003, /* ftis, ftsize, ftmtime, ftatime, ftctime, ftrowned, fteowned, ftzero, ftsock, ftchr, ftblk, ftfile, ftdir, ftpipe, ftsuid, ftsgid, ftsvtx, ftlink, fttty, fttext, ftbinary */
+ 0x4611, /* wait, getppid, time */
+ 0x3994, 0x0e90, 0x070c, 0x46e8, 0x2364, 0x0003, /* entereval */
+ 0x319c, 0x0018, 0x13a4, 0x12c1, /* coreargs */
+ 0x30cc, 0x00c7, /* avhvswitch */
+ 0x2fdc, 0x01fb, /* padrange */
+ 0x2fdc, 0x41b8, 0x04f6, 0x2aac, 0x19a8, 0x0067, /* refassign */
+ 0x2fdc, 0x41b8, 0x04f6, 0x2aac, 0x19a8, 0x0003, /* lvref */
+ 0x2fdd, /* lvrefslice */
+ 0x2fdc, 0x41b8, 0x0003, /* lvavref */
};
@@ -2985,8 +2985,8 @@ EXTCONST U8 PL_op_private_valid[] = {
/* QR */ (0),
/* SUBST */ (OPpTRUEBOOL),
/* SUBSTCONT */ (OPpARG1_MASK),
- /* TRANS */ (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE),
- /* TRANSR */ (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE),
+ /* TRANS */ (OPpTRANS_CAN_FORCE_UTF8|OPpTRANS_USE_SVOP|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE),
+ /* TRANSR */ (OPpTRANS_CAN_FORCE_UTF8|OPpTRANS_USE_SVOP|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE),
/* SASSIGN */ (OPpARG2_MASK|OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV),
/* AASSIGN */ (OPpARG2_MASK|OPpASSIGN_TRUEBOOL|OPpMAYBE_LVSUB|OPpASSIGN_COMMON_AGG|OPpASSIGN_COMMON_RC1|OPpASSIGN_COMMON_SCALAR),
/* CHOP */ (OPpARG1_MASK),
diff --git a/regen/op_private b/regen/op_private
index a94c0c38c0..580a429201 100644
--- a/regen/op_private
+++ b/regen/op_private
@@ -513,8 +513,12 @@ addbits('sassign',
for (qw(trans transr)) {
addbits($_,
- 0 => qw(OPpTRANS_FROM_UTF <UTF), # search chars are utf8
- 1 => qw(OPpTRANS_TO_UTF >UTF), # replacement chars are utf8
+ # There is a character in the lhs representable not using UTF-8 whose
+ # replacement requires UTF-8.
+ 0 => qw(OPpTRANS_CAN_FORCE_UTF8 CAN_FORCE_UTF8),
+
+ 1 => qw(OPpTRANS_USE_SVOP USE_SVOP),# This is implemented an an svop
+ # vs pvop
2 => qw(OPpTRANS_IDENTICAL IDENT), # right side is same as left
3 => qw(OPpTRANS_SQUASH SQUASH), # /s
# 4 is used for OPpTARGET_MY