This is a live mirror of the Perl 5 development currently hosted at
14 months ago(toke|regcomp).c: Use common fcn to handle \0 problems
Karl Williamson [Thu, 16 Jan 2020 21:42:35 +0000 (14:42 -0700)]
(toke|regcomp).c: Use common fcn to handle \0 problems

This changes warning messages for too short \0 octal constants to use
the function introduced in the previous commit.  This function assures a
consistent and clear warning message, which is slightly different than
the one this commit replaces.  I know of no CPAN code which depends on
this warning's wording.

14 months agoregcomp.c: Code points above 255 are portable
Karl Williamson [Thu, 16 Jan 2020 21:02:53 +0000 (14:02 -0700)]
regcomp.c: Code points above 255 are portable

These tests are to generate warnings that the affected code is not
portable between ASCII and EBCDIC systems.  But, it was being too picky.
Code points above 255 are the same on both systems, so the warning
shouldn't be generated for those.

14 months agoRevise \o{ missing '}' error message
Karl Williamson [Thu, 23 Jan 2020 21:17:37 +0000 (14:17 -0700)]
Revise \o{ missing '}' error message

All the other messages raised when a construct is expecting a
terminating '}' but none is found include the '}' in the message.  '\o{'
did not.  Since these diagnostics are getting revised anyway, and I
didn't find any CPAN modules relying on the wording, this commit makes
the messages consistent by adding the '}' to the \o message.

14 months agoRestructure grok_bslash_[ox]
Karl Williamson [Thu, 16 Jan 2020 20:17:32 +0000 (13:17 -0700)]
Restructure grok_bslash_[ox]

This commit causes these functions to allow a caller to request any
messages generated to be returned to the caller, instead of always being
handled within these functions.  The messages are somewhat changed from
previously to be clearer.  I did not find any code in CPAN that relied
on the previous message text.

Like the previous commit for grok_bslash_c, here are two reasons to do
this, repeated here.

1) In pattern compilation this brings these messages into conformity
   with the other ones that get generated in pattern compilation, where
   there is a particular syntax, including marking the exact position in
   the parse  where the problem occurred.

2) These could generate truncated messages due to the (mostly)
   single-pass nature of pattern compilation that is now in effect.  It
   keeps track of where during a parse a message has been output, and
   won't output it again if a second parsing pass turns out to be
   necessary.  Prior to this commit, it had to assume that a message
   from one of these functions did get output, and this caused some
   out-of-bounds reads when a subparse (using a constructed pattern) was
   executed.  The possibility of those went away in commit 5d894ca5213,
   which guarantees it won't try to read outside bounds, but that may
   still mean it is outputting text from the wrong parse, giving
   meaningless results.  This commit should stop that possibility.

14 months agoRestructure grok_bslash_c
Karl Williamson [Wed, 15 Jan 2020 17:48:05 +0000 (10:48 -0700)]
Restructure grok_bslash_c

This commit causes this function to allow a caller to request any
messages generated to be returned to the caller, instead of always being
handled within this function.

Like the previous commit for grok_bslash_c, here are two reasons to do
this, repeated here.

1) In pattern compilation this brings these messages into conformity
   with the other ones that get generated in pattern compilation, where
   there is a particular syntax, including marking the exact position in
   the parse where the problem occurred.

2) The messages could be truncated due to the (mostly) single-pass
   nature of pattern compilation that is now in effect.  It keeps track
   of where during a parse a message has been output, and won't output
   it again if a second parsing pass turns out to be necessary.  Prior
   to this commit, it had to assume that a message from one of these
   functions did get output, and this caused some out-of-bounds reads
   when a subparse (using a constructed pattern) was executed.  The
   possibility of those went away in commit 5d894ca5213, which
   guarantees it won't try to read outside bounds, but that may still
   mean it is outputting text from the wrong parse, giving meaningless
   results.  This commit should stop that possibility.

14 months agoregcomp.c: Add parameter to macro
Karl Williamson [Wed, 15 Jan 2020 11:46:47 +0000 (04:46 -0700)]
regcomp.c: Add parameter to macro

This is to generalize it for future commits.

14 months agodquote.c: Change parameter name
Karl Williamson [Wed, 15 Jan 2020 16:56:07 +0000 (09:56 -0700)]
dquote.c: Change parameter name

In two functions, future commits will generalize this parameter to be
possibly a warning message instead of only an error message.  Change its
name to reflect the added meaning.

14 months agoHoist code point portability warnings
Karl Williamson [Sun, 12 Jan 2020 11:05:59 +0000 (04:05 -0700)]
Hoist code point portability warnings

14 months agoutf8.c: Make global a warning msg text
Karl Williamson [Wed, 15 Jan 2020 12:13:20 +0000 (05:13 -0700)]
utf8.c: Make global a warning msg text

This is in preparation for it to be raised in other files

14 months agoWarn on too high a code point if portable warn enabled
Karl Williamson [Sat, 11 Jan 2020 17:00:32 +0000 (10:00 -0700)]
Warn on too high a code point if portable warn enabled

"use warnings 'portable'" is supposed to warn if a value won't fit on a
32 bit platform.  For the UTF-8 conversion functions it wasn't.  This is
still overridden if the flags to these functions call for no warnings to
be generated, but this commit changes it so that if the portable
category is enabled, but not the non_unicode category, warnings are
generated for the code points that won't work on a 32-bit platform.

14 months agoTest that a leading '_' is ok in \x{}, \o{}
Karl Williamson [Wed, 22 Jan 2020 21:47:00 +0000 (14:47 -0700)]
Test that a leading '_' is ok in \x{}, \o{}

These are ok perhaps accidentally, but shouldn't accidentally become not

14 months agoAdd two more flags to grok_bin_oct_hex
Karl Williamson [Mon, 20 Jan 2020 03:08:42 +0000 (20:08 -0700)]
Add two more flags to grok_bin_oct_hex

These add enough functionality so that other code that rolled its own
version of this can call it instead and get the desired functionality.

One flag silences warnings about overflow.  It would be more consistent
to use the existing flag that gets set when overflow is detected to
silence the warnings if set on input.  But that would be a change in
(undocumented) behavior, and I thought it better to not chance breaking

The other flag forbids an initial underscore when medial underscores are
allowed.  I wasn't aware until I examined the code and documentation
carefully that the flag that I thought allowed  single underscores
between digits, actually also allows for an initial underscore.  I can't
imagine why that was the case, but \N{U+...} never allowed initial
underscores, and adding a flag to grok_hex to allow just medial
underscores allows \N{} in a future commit  to change to use grok_hex()
without changing behavior.

Neither flag is currently exposed outside of the core or extensions

14 months agoperldelta for 6568ef8216f93
Craig A. Berry [Thu, 23 Jan 2020 15:10:11 +0000 (09:10 -0600)]
perldelta for 6568ef8216f93

14 months agoDetect "new" C99 features in
Craig A. Berry [Wed, 22 Jan 2020 00:54:35 +0000 (18:54 -0600)]
Detect "new" C99 features in

VSI has released a patch kit that finally completes C99 support on
VMS, including stdint.h and assorted math functions.  With this
commit, now detects and uses the recently-released
but two decades late features that Perl uses based on anything
that Configure would detect on other platforms.

14 months agoperldelta for c23f766f6c2
Tony Cook [Tue, 21 Jan 2020 23:34:30 +0000 (10:34 +1100)]
perldelta for c23f766f6c2

14 months agoChange various references to and
Dan Book [Thu, 26 Dec 2019 23:53:54 +0000 (18:53 -0500)]
Change various references to and

14 months agoConfigure: avoid here-doc in eval-ed snippet
Dagfinn Ilmari Mannsåker [Tue, 21 Jan 2020 18:04:32 +0000 (18:04 +0000)]
Configure: avoid here-doc in eval-ed snippet

Some versions of bash, ksh and dash warn or error, complaining about
unterminated here-docs, while some versions complain about syntax
errors in unrelated parts of the script.

This partially reverts commit 52635202f174c9387aa422c4aa32d12f754d8a33.

14 months agoAdapt Configure to GCC version 10
Petr Písař [Tue, 12 Nov 2019 08:19:18 +0000 (09:19 +0100)]
Adapt Configure to GCC version 10

I got a notice from Jeff Law <>:

    Your particular package fails its testsuite. This was ultimately
    tracked down to a Configure problem. The perl configure script treated
    gcc-10 as gcc-1 and turned on -fpcc-struct-return. This is an ABI
    changing flag and caused Perl to not be able to interact properly with
    the dbm libraries on the system leading to a segfault.

His proposed patch corrected only this one instance of the version
mismatch. Reading the Configure script revealed more issues. This
patch fixes all of them I found.

Please note I do not have GCC 10 available, I tested it by faking the version

--- a/Configure
+++ b/Configure
@@ -4672,7 +4672,7 @@ $cat >try.c <<EOM
 int main() {
 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
 #ifdef __VERSION__
-       printf("%s\n", __VERSION__);
+       printf("%s\n", "10.0.0");
        printf("%s\n", "1");

(cherry picked from commit 6bd6308fcea3541e505651bf8e8127a4a03d22cd, which
was accidentally reverted by commit e849841dca2a8b11119997585f795647c52cdcdf)

14 months agohints/ g++ needs same treatment as gcc
Karl Williamson [Tue, 21 Jan 2020 16:38:06 +0000 (09:38 -0700)]
hints/ g++ needs same treatment as gcc

This had a test for gcc, which also applies to g++, and it was causing
load failures on solaris built with g++.

Thanks to Dagfinn Ilmari Mannsåker for diagnosing this problem.

14 months agoRegen after backport syncing
H.Merijn Brand [Tue, 21 Jan 2020 16:29:41 +0000 (17:29 +0100)]
Regen after backport syncing

14 months agoperl.h: Add EXTERN_C for flock()
Karl Williamson [Tue, 14 Jan 2020 16:30:13 +0000 (09:30 -0700)]
perl.h: Add EXTERN_C for flock()

This was failing to load on Solaris with g++

Thanks to Dagfinn Ilmari Mannsåker for figuring this out.

14 months agoCBuilder is synced
Chris 'BinGOs' Williams [Tue, 21 Jan 2020 13:46:32 +0000 (13:46 +0000)]
CBuilder is synced

14 months agoUpdate ExtUtils-CBuilder to 0.280234
Alberto Simoes [Tue, 21 Jan 2020 10:53:49 +0000 (10:53 +0000)]
Update ExtUtils-CBuilder to 0.280234

14 months agoMind the gap
Chris 'BinGOs' Williams [Mon, 20 Jan 2020 18:42:28 +0000 (18:42 +0000)]
Mind the gap

14 months agoUpdate Module::CoreList for 5.31.9
Matthew Horsfall [Mon, 20 Jan 2020 18:03:47 +0000 (13:03 -0500)]
Update Module::CoreList for 5.31.9

14 months agoBump the perl version in various places for 5.31.9
Matthew Horsfall [Mon, 20 Jan 2020 17:59:47 +0000 (12:59 -0500)]
Bump the perl version in various places for 5.31.9

14 months agonew perldelta for 5.31.9
Matthew Horsfall [Mon, 20 Jan 2020 17:50:43 +0000 (12:50 -0500)]
new perldelta for 5.31.9

14 months agoTick off 5.31.8 in the release schedule
Matthew Horsfall [Mon, 20 Jan 2020 17:44:46 +0000 (12:44 -0500)]
Tick off 5.31.8 in the release schedule

14 months agoUpdate epigraphs.pod for 5.31.8 release email
Matthew Horsfall [Mon, 20 Jan 2020 17:38:52 +0000 (12:38 -0500)]
Update epigraphs.pod for 5.31.8 release email

14 months agostudy_chunk: panic on unknown REGNODE_VARIES node
Hugo van der Sanden [Mon, 20 Jan 2020 15:37:42 +0000 (15:37 +0000)]
study_chunk: panic on unknown REGNODE_VARIES node

This has panicked on DEBUGGING builds since 56fcde2d6ae (August 2013);
as far as I know we've never seen the panic. It is easy to verify the
possible node types with "grep -P '\bV\b' regcomp.sym".

If you ever see this, it'll be because you just changed something wrongly,
or runaway corruption has occurred.

14 months agoMerge branch 'release-5.31.8' into blead
Matthew Horsfall [Mon, 20 Jan 2020 17:19:59 +0000 (12:19 -0500)]
Merge branch 'release-5.31.8' into blead

14 months agoperldelta: missing angle
Hugo van der Sanden [Mon, 20 Jan 2020 16:38:06 +0000 (16:38 +0000)]
perldelta: missing angle

14 months agoAdd new release to perlhist v5.31.8
Matthew Horsfall [Mon, 20 Jan 2020 16:29:59 +0000 (11:29 -0500)]
Add new release to perlhist

14 months agoperldelta: Fill in New/Updated modules and finalize for release
Matthew Horsfall [Mon, 20 Jan 2020 16:21:24 +0000 (11:21 -0500)]
perldelta: Fill in New/Updated modules and finalize for release

14 months agoUpdate perldelta - add acknowledgements for v5.31.8
Matthew Horsfall [Mon, 20 Jan 2020 16:15:14 +0000 (11:15 -0500)]
Update perldelta - add acknowledgements for v5.31.8

14 months agoFix error in perldelta, forgot to close a C<> sequence
Matthew Horsfall [Mon, 20 Jan 2020 16:13:46 +0000 (11:13 -0500)]
Fix error in perldelta, forgot to close a C<> sequence

14 months agoUpdate Module::CoreList for v5.31.8 release
Matthew Horsfall [Mon, 20 Jan 2020 16:06:41 +0000 (11:06 -0500)]
Update Module::CoreList for v5.31.8 release

14 months agoFix up and cleanup perldelta for v5.31.8
Matthew Horsfall [Mon, 20 Jan 2020 15:52:41 +0000 (10:52 -0500)]
Fix up and cleanup perldelta for v5.31.8

14 months agoUpdate perldelta for all changes from v5.31.7 to v5.31.8
Matthew Horsfall [Mon, 20 Jan 2020 15:39:19 +0000 (10:39 -0500)]
Update perldelta for all changes from v5.31.7 to v5.31.8

15 months agoUpdate autodie to CPAN version 2.32
Chris 'BinGOs' Williams [Mon, 20 Jan 2020 11:22:51 +0000 (11:22 +0000)]
Update autodie to CPAN version 2.32


2.32      2020-01-16 11:40:52-06:00 America/Chicago

        * Update automated tests to include soft dependencies.

        * Remove Test::Perl::Critic as a testing requirement.

        * Update to show github actions status
          not Travis.

15 months should be in sync with CPAN versions now
Chris 'BinGOs' Williams [Mon, 20 Jan 2020 11:21:52 +0000 (11:21 +0000)] should be in sync with CPAN versions now

15 months agoUpdate dist/IO after release to CPAN
Todd Rinaldo [Mon, 20 Jan 2020 07:18:14 +0000 (01:18 -0600)]
Update dist/IO after release to CPAN

Bugtracker and repo now point at perl/perl5. Hopefully this will
encourage people to report IO bugs there.

15 months agoUpdate Changelog for Locale::Maketext after 1.29 release to CPAN
Todd Rinaldo [Mon, 20 Jan 2020 07:10:25 +0000 (01:10 -0600)]
Update Changelog for Locale::Maketext after 1.29 release to CPAN

Also update RT link in the changelog to point to its new location

15 months agoperl.h: Fix false comment about grok_FOO flags
Karl Williamson [Mon, 20 Jan 2020 03:01:14 +0000 (20:01 -0700)]
perl.h: Fix false comment about grok_FOO flags

It is currently impossible to say that you don't want an overflow
message if those warnings are enabled.

15 months agoSkip the new open pragma tests for no ":utf8" under PERL_UNICODE.
Nicholas Clark [Sun, 19 Jan 2020 20:56:02 +0000 (21:56 +0100)]
Skip the new open pragma tests for no ":utf8" under PERL_UNICODE.

PERL_UNICODE can implement an implicit use open ":utf8", which defeats the
intent of what we're testing here.

15 months agoIO: update ChangeLog for new trial release
Ricardo Signes [Mon, 16 Dec 2019 15:53:16 +0000 (10:53 -0500)]
IO: update ChangeLog for new trial release

15 months agoLoading IO is now threadsafe, avoiding the core bug reported as GH #14816.
Nicholas Clark [Mon, 4 Nov 2019 15:58:03 +0000 (16:58 +0100)]
Loading IO is now threadsafe, avoiding the core bug reported as GH #14816.

Re-implement getline() and getlines() as XS code.

The underlying problem that we're trying to solve here is making
getline() and getlines() in IO::Handle respect the open pragma.

That bug was first addressed in Sept 2011 by commit 986a805c4b258067:
    Make IO::Handle::getline(s) respect the open pragma

However, that fix introduced a more subtle bug, hence this reworking.
Including the entirety of the rest of that commit message because it
explains both the bug the previous approach:

    See <>.  Also, this
    came up in <>.

    The <> operator, when reading from the magic ARGV handle, automatic-
    ally opens the next file.  Layers set by the lexical open pragma are
    applied, if they are in scope at the point where <> is used.

    This works almost all the time, because the common convention is:

        use open ":utf8";

        while(<>) {

    IO::Handle’s getline and getlines methods are Perl subroutines
    that call <> themselves.  But that happens within the scope of
    IO/, so the caller’s I/O layer settings are ignored.  That
    means that these two expressions are not equivalent within in a
    ‘use open’ scope:


    The latter will open the next file with no layers applied.

    This commit solves that by putting PL_check hooks in place in
    IO::Handle before compiling the getline and getlines subroutines.
    Those hooks cause every state op (nextstate, or dbstate under the
    debugger) to have a custom pp function that saves the previous value
    of PL_curcop, calls the default pp function, and then restores

    That means that getline and getlines run with the caller’s compile-
    time hints.  Another way to see it is that getline and getlines’s own
    lexical hints are never activated.

    (A state op carries all the lexical pragmata.  Every statement
    has one.  When any op executes, it’s ‘pp’ function is called.
    pp_nextstate and pp_dbstate both set PL_curcop to the op itself.  Any
    code that checks hints looks at PL_curcop, which contains the current
    run-time hints.)

The problem with this approach is that the (current) design and implementation
of PL_check hooks is actually not threadsafe. There's one array (as a global),
which is used by all interpreters in the process. But as the code added to
IO.xs demonstrates, realistically it needs to be possible to change the hook
just for this interpreter.

GH #14816 has a fix for that bug for blead. However, it will be tricky (to
impossible) to backport to earlier perl versions.

Hence it's also worthwhile to change IO.xs to use a different approach to
solve the original bug. As described above, the bug is fixed by having the
readline OP (that implements getline() and getlines()) see the caller's
lexical state, not their "own". Unlike Perl subroutines, XS subroutines don't
have any lexical hints of their own. getline() and getlines() are very
simple, mostly parameter checking, ending with a one line that maps to
a single core OP, whose values are directly returned.

Hence "all" we need to do re-implement the Perl code as XS. This might look
easy, but turns out to be trickier than expected. There isn't any API to be
called for the OP in question, pp_readline(). The body of the OP inspects
interpreter state, it directly calls pp_rv2gv() which also inspects state,
and then it tail calls Perl_do_readline(), which inspects state.

The easiest approach seems to be to set up enough state, and then call
pp_readline() directly. This leaves us very tightly coupled to the
internals, but so do all other approaches to try to tackle this bug.

The current implementation of PL_check (and possibly other arrays) still
needs to be addressed.

15 months agoAdd tests for IO::Handle getline() and getlines().
Nicholas Clark [Sun, 3 Nov 2019 10:06:59 +0000 (11:06 +0100)]
Add tests for IO::Handle getline() and getlines().

Extend the tests for <> and the open pragma to verify that the behaviour
changes with/without the open pragma.

15 months agonumeric.c: White-space only
Karl Williamson [Wed, 15 Jan 2020 12:07:10 +0000 (05:07 -0700)]
numeric.c: White-space only

Indent code that the previous commit added an enclosing block
surrounding it.

And vertically align some comments

15 months agogrok_bin_oct_hex: Add two output flags
Karl Williamson [Wed, 15 Jan 2020 12:05:42 +0000 (05:05 -0700)]
grok_bin_oct_hex: Add two output flags

This commit adds two output flags returned from this function to the one
previously existing, so that the caller can be informed of the problems
found and take its own action.

This involves the behavior of two existing flags, whose being set
suppresses the warning if particular conditions exist in the input being
parsed.  Both flags were currently always cleared upon return.

One of those flags is non-public.  I changed it so that it isn't cleared
upon return if the condition it describes is found.

The other flag is public.  I thought that some existing code, though
unlikely,  might be relying on the flag being always cleared.  So I
added a completely new flag from a previously unused bit that, if clear
on input there is no change in behavior; but if set on input, it will
remain set on output if the condition is met; otherwise cleared.  The
only code that could possibly be affected is that which sets this unused
bit, but expects it to be cleared after the return.  This is very

15 months agore/pat.t: Fix failure on some systems
Karl Williamson [Fri, 17 Jan 2020 04:18:49 +0000 (21:18 -0700)]
re/pat.t: Fix failure on some systems

This appears to be a difference in how shells run.  On many of H. Merijn
Brand's  boxes, this a test is failing.  By avoiding the shell by using
fresh_perl instead of runperl, it succeeds there, without breaking

15 months agoembed.fnc: grok_bin_oct_hex() isn't documented
Karl Williamson [Fri, 17 Jan 2020 00:36:58 +0000 (17:36 -0700)]
embed.fnc: grok_bin_oct_hex() isn't documented

So, don't claim that it is.  It is an internal function, common to
grok_bin, et. al.

15 months agot/ Add comments about runperl vs fresh_perl
Karl Williamson [Fri, 17 Jan 2020 16:00:05 +0000 (09:00 -0700)]
t/ Add comments about runperl vs fresh_perl

15 months agot/ fresh_perl has only 2 args
Karl Williamson [Fri, 17 Jan 2020 15:39:39 +0000 (08:39 -0700)]
t/ fresh_perl has only 2 args

So referring to the "third" is wrong.

15 months agoperlapi sv_setpvn: Note UTF-8 flag not affected
Karl Williamson [Thu, 16 Jan 2020 20:38:18 +0000 (13:38 -0700)]
perlapi sv_setpvn: Note UTF-8 flag not affected

15 months agogrok_bin_oct_hex: Unroll loop one more iteration
Karl Williamson [Thu, 16 Jan 2020 18:57:04 +0000 (11:57 -0700)]
grok_bin_oct_hex: Unroll loop one more iteration

Earlier I was confused when I thought that 7 hex digits were the max
before we needed to start worrying about overflow.  That's true for
signed results where everything above 7FFF_FFFF won't fit in a 32-bit
signed integer.  But these functions return unsigned, and so any 8
digits will fit in a 32-bit word.

15 months agoutf8.c: Use already-computed variable
Karl Williamson [Sat, 11 Jan 2020 04:46:33 +0000 (21:46 -0700)]
utf8.c: Use already-computed variable

instead of doing it a second time

15 months agoRefactor grok_number_flags to speed it up
Karl Williamson [Fri, 17 Jan 2020 18:51:32 +0000 (11:51 -0700)]
Refactor grok_number_flags to speed it up

This uses a variety of techniques to improve the performance.

The chief one is to switch on the input length for the unrolled part of
the loop, like is done in grok_bin_oct_hex().  This eliminates having to
check if we are at the end of the string each time we process and
advance a digit through it.

Explicit branch predictions were added.  One assumes that the input
won't have a sign more frequently than it does have one.

Some setup conditionals were eliminated.  One way is that this ignores
leading spaces.  Previously, it just advanced through any and then
checked if we are at the end of the string after having done so.  That
check can be eliminated if we didn't advance.

Also, I check for a sign with a single conditional, eliminating a check
for minus, then, if not found, one for plus.  Instead, if it is a sign,
there is an extra check for which one.  Thus it rewards unsigned input,
and penalizes signed, by a single conditional each way.

15 months agoperldelta for commit 9c952fa3
James E Keenan [Sat, 18 Jan 2020 14:13:09 +0000 (09:13 -0500)]
perldelta for commit 9c952fa3

15 months agoSync with CPAN version 5.01 of Term::ANSIColor
Russ Allbery [Sat, 18 Jan 2020 14:11:44 +0000 (09:11 -0500)]
Sync with CPAN version 5.01 of Term::ANSIColor

15 months agoCreate crosslinks betwen perlrun sections
Dan Book [Mon, 13 Jan 2020 21:49:05 +0000 (16:49 -0500)]
Create crosslinks betwen perlrun sections

15 months agomove and clean-up macros wrapping __attribute__()
Tomasz Konojacki [Fri, 17 Jan 2020 20:32:55 +0000 (21:32 +0100)]
move and clean-up macros wrapping __attribute__()

__attribute__() detection fallback for non-Configure platforms
(such as Windows) in perl.h was moved above the PERL_UNUSED_DECL
definition. That fixed two problems:

- PERL_UNUSED_DECL was undefined on those platforms
- __attribute__* macros weren't working properly inside headers
  included above their definitions (e.g. "win32.h")

Also, redundant checks for pre-3.4 g++ versions were removed.

15 months agoperldelta for commit 1f6c2254f60d95f2a0aa0489519920e488f0a42
James E Keenan [Fri, 17 Jan 2020 23:16:40 +0000 (18:16 -0500)]
perldelta for commit 1f6c2254f60d95f2a0aa0489519920e488f0a42

15 months agoSync Test-Simple with CPAN version 1.302171
Chad Granum [Fri, 17 Jan 2020 23:14:31 +0000 (18:14 -0500)]
Sync Test-Simple with CPAN version 1.302171

15 months agoDefine env correctly for GitHub workflow jobs
Nicolas R [Fri, 17 Jan 2020 21:07:41 +0000 (14:07 -0700)]
Define env correctly for GitHub workflow jobs

Environment variables were defined too early.
This is moving them inside the job, and add

15 months agoSkip t/porting/authors.t when failing guessing common ancestor
Nicolas R [Fri, 17 Jan 2020 18:46:38 +0000 (11:46 -0700)]
Skip t/porting/authors.t when failing guessing common ancestor

15 months agoDisable dist/IO/t/io_sock.t on windows
Nicolas R [Fri, 17 Jan 2020 17:31:35 +0000 (10:31 -0700)]
Disable dist/IO/t/io_sock.t on windows

Fixes #17429

Test is out of sequence.
Note: ENV were set too early.

15 months agoFix DEBUGGING check in Devel-PPPort/t/utf8.t
Craig A. Berry [Fri, 17 Jan 2020 18:20:42 +0000 (12:20 -0600)]
Fix DEBUGGING check in Devel-PPPort/t/utf8.t

Devel::PPPort claims to support Perl back to 5.003_07, which means
that we can't use a more rational method here such as

15 months agoUpdate documentation for IO::Socket.
Chase Whitener [Mon, 20 Nov 2017 23:31:30 +0000 (18:31 -0500)]
Update documentation for IO::Socket.

* Get rid of the POD errors as well as the useless `NOTE NOTE NOTE`
  lines that were littered throughout.
* Provide documentation and useful examples for each and every
  single constructor argument.
* Provide documentation for all methods made available.
* Where it makes sense, provide links to other documents that
  explain what the module is doing.

Previously, this relied heavily on the user knowing what they were
doing, rendering the documentation mostly pointless.

While this is not yet perfect, it's better than what we had before
and should be of help to developers of all skill levels.

15 months agostudy_chunk: generate ANYOFM here rather than in join_exact()
Hugo van der Sanden [Thu, 16 Jan 2020 15:42:05 +0000 (15:42 +0000)]
study_chunk: generate ANYOFM here rather than in join_exact()

When we detect an EXACTFish node cannot be extended by joining with others,
and is short and simple enough, we want to replace it with ANYOFM.

Prefer to do that in the study_chunk() handling of EXACTFish nodes: this
isn't part of join_exact's responsibilities (and is not documented there),
and moving it will make subsequent refactoring easier.

Note that this means it will no longer happen earlier as part of the
experimental regtail_study() call to join_exact(), currently invoked

15 months agoUpdate ExtUtils-MakeMaker to CPAN version 7.44
Chris 'BinGOs' Williams [Tue, 14 Jan 2020 19:48:52 +0000 (19:48 +0000)]
Update ExtUtils-MakeMaker to CPAN version 7.44


7.44    Tue 14 Jan 16:35:06 GMT 2020

    No changes since v7.43_01

7.43_01 Sun  5 Jan 12:41:43 GMT 2020

    Bug fixes:
    - Match final dir component in init_MANPODS

    Test Fixes:
    - Use internal reference to Makefile in build_man.t

15 months agoutf8.c: Change variable types so compiles on Solaris
Karl Williamson [Mon, 13 Jan 2020 16:01:08 +0000 (09:01 -0700)]
utf8.c: Change variable types so compiles on Solaris

This was made necessary by 40d2776f3505d22a2b1309ae2c3bf28bcb1d9016

15 months agoregen/ Use Configure'd types
Karl Williamson [Mon, 13 Jan 2020 17:11:42 +0000 (10:11 -0700)]
regen/ Use Configure'd types

Configure goes to the trouble of finding the parameter types that the
gethostbyFOO functions use, but was ignoring this, causing
compilation failures on at least Solaris.

15 months agoMerge branch 'grok_bin_oct_hex' into blead
Karl Williamson [Tue, 14 Jan 2020 03:59:17 +0000 (20:59 -0700)]
Merge branch 'grok_bin_oct_hex' into blead

This branch collapses 3 very similar functions into one, for easier
maintenance.  The resulting function is then modified to improve
performance over blead, and documentation is clarified.

15 months agoImprove performance of grok_bin_oct_hex()
Karl Williamson [Fri, 10 Jan 2020 18:45:39 +0000 (11:45 -0700)]
Improve performance of grok_bin_oct_hex()

This commit uses a variety of techniques for speeding this up.  It is
now faster than blead, and has less maintenance cost than before.

Most of the checks that the current character isn't NUL are unnecssary.
The logic works on that character, even if, for some reason, you can't
trust the input length.  A special test is added to not output the
illegal character message if that character is a NUL.  This is simply
for backcompat.

And a switch statement is used to unroll the loop for the leading digits
in the number.  This should handle most common cases.  Beyond these, and
one has to start worrying about overflow.  So this version has removed
that worrying from the common cases.

Extra conditionals are avoided for large numbers by extracting the
portability warning message code into a separate static function called
from two different places.  Simplifying this logic led me to see that if
it overflowed, it must be non-portable, so another conditional could be

Other conditionals were removed at the expense of adding parameters to
the function.  This function isn't public, but is called from the
grok_hex, et. al. macros.  grok_hex knows, for example, that it is
looking for an 'x' prefix and not a 'b'.  Previously the code had a
conditional to determine that.

Similarly in pp.c, we look for the prefix.  Having found it we can start
the parse after the prefix, and tell this function not to look for it.
Previously, this work was duplicated.

The previous changes had left this function slower than blead.  That is
in part due to the fact that the loop doesn't go through that many
iterations per function call, and the gcc compiler managed to optimize
away the conditionals in XDIGIT_VALUE in the call of it from the loop.
(The other call in this function did have the conditionals.)

Thanks to Sergey Aleynikov for his help on this

15 months agonumeric.c: Slight restructure grok_bin_oct_hex
Karl Williamson [Sun, 12 Jan 2020 23:05:03 +0000 (16:05 -0700)]
numeric.c: Slight restructure grok_bin_oct_hex

This saves the input flags into a local variable and uses that in the
rest of the function, and initializes the output flags at the beginning
of the functions.  This is in preparation for more output flags to be
set, as we go along.

15 months agonumeric.c: White-space only
Karl Williamson [Wed, 8 Jan 2020 18:55:35 +0000 (11:55 -0700)]
numeric.c: White-space only

Outdent code whose enclosing block was removed by the previous commit.
A few other white space fixups.

15 months agogrok_bin_oct_hex: better ovrflw accuracy; rmv loop cond.
Karl Williamson [Wed, 8 Jan 2020 18:54:18 +0000 (11:54 -0700)]
grok_bin_oct_hex: better ovrflw accuracy; rmv loop cond.

This removes a conditional in the loop, and improves the accuracy of the
overflow NV returned that approximates the desired input.

15 months agoperlapi: Move documentation
Karl Williamson [Sun, 12 Jan 2020 23:48:34 +0000 (16:48 -0700)]
perlapi: Move documentation

This flag doesn't actually occur in the functions in which the
documentation for it is mentioned.  Instead, move it to a function that
does mention it.

15 months agoperlapi: Update grok_bin, _oct, _hex
Karl Williamson [Sun, 12 Jan 2020 23:47:19 +0000 (16:47 -0700)]
perlapi: Update grok_bin, _oct, _hex

In examining these functions in detail, I found some things in the pod
that were unclear or misleading.  This is an attempt to clarify things.

15 months agonumeric.c: Move function in the file
Karl Williamson [Wed, 8 Jan 2020 03:37:17 +0000 (20:37 -0700)]
numeric.c: Move function in the file

This makes adjacent all similar functions and their docs

15 months agonumeric.c: Fix typos in comments
Karl Williamson [Sun, 5 Jan 2020 02:07:47 +0000 (19:07 -0700)]
numeric.c: Fix typos in comments

15 months agogrok_bin_oct_hex(): Add branch prediction
Karl Williamson [Tue, 7 Jan 2020 01:49:41 +0000 (18:49 -0700)]
grok_bin_oct_hex(): Add branch prediction

15 months agoCollapse grok_bin, _oct, _hex into one function
Karl Williamson [Tue, 7 Jan 2020 00:32:35 +0000 (17:32 -0700)]
Collapse grok_bin, _oct, _hex into one function

These functions are identical in logic in the main loop, the difference
being which digits they accept.  The rest of the code had slight
variations.  This commit unifies the functions.

I presume the reason they were kept separate was because of speed.
Future commits will make this unified function faster than blead, and
the reduced maintenance cost makes this worthwhile.

15 months agol1_char_class_tab.h: Add bits for binary, octal digits
Karl Williamson [Mon, 6 Jan 2020 23:51:43 +0000 (16:51 -0700)]
l1_char_class_tab.h: Add bits for binary, octal digits

The motivation behind these extra bits is to allow three functions that
deal with, respectively, binary, octal, and hex data to use the same
paradigm, and hence be collapsible into a single function.

15 months agohandy.h: Convert XDIGIT_VALUE to branchless
Karl Williamson [Mon, 6 Jan 2020 22:22:29 +0000 (15:22 -0700)]
handy.h: Convert XDIGIT_VALUE to branchless

This removes a branch and an array lookup in the XDIGIT_VALUE() macro.
It adds some shifts, masks, and additions instead, though replacing a
mask and addition in the old way.

A somewhat more complicated version could be made for EBCDIC, but I'm
not bothering to do that, using an array lookup to convert the salient
value to ASCII, so on EBCDIC there isn't an array lookup removal.

15 months agoRewrite and inline my_strnlen()
Karl Williamson [Sun, 12 Jan 2020 17:11:54 +0000 (10:11 -0700)]
Rewrite and inline my_strnlen()

This commit changes this function to use memchr() instead of looping
byte-by-byte through the string.  And it inlines it into 3 lines of
code.  This should give comparable performance to a native libc

15 months agostudy_chunk: tweaks to separate bytelen, charlen for EXACTish
Hugo van der Sanden [Mon, 13 Jan 2020 16:39:57 +0000 (16:39 +0000)]
study_chunk: tweaks to separate bytelen, charlen for EXACTish

cast to avoid warning; avoid an additional utf8_length() call.

15 months agoFIx apostrofly
Smylers [Mon, 13 Jan 2020 11:32:08 +0000 (11:32 +0000)]
FIx apostrofly

A possessive apostrophe needs an actual letter ‘S’, not just the ‘S’ sound at the end of “POSIX”.

Rewrite as “the POSIX module's”, to make it clearer. And link the function name.

15 months agoTie::File: use unique tmp filenames in test files
David Mitchell [Mon, 13 Jan 2020 14:04:38 +0000 (14:04 +0000)]
Tie::File: use unique tmp filenames in test files

Currently all the test scripts use a temporary file of the form
"tf$$.txt", which could possibly cause clashes between test scripts
on platforms where the PID cycles frequently. This commit gives each
test file its own unique tmp-filename prefix, e.g. 42_offset.t now has

    my $file = "tf42-$$.txt";

I probably should have switched over completely to using File::Temp,
but this was a smaller change, and I haven't tested it on older perls.

The motivation for this is occasional test failures of 29a_upcopy.t on
some smokes. Whether this commit fixes that, only time will tell.

15 months agoperldiag: Clarify statement
Karl Williamson [Sat, 11 Jan 2020 17:55:08 +0000 (10:55 -0700)]
perldiag: Clarify statement

The statement about the future needs to be less certain as to what might

15 months agoperldiag: Rmv obsolete statement
Karl Williamson [Sat, 11 Jan 2020 17:53:57 +0000 (10:53 -0700)]
perldiag: Rmv obsolete statement

Code points this large are no longer legal on a 32 bit platform.

15 months agoutil.c: Rmv now always-true assertion
Karl Williamson [Mon, 13 Jan 2020 04:07:35 +0000 (21:07 -0700)]
util.c: Rmv now always-true assertion

Commit 052d914306c3a13afe3fbeb17c8f1c986969f94c changed the type of this
parameter to unsigned, so it is now never negative.

15 months agodon't suggest using the perl malloc() implementation in perlguts
Tony Cook [Sun, 5 Jan 2020 23:32:28 +0000 (10:32 +1100)]
don't suggest using the perl malloc() implementation in perlguts

1. the suggestion doesn't really belong here

2. the usemymalloc implementation is typically slower than a
   modern system malloc().

15 months agostudy_chunk: separate bytelen, charlen for EXACTish study
Hugo van der Sanden [Sun, 12 Jan 2020 18:01:46 +0000 (18:01 +0000)]
study_chunk: separate bytelen, charlen for EXACTish study

Make things slightly clearer.

15 months agoAdd update action to Porting/
Nicolas R [Tue, 31 Dec 2019 21:55:32 +0000 (14:55 -0700)]
Add update action to Porting/

Fixes #17206

AUTHORS can now be updated by 'Porting/' using
the new 'update' action.

Example: perl Porting/ --update --from=v5.31.6

The changes to the file AUTHORS is better read by ommitting whitespaces.
The changes to AUTHORS are the following:
- authors are sorted
- some emails changed to reflect the preferred email set in the <DATA> section

When detecting a new author, we will list the GitHub account instead of the email.
Anyone can replace his email by the GitHub account by directly editing AUTHORS file.

Note that the <DATA> section has been adjusted to accomodate several
existing emails in the AUTHORS file to avoid selecting a different email.

'Hio' was listed twice and we preserved the preferred email address.

15 months agostudy_chunk: remove JOIN_EXACT macro
Hugo van der Sanden [Fri, 10 Jan 2020 13:56:06 +0000 (13:56 +0000)]
study_chunk: remove JOIN_EXACT macro

It's used only once, and the code is clearer when we can see the condition
it applies.

15 months agostudy_chunk: simplify PAREN_TEST and related macros
Hugo van der Sanden [Fri, 10 Jan 2020 13:56:06 +0000 (13:56 +0000)]
study_chunk: simplify PAREN_TEST and related macros

Define PAREN_OFFSET to point to the bitvector for the relevant depth, update
PAREN_TEST, PAREN_SET and PAREN_UNSET to take a depth instead of a pointer,
and simplify the various users.

15 months agostudy_chunk: declare final_minlen earlier
Hugo van der Sanden [Fri, 10 Jan 2020 13:56:06 +0000 (13:56 +0000)]
study_chunk: declare final_minlen earlier

This simplifies slightly, and makes room for further refactoring.

15 months agoFix a small grammar error in perl5240delta.pod
Nicholas Clark [Fri, 10 Jan 2020 11:19:44 +0000 (12:19 +0100)]
Fix a small grammar error in perl5240delta.pod

Also remove some trailing spaces.