This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl5.git
6 years agopack(): avoid << of negative values
David Mitchell [Mon, 22 Dec 2014 20:12:22 +0000 (20:12 +0000)]
pack(): avoid << of negative values

Treat the string as U8* rather than char* when doing all the
bit shifts for uuencode. That stops these warnings under ASan:

    pp_pack.c:1890:34: runtime error: left shift of negative value -127
    pp_pack.c:1891:34: runtime error: left shift of negative value -126
    pp_pack.c:1899:34: runtime error: left shift of negative value -1
    pp_pack.c:1900:30: runtime error: left shift of negative value -31

6 years agoavoid integer overflow in pp_flop()
David Mitchell [Mon, 22 Dec 2014 20:04:59 +0000 (20:04 +0000)]
avoid integer overflow in pp_flop()

This;
    @a=(0x7ffffffffffffffe..0x7fffffffffffffff);

could produce under ASan:

    pp_ctl.c:1212:19: runtime error: signed integer overflow: 9223372036854775807 + 1 cannot be represented in type 'IV' (aka 'long')

so avoid post-incrementing the loop var on the last iteration.

This fix is more to shut ASan up than an actual bug, since the
bad value on the last iteration wouldn't actually be used.

6 years agofix more -IV_MIN negations
David Mitchell [Mon, 22 Dec 2014 16:25:59 +0000 (16:25 +0000)]
fix more -IV_MIN negations

Doing uv = -iv is undefined behaviour if iv happens to be IV_MIN.
This occurs in several places in the perl sources.

These ones were found by visual code inspection rather than
using -fsanitize=undefined, but I've added extra tests so that
-fsanitize could find them now.

6 years agofix undefined float behaviour in pack('f')
David Mitchell [Mon, 22 Dec 2014 09:34:40 +0000 (09:34 +0000)]
fix undefined float behaviour in pack('f')

The C standard says that the value of the expression (float)double_var is
undefined if 'the value being converted is outside the range of values
that can be represented'.

So to shut up -fsanitize=undefined:

    my $p = pack 'f', 1.36514538e67;

giving

    runtime error: value 1.36515e+67 is outside the range of representable values of type 'float'

explicitly handle the out of range values.
Something similar is already done under defined(VMS) && !defined(_IEEE_FP),
except that there it floors to +/- FLT_MAX rather than +/- (float)NV_INF.
I don't know which branch is best, and whether they should be merged.

This fix was suggested by Aaron Crane.

6 years agoavoid integer overflow in Perl_av_extend_guts()
David Mitchell [Sun, 21 Dec 2014 00:40:13 +0000 (00:40 +0000)]
avoid integer overflow in Perl_av_extend_guts()

There were two issues; first the 'overextend' algorithm (add a fifth of
the current size to the requested size) could overflow,
and secondly MEM_WRAP_CHECK_1() was being called with newmax+1,
which could overflow if newmax happened to equal SSize_t_MAX.

e.g.

    $a[0x7fffffffffffffff] = 1
    $a[5] = 1; $a[0x7fffffffffffffff] = 1

could produce under ASan:

    av.c:133:16: runtime error: signed integer overflow: 9223372036854775807 + 1 cannot be represented in type 'long'
    av.c:170:7: runtime error: signed integer overflow: 9223372036854775807 + 1 cannot be represented in type 'long'

6 years agoasan_ignore: exclude Perl_pp_left_shift()
David Mitchell [Sun, 21 Dec 2014 00:00:10 +0000 (00:00 +0000)]
asan_ignore: exclude Perl_pp_left_shift()

<< in perl maps directly to << in C, so don't warn about it when the RHS
is too big.

Fixes e.g.:

    print 1 << 64
    use integer; print 1 << 63

Typical ASan warning:

pp.c:1893:2: runtime error: left shift of 1 by 63 places cannot be represented in type 'IV' (aka 'long')

6 years agofix -IV_MIN negations
David Mitchell [Sat, 20 Dec 2014 16:40:52 +0000 (16:40 +0000)]
fix -IV_MIN negations

Doing uv = -iv is undefined behaviour if iv happens to be IV_MIN.
This occurs in several places in the perl sources.

Found by -fsanitize=undefined.

Here's a typical message:

sv.c:2864:7: runtime error: negation of -9223372036854775808 cannot be represented in type 'IV' (aka 'long'); cast to an unsigned type to negate this value to itself

6 years agofix integer overflow in S_study_chunk().
David Mitchell [Sat, 20 Dec 2014 15:30:01 +0000 (15:30 +0000)]
fix integer overflow in S_study_chunk().

It was calculating final_minlen + delta even when delta was already
SSize_t_MAX and final_minlen > 0.

This triggered it: /a(??{}){2}/.

Found by -fsanitize=undefined:

regcomp.c:5623:89: runtime error: signed integer overflow: 1 + 9223372036854775807 cannot be represented in type 'long'

6 years agohandy.h Cast to unsigned before doing xor
Karl Williamson [Sun, 14 Dec 2014 17:39:14 +0000 (10:39 -0700)]
handy.h Cast to unsigned before doing xor

It occurred to me that these macros could have an xor applied to a
signed value if the argument is signed, whereas the xor is expecting
unsigned.

6 years agoEmpty \N{} in regex pattern should force /d to /u
Karl Williamson [Mon, 22 Dec 2014 05:02:30 +0000 (22:02 -0700)]
Empty \N{} in regex pattern should force /d to /u

\N{} is for Unicode names, even if the name is actually omitted.
(Accepting an empty name is, I believe, an accident, and now is
supported only for backwards compatibility.)

6 years agoregcomp.c: comment and white-space changes only
Karl Williamson [Mon, 22 Dec 2014 04:47:04 +0000 (21:47 -0700)]
regcomp.c: comment and white-space changes only

6 years agowarnings.pm: Fix too long verbatim lines
Karl Williamson [Wed, 31 Dec 2014 03:49:25 +0000 (20:49 -0700)]
warnings.pm: Fix too long verbatim lines

By not indentins verbatim text so much, we don't run over 79 columns.

6 years agoperlre: Fix too long verbatim line
Karl Williamson [Wed, 31 Dec 2014 03:48:26 +0000 (20:48 -0700)]
perlre: Fix too long verbatim line

6 years agolib/B/Deparse.pm: refactor a hash slightly
Karl Williamson [Wed, 31 Dec 2014 03:50:39 +0000 (20:50 -0700)]
lib/B/Deparse.pm: refactor a hash slightly

Two of the three uses of this hash want the result to be of the form
"\cX".  The other wants "^X".  This changes the hash to be the common
substring to all three, and then the proper prefix is added to each.

6 years agolib/B/Deparse.pm: Add comment
Karl Williamson [Tue, 30 Dec 2014 21:13:34 +0000 (14:13 -0700)]
lib/B/Deparse.pm: Add comment

6 years agolib/B/Deparse.pm: Generalize for non-ASCII platforms
Karl Williamson [Tue, 30 Dec 2014 21:04:10 +0000 (14:04 -0700)]
lib/B/Deparse.pm: Generalize for non-ASCII platforms

This makes ASCII platform-specific code generalized to non-ASCII.

6 years agolib/B/Deparse.pm: Output WARNING_BITS in binary
Karl Williamson [Tue, 30 Dec 2014 21:09:40 +0000 (14:09 -0700)]
lib/B/Deparse.pm: Output WARNING_BITS in binary

This binary value was being output as just another string, which would
cause the bit patterns that coincidentally coincided with letters to be
output as those.  This is not portable to EBCDIC, but outputting it as
\xXX is, which this commit does.  I chose to output in hex instead of
octal, as I think that is the more modern thing to do, and it's easier
for me to grok the larger values when they are in hex.

6 years agolib/B/Deparse.pm: Move hash to earlier in file
Karl Williamson [Tue, 30 Dec 2014 20:55:42 +0000 (13:55 -0700)]
lib/B/Deparse.pm: Move hash to earlier in file

No other change besides the move is done.  This is so the hash can be
used from another place than currently.

6 years agoperlpod: Latin1 pods need an =encoding
Karl Williamson [Mon, 29 Dec 2014 20:57:10 +0000 (13:57 -0700)]
perlpod: Latin1 pods need an =encoding

6 years agoregcomp.c: Fix [_A-Z] for EBCDIC
Karl Williamson [Thu, 25 Dec 2014 20:16:19 +0000 (13:16 -0700)]
regcomp.c: Fix [_A-Z] for EBCDIC

Special handling is required on EBCDIC for ranges that are subsets of
either a-z or A-Z.  This is triggered when both ends are literals.  It
is implemented by keeping a count of the literal endpoints, and when
that is two do the handling.  But the count was not getting reset, so
it could go to 3, 4, ... so the special handling would only get
triggered if the range was the first thing in the brackets,
like [A-Z], but not if there was something before it, like [_A-Z].  The
solution is to reset the counter appropriately each time through the
loop.  For the A-Z range, the ASCII-equivalent characters wrongly
matched were backslash and '}'.  For a-z, it was '~'

6 years agoregcomp.c: Replace dead code with NOT_REACHED
Karl Williamson [Thu, 25 Dec 2014 20:15:58 +0000 (13:15 -0700)]
regcomp.c: Replace dead code with NOT_REACHED

6 years agofix a broken optimization in win32/config_h.PL to stop excessive rebuilding
Daniel Dragan [Sun, 28 Dec 2014 20:59:38 +0000 (15:59 -0500)]
fix a broken optimization in win32/config_h.PL to stop excessive rebuilding

In commit 137443ea0a config_h.PL was introduced. There is no ML archive
from that time of the actual patches or their rational. From day 1 of
config_h.PL for the root config.h, it didn't copy the new one config.h to
the normal location of config.h if the files matched. This prevents
redundant dirtying of all core moudules with the
"Makefile out-of-date with respect to "/make clean/rerunning of makefile.pl
/new make all cycle. But the optimization didn't work in practice since
the modules declare a dependency on /lib/CORE/config.h not /config.h.
Previously "touch"ing /win32/Makefile would trigger a mass rebuild,
even if config.h's contents are the same. Now only if the new after
"touch"ing /win32/makefile config.h is different from the old config.h
, will a mass rebuild of module be triggered. This makes reduced the
amount of time core devs have to spend to work on Win32 perl.

6 years agoAdd documentation for /n (non-capture) regexp flag.
Matthew Horsfall [Tue, 30 Dec 2014 00:21:39 +0000 (19:21 -0500)]
Add documentation for /n (non-capture) regexp flag.

6 years agolex_assign.t: Actually test chomp
Father Chrysostomos [Mon, 29 Dec 2014 14:24:12 +0000 (06:24 -0800)]
lex_assign.t: Actually test chomp

6 years agolex_assign.t: Correct (s)cho(m)p comments
Father Chrysostomos [Mon, 29 Dec 2014 14:22:07 +0000 (06:22 -0800)]
lex_assign.t: Correct (s)cho(m)p comments

The were backwards.  ‘s’ means a single item.

6 years agoop_private: Update note about targlex and trans
Father Chrysostomos [Mon, 29 Dec 2014 14:16:33 +0000 (06:16 -0800)]
op_private: Update note about targlex and trans

6 years agoEnable OPpTARGET_MY optimisation for cmp/<=>
Father Chrysostomos [Mon, 29 Dec 2014 14:13:48 +0000 (06:13 -0800)]
Enable OPpTARGET_MY optimisation for cmp/<=>

We can only do it for <=> under ‘use integer’.

The non-integer <=> will push undef on to the stack.  Enabling
the optimisation for it would cause \($lexical = $x <=> "nan") to
leave $lexical with its previous value and return a reference to
&PL_sv_undef.

6 years agoFix breakage of 780fcc9
Karl Williamson [Tue, 30 Dec 2014 01:27:42 +0000 (02:27 +0100)]
Fix breakage of 780fcc9

I got confused in writing this: the global needs to be cleared always,
and set to NULL.

6 years agoregexec.c: Suppress warning messages
Karl Williamson [Tue, 30 Dec 2014 01:39:40 +0000 (18:39 -0700)]
regexec.c: Suppress warning messages

A message on some compilers is geing generated that two variables may be
unininitialized.  In fact there is no path through that uses them
thusly, but initialize them anyway where the compiler is wrong.

6 years agoRaise warning on multi-byte char in single-byte locale
Karl Williamson [Mon, 29 Dec 2014 20:15:57 +0000 (13:15 -0700)]
Raise warning on multi-byte char in single-byte locale

See http://nntp.perl.org/group/perl.perl5.porters/211909

Something is quite likely wrong with the logic if say in a Greek locale,
Unicode characters (especially Greek ones) are encountered.  The same
character will be represented by two different code points.  This
warning alerts the user to this undesirable state of affairs.

6 years agoperllocale: Nits
Karl Williamson [Mon, 29 Dec 2014 19:57:02 +0000 (12:57 -0700)]
perllocale: Nits

6 years agofoldEQ_utf8(): Add some internal flags
Karl Williamson [Mon, 29 Dec 2014 18:01:59 +0000 (11:01 -0700)]
foldEQ_utf8(): Add some internal flags

The comments explain their purpose

6 years agolib/warnings/utf8: Add missing tests
Karl Williamson [Sat, 27 Dec 2014 02:37:50 +0000 (19:37 -0700)]
lib/warnings/utf8: Add missing tests

lcfirst had been overlooked, and we had failed to test that turning off
warnings actually suppresses them.

6 years agoSimplify foldEQ_utf8
Karl Williamson [Sat, 27 Dec 2014 01:31:04 +0000 (18:31 -0700)]
Simplify foldEQ_utf8

This moves the uncommon case of handling inputs under non-UTF-8 locales
out of this function to the functions it calls, which already have the
logic to handle it.  This simplifies this function, cutting a couple
branches each time through the loop from the common usage.

The locale handling is slowed down somewhat, but even if that were a
concern, another simpler function is normally used for locale handling.
This gets called only when one or both of the comparison strings is
UTF-8, which should be comparatively rare for non-UTF8 locales.

6 years agoutf8.c: Use OP_DESC instead of passing string.
Karl Williamson [Sat, 27 Dec 2014 01:20:14 +0000 (18:20 -0700)]
utf8.c: Use OP_DESC instead of passing string.

OP_DESC is simpler and more general.

6 years agoutf8.c: Fix potential fold bug
Karl Williamson [Sat, 27 Dec 2014 00:47:37 +0000 (17:47 -0700)]
utf8.c: Fix potential fold bug

The function _to_uni_fold_flags() supposedly had the ability to do
folding based on the current locale, if the correct flag is passed.
However, it didn't actually do that, returning a non-locale fold
instead.  Fortunately, this is an undocumented capability (actually, the
whole function is undocumented), and no current calls to it used the
flag.  This commit causes it to work.

6 years agoutf8.c: Add some function parameter assertions
Karl Williamson [Fri, 26 Dec 2014 22:41:33 +0000 (15:41 -0700)]
utf8.c: Add some function parameter assertions

Currently these are not violated, but this guards against future
mistakes.

6 years agoregexec.c: Move goto label to avoid redundant work
Karl Williamson [Fri, 19 Dec 2014 05:21:21 +0000 (22:21 -0700)]
regexec.c: Move goto label to avoid redundant work

This causes a goto to skip work that has already been done.

6 years agoregexec.c: White-space only
Karl Williamson [Fri, 26 Dec 2014 23:08:28 +0000 (16:08 -0700)]
regexec.c: White-space only

6 years agoDon't raise 'poorly supported' locale warning unnecessarily
Karl Williamson [Thu, 18 Dec 2014 20:29:51 +0000 (13:29 -0700)]
Don't raise 'poorly supported' locale warning unnecessarily

Commit 8c6180a91de91a1194f427fc639694f43a903a78 added a warning message
for when Perl determines that the program's underlying locale just
switched into is poorly supported.  At the time it was thought that this
would be an extremely rare occurrence.  However, a bug in HP-UX -
B.11.00/64 causes this message to be raised for the "C" locale.  A
workaround was done that silenced those.  However, before it got fixed,
this message would occur gobs of times executing the test suite.  It was
raised even if the script is not locale-aware, so that the underlying
locale was completely irrelevant.  There is a good prospect that someone
using an older Asian locale as their default would get this message
inappropriately, even if they don't use locales, or switch to a
supported one before using them.

This commit causes the message to be raised only if it actually is
relevant.  When not in the scope of 'use locale', the message is stored,
not raised.  Upon the first locale-dependent operation within a bad
locale, the saved message is raised, and the storage cleared.  I was
able to do this without adding extra branching to the main-line
non-locale execution code.  This was done by adding regnodes which get
jumped to by switch statements, and refactoring some existing C tests so
they exclude non-locale right off the bat.

These changes would have been necessary for another locale warning that
I previously agreed to implement, and which is coming a few commits from
now.

I do not know of any way to add tests in the test suite for this.  It is
in fact rare for modern locales to have these issues.  The way I tested
this was to temporarily change the C code so that all locales are viewed
as defective, and manually note that the warnings came out where
expected, and only where expected.

I chose not to try to output this warning on any POSIX functions called.
I believe that all that are affected are deprecated or scheduled to be
deprecated anyway.  And POSIX is closer to the hardware of the machine.

For convenience, I also don't output the message for some zero-length
pattern matches.  If something is going to be matched, the message will
likely very soon be raised anyway.

6 years agoAdd regex nodes for locale
Karl Williamson [Thu, 18 Dec 2014 17:42:30 +0000 (10:42 -0700)]
Add regex nodes for locale

These will be used in a future commit to distinguish between /l patterns
vs non-/l.

6 years agoregcomp.c, regexec.c: Vertically align ternary operators
Karl Williamson [Thu, 18 Dec 2014 21:03:09 +0000 (14:03 -0700)]
regcomp.c, regexec.c: Vertically align ternary operators

For clarity

6 years agoNits in comments
Karl Williamson [Thu, 18 Dec 2014 20:32:21 +0000 (13:32 -0700)]
Nits in comments

6 years agoAdd support for new warning categories outside of "all"
Ævar Arnfjörð Bjarmason [Mon, 29 Dec 2014 20:04:01 +0000 (21:04 +0100)]
Add support for new warning categories outside of "all"

When someone suggests a new warning on p5p it always often up being
argued about on the basis that it'll break existing code, and that we
shouldn't add warnings for possibly legitimate code just because it's
unusual or odd.

As I pointed out in a discussion about RT #121025 (see [1]) we only keep
having this discussion because until now we've had no facility to add
new warnings outside of the default set that'll be retroactively enabled
for everything that does 'use warnings'. This patch introduces such a
facility.

As a proof of concept I'm adding a warning for something that was added
as a warning in the past, but pulled out because it was deemed too
controversial at the time: warning about the use of grep in void
context.

That warning was added back in v5.10.0-218-g74295f0 but quickly pulled
out in v5.10.0-230-gf5df478. See [2] for the discussion about it at the
time.

Now if you do:

    use warnings;
    grep /42/, (1,2);

You'll get no warnings as before, but if you do:

    use warnings qw(extra); # Or its sole subcategory: void_unusual
    grep /42/, (1,2);

You'll get a warning about "Unusual use of grep in void context". To
turn off this warning once you've turned it on it's *not* sufficient to
do:

    no warnings;

You need to do:

    no warnings qw(pedantic);

Or:

    no warnings qw(everything);

I'm willing to change that, but first we should ask ourselves whether
this should continue to remain a symmetric operation:

    {use,no} warnings ['all'];

There's more elaboration on how this works in the changes I'm making to
the perldelta and the warnings documentation. But briefly this should be
100% backwards compatible, but allow us to have our cake and eat it too
in the future by adding new warnings without imposing them on existing
code written against older perl versions (unless that code explicitly
requested to get new warnings as they upgrade perl).

The patch to the warnings.pm documentation lays out a backwards
compatibility policy for warnings, we promise that we'll continue the
status quo with the "all" category, but for other categories (including
future additions) we'll make such promises on a per-category basis.

TODO: I wanted to come up with some more general facility for being able
to add these new warnings without altering the behavior of the -w and -W
switches. I.e. now we'll emit this, as intended:

    $ ./perl -Ilib -w -e 'grep /42/, (1,2)'
    $ ./perl -Ilib -W -e 'grep /42/, (1,2)'
    $ ./perl -Ilib -e 'use warnings; grep /42/, (1,2)'
    $ ./perl -Ilib -e 'use warnings "extra"; grep /42/, (1,2)'
    Unusual use of grep in void context at -e line 1.

I.e. we don't want -w and -W to mean "use warnings 'everything'", it
should continue to mean "use warnings 'all'". But due to how they're
implemented I couldn't find an easy way to generalize this. Right now
I'm just hardcoding an exception to the new warning category I've added
outside "all" for these warnings.

That should be followed-up with a more general solution, but for now if
we only have a few of these catogeries we should be fine.

This patch incorporates work from Andreas Guðmundsson
<andreasg@nasarde.org> who picked up an earlier version of mine and
figured out the change being made to mg.c here. That change removes an
optimization in the ${^WARNING_BITS} magic which might make things a tad
slower.

1. https://rt.perl.org/Ticket/Display.html?id=121025#txn-1276663
2. http://www.nntp.perl.org/group/perl.perl5.porters/2007/12/msg131922.html

6 years agoMore CUSTOMIZED updates:
Steve Hay [Mon, 29 Dec 2014 15:22:43 +0000 (15:22 +0000)]
More CUSTOMIZED updates:

- The Encode change already has a CPAN RT ticket, so note it here.
- The Socket changes were assimilated by v2.016
- The autodie changes were assimilated by v2.26

6 years agoCall FETCH once for values in {...}
Father Chrysostomos [Mon, 29 Dec 2014 07:13:26 +0000 (23:13 -0800)]
Call FETCH once for values in {...}

I broke this inadvertently in v5.17.5-55-g3ed356d while fixing a
memory leak.

6 years agot/op/caller.t: Remove hardcoded $warnings::BYTES in favor of using $warnings::BYTES
Ævar Arnfjörð Bjarmason [Mon, 29 Dec 2014 12:44:52 +0000 (13:44 +0100)]
t/op/caller.t: Remove hardcoded $warnings::BYTES in favor of using $warnings::BYTES

This was originally hardcoded here in perl-5.8.0-909-g75b6c4c but since
then in numerous subsequent commits starting with v5.13.9-546-g3a32947
we've been bumping this number as we increase the number of warning
bits.

Just use the variable from warnings.pm instead, we're already using
other variables from there.

6 years agopp.c:pp_quotemeta: No need for PUTBACK
Father Chrysostomos [Mon, 29 Dec 2014 06:39:45 +0000 (22:39 -0800)]
pp.c:pp_quotemeta: No need for PUTBACK

We don’t manipulate the stack pointer at all here.

6 years agoRemove PUTBACK/SPAGAIN from hash iter ops
Father Chrysostomos [Mon, 29 Dec 2014 06:38:00 +0000 (22:38 -0800)]
Remove PUTBACK/SPAGAIN from hash iter ops

These were added by perl-5a2-2-g463ee0b and perl-5.003-2-gc750a3e.  At
the time, hv_iternext and hv_iterval could reallocate the stack, but
hv_iterkey was safe.  perl-5.6.0-8537-g574c802 divorced the comments
about hv_iterkey from the lines containing hv_iterkey, making things a
bit confusing.  Somewhere along the road, all tied hash functionality
started being guarded with PUSHSTACK, so these hash functions won’t
reallocate the stack any more.

6 years agopp.c:pp_[ul]c(first): No need for PUTBACK
Father Chrysostomos [Mon, 29 Dec 2014 03:11:34 +0000 (19:11 -0800)]
pp.c:pp_[ul]c(first): No need for PUTBACK

We don’t manipulate the stack pointer at all here.

6 years agopp.c:pp_chr: Less stack fiddling
Father Chrysostomos [Mon, 29 Dec 2014 03:03:43 +0000 (19:03 -0800)]
pp.c:pp_chr: Less stack fiddling

No need for pop and push, since we accept and return one item.  No
need to extend the stack.  No need for PUTBACK.

6 years agopp.c:pp_ord: Less stack fiddling
Father Chrysostomos [Mon, 29 Dec 2014 03:03:02 +0000 (19:03 -0800)]
pp.c:pp_ord: Less stack fiddling

No need for pop and push, since we accept and return one item.  No
need to extend the stack.  No need for PUTBACK.

6 years agopp.c:pp_substr: Redundant PUTBACK/SPAGAIN
Father Chrysostomos [Mon, 29 Dec 2014 02:54:58 +0000 (18:54 -0800)]
pp.c:pp_substr: Redundant PUTBACK/SPAGAIN

These were added in perl-5.004_03-1149-g849ca7e.  Perhaps at the time
SvPV or sv_magic could reallocate the stack.  Neither is true now.

6 years agopp.c:pp_oct: Less stack fiddling
Father Chrysostomos [Mon, 29 Dec 2014 02:48:57 +0000 (18:48 -0800)]
pp.c:pp_oct: Less stack fiddling

No need for pop and push, since we accept and return one item.  No
need to extend the stack.  No need for PUTBACK.

6 years agopp.c:pp_abs: No need for PUTBACK
Father Chrysostomos [Mon, 29 Dec 2014 02:47:09 +0000 (18:47 -0800)]
pp.c:pp_abs: No need for PUTBACK

We don’t manipulate the stack pointer at all here.

6 years agopp.c:pp_negate: No PUTBACK necessary
Father Chrysostomos [Mon, 29 Dec 2014 01:32:37 +0000 (17:32 -0800)]
pp.c:pp_negate: No PUTBACK necessary

We don’t manipulate the stack pointer here.

6 years agopp.c:pp_int: No need for PUTBACK
Father Chrysostomos [Mon, 29 Dec 2014 01:42:23 +0000 (17:42 -0800)]
pp.c:pp_int: No need for PUTBACK

We don’t manipulate the stack pointer at all here.

6 years agopp.c:pp_sin: Less stack fiddling
Father Chrysostomos [Mon, 29 Dec 2014 01:39:08 +0000 (17:39 -0800)]
pp.c:pp_sin: Less stack fiddling

No need to pop and push.  No need to extend the stack.  No need for
PUTBACK with those changes, as we no longer maniputale the stack
pointer (and even when we did it always ended up with the same value).

6 years agopp.c:pp_i_negate: No PUTBACK necessary
Father Chrysostomos [Mon, 29 Dec 2014 01:36:51 +0000 (17:36 -0800)]
pp.c:pp_i_negate: No PUTBACK necessary

We don’t manipulate the stack pointer here.

6 years agopp.c:pp_complement: No PUTBACK necessary
Father Chrysostomos [Mon, 29 Dec 2014 01:33:45 +0000 (17:33 -0800)]
pp.c:pp_complement: No PUTBACK necessary

We don’t manipulate the stack pointer here.

6 years agopp.c:pp_undef: Less stack fiddling
Father Chrysostomos [Mon, 29 Dec 2014 01:19:07 +0000 (17:19 -0800)]
pp.c:pp_undef: Less stack fiddling

Only when called with no arguments does it need to manipulate the
stack pointer.

6 years agopp.c: pp_schop does not need PUTBACK
Father Chrysostomos [Mon, 29 Dec 2014 01:15:26 +0000 (17:15 -0800)]
pp.c: pp_schop does not need PUTBACK

as it does no stack manipulation.

6 years agopp.c:pp_trans: Remove targ variable
Father Chrysostomos [Mon, 29 Dec 2014 01:12:26 +0000 (17:12 -0800)]
pp.c:pp_trans: Remove targ variable

One spot was doing sv = GETTARG, which is equivalent to
sv = targ = ....  The value of targ was unused.  Elsewhere, a new mor-
tal was assigned to targ and then immediately pushed on to the stack.

Avoiding the redundant variable altogether results in smaller
machine code.

6 years agoFix bad write in pp_trans
Father Chrysostomos [Mon, 29 Dec 2014 01:07:47 +0000 (17:07 -0800)]
Fix bad write in pp_trans

y/// has not been extending the stack for lexical $_, even since lex-
ical $_ was added.  $lexical =~ y/// has not been extending the stack
since v5.21.5-339-g05a502d.

6 years agopp.c:pp_study: Less stack fiddling
Father Chrysostomos [Mon, 29 Dec 2014 00:55:33 +0000 (16:55 -0800)]
pp.c:pp_study: Less stack fiddling

We always pop and push exactly one item.  We can skip the sp++ and
sp--, and also the PUTBACK.

6 years agopp.c:pp_gelem: Less stack fiddling
Father Chrysostomos [Mon, 29 Dec 2014 00:53:42 +0000 (16:53 -0800)]
pp.c:pp_gelem: Less stack fiddling

Instead of pop, pop, push, just do one pop and then replace the
remaining item.  Also, there is no need to extend the stack here, as
pp_gelem returns fewer items than it consumes.

6 years agoRemove ‘require Config’ from ref.t
Father Chrysostomos [Mon, 29 Dec 2014 00:44:56 +0000 (16:44 -0800)]
Remove ‘require Config’ from ref.t

82b84d04879 removed the code that needed it.

6 years agoperlfunc: prototype implies $_
Father Chrysostomos [Mon, 29 Dec 2014 00:09:12 +0000 (16:09 -0800)]
perlfunc: prototype implies $_

6 years ago[perl #123514] Make prototype() imply $_
Father Chrysostomos [Mon, 29 Dec 2014 00:08:19 +0000 (16:08 -0800)]
[perl #123514] Make prototype() imply $_

Previously it would read and replace the previous item on the stack:

$ ./perl -le 'print "CORE::undef", prototype'
;\[$@%&*]

6 years agoDon’t write beyond the stack with scalar \()
Father Chrysostomos [Sun, 28 Dec 2014 23:56:23 +0000 (15:56 -0800)]
Don’t write beyond the stack with scalar \()

6 years agopp.c:pp_srefgen: Remove PUTBACK
Father Chrysostomos [Sun, 28 Dec 2014 22:30:31 +0000 (14:30 -0800)]
pp.c:pp_srefgen: Remove PUTBACK

We don’t manipulate the stack pointer at all here.

6 years agopp.c:pp_rv2cv: Remove PUTBACK
Father Chrysostomos [Sun, 28 Dec 2014 21:57:57 +0000 (13:57 -0800)]
pp.c:pp_rv2cv: Remove PUTBACK

pp_rv2cv doesn’t adjust the stack pointer at all, so there is no need
to synchronise with the global pointer before returning.

6 years agopp.c:pp_pos: Less stack fiddling
Father Chrysostomos [Sun, 28 Dec 2014 21:54:41 +0000 (13:54 -0800)]
pp.c:pp_pos: Less stack fiddling

We always pop exactly one item off the stack and then push exactly one
item.  Instead of doing sp-- and sp++, just leave it alone (TOP/SET,
rather than POP/PUSH).  Also skip PUTBACK, which is unnecessary.

6 years agopp.c:pp_rv2sv: Use >= instead of switch
Father Chrysostomos [Sun, 28 Dec 2014 21:46:26 +0000 (13:46 -0800)]
pp.c:pp_rv2sv: Use >= instead of switch

This results in smaller machine code.

If a freed SV is exposed to perl space then ${\$freed} will now die,
which is arguably more correct.

6 years agopp.c:pp_rand: Only EXTEND when not popping
Father Chrysostomos [Sun, 28 Dec 2014 21:03:56 +0000 (13:03 -0800)]
pp.c:pp_rand: Only EXTEND when not popping

6 years agoRemove inactive CUSTOMIZED entry.
James E Keenan [Sun, 28 Dec 2014 14:42:00 +0000 (09:42 -0500)]
Remove inactive CUSTOMIZED entry.

6 years agoAdd tests for stringification of regexps containing /n
Matthew Horsfall [Wed, 17 Dec 2014 21:28:34 +0000 (16:28 -0500)]
Add tests for stringification of regexps containing /n

6 years agoBump re.pm version for changes
Matthew Horsfall [Wed, 17 Dec 2014 21:20:46 +0000 (16:20 -0500)]
Bump re.pm version for changes

6 years agoSupport for nocapture regexp flag /n
Matthew Horsfall (alh) [Thu, 23 Oct 2014 00:56:47 +0000 (20:56 -0400)]
Support for nocapture regexp flag /n

This flag will prevent () from capturing and filling in $1, $2, etc...

Named captures will still work though, and if used will cause $1, $2, etc...
to be filled in *only* within named groups.

The motivation behind this is to allow the common construct of:

  /(?:b|c)a(?:t|n)/

To be rewritten more cleanly as:

  /(b|c)a(t|n)/n

When you want grouping but no memory penalty on captures.

You can also use ?n inside of a () directly to avoid capturing, and
?-n inside of a () to negate its effects if you want to capture.

6 years agoFixes to make test pass for regexp nocapture bit addition.
Matthew Horsfall (alh) [Thu, 23 Oct 2014 00:50:13 +0000 (20:50 -0400)]
Fixes to make test pass for regexp nocapture bit addition.

 * Make Devel-Peek/t/Peek.t less sensitive to regexp flag changes.

   Devel-Peek had flag names and binary representation hardcoded. Flag
   names *should* be enough. Otherwise we have to update bits of this
   test every time we muck with flags that don't affect the flags being
   tested.

 * Let B::Deparse know about the new RXf_PMf_CHARSET shift value.

6 years agoCreate bit for /n.
Karl Williamson [Wed, 22 Oct 2014 18:38:20 +0000 (12:38 -0600)]
Create bit for /n.

6 years agoFix various "CPAN only" warnings for cpan/ modules in Porting/Maintainers.pl
Steve Hay [Sun, 28 Dec 2014 14:26:04 +0000 (14:26 +0000)]
Fix various "CPAN only" warnings for cpan/ modules in Porting/Maintainers.pl

6 years agoNote that threads is currently customized in blead
Steve Hay [Sun, 28 Dec 2014 13:29:06 +0000 (13:29 +0000)]
Note that threads is currently customized in blead

6 years agopp_hot.c:pp_concat: Remove SvGETMAGIC
Father Chrysostomos [Sun, 28 Dec 2014 07:24:44 +0000 (23:24 -0800)]
pp_hot.c:pp_concat: Remove SvGETMAGIC

If the operand is magical, try_amagic_bin will already have copied
the operand if both left and right were the same, so left == right
will no longer be true by the time this path is reached.  This has
been the case since v5.13.11-400-g75ea7a1.

6 years agopp_hot.c:pp_concat: Remove PUTBACK/SPAGAIN
Father Chrysostomos [Sun, 28 Dec 2014 07:10:39 +0000 (23:10 -0800)]
pp_hot.c:pp_concat: Remove PUTBACK/SPAGAIN

sv_utf8_upgrade_nomg does not reallocate the stack, as of
v5.19.6-25-g7a3f960.

6 years agoUse gmtime’s target
Father Chrysostomos [Sun, 28 Dec 2014 06:53:55 +0000 (22:53 -0800)]
Use gmtime’s target

gmtime has a target allocated for it, but it hasn’t used that target
since 46fc3d4c6 (inseparable changes from match from perl-5.003_97g to
perl-5.003_97h, probably the ‘Mondo Cool patch’ mentioned in the com-
mit message).

There is no reason not to use it and avoid allocating a fresh SV with
each scalar-context call.

6 years agopp_sys.c:pp_gmtime: Remove redundant EXTEND_MORTAL
Father Chrysostomos [Sun, 28 Dec 2014 06:35:20 +0000 (22:35 -0800)]
pp_sys.c:pp_gmtime: Remove redundant EXTEND_MORTAL

The purpose of EXTEND_MORTAL is to extend the mortals stack only
once before pushing multiple items.  Here we are just going to push
one item, so extending it gains us nothing, as sv_2mortal is going
to do that anyway.

Moreover, we will not even be using the mortals stack if there has
been an error.

6 years agoop.c: Remove assert exception for OP_REPEAT
Father Chrysostomos [Sun, 28 Dec 2014 01:20:48 +0000 (17:20 -0800)]
op.c: Remove assert exception for OP_REPEAT

I changed the op tree in v5.21.5-101-g5e46266.

6 years agoop.h: Parenthesize macro args for cUNOPx etc.
Father Chrysostomos [Sun, 28 Dec 2014 01:18:52 +0000 (17:18 -0800)]
op.h: Parenthesize macro args for cUNOPx etc.

Without this, we cannot do cUNOPx(complex expression) without worrying
about precedence issues.

6 years agoperlop: Mention ~ among ops that vary by type
Father Chrysostomos [Sat, 27 Dec 2014 20:40:55 +0000 (12:40 -0800)]
perlop: Mention ~ among ops that vary by type

6 years agoconst the PerlIO vtables
Daniel Dragan [Thu, 25 Dec 2014 22:50:23 +0000 (17:50 -0500)]
const the PerlIO vtables

Previously the PerlIO vtables were const only on PERL_GLOBAL_STRUCT_PRIVATE
builds, which was created for former Symbian port and today is rarely used.
Since writing/hooking the PerlIO vtables from XS has never been public API
and is very unlikely to be occuring on CPAN, make then const so they will
be shared between perl processes.

b4 VC2008 x64 perl521.dll .rdata section 0x7293C bytes, .data 0x34B0 bytes
after .rdata 0x7321C .data 0x2BD0

6 years agoUpdate autodie to CPAN version 2.26
Chris 'BinGOs' Williams [Sat, 27 Dec 2014 16:19:50 +0000 (16:19 +0000)]
Update autodie to CPAN version 2.26

  [DELTA]

2.26      2014-12-26 16:27:23+00:00 UTC

        * BUGFIX / INCOMPAT: Remove "fileno" and "umask" from the list of
                             CORE subs protected by autodie and Fatal.
                             When they return undef, it is not a failure.

        * BUGFIX: Fixed an error that could occur during global destruction of
          the form "(in cleanup) Can't use an undefined value as an ARRAY
          reference at .../autodie/Scope/GuardStack.pm line 48 during global
          destruction" (Thanks to Dave Rolsky).

        * BUGFIX: The open-pragma is now properly ignored when open is
                  given an explicit layer.  This brings autodie protected
                  open in sync with open.  Thanks to Gregory Oschwald and
                  Graham Knop for the report + test case and the patch.
                  (GH#52 + GH#53)

        * BUGFIX: Hide the "SCALAR" (buffer) argument in the string
                  representation of autodie::exception for the read,
                  sysread and syswrite CORE subs.  This is to avoid
                  a dump of binary data to the screen/log when a
                  (sys)read or syswrite fails.

        * FEATURE: Let autodie::exception work in equality tests and
                   string comparison via "overload fallback".
                   (Thanks to Michael G. Schwern)

        * DOC: Mention that "kill" is in the ":ipc" category.  It has
               been there since autodie v2.14.
               (Thanks to Felipe Gasper for reporting it, RT#97320).

        * INTERNAL: Use "parent" instead of "base" for inheritance.  Also
                    avoid some @ISA relationships that were redundant.
                    Either truly redundant ones or by importing "import"
                    from Exporter v5.57.
                    -  This change implies that perl 5.8 users must now
                       also fetch "parent" from cpan.
                    (Thanks to Olivier Mengué, GH#59)

        * DEVEL / TEST: The autodie module now accepts an undefined Fatal
                        version, assuming it to be development version.
                        Test cases that require versions are now either
                        skipped or considered "release" test.

        * TEST / INTERNAL: Enabled travis-ci for Perl 5.20

        * TEST: Close temp file before re-opening in t/truncate.t.
                (Thanks to Craig A. Berry, RT#96609)

        * TEST: Pass O_TRUNC with O_CREAT to sysopen in t/utf8_open.t.
                (Thanks to Craig A. Berry, RT#87237)

        * TEST: Clean up temp file in t/truncate.t.
                (Thanks to Dave Mitchell, RT#100688)

6 years agoUpdate ExtUtils-Command to CPAN version 1.19
Chris 'BinGOs' Williams [Sat, 27 Dec 2014 15:23:08 +0000 (15:23 +0000)]
Update ExtUtils-Command to CPAN version 1.19

6 years agoperlfunc: another alternative for enabling the "state" feature
Slaven Rezic [Fri, 26 Dec 2014 20:21:03 +0000 (21:21 +0100)]
perlfunc: another alternative for enabling the "state" feature

6 years agooptimize CLEAR_ERRSV
Daniel Dragan [Fri, 26 Dec 2014 14:15:23 +0000 (09:15 -0500)]
optimize CLEAR_ERRSV

-gv_add_by_type is special only for non-GVs, and add AV to GV, otherwise
it is just assigning to GP slot (in this case through GvSV), which
CLEAR_ERRSV already did in another branch, so inline the gv_add_by_type
-dont compute GvSV multiple times, GvSV contains 2 derefs, after this patch
it will contains just 1 deref ("*svp") without an offset (deref without
offset is smaller in x86 machine code than deref with offset)
-SvREFCNT_dec_NN for efficiency
-move SvPOK_only closer to SvMAGICAL, this ensures SvFLAGS is read and
written only once, not 2 reads and 1 write, this is specifically for
RISC-ish cpus
-the goto clresv_newemptypv is because VC optimizer in -O1 didn't combine
the branches

perl521.dll VC 2003 before .text section size in machine code bytes
0xc8a63, after 0xc88e3

6 years agowin32/win32.c Perl_croak->croak_xs_usage
Daniel Dragan [Fri, 26 Dec 2014 03:07:07 +0000 (22:07 -0500)]
win32/win32.c Perl_croak->croak_xs_usage

When this XSUB was written croak_xs_usage didn't exist. Now it does. Use it
so the error string is shorter in the perl binary.

6 years agoconst the core magic vtables
Daniel Dragan [Thu, 25 Dec 2014 19:43:14 +0000 (14:43 -0500)]
const the core magic vtables

A remark in
http://www.nntp.perl.org/group/perl.perl5.porters/2006/07/msg115113.html
caused commit bc028b6b7f /
http://www.nntp.perl.org/group/perl.perl5.porters/2006/07/msg115116.html .
That remark is not true according to
http://www.nntp.perl.org/group/perl.perl5.porters/2006/07/msg115115.html
and
http://www.nntp.perl.org/group/perl.perl5.porters/2013/01/msg197318.html .
To save memory between perl processes, const the tables so the memory is
shared by the OS between perl processes.

b4 .rdata section of x64 VC 2008 miniperl 0x667EE bytes .data 0x3440 bytes
after .rdata 0x66FAE .data 0x2C80, 0x3440-0x2C80=0x7C0 saved,
based on the .data section size crossing a page boundary this saved 4K
of per process memory on Win64 miniperl.

6 years agodocument Perl_sv_getbackrefs() in perldelta
Yves Orton [Fri, 26 Dec 2014 15:26:46 +0000 (16:26 +0100)]
document Perl_sv_getbackrefs() in perldelta

6 years ago[perl #123502] isnan identifier can't be used as a var
Daniel Dragan [Fri, 26 Dec 2014 05:34:03 +0000 (00:34 -0500)]
[perl #123502] isnan identifier can't be used as a var

        cl -c -nologo -GF -W3 -I..\lib\CORE -I.\include -I. -I.. -DWIN32 -D_CONS
OLE -DNO_STRICT -DPERLDLL -DPERL_CORE -O1 -MD -Zi -DNDEBUG -G7 -GL -DPERL_EXTE
RNAL_GLOB -DPERL_IS_MINIPERL -Fo.\mini\pp_sys.obj ..\pp_sys.c
pp_sys.c
..\pp_sys.c(4610) : error C2063: '_isnan' : not a function
NMAKE : fatal error U1077: 'cl' : return code '0x2'

See RT ticket for details.

6 years agoperl5220delta: B::Generate is fixed
Father Chrysostomos [Thu, 25 Dec 2014 20:46:01 +0000 (12:46 -0800)]
perl5220delta: B::Generate is fixed