perl.git
12 days agolib/locale.t: Don't assume NUL is a control smoke-me/khw-locale
Karl Williamson [Mon, 28 Nov 2016 21:16:18 +0000 (14:16 -0700)] 
lib/locale.t: Don't assume NUL is a control

A test that assumed NUL would be considered a control fails in locales
where it isn't considered a control.

This was found on FREEBSD, where the locale "hi_IN.ISCII-DEV" is
defective (based on the Wikipedia article on ISCII
https://en.wikipedia.org/wiki/Indian_Script_Code_for_Information_Interchange).
Only the code points 0x09-0x0D are considered controls in this
implementation, whereas the article says ISCII is a superset of ASCII,
so should have 33 controls, not just 5.  (Unrelated to this ticket, but
another apparent defect I saw is that this implementation defines 0x91,
but the article says that code point is unassigned.)

12 days agoPATCH: [perl #129953] lib/locale.t failures on FREEBSD
Karl Williamson [Mon, 28 Nov 2016 16:09:23 +0000 (09:09 -0700)] 
PATCH: [perl #129953] lib/locale.t failures on FREEBSD

Because collation is very complicated, perl has opted to use the one
furnished in libc.  And because Perl strings are different from C
strings in that the former allows embedded NULs, something needs to be
done when collating strings that contain NULs.  What happens is that
when calculating the collation, each embedded NUL is replaced by the
lowest collating control character in the range 1-255.  If no suitable
control character is found, the lowest collating code point is used.
(The reason controls are preferred is that collation is context
sensitive, with adjacent characters potentially affecting the collation
order, and controls are much less likely to have any such interactions.)

This bug occurred if the character replacing the NUL is UTF-8 variant.
Basically it got doubly encoded as UTF-8.  On most systems the NUL
replacement is \x01, which is invariant under UTF-8, but in freebsd, the
replacement is \x80, which is UTF-8 variant.   The solution is to store
the replacement as a code point, and encode it as UTF-8 only if
necessary, once.  This actually simplifies the code

12 days agolocale.c: Add some comments
Karl Williamson [Sun, 27 Nov 2016 17:25:49 +0000 (10:25 -0700)] 
locale.c: Add some comments

12 days agomore debugging
Karl Williamson [Mon, 31 Oct 2016 04:04:13 +0000 (22:04 -0600)] 
more debugging

12 days agoRevert "lib/locale.t: Debugging"
Karl Williamson [Sun, 27 Nov 2016 17:39:12 +0000 (10:39 -0700)] 
Revert "lib/locale.t: Debugging"

This reverts commit

12 days agolib/locale.t: Debugging
Karl Williamson [Mon, 31 Oct 2016 03:32:26 +0000 (21:32 -0600)] 
lib/locale.t: Debugging

12 days agot/loc_tools.pl: Make a copy of inputs for bisect
Karl Williamson [Mon, 31 Oct 2016 03:31:30 +0000 (21:31 -0600)] 
t/loc_tools.pl: Make a copy of inputs for bisect

12 days agoRevert "loc_tools.pl: Debug statements"
Karl Williamson [Sun, 27 Nov 2016 17:42:09 +0000 (10:42 -0700)] 
Revert "loc_tools.pl: Debug statements"

12 days agoloc_tools.pl: Debug statements
Karl Williamson [Mon, 31 Oct 2016 03:31:05 +0000 (21:31 -0600)] 
loc_tools.pl: Debug statements

12 days agolocale.c for bisect
Karl Williamson [Mon, 31 Oct 2016 03:29:49 +0000 (21:29 -0600)] 
locale.c for bisect

12 days agosmoke
Karl Williamson [Sat, 29 Oct 2016 18:24:21 +0000 (12:24 -0600)] 
smoke

12 days agokid51 debug statements
Karl Williamson [Wed, 10 Aug 2016 04:36:37 +0000 (22:36 -0600)] 
kid51 debug statements

12 days agoRevert "hints/freebsd.sh: Don't use libc strlcpy"
Karl Williamson [Mon, 28 Nov 2016 16:07:52 +0000 (09:07 -0700)] 
Revert "hints/freebsd.sh: Don't use libc strlcpy"

12 days agohints/freebsd.sh: Don't use libc strlcpy
Karl Williamson [Mon, 31 Oct 2016 03:34:17 +0000 (21:34 -0600)] 
hints/freebsd.sh: Don't use libc strlcpy

12 days agoRevert "XXX wait until can write diag msg showing how to override: perl.c: Add error...
Karl Williamson [Mon, 31 Oct 2016 03:26:14 +0000 (21:26 -0600)] 
Revert "XXX wait until can write diag msg showing how to override: perl.c: Add error test for locale"

12 days agoRevert "p2008"
Karl Williamson [Mon, 31 Oct 2016 03:26:01 +0000 (21:26 -0600)] 
Revert "p2008"

12 days agoRevert "Move bulk of POSIX::setlocale to locale.c"
Karl Williamson [Mon, 31 Oct 2016 03:25:36 +0000 (21:25 -0600)] 
Revert "Move bulk of POSIX::setlocale to locale.c"

12 days agoMove bulk of POSIX::setlocale to locale.c
Karl Williamson [Sun, 29 May 2016 03:47:30 +0000 (21:47 -0600)] 
Move bulk of POSIX::setlocale to locale.c

This is the first step in making an XS callable setlocale() which
is generalized to work with POSIX 2008 locale operations while retaining
essentially the same API.

12 days agop2008
Karl Williamson [Fri, 22 Jul 2016 04:05:56 +0000 (22:05 -0600)] 
p2008

12 days agoXXX wait until can write diag msg showing how to override: perl.c: Add error test...
Karl Williamson [Wed, 10 Aug 2016 18:08:01 +0000 (12:08 -0600)] 
XXX wait until can write diag msg showing how to override: perl.c: Add error test for locale

12 days agocrash on explicit return from s///e
David Mitchell [Mon, 28 Nov 2016 08:03:49 +0000 (08:03 +0000)] 
crash on explicit return from s///e

RT #130188

In

    sub f {
        my $x = 'a';
        $x =~ s/./return;/e;
    }

the 'return' triggers popping any contexts above the subroutine context:
in this case, a CXt_SUBST context. In this case, Perl_dounwind() calls
cx_popblock() for the bottom-most popped context, to restore any saved
vars. However, CXt_SUBST is the one context type which *doesn't* use
'struct block' as part of its context struct union, so you can't
cx_popblock() a CXt_SUBST context.

This commit makes it skip the cx_popblock() in this case.

Bug was introduced by me with v5.23.7-235-gfc6e609.

2 weeks agoperlfunc/open: clarify role of mode for undef filename
Aristotle Pagaltzis [Fri, 25 Nov 2016 01:04:52 +0000 (02:04 +0100)] 
perlfunc/open: clarify role of mode for undef filename

2 weeks agoutf8.c: Fix EBCDIC detection of above-31 bit code points
Karl Williamson [Thu, 24 Nov 2016 17:54:23 +0000 (10:54 -0700)] 
utf8.c: Fix EBCDIC detection of above-31 bit code points

This was failing on EBCDIC machines, and I couldn't figure out why.  I
didn't see any flaws in the logic.  It required special debugging code
to answer.  It turns out it was a bad declaration, and not logic at all.

The declaration should have been

    const U8 prefix[] = ...

instead it was

    const U8 * const prefix = ...

sizeof() the latter is 4, as it is looking at pointer size.  What was
intended was the size of the array this was initialized to, which was
longer.  What this led to was later in the routine, a comparison was
stopping too early.

2 weeks agoAPItest/t/utf8.t: White space only
Karl Williamson [Wed, 23 Nov 2016 03:30:56 +0000 (20:30 -0700)] 
APItest/t/utf8.t: White space only

This indents the new block formed by the previous commit.  However,
since the indentation is getting too much, it also changes the indents
for all the nested for loops to 2 spaces to allow room on the line.

2 weeks agoSplit diagnostics for two UTF-8 malformations
Karl Williamson [Wed, 23 Nov 2016 00:47:35 +0000 (17:47 -0700)] 
Split diagnostics for two UTF-8 malformations

Some UTF-8 sequences may have multiple malformations.  Commit
2b5e7bc2e60b4c4b5d87aa66e066363d9dce7930 tried to make sure that all
possible ones are raised, instead of abandoning searching after one is
found.  Since, I realized that there was yet another case of two
malformations that it returned only one or the other of.

An input buffer may be too short to fully express the code point it
purports to.  This can be determined by the first byte of the UTF-8
sequence indicating a longer sequence is requred than the space
available.  But also, that shortened sequence can have a premature
beginning of another character earlier than the shortness.  This commit
causes these to be both raised, instead of the previous behavior of
noting just one.

2 weeks agoAPItest/t/utf8.t: Partially refactor to use table data
Karl Williamson [Wed, 23 Nov 2016 01:14:45 +0000 (18:14 -0700)] 
APItest/t/utf8.t: Partially refactor to use table data

This removes kludgy code that was trying, given a partial
character, to determine if there enough bytes present to guarantee that
the whole character must belong to a class of characters or not.  Now
the necessary length to make that determination has instead manually
been placed in a table, so it can be looked up.  In doing so, I
corrected one length that was failing on EBCDIC.

2 weeks agoAPItest/t/utf8.t: Fix test
Karl Williamson [Wed, 23 Nov 2016 01:07:31 +0000 (18:07 -0700)] 
APItest/t/utf8.t: Fix test

It turns out that this test has two malformations, and should only have
one; a future commit will remove the masking of the 2nd one.

2 weeks agoAPItest/t/utf8.t: Comments only
Karl Williamson [Wed, 23 Nov 2016 01:01:21 +0000 (18:01 -0700)] 
APItest/t/utf8.t: Comments only

2 weeks agoAPItest/t/utf8.t: Add some indentation to diagnositcs
Karl Williamson [Wed, 23 Nov 2016 00:55:10 +0000 (17:55 -0700)] 
APItest/t/utf8.t: Add some indentation to diagnositcs

This is so they don't interrupt reading the output when there are
errors.

2 weeks agoutf8.c: Clarify warning message.
Karl Williamson [Tue, 22 Nov 2016 20:15:18 +0000 (13:15 -0700)] 
utf8.c: Clarify warning message.

This warning was changed recently in the 5.25 series, and has not been
in a stable release.

2 weeks agoAPItest/t/utf8.t: Simplify expression slightly
Karl Williamson [Mon, 21 Nov 2016 21:59:47 +0000 (14:59 -0700)] 
APItest/t/utf8.t: Simplify expression slightly

2 weeks agoAPItest/t/handy.t: Output details if test fails
Karl Williamson [Sun, 20 Nov 2016 14:56:40 +0000 (07:56 -0700)] 
APItest/t/handy.t: Output details if test fails

There should be no warnings generated, but if there are, we want to see
what they were.

2 weeks agoadd comments explaining the point of SVf_PROTECT
David Mitchell [Thu, 24 Nov 2016 14:42:27 +0000 (14:42 +0000)] 
add comments explaining the point of SVf_PROTECT

The flag was added by v5.21.4-17-ga623f89, but outside of the commit
message itself, there didn't seem to be any explanation for this flag.

2 weeks agoPOSIX.pm: shut up g++ compiler warning
David Mitchell [Thu, 24 Nov 2016 13:52:30 +0000 (13:52 +0000)] 
POSIX.pm: shut up g++ compiler warning

g++ is too stupid to know that strtoul(..,&unparsed,...) will modify
unparsed. So initialise it to NULL.

POSIX.xs: In function ‘void XS_POSIX_strtoul(PerlInterpreter*, CV*)’:
POSIX.xs:3468:17: warning: ‘unparsed’ may be used uninitialized in this function [-Wmaybe-uninitialized]
                 if (unparsed)

2 weeks agoadd sv_set_undef() API function
David Mitchell [Thu, 24 Nov 2016 09:40:44 +0000 (09:40 +0000)] 
add sv_set_undef() API function

This function is equivalent to sv_setsv(sv, &PL_sv_undef), but more
efficient.

Also change the obvious places in the core to use the new idiom.

2 weeks agoavoid premature free of referent in list assign
David Mitchell [Tue, 22 Nov 2016 16:41:54 +0000 (16:41 +0000)] 
avoid premature free of referent in list assign

RT #130132

My recent commit v5.25.6-266-ga083329 made it so that perl could
sometimes avoid mortalising the referent when assigning to a reference
(e.g. for $ref1 = $ref2, where $$ref1 has a ref count of 1).

Unfortunately it turns out that list assign relied on this behaviour
to avoid premature freeing, e.g.

    ($ref1, $x) = ($y, $$ref1);

where $$ref1 needs to continue to live for at least the rest of the
assign.

This commit fixes it by mortalising the referent in pp_assign when
required.

2 weeks agoThis one goes up to 11
Chris 'BinGOs' Williams [Thu, 24 Nov 2016 11:49:29 +0000 (11:49 +0000)] 
This one goes up to 11

2 weeks agoembed.fnc: Remove inappropriate pure attributes
Karl Williamson [Tue, 22 Nov 2016 18:30:28 +0000 (11:30 -0700)] 
embed.fnc: Remove inappropriate pure attributes

In looking at the diffs from f6e4c377437f9b2ded79fb55f66983a6d4f761f9,
just committed, I realized that some of the functions marked pure,
really have side effects, if only initialization if not called
previously.  Still, the compiler could optimize things so it is wrong.
I then did a manual audit of embed.fnc, and removed the pure attribute
of the functions that I found that have some potential side effects.

2 weeks agoMake (P)ure funcs in embed.fnc imply (R)eturn must be checked
Andy Lester [Tue, 22 Nov 2016 13:17:45 +0000 (06:17 -0700)] 
Make (P)ure funcs in embed.fnc imply (R)eturn must be checked

embed.fnc defines that a pure function is one that has no effects other
than its return value.  Therefore, calling such a function without using
the return value must be an error.

This patch makes a "P" "pure function" flag also imply the "R" "return
value must be checked" flag.

2 weeks agoConfigure: also zero out high bytes of 80-bit ldnan
Niko Tyni [Sat, 19 Nov 2016 07:45:45 +0000 (09:45 +0200)] 
Configure: also zero out high bytes of 80-bit ldnan

These are currently zero anyway, but things are probably not guaranteed
to stay so.

2 weeks agoConfigure: fix garbage filtering with 80-bit long doubles
Niko Tyni [Fri, 18 Nov 2016 16:36:34 +0000 (18:36 +0200)] 
Configure: fix garbage filtering with 80-bit long doubles

The test had several problems that resulted in the excess
bytes not getting zeroed out. This caused random contents in
$Config{longdblinfbytes}, observed on Debian with GCC 6.2.0 (but not
5.4.1).

Bug-Debian: https://bugs.debian.org/844752

2 weeks agoRecommend the quicker "make test_prep" for t/TEST usage.
Matthew Horsfall [Mon, 21 Nov 2016 14:07:21 +0000 (09:07 -0500)] 
Recommend the quicker "make test_prep" for t/TEST usage.

2 weeks agoBump Module::CoreList version
Chad Granum [Sun, 20 Nov 2016 22:05:26 +0000 (14:05 -0800)] 
Bump Module::CoreList version

2 weeks agoBump the perl version in various places for 5.25.8
Chad Granum [Sun, 20 Nov 2016 22:02:47 +0000 (14:02 -0800)] 
Bump the perl version in various places for 5.25.8

2 weeks agonew perldelta
Chad Granum [Sun, 20 Nov 2016 21:30:09 +0000 (13:30 -0800)] 
new perldelta

2 weeks agoUpdate epigraphs and release schedule
Chad Granum [Sun, 20 Nov 2016 21:29:08 +0000 (13:29 -0800)] 
Update epigraphs and release schedule

2 weeks agoupdate t/porting/known_pod_issues.dat v5.25.7
Chad Granum [Sun, 20 Nov 2016 20:10:44 +0000 (12:10 -0800)] 
update t/porting/known_pod_issues.dat

2 weeks agoUpdate perlhist.pod for 5.25.7
Chad Granum [Sun, 20 Nov 2016 19:21:53 +0000 (11:21 -0800)] 
Update perlhist.pod for 5.25.7

2 weeks agoFinalize perldelta for 5.25.7
Chad Granum [Sun, 20 Nov 2016 19:17:09 +0000 (11:17 -0800)] 
Finalize perldelta for 5.25.7

Following release manager doc

2 weeks agoUpdate Module::CoreLiast for 5.25.7
Chad Granum [Sun, 20 Nov 2016 18:51:39 +0000 (10:51 -0800)] 
Update Module::CoreLiast for 5.25.7

2 weeks agoFix Module-CoreList version info for 5.25.7
Chad Granum [Sun, 20 Nov 2016 18:49:18 +0000 (10:49 -0800)] 
Fix Module-CoreList version info for 5.25.7

2 weeks agoFinal manual updates to perldelta
Chad Granum [Sun, 20 Nov 2016 15:52:19 +0000 (07:52 -0800)] 
Final manual updates to perldelta

This will still likeyl get minor changes in the rest of the release
process, but the pre-release editing is done.

2 weeks agoCorrect one POD formatting error in perldelta.
James E Keenan [Sun, 20 Nov 2016 17:28:15 +0000 (12:28 -0500)] 
Correct one POD formatting error in perldelta.

This commit satisfies 'podchecker pod/perldelta.pod', but there remain
problems detected during t/porting/podcheck.t.

3 weeks agoperldelta fixes from khw
Karl Williamson [Sun, 20 Nov 2016 00:33:07 +0000 (17:33 -0700)] 
perldelta fixes from khw

The ones I removed are so minor as to not be worth mentioning.

3 weeks agoPerldelta updates in prep for tomorrows release
Chad Granum [Sat, 19 Nov 2016 15:37:20 +0000 (07:37 -0800)] 
Perldelta updates in prep for tomorrows release

3 weeks agoExtUtils::ParseXS: Rmv impediment to compiling under C++11
Karl Williamson [Fri, 18 Nov 2016 21:54:09 +0000 (14:54 -0700)] 
ExtUtils::ParseXS: Rmv impediment to compiling under C++11

C++11 changed from earlier versions to require space between the end of
a string literal and a macro, so that a feature can unambiguously be
added to the language.  Starting in g++ 6.2, the compiler emits a
deprecation warning when there isn't a space (presumably so that future
versions can support C++11).

Although not required by the C++11 change, this patch also makes sure
there is space after a macro call, before a string literal.  This makes
the macro stand out, and is easier to read.

Code and modules included with the Perl core need to be compilable using
C++.  This is so that perl can be embedded in C++ programs. (Actually,
only the hdr files need to be so compilable, but it would be hard to
test that just the hdrs are compilable.)  So we need to accommodate
changes to the C++ language.

3 weeks agoData-Dumper: Rmv impediment to compiling under C++11
Karl Williamson [Fri, 18 Nov 2016 21:41:17 +0000 (14:41 -0700)] 
Data-Dumper: Rmv impediment to compiling under C++11

C++11 changed from earlier versions to require space between the end of
a string literal and a macro, so that a feature can unambiguously be
added to the language.  Starting in g++ 6.2, the compiler emits a
deprecation warning when there isn't a space (presumably so that future
versions can support C++11).

Although not required by the C++11 change, this patch also makes sure
there is space after a macro call, before a string literal.  This makes
the macro stand out, and is easier to read.  As part of this, useless ""
following the macro are removed.

This patch also changes the affected lines to not exceed 79 columns, as
specified by perlhack.

Code and modules included with the Perl core need to be compilable using
C++.  This is so that perl can be embedded in C++ programs. (Actually,
only the hdr files need to be so compilable, but it would be hard to
test that just the hdrs are compilable.)  So we need to accommodate
changes to the C++ language.

3 weeks agoStorable: Rmv impediment to compiling under C++11
Karl Williamson [Fri, 18 Nov 2016 20:34:03 +0000 (13:34 -0700)] 
Storable: Rmv impediment to compiling under C++11

C++11 changed from earlier versions to require space between the end of
a string literal and a macro, so that a feature can unambiguously be
added to the language.  Starting in g++ 6.2, the compiler emits a
deprecation warning when there isn't a space (presumably so that future
versions can support C++11).

Although not required by the C++11 change, this patch also makes sure
there is space after a macro call, before a string literal.  This makes
the macro stand out, and is easier to read.

This patch also changes the affected lines to not exceed 79 columns, as
specified by perlhack.

Code and modules included with the Perl core need to be compilable using
C++.  This is so that perl can be embedded in C++ programs. (Actually,
only the hdr files need to be so compilable, but it would be hard to
test that just the hdrs are compilable.)  So we need to accommodate
changes to the C++ language.

3 weeks agothreads.xs: Rmv impediment to compiling under C++11
Karl Williamson [Sat, 19 Nov 2016 12:32:57 +0000 (05:32 -0700)] 
threads.xs: Rmv impediment to compiling under C++11

C++11 changed from earlier versions to require space between the end of
a string literal and a macro, so that a feature can unambiguously be
added to the language.  Starting in g++ 6.2, the compiler emits a
deprecation warning when there isn't a space (presumably so that future
versions can support C++11).

This patch also changes the affected line to not exceed 79 columns, as
specified by perlhack.

Code and modules included with the Perl core need to be compilable using
C++.  This is so that perl can be embedded in C++ programs. (Actually,
only the hdr files need to be so compilable, but it would be hard to
test that just the hdrs are compilable.)  So we need to accommodate
changes to the C++ language.

3 weeks agoTime-HiRes: Remove impediment to compiling under C++11
Karl Williamson [Fri, 18 Nov 2016 20:20:50 +0000 (13:20 -0700)] 
Time-HiRes: Remove impediment to compiling under C++11

C++11 changed from earlier versions to require space between the end of
a string literal and a macro, so that a feature can unambiguously be
added to the language.  Starting in g++ 6.2, the compiler emits a
deprecation warning when there isn't a space (presumably so that future
versions can support C++11).

Although not required by the C++11 change, this patch also makes sure
there is space after a macro call, before a string literal.  This makes
the macro stand out, and is easier to read.

This patch also changes any affected lines that exceed 79 columns, as
specified by perlhack.

Code and modules included with the Perl core need to be compilable using
C++.  This is so that perl can be embedded in C++ programs. (Actually,
only the hdr files need to be so compilable, but it would be hard to
test that just the hdrs are compilable.)  So we need to accommodate
changes to the C++ language.

3 weeks agoCwd: Remove impediment to compiling under C++11
Karl Williamson [Fri, 18 Nov 2016 20:05:27 +0000 (13:05 -0700)] 
Cwd: Remove impediment to compiling under C++11

C++11 changed from earlier versions to require space between the end of
a string literal and a macro, so that a feature can unambiguously be
added to the language.  Starting in g++ 6.2, the compiler emits a
warning when there isn't a space (presumably so that future versions can
support C++11).  This commit fixes Cwd

This patch also updates the Changes file with information missing from
the previous change to the module.

Code and modules included with the Perl core need to be compilable using
C++.  This is so that perl can be embedded in C++ programs. (Actually,
only the hdr files need to be so compilable, but it would be hard to
test that just the hdrs are compilable.)  So we need to accommodate
changes to the C++ language.

3 weeks agoMerge branch 'perlre-tidy' into blead
Aaron Crane [Sat, 19 Nov 2016 13:28:02 +0000 (13:28 +0000)] 
Merge branch 'perlre-tidy' into blead

This branch makes assorted cleanups to pod/perlre.pod. In particular, it no
longer claims that long-established, stable regex constructs like (?:pat)
might stop working in the future.

3 weeks agoperlre: don't impugn the stability of all (?…) constructs
Aaron Crane [Sat, 19 Nov 2016 13:15:18 +0000 (13:15 +0000)] 
perlre: don't impugn the stability of all (?…) constructs

Previously, the documentation suggested that any or all of these constructs
might disappear or be significantly changed without notice:

    (?#comment)
    (?m)
    (?^m)
    (?:group)
    (?m-s:group)
    (?^m:group)
    (?|branch|reset)
    (?=pos lookahead)
    (?!neg lookahead)
    (?<=pos lookbehind)
    (?<!neg lookbehind)
    (?<named>capture)
    (?'named'capture)
    \k<named_backref>
    \k'named_backref'
    (?{ code })
    (??{ postponed regex })
    (?1)
    (?-2)
    (?+2)
    (?R)
    (?0)
    (?&named_subpattern)
    (?(condition)consequent|alternate), including (?(DEFINE)defs)
    (?>independent subpattern)
    (?[ [ext] + [char] - [cls] ])

Of those features, the last one (extended bracketed character classes) is
specifically experimental in our formal sense; but it's not realistic to
think that future versions of Perl might break any of the others — many of
which date back as far as 5.000. Furthermore, even if that were likely
enough to be worth pointing out, it would be better to do so on each of the
affected constructs, rather than with an easier-to-miss blanket notice at
the top of the section.

Therefore, this change removes the blanket notice, and adds a note of
experimental status to the mention of extended bracketed character classes,
linking to our policy definition of what that means.

3 weeks agoperlre: summarise full syntax for (?(cond)then|else) constructs
Aaron Crane [Sat, 19 Nov 2016 13:10:51 +0000 (13:10 +0000)] 
perlre: summarise full syntax for (?(cond)then|else) constructs

In the conditional-execution constructs, the condition is always syntactically
surrounded by a single pair of parens. The various constructs therefore show
that pair of parens in all cases; this seems like a good thing. In addition,
the summary for these constructs as a group also shows the parens; this also
seems like a good thing. But it's not immediately obvious that the two sets
of parens are the same.

Rather than trying to clarify the situation using complicated prose, just
show an example of the full syntax for each conditional construct.

3 weeks agoperlre: minor wordsmithing, POD formatting tweaks, etc
Aaron Crane [Sat, 19 Nov 2016 13:07:07 +0000 (13:07 +0000)] 
perlre: minor wordsmithing, POD formatting tweaks, etc

3 weeks agoperlre: regularise list items
Aaron Crane [Sat, 19 Nov 2016 13:01:50 +0000 (13:01 +0000)] 
perlre: regularise list items

- Only one list item per construct (and change inbound links)

- Consistently list forms with C<< <name> >> before those with C<< 'name' >>

3 weeks agoDocument the package for $REGMARK and $REGERROR
Aaron Crane [Sat, 19 Nov 2016 12:54:42 +0000 (12:54 +0000)] 
Document the package for $REGMARK and $REGERROR

3 weeks agoChange white space to avoid C++ deprecation warning
Karl Williamson [Thu, 17 Nov 2016 13:21:54 +0000 (06:21 -0700)] 
Change white space to avoid C++ deprecation warning

C++11 requires space between the end of a string literal and a macro, so
that a feature can unambiguously be added to the language.  Starting in
g++ 6.2, the compiler emits a warning when there isn't a space
(presumably so that future versions can support C++11).  Unfortunately
there are many such instances in the perl core.  This commit fixes
those, including those in ext/, but individual commits will be used for
the other modules, those in dist/ and cpan/.

This commit also inserts space at the end of a macro before a string
literal, even though that is not deprecated, and removes useless ""
literals following a macro (instead of inserting a blank).  The result
is easier to read, making the macro stand out, and be clearer as to the
intention.

Code and modules included with the Perl core need to be compilable using
C++.  This is so that perl can be embedded in C++ programs. (Actually,
only the hdr files need to be so compilable, but it would be hard to
test that just the hdrs are compilable.)  So we need to accommodate
changes to the C++ language.

3 weeks agoUse test.pl functions in t/op/groups.t
Dagfinn Ilmari Mannsåker [Fri, 18 Nov 2016 14:13:22 +0000 (14:13 +0000)] 
Use test.pl functions in t/op/groups.t

The test file was already loading test.pl, but not using any functions
other than skip_all(_if_miniperl).  This ports the rest of the test to
using note(), skip() and ok().

Diff is best read with -w and --color-words or --word-diff.

3 weeks agot/op/groups.t: Add missing "nok 1"
Dan Collins [Fri, 30 Sep 2016 14:35:18 +0000 (10:35 -0400)] 
t/op/groups.t: Add missing "nok 1"

For: RT #116775

3 weeks agoRemove code commented out since July 1996.
James E Keenan [Thu, 17 Nov 2016 23:01:13 +0000 (18:01 -0500)] 
Remove code commented out since July 1996.

3 weeks agoAPItest/t/utf8.t: Fix failing EBCDIC tests
Karl Williamson [Thu, 17 Nov 2016 03:18:59 +0000 (20:18 -0700)] 
APItest/t/utf8.t: Fix failing EBCDIC tests

I keep not getting this completely correct, hence
1069c57cb1f4e6b94f8695843243749e9511303e
162256f303e3b2f3936976e692650c18c9cad0a6

But I'm hopeful this is the final answer.  We should be operating on I8
strings in this function, translating into I8 at the beginning and
translating  back to UTF-EBCDIC at the end (except UTF8SKIP has
purposely been built for speed to not use the transform, so it operates
on UTF-EBCDIC.

3 weeks agoAPItest/t/utf8.t: Fill in missing die() reason
Karl Williamson [Thu, 17 Nov 2016 03:17:48 +0000 (20:17 -0700)] 
APItest/t/utf8.t: Fill in missing die() reason

I forgot to complete this before the initial commit, so that the reason
for dieing was empty.

3 weeks agoop/bop.t: Fix test failing on EBCDIC
Karl Williamson [Thu, 17 Nov 2016 03:15:54 +0000 (20:15 -0700)] 
op/bop.t: Fix test failing on EBCDIC

This recently added test did not take into account character set
differences.

3 weeks agoRemove spurious executable bit from Porting/pod_lib.pl
Dagfinn Ilmari Mannsåker [Thu, 17 Nov 2016 09:21:07 +0000 (09:21 +0000)] 
Remove spurious executable bit from Porting/pod_lib.pl

3 weeks agoAccount for possibility of DOS file endings.
James E Keenan [Mon, 14 Nov 2016 22:22:22 +0000 (17:22 -0500)] 
Account for possibility of DOS file endings.

Although our source code (including this file) is supposed to have only Unix
line endings, cloning, etc., can result in particular users having DOS line
endings.  Let's allow '\r\n' to avoid spurious testing or installation
problems.

For: RT #130088, as recommended by Mark E Renzulli (UTRC).

3 weeks agoTest descriptions should be one line or ./TEST chokes on them
Matthew Horsfall [Wed, 16 Nov 2016 13:31:00 +0000 (08:31 -0500)] 
Test descriptions should be one line or ./TEST chokes on them

3 weeks agooptimise $ref1 = $ref2 better
David Mitchell [Tue, 15 Nov 2016 08:27:48 +0000 (08:27 +0000)] 
optimise $ref1 = $ref2 better

When assigning to a ref, the old referent is mortalised if its refcount
is 1, to avoid a premature free on things like $r = $$r or $r = $r->[0].

For the shortcut case where $ref1 and $ref2 are simple refs (no magic etc)
it's possible to do the assign then SvREFCNT_dec() the old value without
having to mortalise it. Which is faster.

Even when it doesn't have to be mortalised (RC > 1) this commit makes it
slightly faster as it no longer calls sv_unref_flags().

Conversely, this commit also makes the short-cut integer assign code path
infinitesimally slower.

3 weeks agoperf/benchmarks: tidy scalar assign benchmarks
David Mitchell [Tue, 15 Nov 2016 08:22:48 +0000 (08:22 +0000)] 
perf/benchmarks: tidy scalar assign benchmarks

rename them from expr::assign::* to expr::sassign::* so as to more easily
distinguish them from expr::aassign::, and move them to the correct place
in the file

3 weeks agoReport indented here-doc line errors correctly
Matthew Horsfall [Tue, 15 Nov 2016 12:41:51 +0000 (07:41 -0500)] 
Report indented here-doc line errors correctly

3 weeks agoCleanup PERL_VERSION checks in .c files
Nicolas R [Sun, 13 Nov 2016 09:16:23 +0000 (02:16 -0700)] 
Cleanup PERL_VERSION checks in .c files

This commit is removing code not exercised by blead
or any later versions using PERL_VERSION.
This is a noop, mainly cleaning code.

3 weeks agoRevert "Do not try to fchown() to uid -1 and gid -1."
Tony Cook [Tue, 15 Nov 2016 03:42:52 +0000 (14:42 +1100)] 
Revert "Do not try to fchown() to uid -1 and gid -1."

This reverts commit c4f643b9fca4c4487ef74e4e6cd5b61a26025698, which
fixed a failure introduced by commit
f95ba548a286b17c260cc168715a9d0d441b14a6 which was reverted in
dd1dbff095629118e73a48a2a6008f03418a07f6.

(uid_t)(-1) and (gid_t)(-1) are perfectly valid parameters to
chown()/fchown() back to POSIX.1-2001 at least.

3 weeks agoavoid a declaration conflict on El Capitan with recent XCode
Tony Cook [Mon, 14 Nov 2016 23:15:42 +0000 (10:15 +1100)] 
avoid a declaration conflict on El Capitan with recent XCode

OS X El Capitan doesn't implement the clock_gettime() or clock_getrez()
APIs, but recent versions of XCode, which are released to El Capitan
do include updated headers that declare those functions.

This causes errors like:

HiRes.xs:810:12: error: static declaration of 'clock_gettime' follows non-static
      declaration
static int clock_gettime(clockid_t clock_id, struct timespec *ts) {
           ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/time.h:177:5: note:
      previous declaration is here
int clock_gettime(clockid_t __clock_id, struct timespec *__tp);
    ^
HiRes.xs:844:12: error: static declaration of 'clock_getres' follows non-static
      declaration
static int clock_getres(clockid_t clock_id, struct timespec *ts) {
           ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/time.h:174:5: note:
      previous declaration is here
int clock_getres(clockid_t __clock_id, struct timespec *__res);
    ^
2 errors generated.

To avoid that, define the emulation functions with our own name
and use a macro to map the standard names to our implemnentations.

3 weeks agoFinish removing POSIX deprecated fcns
Karl Williamson [Mon, 14 Nov 2016 21:52:45 +0000 (22:52 +0100)] 
Finish removing POSIX deprecated fcns

Commit 47ed9d9e89922a8e165d6dfc5737772cc5ee7a45 removed various
deprecated functions, as scheduled in this release, but failed to
include everything that should have gotten removed.

Spotted by Abigail.

3 weeks agoFix error message for unclosed \N{ in regcomp
Dagfinn Ilmari Mannsåker [Mon, 14 Nov 2016 19:05:31 +0000 (20:05 +0100)] 
Fix error message for unclosed \N{ in regcomp

An unclosed \N{ that made it through to the regex engine rather than
being handled by the lexer would erroneously trigger the error for
"\N{NAME} must be resolved by the lexer".

This separates the check for the missing trailing } and issues the
correct error message for this.

3 weeks agotoke.c: remove obsolete comment
Lukas Mai [Mon, 14 Nov 2016 14:23:17 +0000 (15:23 +0100)] 
toke.c: remove obsolete comment

3 weeks agoop.h: add parens around macro expansion
Lukas Mai [Mon, 14 Nov 2016 14:21:55 +0000 (15:21 +0100)] 
op.h: add parens around macro expansion

3 weeks agot/porting/regen.t: be even more helpful when tests fail
Aaron Crane [Mon, 14 Nov 2016 14:24:30 +0000 (15:24 +0100)] 
t/porting/regen.t: be even more helpful when tests fail

My code here was wrong; it wasn't reporting anything useful when some
dependencies of special regen scripts changed.

3 weeks agoDocument that symbols should be removed from metaconfig.h
Dagfinn Ilmari Mannsåker [Mon, 14 Nov 2016 14:13:58 +0000 (15:13 +0100)] 
Document that symbols should be removed from metaconfig.h

3 weeks agoRemove all symbols from metaconfig.h
Dagfinn Ilmari Mannsåker [Mon, 14 Nov 2016 14:08:03 +0000 (15:08 +0100)] 
Remove all symbols from metaconfig.h

Except BOOTSTRAP_CHARSET, which was removed from Configure in commit
1d38f63fe5, they're all used in the code, so metaconfig pulls them in
anyway.

3 weeks agoSilence deprecation warnings in tests
Matthew Horsfall [Mon, 14 Nov 2016 13:52:36 +0000 (08:52 -0500)] 
Silence deprecation warnings in tests

3 weeks agoFixup Unicode::UCD pod/version and regen dependent files
Matthew Horsfall [Mon, 14 Nov 2016 13:41:24 +0000 (08:41 -0500)] 
Fixup Unicode::UCD pod/version and regen dependent files

3 weeks agoAdd perldelta for Indented Here-docs
Matthew Horsfall [Mon, 14 Nov 2016 13:03:33 +0000 (08:03 -0500)] 
Add perldelta for Indented Here-docs

3 weeks agoDocument Indented Here-docs
Matthew Horsfall [Fri, 11 Nov 2016 11:35:32 +0000 (06:35 -0500)] 
Document Indented Here-docs

3 weeks agoAdd indented here-docs.
Matthew Horsfall [Fri, 11 Nov 2016 09:58:18 +0000 (04:58 -0500)] 
Add indented here-docs.

This adds a new modifier '~' to here-docs that tells the parser
that it should look for /^\s*$DELIM\n/ as the closing delimiter.

These syntaxes are all supported:

  <<~EOF;
  <<~\EOF;
  <<~'EOF';
  <<~"EOF";
  <<~`EOF`;
  <<~ 'EOF';
  <<~ "EOF";
  <<~ `EOF`;

The '~' modifier will strip, from each line in the here-doc, the
same whitespace that appears before the delimiter.

Newlines will be copied as is, and lines that don't include the
proper beginning whitespace will cause perl to croak.

Some examples:

  if (1) {
    print <<~EOF;
      Hello there
      EOF
  }

prints "Hello there\n";

The following:

  if (1) {
    print <<~EOF;
     Hello There
      EOF
  }

croaks with:

  Indentation on line 1 of here-doc doesn't match delimiter at - line 2.

3 weeks agoRemove "Warning: perl appears in your path"
David Mitchell [Mon, 14 Nov 2016 12:44:12 +0000 (12:44 +0000)] 
Remove "Warning: perl appears in your path"

This install warning is more or less obsolete, since most platforms
already *will* have a /usr/bin/perl or similar provided by the OS.

We agreed to remove it in this thread:

    http://nntp.perl.org/group/perl.perl5.porters/240000

3 weeks ago/t/perf/benchmarks: move expr::index:: to func::
David Mitchell [Mon, 14 Nov 2016 10:49:25 +0000 (10:49 +0000)] 
/t/perf/benchmarks: move expr::index:: to func::

'index' is a perl function, so it should really be in the 'func'
top-level namespace  of benchmarks

3 weeks agoAdditional warning of Name.pl going away
H.Merijn Brand [Mon, 14 Nov 2016 12:15:25 +0000 (13:15 +0100)] 
Additional warning of Name.pl going away

3 weeks agoUnicode::UCD documentation for reading Name.pl as encouraged practice
H.Merijn Brand [Mon, 14 Nov 2016 11:37:18 +0000 (12:37 +0100)] 
Unicode::UCD documentation for reading Name.pl as encouraged practice

3 weeks agoeliminate OPpRUNTIME private PMOP flag
David Mitchell [Mon, 14 Nov 2016 10:35:39 +0000 (10:35 +0000)] 
eliminate OPpRUNTIME private PMOP flag

This flag was added in 5.004 and even then it didn't seem to be used for
anything. It gets set and unset in various places, but is never tested.
I'm not even sure what it was intended for.