This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Remove select’s prototype
authorFather Chrysostomos <sprout@cpan.org>
Fri, 12 Aug 2011 19:29:07 +0000 (12:29 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 14 Aug 2011 13:38:21 +0000 (06:38 -0700)
select has a prototype of (;*), which is incorrect, as it implied that
it has high precedence.  It also fails to account for the four-argu-
ment form.  While removing all incorrect prototypes is counterproduc-
tive, I think this one is wrong enough it deserves to go.  (And the
precedence problem is a good argument against it, as there is cur-
rently no other way to set precedence.)

dist/B-Deparse/Deparse.pm
op.c
t/op/cproto.t

index 848b2fa..cb60bae 100644 (file)
@@ -26,7 +26,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring
         ($] < 5.009 ? 'PMf_SKIPWHITE' : qw(RXf_SKIPWHITE)),
         ($] < 5.011 ? 'CVf_LOCKED' : 'OPpREVERSE_INPLACE'),
         ($] < 5.013 ? () : 'PMf_NONDESTRUCT');
-$VERSION = "1.06";
+$VERSION = "1.07";
 use strict;
 use vars qw/$AUTOLOAD/;
 use warnings ();
@@ -1553,7 +1553,7 @@ sub keyword {
            : "CORE::$name";
     }
     if (
-      $name !~ /^(?:chom?p|exec|system)\z/
+      $name !~ /^(?:chom?p|exec|s(?:elect|ystem))\z/
        && !defined eval{prototype "CORE::$name"}
     ) { return $name }
     if (
diff --git a/op.c b/op.c
index 0ab2d1e..1f6743d 100644 (file)
--- a/op.c
+++ b/op.c
@@ -10283,7 +10283,7 @@ Perl_core_prototype(pTHX_ SV *sv, const char *name, const STRLEN len,
     case KEY_cmp   : case KEY_exec: case KEY_eq   :
     case KEY_ge    : case KEY_gt  : case KEY_le   :
     case KEY_lt    : case KEY_ne  : case KEY_or   :
-    case KEY_system: case KEY_x   : case KEY_xor  :
+    case KEY_select: case KEY_system: case KEY_x  : case KEY_xor:
        return NULL;
     case KEY_keys: case KEY_values: case KEY_each:
        retsetpvs("+");
index 9711f82..1476ae6 100644 (file)
@@ -197,7 +197,7 @@ say undef
 scalar undef
 seek (*$$)
 seekdir (*$)
-select (;*)
+select undef
 semctl ($$$$)
 semget ($$$)
 semop ($$)