perl.git
38 min agofix doc about filter subroutines' $_[0] blead
Zefram [Tue, 12 Dec 2017 03:53:33 +0000 (03:53 +0000)] 
fix doc about filter subroutines' $_[0]

Filter subroutines established by an @INC callback have always received
a numeric zero as their first argument, not a referencet to the sub
as documented.  Fixes [perl #115754].

57 min agocorrect detection of arg absence in Data::Dumper
Zefram [Tue, 12 Dec 2017 03:19:26 +0000 (03:19 +0000)] 
correct detection of arg absence in Data::Dumper

The combined getter/setter methods were mistaking a supplied undef
argument value (of a setter call) for absence of an argument (making it
a getter call).  Fixes [perl #113090].

2 hours agosv.c: White-space only
Karl Williamson [Fri, 8 Dec 2017 01:47:34 +0000 (18:47 -0700)] 
sv.c: White-space only

This outdents some lines that the previous commit removed an enclosing
block of.

2 hours agoutf8_upgrade_flags_grow(): Use faster variant count
Karl Williamson [Fri, 8 Dec 2017 01:42:53 +0000 (18:42 -0700)] 
utf8_upgrade_flags_grow(): Use faster variant count

Now that we have a much faster way of counting the characters that would
expand to two bytes when a string is translated into UTF-8, use that,
instead of trying to choose one of two methods.  This simplifies the
code.  Note that the faster method doesn't happen on EBCDIC platforms,
but the simplification is worth the potential loss of being able to
choose methods.

2 hours agoinline.h: Change extensive comment to a link
Karl Williamson [Tue, 12 Dec 2017 02:13:45 +0000 (19:13 -0700)] 
inline.h: Change extensive comment to a link

I'm thinking the explanation of how the algorithm works  doesn't belong
in the code, so replace it by the commit number so it can be found
quickly.

2 hours agoAdd variant_under_utf8_count() core function
Karl Williamson [Thu, 23 Nov 2017 05:30:16 +0000 (22:30 -0700)] 
Add variant_under_utf8_count() core function

This function takes a string that isn't encoded in UTF-8 (hence is
assumed to be in Latin1), and counts how many of the bytes therein
would change if it were to be translated into UTF-8.  Each such byte
would occupy two UTF-8 bytes.

This function is useful for calculating the expansion factor precisely
when converting to UTF-8, so as to know how much to malloc.

This function uses a non-obvious method to do the calculations
word-at-a-time, as opposed to the byte-at-a-time method used now, and
hence should be much faster than the current methods.

The performance change in short string lengths is equivocal.  Here is
the result for a single character and a 64-bit word.

          bytes    words Ratio %
        -------- -------- -------
     Ir    932.0    947.0    98.4
     Dr    325.0    325.0   100.0
     Dw    104.0    104.0   100.0
   COND    136.0    137.0    99.3
    IND     28.0     28.0   100.0

 COND_m      1.0      0.0   Inf
  IND_m      6.0      6.0   100.0

There are some extra instructions executed and an extra branch to check
for and handle the case where we can go word-by-word vs. not.  But the
one cache miss is removed.

The results are essentially the same until we get to being able to
handle a full word.  Some of the extra instructions are to ensure that
if the input is not aligned on a word boundary, that performance doesn't
suffer.

Here's the results for 8-bytes on a 64-bit system.

           bytes    words Ratio %
        -------- -------- -------
     Ir    974.0    955.0   102.0
     Dr    332.0    325.0   102.2
     Dw    104.0    104.0   100.0
   COND    143.0    138.0   103.6
    IND     28.0     28.0   100.0

 COND_m      1.0      0.0     Inf
  IND_m      6.0      6.0   100.0

Things keep improving as the strings get longer.  Here's for 24 bytes.

           bytes    words Ratio %
        -------- -------- -------
     Ir   1070.0    975.0   109.7
     Dr    348.0    327.0   106.4
     Dw    104.0    104.0   100.0
   COND    159.0    140.0   113.6
    IND     28.0     28.0   100.0

 COND_m      2.0      0.0     Inf
  IND_m      6.0      6.0   100.0

And 96:

           bytes    words Ratio %
        -------- -------- -------
     Ir   1502.0   1065.0   141.0
     Dr    420.0    336.0   125.0
     Dw    104.0    104.0   100.0
   COND    231.0    149.0   155.0
    IND     28.0     28.0   100.0

 COND_m      2.0      1.0   200.0
  IND_m      6.0      6.0   100.0

And 10,000

           bytes    words Ratio %
        -------- -------- -------
     Ir  60926.0  13445.0   453.1
     Dr  10324.0   1574.0   655.9
     Dw    104.0    104.0   100.0
   COND  10135.0   1387.0   730.7
    IND     28.0     28.0   100.0

 COND_m      2.0      1.0   200.0
  IND_m      6.0      6.0   100.0

I found this trick on the internet many years ago, but I can't seem to
find it again to give them credit.

2 hours agois_utf8_invariant_string(): small speed optimization
Karl Williamson [Tue, 12 Dec 2017 01:17:29 +0000 (18:17 -0700)] 
is_utf8_invariant_string(): small speed optimization

This adds a few shifing, masking, and integer arithmetic operations to a
conditional which in return makes sure that one branch is taken only
when it is going to do some good, avoiding a conditional in it.

2 hours agoAPItest/t/handy_base.pl: Avoid uninitialized warning
Karl Williamson [Tue, 12 Dec 2017 01:26:52 +0000 (18:26 -0700)] 
APItest/t/handy_base.pl: Avoid uninitialized warning

This .pl in /t is generally called from a test file in that directory,
but if run by hand, this commit makes sure things are properly
initialized

7 hours agodocument rules for identifying smoke-me branches
Zefram [Mon, 11 Dec 2017 21:25:38 +0000 (21:25 +0000)] 
document rules for identifying smoke-me branches

10 hours agofakesdio.h: Typo
Father Chrysostomos [Mon, 11 Dec 2017 18:01:35 +0000 (10:01 -0800)] 
fakesdio.h: Typo

10 hours agoAPItest.xs: shenanigans to avoid warnings
Father Chrysostomos [Mon, 11 Dec 2017 17:59:47 +0000 (09:59 -0800)] 
APItest.xs: shenanigans to avoid warnings

We have an unresolved issue that #include "fakesdio.h" causes one
of the typemaps to make assignments between different pointer types,
something we can’t fix straightforwardly with casts, since adding
casts to the default typemap (which we are trying to test) may
suppress real problems in production.  This is a temporary plaster
till we figure out what to do.

10 hours agosvleak.t: Disable crashing test
Father Chrysostomos [Mon, 11 Dec 2017 17:56:29 +0000 (09:56 -0800)] 
svleak.t: Disable crashing test

till we get to the bottom of it

16 hours agoNote schedule for $[ removal in perlvar
Dagfinn Ilmari Mannsåker [Mon, 11 Dec 2017 12:31:30 +0000 (12:31 +0000)] 
Note schedule for $[ removal in perlvar

16 hours agoS_maybe_multiconcat(): use OPpCONCAT_NESTED flag
David Mitchell [Mon, 11 Dec 2017 12:02:57 +0000 (12:02 +0000)] 
S_maybe_multiconcat(): use OPpCONCAT_NESTED flag

RT # 132554

I recently added the OPpCONCAT_NESTED flag to distinguish between

    $a .= ...

and
    $a . $b . $c

where the latter has been optimised into

    ($a . $b) .= $c

Update S_maybe_multiconcat() to recognise this new flag.
It was failing an assert on this code:

    ./perl -e 'H.-w.w.=0'

24 hours agoDeclaration after statement in typemap
Father Chrysostomos [Mon, 11 Dec 2017 04:25:59 +0000 (20:25 -0800)] 
Declaration after statement in typemap

A follow-up to 6da090e6cb and 732d3893ab.

26 hours agoperldelta for #115814
Father Chrysostomos [Mon, 11 Dec 2017 01:13:17 +0000 (17:13 -0800)] 
perldelta for #115814

db9848c8d3fb and 6da090e6cb.

26 hours agoIncrease $ExtUtils::Typemaps::VERSION to 3.37
Father Chrysostomos [Mon, 11 Dec 2017 00:54:44 +0000 (16:54 -0800)] 
Increase $ExtUtils::Typemaps::VERSION to 3.37

26 hours agoAvoid newGVgen in blead-upstream modules
Father Chrysostomos [Mon, 11 Dec 2017 00:53:45 +0000 (16:53 -0800)] 
Avoid newGVgen in blead-upstream modules

ExtUtils::ParseXS::Typemaps:
Just in documentation, but it’s good to change it, in case peo-
ple copy it.

Time::HiRes:
It doesn’t even use these typemap entries, but I changed it in case
they get used in the future.  (The changes are not identical to the
default typemap, because Time::HiRes is 5.6-compatible, at least
nominally.)

os2/os2.c:
No, this is not a module, but I changed it, too.

Some other instances of newGVgen are already handled properly, or are
just in tests, so I left them alone.

26 hours agoAvoid newGVgen in default typemap
Father Chrysostomos [Mon, 11 Dec 2017 00:37:11 +0000 (16:37 -0800)] 
Avoid newGVgen in default typemap

newGVgen leaks memory, because it puts it vivifies a typeglob in the
symbol table, without arranging for it to be deleted.  A typemap is not
an appropriate place to use it, since callers of newGVgen are responsible
for seeing that the GV is freed, if they care.

This came up in #115814.

26 hours agoperlapio: wrong param type
Father Chrysostomos [Mon, 11 Dec 2017 00:33:22 +0000 (16:33 -0800)] 
perlapio: wrong param type

28 hours agorevise documentation about set-id
Zefram [Mon, 11 Dec 2017 00:28:43 +0000 (00:28 +0000)] 
revise documentation about set-id

perlsec's section on set-id scripts was written confusingly, with several
half-formed references to the long-ago-deleted suidperl, and with temporal
references that are well out of date.  Revise that section, and slightly
expand the perldiag entry for the message about detecting a set-id script.
Add another section to perlsec about sudo.  Fixes [perl #74142].

29 hours agoassert well-formedness of argv in perl_parse()
Zefram [Sun, 10 Dec 2017 23:20:18 +0000 (23:20 +0000)] 
assert well-formedness of argv in perl_parse()

30 hours agoremove incorrect doc para about exit from BEGIN
Zefram [Sun, 10 Dec 2017 22:23:31 +0000 (22:23 +0000)] 
remove incorrect doc para about exit from BEGIN

I misinterpreted the behaviour of exit from BEGIN when writing that
paragraph.  exit from BEGIN actually does cause perl_parse() to return
normally, but perl_run() wouldn't subsequently do anything.

30 hours agoproperly define perl_parse() return value
Zefram [Sun, 10 Dec 2017 21:37:16 +0000 (21:37 +0000)] 
properly define perl_parse() return value

perl_parse()'s return value has historically had conflicting purposes.
perlmain.c uses it as a truth value, but perlembed.pod has shown it being
used as an exit code.  perl_parse() has not had its own documentation.
What the function has actually done is to return zero for normal
completion and an exit code for early termination.  For this to be
a usable convention depended on early termination never using exit
code 0, and that's specifically *native* exit code 0, which could have
any significance.  In fact exit code 0 could arise for a compile-time
termination even on Unix through "CHECK { exit 0 }", and the mishandling
of that situation was bug [perl #2754].

Since perl_destruct() provides a native exit code unencumbered by any
attempt to simultaneously be a truth value, perl_parse() doesn't really
need to provide an exit code.  So define that perl_parse()'s return
value is principally a truth value.  Change the perlembed tutorial to
show it being so used, with an exit code coming from perl_destruct().
However, most of the historical usage of perl_parse()'s return value
as an exit code can be preserved.  Make it return 0x100 for exit(0),
which both serves as the essential truth value and on Unix also serves
as the proper exit code, because that set bit will be masked off when
actually exiting.  This works on Unix but will have variable effect on
other OSes; at least it will reliably indicate an actual exit.

perl_run() has a similar problem in the interpretation of its return
value, but not affecting the main perl executable, because perlmain.c
ignores its return value.  Similarly define that it is principally a
truth value, with preserved usage of non-zero return values as exit
codes, with exit code 0 transformed into 0x100.  This requires some
extra logic to distinguish between local completion and exit(0), which
were not previously distinguished.

Fully document perl_parse(), perl_run(), and perl_destruct() as API
functions.  Make the perlembed tutorial always show a proper exit
from main(), using "exit(EXIT_SUCCESS)" for portability when errors
are not being checked.  Make perlembed always show a null argv[argc]
being supplied to perl_parse(), where an argv is constructed.  (Commit
54c85bb058e15520a2fc0ba34007743aae56be34 added a note to perlembed saying
that that's required, but didn't fix the examples to show it being done.)

32 hours agosort perldiag
Father Chrysostomos [Sun, 10 Dec 2017 20:11:13 +0000 (12:11 -0800)] 
sort perldiag

33 hours ago[perl #74764] Forbid ‘goto’ jumping into ‘given’
Father Chrysostomos [Sun, 10 Dec 2017 15:07:07 +0000 (07:07 -0800)] 
[perl #74764] Forbid ‘goto’ jumping into ‘given’

It does not make sense to jump into a ‘given’ any more than it makes
sense to jump into ‘foreach’, which has long been forbidden, since
there is no value to turn into a topic.  Up till now this construct
has always crashed.

33 hours agoExplicitly test goto-into-foreach
Father Chrysostomos [Wed, 6 Dec 2017 21:55:26 +0000 (13:55 -0800)] 
Explicitly test goto-into-foreach

It is already tested in t/op/goto.t, but only as part of an existing
test to see which of multiple identical labels gets chosen.

33 hours agopp_ctl.c: Move goto-into-foreach error
Father Chrysostomos [Wed, 6 Dec 2017 21:44:32 +0000 (13:44 -0800)] 
pp_ctl.c: Move goto-into-foreach error

Put it in a static function, instead of repeating the code.  This way I
can add more conditions to that code in subsequent commits.

36 hours agoClarify different cases of assignment to list of scalars.
James E Keenan [Thu, 7 Dec 2017 21:09:54 +0000 (16:09 -0500)] 
Clarify different cases of assignment to list of scalars.

Prepared in response to RT #132538, with feedback from Father Chrysostomos.

2 days agostop gensyming when vivifying IO handles
Zefram [Sun, 10 Dec 2017 01:34:04 +0000 (01:34 +0000)] 
stop gensyming when vivifying IO handles

When open() is given as a handle a scalar with undef value, the rv2gv
op creates a new glob for the I/O handle, and mutates the scalar to
contain an RV referencing the glob.  This is documented behaviour.
The question arises of what GvNAME the glob should have.  There's some
compile-time logic that spots that this might happen, and if the handle
expression is simple enough it stores in the pad a name representing
that expression, and rv2gv uses that for the GvNAME.  But if no name
was supplied by that route then rv2gv was using newGVgen() to generate
the glob.  That succeeds in giving it some kind of name, but has the
unwanted side effect of interning the glob in the stash under that name.
From the user's point of view, that creates a phantom reference to the
glob, which means that killing the RV doesn't remove the last reference
to the glob and so doesn't close the handle.

Instead of gensyming, just create an uninterned glob and give it a
fixed GvNAME.  Fixes [perl #115814].

2 days agoBetter selection of homegrown ino_t in vmsish.h.
Craig A. Berry [Sat, 9 Dec 2017 14:54:39 +0000 (08:54 -0600)] 
Better selection of homegrown ino_t in vmsish.h.

We had been using a 64-bit definition of myino_t only when
_LARGEFILE is defined, but we actually get large file support via
either _LARGEFILE or _USE_STD_STAT because both give us 64-bit
off_t, so look at both definitions.

The size of off_t is not any great indicator for the size of
ino_t, but this preserves the intent of the existing code.

TODO: figure out when _USE_STD_STAT became available; it's
possible we no longer need this hackish layer on top of the
stat struct.

2 days agoAPItest/t/utf8.t: Simplify some tests
Karl Williamson [Tue, 5 Dec 2017 00:40:58 +0000 (17:40 -0700)] 
APItest/t/utf8.t: Simplify some tests

The complicated nested loops of tests this commit replaces don't need to
be such.  To test utf8_is_invariant_string, we just need to put a single
variant in each position of a string that spans more than a full word
(since we have full-word lookup now) and includes partial words on either
side.  We set those partial words up to be one byte each less than a
full word.  The code needs to work on strings that don't start on a full
word, and don't end on one, and this commit continues to do that.

2 days agoinline.h: Use new C99 emulation
Karl Williamson [Tue, 5 Dec 2017 20:51:48 +0000 (13:51 -0700)] 
inline.h: Use new C99 emulation

We don't have to know explicitly if the platform is 64 or 32 bits, and
can derive the constants that were formerly hard-coded in.

2 days agoAllow %j on non-C99 platforms
Karl Williamson [Tue, 5 Dec 2017 20:39:27 +0000 (13:39 -0700)] 
Allow %j on non-C99 platforms

Now that intmax_t is emulated, the %j format is usable on platforms that
aren't C99.

2 days agoEmulate some C99 macros and typedefs
Karl Williamson [Tue, 5 Dec 2017 20:12:48 +0000 (13:12 -0700)] 
Emulate some C99 macros and typedefs

On systems that don't have them, this emulates

U?INT(16|32)_C
U?INTMAX_C

and the typedefs

u?intmax_t

Since, these are typedefs that can't be tested for if they exist, this
creates PERL_U?INTMAX_T typedefs instead, setting them to the standard
values in stdint.h if it is available.

In addition, it moves the pre-existing emulation of U?INT64_C from
handy.h to perl.h.  This is because there was duplicate-ish logic in the
two files, and the handy.h version appears to be better thought out.

It converts the couple of places in core that were using the other
deleted logic to instead use the C99 names.

2 days agoinline.h: White space only
Karl Williamson [Fri, 8 Dec 2017 17:38:24 +0000 (10:38 -0700)] 
inline.h: White space only

Add indentation to account for block added in the previous commit around
this code.

2 days agois_utf8_invariant_string(): small speed optimization
Karl Williamson [Fri, 8 Dec 2017 17:20:24 +0000 (10:20 -0700)] 
is_utf8_invariant_string(): small speed optimization

By pulling a test out of a while loop condition and doing it before the
while starts, we don't increase the number of conditionals; instead we
avoid doing the conditional each time through, and also skip
some conditionals for strings shorter than a word.

3 days agoFix WIDEST_UTYPE in Devel::PPPort.
Craig A. Berry [Fri, 8 Dec 2017 20:48:59 +0000 (14:48 -0600)] 
Fix WIDEST_UTYPE in Devel::PPPort.

It was redefining this even when it had already been defined, and
because it was using HAS_QUAD to determine whether 64-bit ints were
available, and HAS_QUAD is undef'd in perl.h when PERL_CORE is not
defined, it was as likely as not redefining it to a 32-bit value
even when 64-bit integers are available.

So only define it if it doesn't exist and when we do define it,
make it depend on QUADKIND rather than HAS_QUAD.

Follow-up to de9e2639368.

3 days agoPATCH: [perl #132548] regcomp.c Fix memory leak
Karl Williamson [Fri, 8 Dec 2017 14:27:13 +0000 (07:27 -0700)] 
PATCH: [perl #132548] regcomp.c Fix memory leak

3 days agoRT#132545: memory leak in S_init_main_stash()
Aaron Crane [Fri, 8 Dec 2017 10:17:30 +0000 (10:17 +0000)] 
RT#132545: memory leak in S_init_main_stash()

3 days agoadd comment (to test pushing)
Yves Orton [Fri, 8 Dec 2017 10:00:57 +0000 (11:00 +0100)] 
add comment (to test pushing)

3 days agoswitch from _qq to _q in t/re/reg_mesg.t
Yves Orton [Fri, 8 Dec 2017 09:56:05 +0000 (10:56 +0100)] 
switch from _qq to _q in t/re/reg_mesg.t

we want the string as unescaped as is reasonable, as we want to paste
them into perldiag directly.

3 days agohandy.h: Fix definition of WIDEST_UTYPE for non-core
Karl Williamson [Fri, 8 Dec 2017 01:09:15 +0000 (18:09 -0700)] 
handy.h: Fix definition of WIDEST_UTYPE for non-core

Because HAS_QUAD is not defined outside the perl core, this macro was
not getting defined properly for 64-bit systems.  This means, for
example, that someone using this to cast could end up with the wrong
answer.  For example isASCII(2**32) would yield true, because the high
bit would get dropped by the cast, making the value appear to be zero.

This unfortunately creates a warning message in the compile that
WIDEST_UTYPE is redefined, as the definition of that is defective in
PPPort.  It should only define it if it wasn't previously defined, and
it is wrongly using the 32 bit version.  This is added impetus to get
PPPort fixed

3 days agohandy.h: Make U64, I64 available outside core
Karl Williamson [Fri, 8 Dec 2017 00:52:52 +0000 (17:52 -0700)] 
handy.h: Make U64, I64 available outside core

The ones corresponding to shorter sizes, like I32, are available
everywhere.  There is no reason to restrict just the 64 variety.

This fixes the bug in the definition for INT64_C and UINT64_C which
caused these to not be defined outside core on some platforms, such as
Windows.

See commit 3edba68397e487b39cca6e7fc0b75ab4a2f6a341 for more
explanation

3 days agoutf8_length() is not a pure function
Karl Williamson [Thu, 7 Dec 2017 04:55:21 +0000 (21:55 -0700)] 
utf8_length() is not a pure function

Because it can output warnings.

3 days agoAPItest/t/utf8.t: Clarify a couple of test names
Karl Williamson [Fri, 8 Dec 2017 00:45:23 +0000 (17:45 -0700)] 
APItest/t/utf8.t: Clarify a couple of test names

4 days agoAvoid integer overflow with 32-bit ints in hexfp.t.
Craig A. Berry [Fri, 8 Dec 2017 01:08:22 +0000 (19:08 -0600)] 
Avoid integer overflow with 32-bit ints in hexfp.t.

4 days agodelete duplicate _qq from test
Zefram [Fri, 8 Dec 2017 00:11:59 +0000 (00:11 +0000)] 
delete duplicate _qq from test

Commit af05e4c0b428a803fcdb60c956b1da7ff8a95926 added a _qq() sub
to t/re/reg_mesg.t that duplicates both the intent and the name of
t/test.pl's _qq(), causing a redefinition warning.  Remove the new _qq(),
because t/test.pl's version is better.

4 days agoassert min identifier length in S_pending_ident()
Zefram [Fri, 8 Dec 2017 00:03:16 +0000 (00:03 +0000)] 
assert min identifier length in S_pending_ident()

4 days agofix #131649 - extended charclass can trigger assert
Yves Orton [Mon, 26 Jun 2017 11:19:55 +0000 (13:19 +0200)] 
fix #131649 - extended charclass can trigger assert

The extended charclass parser makes some assumptions during the
first pass which are only true on well structured input, and it
does not properly catch various errors. later on the code assumes
that things the first pass will let through are valid, when in
fact they should trigger errors.

4 days agoAvoid like in t/re/reg_mesg.t
Yves Orton [Sun, 3 Dec 2017 11:51:50 +0000 (12:51 +0100)] 
Avoid like in t/re/reg_mesg.t

Rolling our a own a bit allows us to produce more helpful diagnostics.

4 days agoin capture_warnings() we need to properly localize Level
Yves Orton [Sun, 3 Dec 2017 11:52:27 +0000 (12:52 +0100)] 
in capture_warnings() we need to properly localize Level

otherwise we dont get the right line number back from calls to
like or ok() called from within the callback.

4 days agoregcomp.c: handle_regex_sets() - add DEBUG_PARSE and fixup 'depth' logic
Yves Orton [Sun, 25 Jun 2017 20:31:10 +0000 (22:31 +0200)] 
regcomp.c: handle_regex_sets() - add DEBUG_PARSE and fixup 'depth' logic

'depth' is used to track the recursion depth during compilation,
and is used by things like DEBUG_PARSE() to show the compilation
process.

handle_regex_sets() was using its own 'depth' for two different purposes,
which is quite confusing.

At the same time, when we call handle_regex_sets() from reg() it is
important to increment 'depth'.

5 days agoprevent integer overflow when compiling a regexp
Tony Cook [Mon, 14 Aug 2017 05:10:22 +0000 (15:10 +1000)] 
prevent integer overflow when compiling a regexp

Fixes [perl #131893].

5 days agohandle null op_next in stacked filetests
Zefram [Wed, 6 Dec 2017 18:53:16 +0000 (18:53 +0000)] 
handle null op_next in stacked filetests

When a filetest op returns false, it skips past following ops that
are stacked filetests.  The code to do this was assuming that op_next
would always be non-null, which is not always the case, for example in
a sort comparator.  Allow for it to be null.  Fixes [perl #129347].

5 days agofix oct/bin fp fractions in non-HEXFP_UQUAD builds
Zefram [Wed, 6 Dec 2017 17:41:59 +0000 (17:41 +0000)] 
fix oct/bin fp fractions in non-HEXFP_UQUAD builds

The code for binaryish floating point literals, on builds where
we're not confident of being able to fit a significand into an
integer type, had built-in knowledge that the radix is 16, after
the radix point.  This gave erroneous values for octal and binary
literals on those builds.  This was shown up by the tests added in
commit 58be57636a42d6c6fd404c48c4e1cb87870182df.  Correct it to use the
actual radix.

5 days agoclarify "bless" doc
Zefram [Wed, 6 Dec 2017 17:15:29 +0000 (17:15 +0000)] 
clarify "bless" doc

A couple of points came out of discussion on [perl #124428] that are
worthy of explication.

5 days agoLet 'skip' do the skipping in op/hexfp.t
Dagfinn Ilmari Mannsåker [Wed, 6 Dec 2017 17:17:44 +0000 (17:17 +0000)] 
Let 'skip' do the skipping in op/hexfp.t

No need for an if/else when skip already bails out of the block.

5 days agoFix skip count for 64-bit NV-specific tests
Dagfinn Ilmari Mannsåker [Wed, 6 Dec 2017 17:15:26 +0000 (17:15 +0000)] 
Fix skip count for 64-bit NV-specific tests

5 days agodocument hostname(@args) deprecation
Zefram [Wed, 6 Dec 2017 16:28:18 +0000 (16:28 +0000)] 
document hostname(@args) deprecation

Passing arguments to Sys::Hostname::hostname() is already deprecated.
Note the deprecation's agreed removal version of Perl 5.32.  Also document
it in perldeprecation.pod.  [perl #124349]

5 days agofix a =head level in perldeprecation.pod
Zefram [Wed, 6 Dec 2017 16:17:27 +0000 (16:17 +0000)] 
fix a =head level in perldeprecation.pod

5 days agopod: start referring to 5.6 and pre-5.6 as "ancient" instead of just "old"
Ævar Arnfjörð Bjarmason [Wed, 6 Dec 2017 13:21:01 +0000 (13:21 +0000)] 
pod: start referring to 5.6 and pre-5.6 as "ancient" instead of just "old"

5.10 and 5.8 are old, 5.6 is ancient archaeology you're very unlikely
to run into, but the casual reader may not know that, add the extra
emphasis in case someone's mistaken about needing to worry about this
for anything more than historical trivia.

5 days agoperlfunc: re-flow docs amended in an earlier commit
Ævar Arnfjörð Bjarmason [Wed, 6 Dec 2017 13:53:45 +0000 (13:53 +0000)] 
perlfunc: re-flow docs amended in an earlier commit

There's no wording changes here, just re-flowing this so "An" isn't
left like that on a short line of its own.

5 days agopod/perlfunc: stop recommending older syntax supported by 5.6.*
Ævar Arnfjörð Bjarmason [Wed, 6 Dec 2017 12:41:58 +0000 (12:41 +0000)] 
pod/perlfunc: stop recommending older syntax supported by 5.6.*

Stop recommending the more verbose version syntax supported by 5.6.*,
as noted in the docs 5.8.0 is now old enough to drink in some parts of
the world, so we can switch this around to recommending the version
literals first, and then explaining in passing why someone might run
into the older syntax.

Furthermore, since most perl versions people encounter these days are
>=5.10, switch to 5.24.1 as an example for these versions.

While I'm at it, stop calling "use VERSION" the "peculiar" form, it
adds nothing, and just confuses the reader.

5 days agoremove stray NULLOK/NN from apidoc directives
Zefram [Wed, 6 Dec 2017 06:08:22 +0000 (06:08 +0000)] 
remove stray NULLOK/NN from apidoc directives

6 days agoput shadowing warnings in their own category
Zefram [Wed, 6 Dec 2017 04:00:04 +0000 (04:00 +0000)] 
put shadowing warnings in their own category

As proposed in [perl #125330].

6 days agolimit digits based on radix for oct/bin fp
Tony Cook [Tue, 5 Sep 2017 05:26:41 +0000 (15:26 +1000)] 
limit digits based on radix for oct/bin fp

All hexadecimal digits were being permitted in octal and binary floating
point literals.  (That octal and binary literals are permitted at all
might be an accidental result of permitting hexadecimal?)  Restrict which
digits are permitted, in accordance with the radix.

6 days agoavoid negative shift in scan_num()
Zefram [Wed, 6 Dec 2017 01:40:43 +0000 (01:40 +0000)] 
avoid negative shift in scan_num()

Lengthy binaryish floating point literals used to perform illegal bit
shifts.  Ignore digits that are past the end of the significand at an
earlier stage to avoid this.  Code fix by Tony C.  Fixes [perl #131894].

6 days agoassert legality of bitshifts in scan_num()
Zefram [Wed, 6 Dec 2017 01:10:31 +0000 (01:10 +0000)] 
assert legality of bitshifts in scan_num()

[perl #131894] found some negative-exponent shifting going on here.
Make the illegality more accessible by asserting.

6 days agodon't mistake tr/// for assignable reference
Zefram [Wed, 6 Dec 2017 00:50:05 +0000 (00:50 +0000)] 
don't mistake tr/// for assignable reference

For the lhs of an assignment to be an assignable srefgen, the
srefgen must be its top-level op.  ck_refassign() asserted that, but
S_assignment_type() was delving inside a null op looking for the srefgen,
the same way it looks for things that distinguish between scalar and
list assignment.  This showed up in a weird situation where a no-op
transliteration could be applied to an srefgen, getting an srefgen inside
a null op.  Fixes [perl #130578].

6 days agodocument hash/block disambig in perlsyn
Zefram [Tue, 5 Dec 2017 20:51:19 +0000 (20:51 +0000)] 
document hash/block disambig in perlsyn

Fixes [perl #130958].

6 days agocorrect and clarify doc of operator precedence
Zefram [Tue, 5 Dec 2017 19:18:19 +0000 (19:18 +0000)] 
correct and clarify doc of operator precedence

Fixes [perl #127391].

6 days agoclarify conditions for calling DB::sub
Zefram [Tue, 5 Dec 2017 18:08:51 +0000 (18:08 +0000)] 
clarify conditions for calling DB::sub

The wording was ambiguous about which subroutine's compilation matters.
Fixes [perl #131672].

6 days agoremove doc hedge about autovivification
Zefram [Tue, 5 Dec 2017 18:03:12 +0000 (18:03 +0000)] 
remove doc hedge about autovivification

We're clear by now that we're not going to change the default
autovivification behaviour, so the documentation should no longer say
that it "may be fixed in a future release".  Fixes [perl #127712].

6 days agodocument context provided by refgen
Zefram [Tue, 5 Dec 2017 17:47:54 +0000 (17:47 +0000)] 
document context provided by refgen

Fixes [perl #131061].

6 days agopod/perlapio.pod: fix incorrect count of list items
Aaron Crane [Tue, 5 Dec 2017 14:57:58 +0000 (14:57 +0000)] 
pod/perlapio.pod: fix incorrect count of list items

The list previously included sfio; when sfio support was deleted in the 5.19
period, the relevant item in the list was also deleted, but the introducing
sentence wasn't updated to match.

6 days agostop using &PL_sv_yes as no-op method
Zefram [Tue, 5 Dec 2017 06:13:27 +0000 (06:13 +0000)] 
stop using &PL_sv_yes as no-op method

Method lookup yields a fake method for ->import or ->unimport if there's
no actual method, for historical reasons so that "use" doesn't barf
if there's no import method.  This fake method used to be &PL_sv_yes
being used as a magic placeholder, recognised specially by pp_entersub.
But &PL_sv_yes is a string, which we'd expect to serve as a symbolic
CV ref.  Change method lookup to yield an actual CV with a body in this
case, and remove the special case from pp_entersub.  This fixes the
remaining part of [perl #126042].

7 days agodocument newATTRSUB_x()
Zefram [Tue, 5 Dec 2017 03:05:51 +0000 (03:05 +0000)] 
document newATTRSUB_x()

7 days agomore fully document newCONSTSUB{,_flags}()
Zefram [Tue, 5 Dec 2017 00:02:10 +0000 (00:02 +0000)] 
more fully document newCONSTSUB{,_flags}()

7 days agodocument newXS_len_flags()
Zefram [Mon, 4 Dec 2017 22:44:07 +0000 (22:44 +0000)] 
document newXS_len_flags()

7 days agoavoid attaching prototype to freed XS sub
Zefram [Mon, 4 Dec 2017 17:13:08 +0000 (17:13 +0000)] 
avoid attaching prototype to freed XS sub

XS sub creation in newXS_len_flags() was applying the prototype after
process_special_blocks(), which could free the sub if it's a BEGIN.
Track whether that's freed the sub, in the same way that newATTRSUB_x()
does, and skip adding the prototype if it's been freed.  Also sprinkle
some assertions throughout sub building code, about the sub being live.

This arises from [perl #125806], and prevents the immediate cause of its
segv, but doesn't actually fix it.  The test case there still fails, a bit
later on in newCONSTSUB_flags(), now hitting one of the new assertions.

7 days agoMake Bad name error less unhelpful
Father Chrysostomos [Mon, 4 Dec 2017 23:29:45 +0000 (15:29 -0800)] 
Make Bad name error less unhelpful

This was brought up in perl #132485.

Because ‘Bad name after...’ is a croak, it suppresses the more helpful
hints like ‘Might be a runaway multi-line string’, in such cases as:

use Moose;

has erdef => (
    isa => 'Int',
    is => 'ro,
    default => sub { 1 }
);

has cxxc => (
    isa => 'Int',
    is => 'ro',
    default => sub { 1 }
);

We can allay this infelicity by emitting the ‘Missing operator before
bareword’ before the Bad name croak, so in the example above we
end up with:

Bareword found where operator expected at - line 10, near "isa => 'Int"
  (Might be a runaway multi-line '' string starting on line 5)
(Do you need to predeclare isa?)
Bad name after Int' at - line 10.

rather than just:

Bad name after Int' at - line 10.

7 days agoRelax workaround for d_uselocale from RT #128867.
James E Keenan [Wed, 29 Nov 2017 03:07:18 +0000 (22:07 -0500)] 
Relax workaround for d_uselocale from RT #128867.

More precisely, tailor the application of the workaround to the FreeBSD
userland version ranges specified in
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=211743#c10.  (Using
userland version ('uname -U') rather than kernel version ('uname -K') at
suggestion of Mathieu Arnold.

We probably don't need an 'else' branch; let Configure handle it.

7 days agomulticoncat: don't fold adjacent constants
David Mitchell [Mon, 4 Dec 2017 11:50:53 +0000 (11:50 +0000)] 
multiconcat: don't fold adjacent constants

RT #132385

In something like

    $overloaded . "a" . "b"

perl used to do

    $overloaded->concat("a")->concat("b")

but since the introduction of OP_MULTICONCAT, started doing:

    $overloaded->concat("ab")

This commit restores the old behaviour, by keeping every second adjacent
OP_CONST as an arg rather than optimising it away and adding its contents
to the constant string in the aux struct.

But note that

    $overloaded .=  "a" . "b"

originally, and still, constant folds.

8 days agoperluniprops/mktables: Add code points matched annotations
Karl Williamson [Sun, 3 Dec 2017 20:40:34 +0000 (13:40 -0700)] 
perluniprops/mktables: Add code points matched annotations

This commit changes the generated perluniprops to include some or all of
the code points matched by binary tables.  All characters matched in the
00-FF range are listed, as well as the first few ranges beyond that.

This is to make this pod more useful for people using it as an index to
look things up.

8 days agoperluniprops/mktables: Add Definition concept
Karl Williamson [Sun, 3 Dec 2017 18:09:17 +0000 (11:09 -0700)] 
perluniprops/mktables: Add Definition concept

This specifies what code points a table matches.  This step takes the
Description field from various properties and extracts the code points
matched portion into the Definition, which just changes the generated
perluniprops.pod slightly, in the ordering of how the information about
a given property appears.

8 days agore_intuit_start(): skip too short variant utf8 pat
David Mitchell [Sun, 3 Dec 2017 16:38:37 +0000 (16:38 +0000)] 
re_intuit_start(): skip too short variant utf8 pat

RT #132187

This function searches in the target string for known fixed substrings
of the pattern, either to quickly reject the match, or to find a minimum
start point at which to run the full regex engine.

If the target string is utf8 and the pattern is non-utf8 but contains
chars in the rang 0x80-0xff, the fixed substring to be searched for will
be upgraded to utf8, which causes its length to grow. This can defeat an
early quick rejection test of: "is the known substring longer than the
target string", because that check is done before the upgrade.

It can also trigger the bug reported in the ticket above: a calculation
of the maximum end-point within the target string to find the substring
goes wrong, because (endpoint - N1) gets limited to the start point (since
N1 is longer than the string length), and so the moral equivalent of
((endpoint - N1) + N2) then disappears off the end of the string.

The net effect of this bug is that a few bytes off the end of the string
may be read, triggering complaints by ASAN etc, or even a SEGV.

It makes no difference to the match (which should fail and does fail),
except that it might match slower in the unlikely event that the bytes off
the end of the string match that tail of the searched-for substring, in
which case the full regex engine has to be run to finally reject it.

This commit:

1) adds a second length(substr) > length(target string) check
 at the point its going to run the FBM substring search;
2) it tidies up the code that moves the endpoint back, skipping
an expensive utf8 hop-back in more cases.

8 days agoperluniprops/mktables: Fix wong output.
Karl Williamson [Sun, 3 Dec 2017 05:28:28 +0000 (22:28 -0700)] 
perluniprops/mktables: Fix wong output.

perluniprops had a few entries like

XPosixCntrl             General_Category=XPosixCntrlControl

It should have read

XPosixCntrl             General_Category=Control

9 days agosubstr.t: typo
Father Chrysostomos [Sat, 2 Dec 2017 15:37:15 +0000 (07:37 -0800)] 
substr.t: typo

10 days ago[perl #132527] Allow 4-arg substr(delete ...)
Father Chrysostomos [Sat, 2 Dec 2017 02:47:58 +0000 (18:47 -0800)] 
[perl #132527] Allow 4-arg substr(delete ...)

Commit 19a8de4862 broke 4-arg substr with ‘delete’ (and various other
ops) for its first argument.  Since historically these have been
allowed, use a ‘loose’ lvalue context such as entersub when lvaluify-
ing the first argument.

10 days agot/lib/warnings/9enabled: update comment
Father Chrysostomos [Mon, 27 Nov 2017 02:46:56 +0000 (18:46 -0800)] 
t/lib/warnings/9enabled: update comment

This new description of the file better reflecst what it is actually
used for now.

10 days agofixup test that was broken by 3c67ad9b9.
Yves Orton [Fri, 1 Dec 2017 20:00:05 +0000 (21:00 +0100)] 
fixup test that was broken by 3c67ad9b9.

Error message changed from "Can't" to "Cannot" with slightly different
wording, breaking t/run/switches.t

10 days agocomment entry points to study_chunk
Yves Orton [Fri, 1 Dec 2017 18:35:02 +0000 (19:35 +0100)] 
comment entry points to study_chunk

so it is a bit easier to follow what they are used for.

10 days agocomment out unreachable code and explain why it was/is there
Yves Orton [Fri, 1 Dec 2017 18:32:46 +0000 (19:32 +0100)] 
comment out unreachable code and explain why it was/is there

10 days agoSpecify afs entries in configure.com.
Craig A. Berry [Fri, 1 Dec 2017 17:45:50 +0000 (11:45 -0600)] 
Specify afs entries in configure.com.

This prevents op/stat.t from failing due to an undefined variable
warning when $Config{'afsroot'} is checked.

10 days agoin Data-Dumper, quote glob names better
Zefram [Fri, 1 Dec 2017 17:35:35 +0000 (17:35 +0000)] 
in Data-Dumper, quote glob names better

Glob name quoting should obey Useqq.  Fixes [perl #119831].

11 days ago(perl #132506) finish the correction to dir_unchanged()
Tony Cook [Fri, 1 Dec 2017 03:36:52 +0000 (14:36 +1100)] 
(perl #132506) finish the correction to dir_unchanged()

and adjust the error message for renaming the work file

11 days agocorrect a perldelta description
Zefram [Fri, 1 Dec 2017 02:10:33 +0000 (02:10 +0000)] 
correct a perldelta description

The threshold for size computation problems in malloc() is a bit smaller
than the description initially indicated.

11 days agorevert changes to st_ino signedness handling
Zefram [Fri, 1 Dec 2017 01:39:57 +0000 (01:39 +0000)] 
revert changes to st_ino signedness handling

This reverts commits 8843856e9716655549cce789b3338e1d4c72fffb,
3676f9e77d46b61f4785aad171f02bed29df0c07, and
793c2ded15ca832d1df1fabbc3b2e7562a057697.

As noted in the large comment above the relevant code, the probed
ST_INO_SIGN is not reliable enough for its purpose, because Configure
makes guesses.  The actual compiler knows whether st_ino is signed,
and is perfectly capable of optimising out the negative-handling code
in the usual case that st_ino is unsigned, without any need for us to
preprocess it away.

11 days agoin malloc, compute memory sizes in size_t
Zefram [Fri, 1 Dec 2017 01:25:52 +0000 (01:25 +0000)] 
in malloc, compute memory sizes in size_t

Some size computations were using the wrong data type, in particular
getting a signed 32-bit type where unsigned 64-bit is required on
LP64 systems.  That resulted in truncation and in sign extension during
later conversion to the correct type, either way producing bogus sizes.
Fix by casting everything to size_t suitably early.  Fixes [perl #119829].