diff options
author | Father Chrysostomos <sprout@cpan.org> | 2011-08-25 18:10:53 -0700 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2011-08-25 23:02:10 -0700 |
commit | 9d3c658e5c246089e541ed0d652aaccf018f16e9 (patch) | |
tree | a8b31caa71624daad4c4a8bd0bab38d19ec35532 | |
parent | 2f8d417bd28b4abb5998a05fa0a9ebeb970ca845 (diff) | |
download | perl-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.c | 2 | ||||
-rw-r--r-- | pp_ctl.c | 3 | ||||
-rw-r--r-- | t/op/coresubs.t | 5 |
3 files changed, 9 insertions, 1 deletions
@@ -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: @@ -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'; |