This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
drop op flag for implicit smartmatch
authorZefram <zefram@fysh.org>
Wed, 22 Nov 2017 17:57:26 +0000 (17:57 +0000)
committerZefram <zefram@fysh.org>
Wed, 22 Nov 2017 18:02:00 +0000 (18:02 +0000)
OPf_SPECIAL on a smartmatch op used to indicate that it was an implicit
smartmatch in a "when" construct.  "when" no longer implies smartmatch, so
drop the comment about this flag and the special handling in B::Deparse.

lib/B/Deparse.pm
op.h

index 33b9b1e..c2dc591 100644 (file)
@@ -51,7 +51,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring
         MDEREF_SHIFT
     );
 
-$VERSION = '1.45';
+$VERSION = '1.46';
 use strict;
 our $AUTOLOAD;
 use warnings ();
@@ -3001,6 +3001,7 @@ sub pp_i_ge { binop(@_, ">=", 15) }
 sub pp_i_le { binop(@_, "<=", 15) }
 sub pp_i_ncmp { maybe_targmy(@_, \&binop, "<=>", 14) }
 
+sub pp_smartmatch { binop(@_, "~~", 14) }
 sub pp_seq { binop(@_, "eq", 14) }
 sub pp_sne { binop(@_, "ne", 14) }
 sub pp_slt { binop(@_, "lt", 15) }
@@ -3012,16 +3013,6 @@ sub pp_scmp { maybe_targmy(@_, \&binop, "cmp", 14) }
 sub pp_sassign { binop(@_, "=", 7, SWAP_CHILDREN) }
 sub pp_aassign { binop(@_, "=", 7, SWAP_CHILDREN | LIST_CONTEXT) }
 
-sub pp_smartmatch {
-    my ($self, $op, $cx) = @_;
-    if (($op->flags & OPf_SPECIAL) && $self->{expand} < 2) {
-       return $self->deparse($op->last, $cx);
-    }
-    else {
-       binop(@_, "~~", 14);
-    }
-}
-
 # '.' is special because concats-of-concats are optimized to save copying
 # by making all but the first concat stacked. The effect is as if the
 # programmer had written '($a . $b) .= $c', except legal.
diff --git a/op.h b/op.h
index eb62c94..b954dcb 100644 (file)
--- a/op.h
+++ b/op.h
@@ -131,7 +131,6 @@ Deprecated.  Use C<GIMME_V> instead.
                                /*  On OP_REQUIRE, was seen as CORE::require */
                                /*  On OP_(ENTER|LEAVE)WHEN, there's
                                    no condition */
-                               /*  On OP_SMARTMATCH, an implicit smartmatch */
                                /*  On OP_ANONHASH and OP_ANONLIST, create a
                                    reference to the new anon hash or array */
                                /*  On OP_HELEM, OP_MULTIDEREF and OP_HSLICE,