This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
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 a3d92cd..74162d7 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 012f50f..b6dabb5 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 995500c..4863d2e 100644 (file)
@@ -134,7 +134,7 @@ link ($$)
 listen (*$)
 local undef
 localtime (;$)
-lock (\$)
+lock (\[$@%*])
 log (_)
 lstat (*)
 lt undef