]> git.vpit.fr Git - perl/modules/Variable-Magic.git/commitdiff
Correctly bless UTF-8 transliteration op objects
authorVincent Pit <vince@profvince.com>
Fri, 25 Sep 2015 10:26:01 +0000 (12:26 +0200)
committerVincent Pit <vince@profvince.com>
Fri, 25 Sep 2015 10:26:01 +0000 (12:26 +0200)
This is a port of commit 512ba29b from perl.

Magic.xs
t/18-opinfo.t

index 03671cf7ad931059480cca5d1529340e20154e23..d579f9ee0e0f4ed31666cc4f9ba9f17add425c0a 100644 (file)
--- a/Magic.xs
+++ b/Magic.xs
@@ -473,7 +473,12 @@ static opclass vmg_opclass(const OP *o) {
   case OA_PADOP:
    return OPc_PADOP;
   case OA_PVOP_OR_SVOP:
   case OA_PADOP:
    return OPc_PADOP;
   case OA_PVOP_OR_SVOP:
-   return (o->op_private & (OPpTRANS_TO_UTF|OPpTRANS_FROM_UTF)) ? OPc_SVOP : OPc_PVOP;
+   return (o->op_private & (OPpTRANS_TO_UTF|OPpTRANS_FROM_UTF))
+#if defined(USE_ITHREADS) && VMG_HAS_PERL(5, 8, 9)
+           ? OPc_PADOP : OPc_PVOP;
+#else
+           ? OPc_SVOP : OPc_PVOP;
+#endif
   case OA_LOOP:
    return OPc_LOOP;
   case OA_COP:
   case OA_LOOP:
    return OPc_LOOP;
   case OA_COP:
index ff663150ac913940965f0ec0dc10640840daa878..bcc70a0b8355ecc96198d4d5da3dc4e2e7af664c 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
 use strict;
 use warnings;
 
-use Test::More tests => 18 * (3 + 4) + 5 + 1;
+use Test::More tests => 19 * (3 + 4) + 5 + 1;
 
 use Config qw<%Config>;
 
 
 use Config qw<%Config>;
 
@@ -21,6 +21,8 @@ my $aelemf    = ("$]" < 5.013 or $is_5130_release) ? 'aelemfast' : 'sassign';
 my $aelemf_op = ($aelemf eq 'sassign')
                    ? 'B::BINOP' : $Config{useithreads} ? 'B::PADOP' : 'B::SVOP';
 my $meth_op   = ("$]" < 5.021_005) ? 'B::SVOP' : 'B::METHOP';
 my $aelemf_op = ($aelemf eq 'sassign')
                    ? 'B::BINOP' : $Config{useithreads} ? 'B::PADOP' : 'B::SVOP';
 my $meth_op   = ("$]" < 5.021_005) ? 'B::SVOP' : 'B::METHOP';
+my $trutf_op  = ($Config{useithreads} && "$]" >= 5.008_009)
+                   ? 'B::PADOP' : 'B::SVOP';
 my $deref     = ("$]" < 5.021_007) ? 'helem' : 'multideref';
 my $deref_op  = ($deref eq 'multideref') ? 'B::UNOP_AUX' : 'B::UNOP';
 
 my $deref     = ("$]" < 5.021_007) ? 'helem' : 'multideref';
 my $deref_op  = ($deref eq 'multideref') ? 'B::UNOP_AUX' : 'B::UNOP';
 
@@ -46,6 +48,8 @@ my @tests = (
  [ 'get', '$c',    'my $c = "Variable::Magic::TestPkg"',
                                  '$c->foo()', [ 'method_named', $meth_op    ] ],
  [ 'get', '$c',    'my $c = ""', '$c =~ y/x/y/',   [ 'trans',   'B::PVOP'   ] ],
  [ 'get', '$c',    'my $c = "Variable::Magic::TestPkg"',
                                  '$c->foo()', [ 'method_named', $meth_op    ] ],
  [ 'get', '$c',    'my $c = ""', '$c =~ y/x/y/',   [ 'trans',   'B::PVOP'   ] ],
+ [ 'get', '$c',    'my $c = ""', '$c =~ y/\x{100}//',
+                                                   [ 'trans',   $trutf_op   ] ],
  [ 'get', '$c',    'my $c = 1',  '1 for 1 .. $c',
                                                  [ 'enteriter', 'B::LOOP'   ] ],
  [ 'free','$c',    'my $c = 1',  'last',           [ 'last',    'B::OP'     ] ],
  [ 'get', '$c',    'my $c = 1',  '1 for 1 .. $c',
                                                  [ 'enteriter', 'B::LOOP'   ] ],
  [ 'free','$c',    'my $c = 1',  'last',           [ 'last',    'B::OP'     ] ],