This is a live mirror of the Perl 5 development currently hosted at
11 years agoGenerate @POSIX::EXPORT_OK from %reimpl, %replacement and an exception list.
Nicholas Clark [Thu, 1 Sep 2011 19:32:13 +0000 (21:32 +0200)]
Generate @POSIX::EXPORT_OK from %reimpl, %replacement and an exception list.

This is considerably terser than listing all the entries for @EXPORT_OK
longhand. With this change we can no longer delete from %replacement in
AUTOLOAD(), as import() and load_imports() may be called after AUTOLOAD()
has already been run.

11 years agoTest that @POSIX::EXPORT and @POSIX::EXPORT_OK are not inadvertently changed.
Nicholas Clark [Thu, 1 Sep 2011 18:07:51 +0000 (20:07 +0200)]
Test that @POSIX::EXPORT and @POSIX::EXPORT_OK are not inadvertently changed.

11 years agoRemove isatty from @POSIX::EXPORT_OK, as it's already in @EXPORT.
Nicholas Clark [Thu, 1 Sep 2011 17:00:03 +0000 (19:00 +0200)]
Remove isatty from @POSIX::EXPORT_OK, as it's already in @EXPORT.

This effectively reverts commit d925a710473da185, which added it and
reformatted the source code. isatty was in (the generated) @EXPORT
at that time, hence there was never a need to add it.

11 years agoReplace use of AutoLoader in POSIX with a custom compilation deferral scheme.
Aristotle Pagaltzis [Wed, 31 Aug 2011 20:08:21 +0000 (22:08 +0200)]
Replace use of AutoLoader in POSIX with a custom compilation deferral scheme.

11 years agoIn POSIX, improve the diagnostic for the "use $method" instead.
Nicholas Clark [Wed, 31 Aug 2011 13:20:56 +0000 (15:20 +0200)]
In POSIX, improve the diagnostic for the "use $method" instead.

In the error message, name the POSIX function that was called, as well as
the suggested replacement method. This rephrasing was in the patch
supplied by Aristotle Pagaltzis, but I have retained the existing POSIX
use of :: when describing the method, because given two less than great
choices, I'm inclined to favour retaining the status quo and one change
over two changes.

11 years agoIn POSIX, drastically simplify the wrappers for "unimplemented" functions.
Aristotle Pagaltzis [Wed, 31 Aug 2011 12:59:57 +0000 (14:59 +0200)]
In POSIX, drastically simplify the wrappers for "unimplemented" functions.

Replace all the subroutines that croak() with a data structure and 8 lines in

[By Aristotle Pagaltzis, with some editing by the committer, and most of his
message changes applied as a previous commit to split apart improvements from
pure refactoring]

This commit eliminates the helper functions POSIX::refef() and
POSIX::unimpl(), which were not part of the documented API, not exported,
and not used in any code outside the core (that is visible to Google

11 years agoIn, modernise package variable style.
Aristotle Pagaltzis [Thu, 1 Sep 2011 08:49:05 +0000 (10:49 +0200)]
In, modernise package variable style.

11 years agoThe more regular POSIX "unimplemented" diagnostics simplify the tests.
Nicholas Clark [Wed, 31 Aug 2011 12:32:47 +0000 (14:32 +0200)]
The more regular POSIX "unimplemented" diagnostics simplify the tests.

11 years agoImprovements to the diagnostics for "unimplemented" POSIX functions.
Nicholas Clark [Wed, 31 Aug 2011 11:08:49 +0000 (13:08 +0200)]
Improvements to the diagnostics for "unimplemented" POSIX functions.

Suggested by Aristotle Pagaltzis as part of a larger refactoring.
This regularises the text, changing '--use' and ': use' to ', use' to be
consistent, provides a message for POSIX::srand(), and adds ' is' to the
message for POSIX::bsearch().

Most of the diagnostics have been unchanged since perl 5.000. For some,
IO::Handle replaced FileHandle in perl5.003_20 (28757baaaeaa3801).
div and ldiv's messages were improved to also mention % in 2003 by commit

11 years agoTest the POSIX functions that wrap core builtins.
Nicholas Clark [Wed, 31 Aug 2011 18:58:00 +0000 (20:58 +0200)]
Test the POSIX functions that wrap core builtins.

No need to test the 7 tested elsewhere.

11 years agoConvert the POSIX waitpid tests to Test::More.
Nicholas Clark [Wed, 31 Aug 2011 16:19:34 +0000 (18:19 +0200)]
Convert the POSIX waitpid tests to Test::More.

Explicitly test POSIX::exit(), POSIX::fork(), POSIX::sleep() and
POSIX::waitpid(). Use POSIX::_exit() in the child process.

11 years agoExplicitly test both CORE:: and POSIX:: gmtime and localtime.
Nicholas Clark [Wed, 31 Aug 2011 16:02:00 +0000 (18:02 +0200)]
Explicitly test both CORE:: and POSIX:: gmtime and localtime.

The POSIX:: versions should be identical to the CORE:: versions, as they are
just wrappers. But the wrappers need testing.

11 years agoTest the diagnostics for usage messages for POSIX wrapper functions.
Nicholas Clark [Wed, 31 Aug 2011 14:41:12 +0000 (16:41 +0200)]
Test the diagnostics for usage messages for POSIX wrapper functions.

Regularise the 3 inconsistent messages.

11 years agoTest the diagnostics for all POSIX::* functions that are "unimplemented".
Nicholas Clark [Wed, 31 Aug 2011 10:13:46 +0000 (12:13 +0200)]
Test the diagnostics for all POSIX::* functions that are "unimplemented".

11 years agoIn ext/POSIX/t/is.t, make better use of Test::More.
Nicholas Clark [Wed, 31 Aug 2011 09:32:17 +0000 (11:32 +0200)]
In ext/POSIX/t/is.t, make better use of Test::More.

cmp_ok() will give better diagnostics than ok(). Using skip_all() is terser,
and will give better diagnostics.

11 years agoUse OPpDEREF for lvalue sub, such that the flags contains the deref type, instead...
Gerard Goossen [Wed, 31 Aug 2011 13:55:26 +0000 (15:55 +0200)]
Use OPpDEREF for lvalue sub, such that the flags contains the deref type, instead of deriving it from the opchain.

Also contains a test where using the opchain to determine the deref
type fails.

11 years agoReassign op_private flags of OP_ENTERSUB such that bits 32 and 64 can be used by...
Gerard Goossen [Wed, 31 Aug 2011 13:30:00 +0000 (15:30 +0200)]
Reassign op_private flags of OP_ENTERSUB such that bits 32 and 64 can be used by OPpDEREF

11 years agoUpdate CPANPLUS to CPAN version 0.9110
Chris 'BinGOs' Williams [Thu, 1 Sep 2011 18:24:52 +0000 (19:24 +0100)]
Update CPANPLUS to CPAN version 0.9110


  Changes for 0.9110      Thu Sep  1 13:43:06 2011
  * CPANPLUS::Dist::MM now ensures that Makefile.PL
    is older than any generated Makefile
  * When resolving dependencies ignore any @INC-hook
    when finding installed modules
  * Updated the META.yml in the dist to specify
    'dynamic_config' as true.

11 years agoFix overloaded <> when the peephole optimiser is disabled.
Gerard Goossen [Sat, 27 Aug 2011 15:08:07 +0000 (17:08 +0200)]
Fix overloaded <> when the peephole optimiser is disabled.

11 years ago[perl #97492] Tests & delta for defined ${"::!"}
Father Chrysostomos [Thu, 1 Sep 2011 15:13:51 +0000 (08:13 -0700)]
[perl #97492] Tests & delta for defined ${"::!"}

11 years ago[perl #97484] Make defined &{...} vivify CORE subs
Father Chrysostomos [Thu, 1 Sep 2011 05:44:57 +0000 (22:44 -0700)]
[perl #97484] Make defined &{...} vivify CORE subs

Magical variables usually get autovivified, even in rvalue context,
because  Perl is trying to pretend they have been there all along.
That means defined(${"."}) will autovivify $. and return true.

Until CORE subs were introduced, there were no subroutines that popped
into existence when looked at.

This commit makes rv_2cv use the GV_ADDMG flag added in commit
23496c6ea.  When this flag is passed, gv_fetchpvn_flags creates a GV
but does not add it to the stash until it finds out that it is creat-
ing a magical one.  The CORE sub code calls newATTRSUB, which expects
to add the CV to the stash itself.  So the gv has to be added there
and then.  So gv_fetchpvn_flags is also adjusted to add the gv to the
stash right before calling newATTRSUB, and to tell itself that the
GV_ADDMG flag is actually off.

It might be better to move the CV-creation code into op.c and inline
parts of newATTRSUB, to avoid fiddling with the addmg variable (and
avoid prototype checks on CORE subs), but that refactoring should
probably come in separate commits.

11 years ago[perl #98092] Fix unreferenced scalar warnings in clone.t
Father Chrysostomos [Thu, 1 Sep 2011 04:27:58 +0000 (21:27 -0700)]
[perl #98092] Fix unreferenced scalar warnings in clone.t

Commit da6b625f78 triggered an unrelated bug, by rearranging things in
memory so that the conditions were right:

If @DB::args has been populated, and then the items in it have been
freed, they can end up being reused for any SV-ish things allocated
thereafter, even lexical pads.

Each CV (subroutine) has a list of pads, called the padlist, which is
the same structure as a Perl array (an AV) underneath.  The padlist’s
memory management is done in pad.c, as there are other things that
have to be done when its elements (the pads themselves) are freed.
So, to prevent av.c from trying to free those elements, the padlist is
not marked REAL; i.e., it’s marked as not having its elements refer-
ence-counted, even though they are: it’s just not handled in av.c

The ‘Attempt to free unreferenced scalar’ warnings emitted by
threads::shared’s clone.t occurred when padlists and pads ended up
using freed SVs that were still in @DB::args.  When a new thread was
created, the pads in @DB::args ended up getting cloned when @DB::args
was cloned; hence they were treated as non-reference-counting arrays,
and the pads inside them were cloned with a lower reference count than
they ought to have had (sv_dup was called, instead of sv_dup_inc).
The pad-duplication code (pad_dup), like the regular SV-duplication
code, checks first to see if a padlist has been cloned already, before
actually doing it.  There was also a problem with pad_dup not incre-
menting the reference count of an already-cloned padlist.

So this commit fixes the pad_dup reference-counting bug and also
leaves AvREAL on for padlists, until the very last moment when they
are freed (in pad_free) with SvREFCNT_dec.

11 years agoUpdate Win32 canned config header files
Steve Hay [Thu, 1 Sep 2011 12:34:38 +0000 (13:34 +0100)]
Update Win32 canned config header files

There should be no real changes here: just run the regen_config_h target
in the Makefile, and then restore various Win32-specific things (mostly
the support of GCC in a VC++ build and vice versa) which get lost.

11 years agoMake switchC.t pass if the environment variable PERL_UNICODE contains "S"
Rafael Garcia-Suarez [Wed, 31 Aug 2011 19:59:40 +0000 (21:59 +0200)]
Make switchC.t pass if the environment variable PERL_UNICODE contains "S"

(actually doing so the quick way, by skipping the last test, that tests
for -CS on the shebang line)

11 years agoPreliminary cleanup of win32/config*.* prior to updating them fully
Steve Hay [Wed, 31 Aug 2011 17:48:37 +0000 (18:48 +0100)]
Preliminary cleanup of win32/config*.* prior to updating them fully

- Set lseeksize/lseektype to 4/long in new gc64* files (see f7e8b52a89)
- Add missing NULL parameter in new gc64* files (see e6a0bbf8b4)
- Change new gc64* files to a minimal setup (see d64224560b and 17bdc11416)
- Make the order of the __GNUC__ / _MSC_VER logic consistent
- Add __GNUC__ magic to vc64 (since new gc64* files have _MSC_VER magic)

11 years agoUpdated Locale-Codes to CPAN version 3.18
Chris 'BinGOs' Williams [Wed, 31 Aug 2011 13:51:06 +0000 (14:51 +0100)]
Updated Locale-Codes to CPAN version 3.18


  VERSION 3.18 (2011-08-31)


    No longer use CIA data

      The CIA world added non-standard values, so I no longer use it as a source of data. Based on a report by Michiel Beijen.

11 years agoAvoid an extra SV when creating $] and $^V
Father Chrysostomos [Tue, 30 Aug 2011 16:42:05 +0000 (09:42 -0700)]
Avoid an extra SV when creating $] and $^V

Originally, GVs always had something in the SV slot.  So, when the
code for $] and $^V started replacing it with another SV, it had to
free the existing SV.

Then commit c69033f2 came along and added the PERL_DONT_CREATE_GVSV
directive.  It necessarily changed a bunch of GvSV()s to GvSVn()s in
gv_fetchpvn_flags.  But it changed these two, even though they didn’t
need it.  So, when PERL_DONT_CREATE_GVSV is true (the default), we
just create and throw away a scalar needlessly.

11 years agoEliminate is_gv_magical_sv
Father Chrysostomos [Tue, 30 Aug 2011 16:31:47 +0000 (09:31 -0700)]
Eliminate is_gv_magical_sv

This resolves perl bug #97978.

Many built-in variables, like $], are actually created on the fly
when first accessed.  Perl likes to pretend that these variables have
always existed, so it autovivifies the *] glob even in rvalue context
(e.g., defined *{"]"}, close "]").

The list of variables that were autovivified was maintained separ-
ately (in is_gv_magical_sv) from the code that actually creates
them (gv_fetchpvn_flags).  ‘Maintained’ is not actually precise: it
*wasn’t* being maintained, and there were new variables that never
got added to is_gv_magical_sv and one deleted variable that was
never removed.

There are only two pieces of code that call is_gv_magical_sv, both in
pp.c: S_rv2gv (called by *{} and also the implicit *{} that functions
like close() provide) and Perl_softrefxv (called by ${}, @{}, %{}).

In both cases, the glob is immediately autovivified if
is_gv_magical_sv returns true.

So this commit eliminates the extra maintenance burden by extirpat-
ing is_gv_magical_sv altogether, and replacing it with a new flag to
gv_fetchpvn_flags, GvADDMG, which will autovivify a glob *if* it’s a
magical one.

It does make defined(*{"frobbly"}) slightly slower, in that it creates
a temporary glob and then frees it when it sees nothing magical has
been done with it.  But this case is rare enough it should not matter.
At least I got rid of the bugginess.

11 years agoRemove 3 unused scripts from Porting
Nicholas Clark [Tue, 30 Aug 2011 16:06:38 +0000 (18:06 +0200)]
Remove 3 unused scripts from Porting

Porting/findvars was added in 1998 in 2bd2b9e04a68ec86. It searches @ARGV for
its wordlist of then-current interpreter variable names.
Porting/fixvars was added as fixvars in 1998 in a15299417de39f35. It captures
the output of make (defaulting to make miniperl), parses it for errors
matching /undeclared/, and then attempts to edit the relevant line of the
reported file to prefix the name with PL_
Porting/fixCORE is a modified copy of Porting/fixvars, added in 1998 in
a8693bd382efcc6d. It's intended to load modules, catching errors of the form
/Ambiguous call resolved as CORE::/, and editing the relevant lines to prefix
CORE:: to the function in question. It appears only ever to have been used to
fix warnings in Math::Complex.

All 3 have only had trivial style and spelling edits since addition, and
have been unused for over 12 years.

11 years agoGenerate $Config::Config{byteorder} slightly more efficiently.
Nicholas Clark [Thu, 25 Aug 2011 15:08:25 +0000 (17:08 +0200)]
Generate $Config::Config{byteorder} slightly more efficiently.

11 years agoTiny typo in perldelta
Father Chrysostomos [Tue, 30 Aug 2011 03:19:31 +0000 (20:19 -0700)]
Tiny typo in perldelta

The fact that I typed a comma for 2 probably bewrays what keyboard
layout I’m using. :-)

11 years agoUpdate docs about &CORE::subs()
Father Chrysostomos [Tue, 30 Aug 2011 03:16:30 +0000 (20:16 -0700)]
Update docs about &CORE::subs()

11 years ago&CORE::write()
Father Chrysostomos [Tue, 30 Aug 2011 01:24:36 +0000 (18:24 -0700)]

This commit allows &CORE::write to be called through references and
via ampersand syntax.  No change to pp_enterwrite was necessary, as it
can already handle nulls.

11 years ago&CORE::unpack()
Father Chrysostomos [Tue, 30 Aug 2011 01:12:56 +0000 (18:12 -0700)]

This commit allows &CORE::unpack to be called through references and
via ampersand syntax.

It moves the $_-handling code in pp_coreargs inside the parameter
loop, so it can apply to the second parameter, not just the first.
Consequently, a mkdir test has been added that ensures implicit $_
is not used for mkdir’s second argument; i.e., that the $_-handling
code’s if() condition is correct.

11 years ago&CORE::umask()
Father Chrysostomos [Mon, 29 Aug 2011 21:15:34 +0000 (14:15 -0700)]

This commit allows &CORE::umask to be called through references and
via ampersand syntax.  pp_umask is modified to take into account the
nulls pushed on to the stack in pp_coreargs, which happens because
pp_coreargs has no other way to tell umask how many arguments it’s
actually getting.  See commit 0163043a for details.

11 years ago&CORE::foo() for tie functions
Father Chrysostomos [Mon, 29 Aug 2011 20:43:17 +0000 (13:43 -0700)]
&CORE::foo() for tie functions

This commit allows the tie, tied and untie subroutines in the CORE
namespace to be called through references and via &ampersand() syntax.
pp_coreargs is modified to handle the functions with \[$@%*] in their
prototypes (which happen to be just the tie functions).

11 years ago&CORE::tell()
Father Chrysostomos [Mon, 29 Aug 2011 19:58:17 +0000 (12:58 -0700)]

This commit allows &CORE::tell to be called through references and
via ampersand syntax.  pp_tell is modified to take into account the
nulls pushed on to the stack in pp_coreargs, which happens because
pp_coreargs has no other way to tell pp_tell how many arguments it’s
actually getting.  See commit 0163043a for details.

11 years ago&CORE::setpgrp()
Father Chrysostomos [Mon, 29 Aug 2011 16:54:20 +0000 (09:54 -0700)]

This commit allows &CORE::setpgrp to be called through references and
via ampersand syntax.  pp_setpgrp is modified to take into account the
nulls pushed on to the stack in pp_coreargs, which happens because
pp_coreargs has no other way to tell setpgrp how many arguments it’s
actually getting.  See commit 0163043a for details.

11 years agoMake setpgrp($x) equivalent to setpgrp($x,0)
Father Chrysostomos [Mon, 29 Aug 2011 16:34:16 +0000 (09:34 -0700)]
Make setpgrp($x) equivalent to setpgrp($x,0)

Prior to this commit, setpgrp(27) was equivalent to (27, setpgrp),
because it ignored the argument on the stack when there was only one.

11 years agomake setpgrpstack.t use skip_all_without_config
Father Chrysostomos [Mon, 29 Aug 2011 16:02:35 +0000 (09:02 -0700)]
make setpgrpstack.t use skip_all_without_config

11 years agoExtUtils::ParseXS: Don't put null chars into generated source
Stephen Bennett [Mon, 29 Aug 2011 17:44:50 +0000 (19:44 +0200)]
ExtUtils::ParseXS: Don't put null chars into generated source

... file when -except is used; write the '\0' escape sequence
properly instead.

11 years agoAdd Stephen Bennett to AUTHORS
Steffen Mueller [Mon, 29 Aug 2011 17:43:56 +0000 (19:43 +0200)]
Add Stephen Bennett to AUTHORS

11 years agoFor s///r, don't call SvPV_force() on the original value. Resolves #97954.
Nicholas Clark [Mon, 29 Aug 2011 13:25:23 +0000 (15:25 +0200)]
For s///r, don't call SvPV_force() on the original value. Resolves #97954.

8ca8a454f60a417f optimised the implementation of s///r by avoiding an
unconditional copy of the original value. However, it introduced a behaviour
regression where if original value happened to be one of a few particular
types, it could be modified by being forced to a string using SvPV_force().
The substitution was (correctly) performed on a copy of this string.

11 years agoRemove some resolved pod issues
Florian Ragwitz [Mon, 29 Aug 2011 10:14:00 +0000 (12:14 +0200)]
Remove some resolved pod issues

11 years agoperlfaq is now maintained on CPAN
Florian Ragwitz [Mon, 29 Aug 2011 09:35:01 +0000 (11:35 +0200)]
perlfaq is now maintained on CPAN

11 years agoUpgrade perlfaq from version 5.015003 to 5.01500301
Florian Ragwitz [Mon, 29 Aug 2011 09:10:09 +0000 (11:10 +0200)]
Upgrade perlfaq from version 5.015003 to 5.01500301

11 years agoLet's have at least one indexed package in perlfaq
Florian Ragwitz [Sat, 27 Aug 2011 10:32:16 +0000 (12:32 +0200)]
Let's have at least one indexed package in perlfaq

This way we get to make use of PAUSE's permission system instead of allowing
everyone to to upload new perlfaq versions.

11 years ago&CORE::sysopen()
Father Chrysostomos [Mon, 29 Aug 2011 01:23:49 +0000 (18:23 -0700)]

This commit allows &CORE::sysopen to be called through references and
via ampersand syntax.  pp_sysopen is modified to take into account the
nulls pushed on to the stack in pp_coreargs, which happens because
pp_coreargs has no other way to tell sysopen how many arguments it’s
actually getting.  See commit 0163043a for details.

11 years agoUse leavesublv for all CORE subs
Father Chrysostomos [Sun, 28 Aug 2011 13:34:48 +0000 (06:34 -0700)]
Use leavesublv for all CORE subs

and not just lock, vec and substr.  Using a regular leavesub op causes
the return values to be copied.  There is no need for that, so this
commit changes them all to use leavesublv.

11 years agoMake tie_fetch_count.t pass with PERL_UNICODE set
Father Chrysostomos [Mon, 29 Aug 2011 01:08:52 +0000 (18:08 -0700)]
Make tie_fetch_count.t pass with PERL_UNICODE set

11 years agoMake coreamp.t pass with PERL_UNICODE set
Father Chrysostomos [Mon, 29 Aug 2011 00:49:40 +0000 (17:49 -0700)]
Make coreamp.t pass with PERL_UNICODE set

11 years agoThinko in vms.c:copy_expand_unix_filename_escape().
Craig A. Berry [Sun, 28 Aug 2011 20:42:58 +0000 (15:42 -0500)]
Thinko in vms.c:copy_expand_unix_filename_escape().

Turns out comparing a signed byte to values above 0x7f doesn't make
sense.  *All* signed byte integers are less than or equal to 0x9f,
so the other two branches of the if could never be taken.

This code probably needs more review and testing, but we might as
well make it do what it intends to do before reviewing those
intentions and factoring out some of the copy-and-paste verbosity.

11 years agoBackport XS_(IN|EX)TERNAL, be explicit about linkage
Steffen Mueller [Sun, 28 Aug 2011 15:51:06 +0000 (17:51 +0200)]
Backport XS_(IN|EX)TERNAL, be explicit about linkage

With XS(name) defaulting to exporting symbols again since the
previous commit, ExtUtils::ParseXS will now instead use explicit
XS_EXTERNAL/XS_INTERNAL in its place. This allows backporting
of the linkage changes to perls as old as 5.10.0 (and possibly

11 years agoRevert back to making XS(name) expose XSUB symbols
Steffen Mueller [Sun, 28 Aug 2011 15:45:37 +0000 (17:45 +0200)]
Revert back to making XS(name) expose XSUB symbols

Instead, as Zefram recommended, ExtUtils::ParseXS will be patched
to not export XSUB symbols by default that are generated through
the module itself. As Zefram said, this has the advantage of
allowing older perls to benefit from the non-exporting of symbols.

11 years ago&CORE::substr()
Father Chrysostomos [Sun, 28 Aug 2011 06:29:13 +0000 (23:29 -0700)]

This commit makes &CORE::substr callable through references and via
&ampersand syntax.

It’s a bit awkward, as we need a substr op that is flagged as hav-
ing 4 arguments *and* possibly returning an lvalue.   The code in
op_lvalue_flags wasn’t really set up for that, so I needed to flag
the op with OPpMAYBE_LVSUB in coresub_op before it gets passed to
op_lvalue_flags.  It turned out that only that was necessary, as
op_lvalue_flags does an op_private == 4 check (rather than (op_private
& 7) == 4 or some such) when checking for the 4-arg case and croak-
ing.  When the op arrives in op_lvalue_flags, it’s already flagged
OPpMAYBE_LVSUB|4 which != 4.

pp_substr is also modified to check for nulls and, if necessary,
adjust its count of how many arguments were actually passed.)

11 years ago&CORE::srand()
Father Chrysostomos [Sun, 28 Aug 2011 01:50:19 +0000 (18:50 -0700)]

This commit allows &CORE::srand to be called through references and
via ampersand syntax.  pp_srand is modified to take into account the
nulls pushed on to the stack in pp_coreargs, which happens because
pp_coreargs has no other way to tell srand how many arguments it’s
actually getting.  See commit 0163043a for details.

11 years ago&CORE::sleep()
Father Chrysostomos [Sun, 28 Aug 2011 01:40:05 +0000 (18:40 -0700)]

This commit allows &CORE::sleep to be called through references and
via ampersand syntax.  pp_sleep is modified to take into account the
nulls pushed on to the stack in pp_coreargs, which happens because
pp_coreargs has no other way to tell sleep how many arguments it’s
actually getting.  See commit 0163043a for details.

Unfortunately, sleep with no args is nearly impossible to test porta-
bly.  But I have checked that it works.

11 years agoClose some unclosed comments in vms/vms.c.
Craig A. Berry [Sun, 28 Aug 2011 03:20:16 +0000 (22:20 -0500)]
Close some unclosed comments in vms/vms.c.

Clearly this code is not well-tested.  Especially the parts that
the compiler couldn't see because it was hidden by unclosed
comment blocks.  Ouch.

I'm not going to name names or look too deep in the blame log, but
suffice it to say that this is why patches that add hundreds of
lines of new code without tests should not be accepted.

11 years agoFix miscellaneous compiler warnings in vms/vms.c.
Craig A. Berry [Sun, 28 Aug 2011 03:12:24 +0000 (22:12 -0500)]
Fix miscellaneous compiler warnings in vms/vms.c.

A couple of empty parameter lists and a couple of unsigned -1
error statuses.  Brought to you by


which is only the third highest warning level.

11 years agoRemove unnecessary includes from vms/vms.c.
Craig A. Berry [Sun, 28 Aug 2011 03:07:43 +0000 (22:07 -0500)]
Remove unnecessary includes from vms/vms.c.

A couple are only needed for the homegrown utime() replacement on
older systems.  rmsdef.h is apparently not needed at all.

11 years ago&CORE::send() and &CORE::syswrite()
Father Chrysostomos [Sat, 27 Aug 2011 18:13:48 +0000 (11:13 -0700)]
&CORE::send() and &CORE::syswrite()

This commit makes &CORE::send and &CORE::syswrite callable through references and & syntax.

All this commit has to do is remove them from the exception list in
gv.c, as previous commits happen to have made them work.  (I didn’t
realise originally that these use pushmark.)

11 years ago&CORE::select()
Father Chrysostomos [Sat, 27 Aug 2011 16:50:22 +0000 (09:50 -0700)]

This commit allows CORE::select to be called through references and
via &ampersand syntax.

This is a tricky case, as the select keyword represents two distinct
operators.  ck_select replaces the OP_SELECT with an OP_SSELECT if
there is more that one argument.

So what we do here is create an if(@_>1)/else block with the usual
op-with-coreargs-child inside each branch.

The op tree looks like this:

$ ./perl -Ilib -mO=Concise,CORE::select -e 'BEGIN{\&CORE::select}
8  <1> leavesub[1 ref] K/REFC,1 ->(end)
-     <1> null K/1 ->8
5        <|> cond_expr(other->6) K/1 ->9
4           <2> gt sK/2 ->5
2              <1> rv2av[t4] sK/1 ->3
1                 <#> gv[*_] s ->2
3              <$> const[IV 1] s ->4
7           <@> sselect[t2] K ->8
-              <0> ex-pushmark s ->6
6              <$> coreargs(IV 218) ->7
a           <@> select[t1] sK/1 ->8
-              <0> ex-pushmark s ->9
9              <$> coreargs(IV 219) s/DREF1 ->a
-e syntax OK

There was no need to modify pp_select to handle a null when there is
no argument, as it can already handle it.

11 years agoDocument getprotobynumber’s precedence
Father Chrysostomos [Sun, 28 Aug 2011 00:39:40 +0000 (17:39 -0700)]
Document getprotobynumber’s precedence

11 years ago perlfunc/gethostbyname: Add missing C in C<>
Father Chrysostomos [Sun, 28 Aug 2011 00:33:46 +0000 (17:33 -0700)]
 perlfunc/gethostbyname: Add missing C in C<>

11 years agoTesting deparsing of CORE::not
Father Chrysostomos [Sat, 27 Aug 2011 12:46:25 +0000 (05:46 -0700)]
Testing deparsing of CORE::not

11 years agoGet coreamp.t passing on VMS.
Craig A. Berry [Sat, 27 Aug 2011 22:26:25 +0000 (17:26 -0500)]
Get coreamp.t passing on VMS.

The last record in a file ends with a newline willy nilly, so we
might as well write (and test for) one explicitly.

The name of a directory file ends with .DIR, so we need to allow
for that.

File::Temp panics when trying to delete the directory that is the
current working directory, so save where we were and restore to it
before clean-up.

11 years agopp.c: Use built-in case tables for ords < 256
Karl Williamson [Mon, 22 Aug 2011 15:26:09 +0000 (09:26 -0600)]
pp.c: Use built-in case tables for ords < 256

Previously, all case changing on utf8-encoded strings used the tables on
disk, under the off-chance that there was a user-defined case change
override in effect.  Now that that feature has been removed, this can't
happen, so we can use the existing built-in tables.

This code has been present and ifdef'd out since 5.10.1.  New compiler
warnings forced a few other changes besides removing the #if statements

Running some primitive benchmarks showed that this sped up upper-casing of
utf8 strings in the latin1 range by 2 orders of magnitude.

11 years agopp.c: Change comment
Karl Williamson [Mon, 22 Aug 2011 15:25:11 +0000 (09:25 -0600)]
pp.c: Change comment

This now reflects Tom Christiansen's and my current thinking about Greek
Final Sigma

11 years agoMake pod2html a regular script without substitutions
Florian Ragwitz [Thu, 25 Aug 2011 15:50:26 +0000 (17:50 +0200)]
Make pod2html a regular script without substitutions

This will make the CPAN dist easier. For the perl core, we still need
substitutions to get the right she-bang as we don't go through EU::MM to fix it
for us. For that, we add utils/pod2html.PL.

11 years agoGive Pod-Html a more modern dist layout
Florian Ragwitz [Thu, 25 Aug 2011 15:00:07 +0000 (17:00 +0200)]
Give Pod-Html a more modern dist layout

11 years ago&CORE::reset()
Father Chrysostomos [Sat, 27 Aug 2011 06:50:06 +0000 (23:50 -0700)]

This commit allows &CORE::reset to be called through references and
via ampersand syntax.  pp_reset is modified to take into account the
nulls pushed on to the stack in pp_coreargs, which happens because
pp_coreargs has no other way to tell reset how many arguments it’s
actually getting.  See commit 0163043a for details.

11 years agoGVs of localised arrays and hashes should be refcounted
Father Chrysostomos [Sat, 27 Aug 2011 06:31:36 +0000 (23:31 -0700)]
GVs of localised arrays and hashes should be refcounted

Otherwise the GV can be freed before the scope-popping code can put
the old entry back in it:

$ perl -le 'local @{"x"}; delete $::{x}'
Bus error
$ perl -le 'local %{"x"}; delete $::{x}'
Bus error

11 years ago&CORE::foo() for (sys)read and recv
Father Chrysostomos [Sat, 27 Aug 2011 05:28:52 +0000 (22:28 -0700)]
&CORE::foo() for (sys)read and recv

These are grouped together because they all have \$ in their

This commit allows the subs in the CORE package under those names to
be called through references and via &ampersand syntax.

The coreargs op in the subroutine is marked with the OPpSCALARMOD
flag.  (scalar_mod_type in op.c returns true for these three ops,
indicating that the OA_SCALARREF parameter is \$, not \[$@%(&)*].)

pp_coreargs uses that flag to decide what arguments to reject.

11 years agoAdd OPpCOREARGS_SCALARMOD flag
Father Chrysostomos [Sat, 27 Aug 2011 05:05:40 +0000 (22:05 -0700)]

pp_coreargs will use this to distinguish between the \$ and \[$@%*]

11 years agoUpdate the comments at the top of t/op/core*.t
Father Chrysostomos [Sat, 27 Aug 2011 04:57:59 +0000 (21:57 -0700)]
Update the comments at the top of t/op/core*.t

11 years agoRename t/op/core*.t
Father Chrysostomos [Sat, 27 Aug 2011 04:48:47 +0000 (21:48 -0700)]
Rename t/op/core*.t

Originally, coresubs.t was going to be for generic tests and
coreinline.t was going to be for inlining.  But the latter ended
up testing other things than inlining, the former testing just
&ampersand() calls.  So this commits renames coresubs.t to coreamp.t
and coreinline.t to coresubs.t.

11 years ago&CORE::rand()
Father Chrysostomos [Fri, 26 Aug 2011 17:12:01 +0000 (10:12 -0700)]

This commit allows &CORE::rand to be called through references and
via ampersand syntax.  pp_rand is modified to take into account the
nulls pushed on to the stack in pp_coreargs, which happens because
pp_coreargs has no other way to tell rand how many arguments it’s
actually getting.  See commit 0163043a for details.

11 years ago&CORE::open()
Father Chrysostomos [Sat, 27 Aug 2011 01:19:14 +0000 (18:19 -0700)]

This commit allows &CORE::open to be called through references or with
ampersand syntax.  It modifies pp_coreargs not to push nulls for ops
that require a pushmark.

11 years agoReverse the order of two tests in gv.t
Father Chrysostomos [Fri, 26 Aug 2011 21:52:06 +0000 (14:52 -0700)]
Reverse the order of two tests in gv.t

so that the first does not make the second always pass.
The bug that 99fc7eca4 fixed would never had occurred if
they had been that way to begin with.

11 years ago&CORE::mkdir()
Father Chrysostomos [Thu, 25 Aug 2011 16:52:13 +0000 (09:52 -0700)]

This commit allows &CORE::mkdir to be called through references and
via ampersand syntax.  pp_mkdir is modified to take into account the
nulls pushed on to the stack in pp_coreargs, which happens because
pp_coreargs has no other way to tell mkdir how many arguments it’s
actually getting.

11 years ago&CORE::lock()
Father Chrysostomos [Wed, 24 Aug 2011 16:09:58 +0000 (09:09 -0700)]

This commit allows &CORE::lock to be called through references and
via ampersand syntax.  It adds code to pp_coreargs for handling the
OA_SCALARREF case, though what it adds is currently lock-specific.
(Subsequent commits will address that.)  Since lock returns the scalar
passed to it, not a copy, &CORE::lock needs to use op_leavesublv,
rather than op_leavesub.  But it can’t be an lvalue sub, as
&CORE::lock = 3 should be disallowed.  So we use the sneaky trick of
turning on the lvalue flag before attaching the op tree to the sub
(which causes newATTRSUB to use op_leavesublv), and then turning it
off afterwards.

11 years ago&CORE::index() and &CORE::rindex()
Father Chrysostomos [Fri, 26 Aug 2011 19:40:13 +0000 (12:40 -0700)]
&CORE::index() and &CORE::rindex()

This commit allows &CORE::index and &CORE::rindex to be called through
references and via ampersand syntax.  pp_index is modified to take
into account the nulls pushed on to the stack in pp_coreargs, which
happens because pp_coreargs has no other way to tell pp_index how many
arguments it’s actually getting.  See commit 0163043a for details.

11 years agoUpdate UNIVERSAL::VERSION docs following 9bf41c1
Father Chrysostomos [Fri, 26 Aug 2011 17:00:13 +0000 (10:00 -0700)]
Update UNIVERSAL::VERSION docs following 9bf41c1

11 years ago&CORE::gmtime() and &CORE::localtime()
Father Chrysostomos [Fri, 26 Aug 2011 16:49:37 +0000 (09:49 -0700)]
&CORE::gmtime() and &CORE::localtime()

This commit allows &CORE::gmtime and &CORE::localtime to be called
through references and via ampersand syntax.  pp_gmtime is modified
to take into account the nulls pushed on to the stack in pp_coreargs,
which happens because pp_coreargs has no other way to tell pp_gmtime
how many arguments it’s actually getting.

I was going to say ‘see commit f6a1686942 for more details’, but found
out, to my horror, that most of the commit message was cut off.  I
don’t know which commit-munging part of git is responsible, but I’ve
had similar problems with git am and git commit --amend.  But, then,
this could have been sloppy copy and paste.  Anyway, here is the
missing part:

Usually, an op that has optional arguments has the number of arguments
indicated with flags on the op itself:

$ ./perl -Ilib -MO=Concise -e 'binmode 1'
6  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 1 -e:1) v:{ ->3
5     <@> binmode vK/1 ->6
-        <0> ex-pushmark s ->3
4        <1> rv2gv sK*/1 ->5
3           <$> gv(*1) s ->4
-e syntax OK
$ ./perl -Ilib -MO=Concise -e 'binmode 1,2'
7  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 1 -e:1) v:{ ->3
6     <@> binmode vK/2 ->7
-        <0> ex-pushmark s ->3
4        <1> rv2gv sK*/1 ->5
3           <$> gv(*1) s ->4
5        <$> const(IV 2) s ->6
-e syntax OK

Notice the /1 vs /2 on the binmode op.

With a CORE sub, we have a single op for both cases.  So, what this
commit does is set the number of arguments to the maximum, push nulls
on to the stack in pp_coreargs (actually, it was already set up to
do it, so there is no change there), and have the pp_ functions for
each op that has optional arguments do a null check after popping
the stack.

pp_binmode already does a null check, but other pp_ functions will
need to be modified.  Since each one is different, those will come in
separate commits.

This is what &CORE::binmode’s op tree looks like:

$ ./perl -Ilib -MO=Concise,CORE::binmode -e 'BEGIN{\&CORE::binmode}'
3  <1> leavesub[1 ref] K/REFC,1 ->(end)
2     <@> binmode sK/2 ->3
-        <0> ex-pushmark s ->1
1        <$> coreargs(IV 212) s ->2
-e syntax OK

11 years agoperldelta for f132ae69 (*{undef})
Father Chrysostomos [Fri, 26 Aug 2011 16:26:46 +0000 (09:26 -0700)]
perldelta for f132ae69 (*{undef})

11 years agoRemove now-unnecessary len check from pp.c:S_rv2gv
Father Chrysostomos [Fri, 26 Aug 2011 15:25:45 +0000 (08:25 -0700)]
Remove now-unnecessary len check from pp.c:S_rv2gv

This check, added by ed996e63f6, is no longer necessary as of commit
f132ae694c, since PL_sv_undef takes a different path.

11 years agoMake *{undef} self-consistent
Father Chrysostomos [Fri, 26 Aug 2011 13:20:01 +0000 (06:20 -0700)]
Make *{undef} self-consistent

Commit afd1915d made filehandle vivification work on hash and array
elements, but in doing so it accidentally changed

    *{;undef} = 3;

to do the same thing as

    *{""} = 3;

while leaving


an error.

This commit adjusts the if() conditions in S_rv2gv (formerly in
pp_rv2gv) in pp.c to make PL_sv_undef follow the same path as before.

It also removes the uninit tests from lib/warnings/pp, since they
are now errors.  The uninit warning in rv2gv is only triggered now
when it is implicit, as in close().  That is already tested in

11 years agoperlop: Minor consistency tweak
Father Chrysostomos [Fri, 26 Aug 2011 12:55:34 +0000 (05:55 -0700)]
perlop: Minor consistency tweak

Make the indentation in this example match the surrounding

11 years ago[perl #93358] Clarify => quoting
Father Chrysostomos [Fri, 26 Aug 2011 12:54:58 +0000 (05:54 -0700)]
[perl #93358] Clarify => quoting

The perlop manpage was stating ‘the left operand’, which was
not entirely correct, as ‘time.shift =>’ quotes just the shift,
not the time (nor does it see the whole as not being an ident-
ifier and refuse to quote anything).

11 years agoRe-generate uconfig.h
Florian Ragwitz [Fri, 26 Aug 2011 13:26:38 +0000 (15:26 +0200)]
Re-generate uconfig.h

This makes porting/regen.t pass again.

11 years agoBump the perlfaq version for a new cpan release
Florian Ragwitz [Fri, 26 Aug 2011 12:35:51 +0000 (14:35 +0200)]
Bump the perlfaq version for a new cpan release

11 years agoRemove unwanted space in comments
H.Merijn Brand [Fri, 26 Aug 2011 11:02:23 +0000 (13:02 +0200)]
Remove unwanted space in comments

11 years agoRevert "Fix Configure's csym test for gcc's link time optimisation"
H.Merijn Brand [Fri, 26 Aug 2011 10:14:53 +0000 (12:14 +0200)]
Revert "Fix Configure's csym test for gcc's link time optimisation"

There are too many related problems arising from this change

This reverts commit e820c6d6a6d0a8828aa68a6895696b659c471f2f.

11 years agoCorrect mro_get_linear_isa’s docs
Father Chrysostomos [Fri, 26 Aug 2011 04:36:12 +0000 (21:36 -0700)]
Correct mro_get_linear_isa’s docs

This has been out of date since the MRO plugin API was added
(5.10.1, I think).

11 years ago&CORE::getpgrp()
Father Chrysostomos [Fri, 26 Aug 2011 01:12:35 +0000 (18:12 -0700)]

This commit allows &CORE::getpgrp to be called through references and
via ampersand syntax.  pp_getpgrp 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 getpgrp how many arguments it’s actually getting.

11 years ago&CORE::exit()
Father Chrysostomos [Fri, 26 Aug 2011 01:10:53 +0000 (18:10 -0700)]

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.

11 years agopp.c: Suppress stupid compiler warning
Father Chrysostomos [Fri, 26 Aug 2011 03:02:58 +0000 (20:02 -0700)]
pp.c: Suppress stupid compiler warning

11 years ago&CORE::foo() for dbmopen and dbmclose
Father Chrysostomos [Fri, 26 Aug 2011 01:06:23 +0000 (18:06 -0700)]
&CORE::foo() for dbmopen and dbmclose

This commit allows the subs in the CORE package for close, getc and
readline to be called through references and via ampersand syntax.  A
special case for each of them is added to pp_coreargs to deal with
calls with no arguments.  Pushing a null on to the stack (which I’m
doing for other ops) won’t work, as a null already means something for
these cases: close($f) won’t vivify a typeglob if $f is a string, so
the implicit rv2gv pushes a null on to the stack.

11 years ago&CORE::foo() for close, getc and readline
Father Chrysostomos [Fri, 26 Aug 2011 00:59:12 +0000 (17:59 -0700)]
&CORE::foo() for close, getc and readline

This commit allows the subs in the CORE package for close, getc and
readline to be called through references and via ampersand syntax. The
pp functions are modified to take into account the nulls that coreargs
pushes on to the stack to indicate that there is no argument.

11 years agovoid rather than empty parameter for Perl___notused.
Craig A. Berry [Thu, 25 Aug 2011 22:16:13 +0000 (17:16 -0500)]
void rather than empty parameter for Perl___notused.

Without this, the VMS compiler, with warnings cranked up to level 4,
emits pages and pages of things like:

%CC-I-NOPARMLIST, The declaration of the function Perl___notused has
an empty parameter list.  If the function has parameters, they should
be declared here; if it has no parameters, "void" should be specified
in the parameter list.
at line number 100 in file MDA0:[SMOKE.blead]perl.c;1

Over 2,000 of these plus other warnings yields a smoke report of 750K,
which is quite a bit over the 400K limit of the mailing lists,
not to mention being a slow read.