Make prototype("CORE::CORE") die once more.
authorFather Chrysostomos <sprout@cpan.org>
Tue, 9 Aug 2011 05:15:52 +0000 (22:15 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 9 Aug 2011 05:15:52 +0000 (22:15 -0700)
Commit b8c38f0a2a65 accidentally made prototype("CORE::CORE") return
undef instead of dying. This is the only case that reached the line
with the ‘Should not happen...’ comment.

This commit changes it to be handled earlier and also adds an asser-
tion to make sure that unreachable code really is unreachable (which
it should be now, I think, I hope...).

op.c
t/op/cproto.t

diff --git a/op.c b/op.c
index d20009e..a144385 100644 (file)
--- a/op.c
+++ b/op.c
@@ -10245,7 +10245,7 @@ Perl_core_prototype(pTHX_ SV *sv, const char *name, const STRLEN len,
 
     PERL_ARGS_ASSERT_CORE_PROTOTYPE;
 
-    if (!code) {
+    if (!code || code == -KEY_CORE) {
        if (croak)
            return (SV *)Perl_die(aTHX_
                "Can't find an opnumber for \"%s\"", name
@@ -10290,7 +10290,7 @@ Perl_core_prototype(pTHX_ SV *sv, const char *name, const STRLEN len,
        }
        i++;
     }
-    return NULL;    /* Should not happen... */
+    assert(0); return NULL;    /* Should not happen... */
   found:
     defgv = PL_opargs[i] & OA_DEFGV;
     oa = PL_opargs[i] >> OASHIFT;
index ee97433..e1f3125 100644 (file)
@@ -7,7 +7,7 @@ BEGIN {
 }
 
 BEGIN { require './test.pl'; }
-plan tests => 243;
+plan tests => 244;
 
 while (<DATA>) {
     chomp;
@@ -32,6 +32,7 @@ __LINE__ ()
 __PACKAGE__ ()
 __DATA__ undef
 __END__ undef
+CORE unknown
 abs (_)
 accept (**)
 alarm (_)