Correct lock’s prototype
authorFather Chrysostomos <sprout@cpan.org>
Thu, 21 Jul 2011 07:07:05 +0000 (00:07 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 21 Jul 2011 07:07:05 +0000 (00:07 -0700)
As of commit f4df43b5, lock is parsed the same way as tied.  Before
that, the prototype was effectively \[$@%&*], but only because
it was buggy (an lvalue sub itself would be passed to the function,
instead of its return value).  Yet its prototype was set to \$, which
was just wrong.

This fixes part of #94980.

pod/perldelta.pod
pp.c
t/op/cproto.t

index a3d92cd2d3211e3ae826c50d126ec502d743bab9..74162d7e12778f7866f7c1ecacd8a8477cab5a69 100644 (file)
@@ -338,6 +338,11 @@ value, instead of trying to lock the sub (which has no effect).  It also no
 longer tries to return the sub as a scalar, resulting in strange side
 effects like C<ref \$_> returning "CODE" in some instances.
 
+=item *
+
+C<lock>'s prototype has been corrected to C<(\[$@%*])> from C<(\$)>, which
+was just wrong.
+
 =back
 
 =head1 Known Problems
diff --git a/pp.c b/pp.c
index 012f50f8631b2ef8c9a8a0ddf31607049647d2f1..b6dabb5008543e242bc1805ebcaa05429a674aad 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -457,7 +457,7 @@ PP(pp_prototype)
                case KEY_splice:
                    ret = newSVpvs_flags("+;$$@", SVs_TEMP);
                    goto set;
-               case KEY_tied: case KEY_untie:
+               case KEY_lock: case KEY_tied: case KEY_untie:
                    ret = newSVpvs_flags("\\[$@%*]", SVs_TEMP);
                    goto set;
                case KEY_tie:
index 995500c858a2a134d3ddbfa38d599fde97a4a61c..4863d2ef7758ef78c4da71dd3b2ddb5b13762510 100644 (file)
@@ -134,7 +134,7 @@ link ($$)
 listen (*$)
 local undef
 localtime (;$)
-lock (\$)
+lock (\[$@%*])
 log (_)
 lstat (*)
 lt undef