summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2011-08-25 18:10:53 -0700
committerFather Chrysostomos <sprout@cpan.org>2011-08-25 23:02:10 -0700
commit9d3c658e5c246089e541ed0d652aaccf018f16e9 (patch)
treea8b31caa71624daad4c4a8bd0bab38d19ec35532
parent2f8d417bd28b4abb5998a05fa0a9ebeb970ca845 (diff)
downloadperl-9d3c658e5c246089e541ed0d652aaccf018f16e9.tar.gz
&CORE::exit()
This commit allows &CORE::exit to be called through references and via ampersand syntax. pp_exit is modified to take into account the nulls pushed on to the stack in pp_coreargs, since pp_coreargs has no other way to tell exit how many arguments it’s actually getting.
-rw-r--r--gv.c2
-rw-r--r--pp_ctl.c3
-rw-r--r--t/op/coresubs.t5
3 files changed, 9 insertions, 1 deletions
diff --git a/gv.c b/gv.c
index 0ecbf96036..6f1756c96c 100644
--- a/gv.c
+++ b/gv.c
@@ -1353,7 +1353,7 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
return gv;
case KEY_chdir:
case KEY_chomp: case KEY_chop:
- case KEY_each: case KEY_eof: case KEY_exec: case KEY_exit:
+ case KEY_each: case KEY_eof: case KEY_exec:
case KEY_getpgrp: case KEY_gmtime:
case KEY_index: case KEY_keys:
case KEY_localtime: case KEY_lock: case KEY_lstat:
diff --git a/pp_ctl.c b/pp_ctl.c
index 997f492be3..76786c0508 100644
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -3139,6 +3139,9 @@ PP(pp_exit)
if (MAXARG < 1)
anum = 0;
+ else if (!TOPs) {
+ anum = 0; (void)POPs;
+ }
else {
anum = SvIVx(POPs);
#ifdef VMS
diff --git a/t/op/coresubs.t b/t/op/coresubs.t
index 9ed64ccbe7..c0f59661ec 100644
--- a/t/op/coresubs.t
+++ b/t/op/coresubs.t
@@ -320,6 +320,11 @@ test_proto $_ for qw(
endgrent endhostent endnetent endprotoent endpwent endservent
);
+test_proto 'exit';
+$tests ++;
+is runperl(prog => '&CORE::exit; END { print q-ok- }'), 'ok',
+ '&exit with no args';
+
test_proto 'fork';
test_proto 'formline';