summaryrefslogtreecommitdiff
path: root/pp.c
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2011-08-08 23:57:01 -0700
committerFather Chrysostomos <sprout@cpan.org>2011-08-14 12:54:05 -0700
commitb66130dd0dcaf72b6e443ebde808ff3b8ff9c885 (patch)
treeb63612384ab492310823ce54c709401795d03e07 /pp.c
parentbe1b855bbb2f62dad5aa5efb8dc5bce980ad4086 (diff)
downloadperl-b66130dd0dcaf72b6e443ebde808ff3b8ff9c885.tar.gz
Move pp_-specific code out of core_prototype
Commit b8c38f0a2a65 refactored pp_prototype by moving much of its code to a new function in op.c, called core_prototype. This served two purposes: (1) to allow the code to be simplified, which required the use of static functions in op.c, and (2) to allow the &CORE::subs feature to share the same code. But some code was moved to core_prototype which, in hindsight, did not need to be moved, such as the ‘Can’t find an opnumber’ message. This commit moves that code back to pp_prototype, resulting in a sim- pler (and possibly faster, at least for &CORE::subs) core_prototype.
Diffstat (limited to 'pp.c')
-rw-r--r--pp.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/pp.c b/pp.c
index c6f8eac347..ca94935c30 100644
--- a/pp.c
+++ b/pp.c
@@ -439,9 +439,12 @@ PP(pp_prototype)
const char * s = SvPVX_const(TOPs);
if (strnEQ(s, "CORE::", 6)) {
const int code = keyword(s + 6, SvCUR(TOPs) - 6, 1);
- SV *const sv =
- core_prototype(NULL, s + 6, code, NULL, 1);
- if (sv) ret = sv;
+ if (!code || code == -KEY_CORE)
+ DIE(aTHX_ "Can't find an opnumber for \"%s\"", s+6);
+ if (code < 0) { /* Overridable. */
+ SV * const sv = core_prototype(NULL, s + 6, code, NULL);
+ if (sv) ret = sv;
+ }
goto set;
}
}