platform/upstream/perl.git
11 years agorefactor pp_stringify and pp_and
Daniel Dragan [Tue, 20 Nov 2012 22:36:54 +0000 (17:36 -0500)]
refactor pp_stringify and pp_and

pp_stringify:

First, move all the SP/stack operations to before the first call in
pp_stringify (sv_copypv), this allows SP to never be saved across any calls.
SETTARG calls set magic, so that still has to be done. SETs does not ++/--
SP, so no need to do a PUTBACK. PL_op is read twice, once for TARG, once
for NORMAL. No point in caching it through the sv_copypv call since its not
worth saving a non-vol to C stack (x86) just to avoid 2 mem acesses. This
opcode now only has 2 vars saved across sv_copypv, my_perl and TARG.

pp_stringify dropped from 0x3F to 0x3C for me after these changes, 32 bit
x86 VC 2003.

pp_and:

Do the PERL_ASYNC_CHECK before anything else, calcing SP before
PERL_ASYNC_CHECK would mean saving it across the potential call. SvTRUE
macro checks its param for NULL. This SV * came off the Perl stack, it will
not be null since pp_and is not a core sub (see S_maybe_add_coresub) and
will not be called from pp_coreargs (pp_coreargs places (SV *)NULLs on
Perl stack). So create a SvTRUE_NN macro that does not check for NULL, this
saves a branch. Since the Perl stack is only touched twice, don't create
a local SP. See comment in code. This saves another variable to not be
saved across the sv_2bool_flags and removed PUTBACK instructions. PL_op is
only read once or twice (compiler choice) right before the 2 returns.
There is only 1 variable saved across any calls in pp_and now, and that is
my_perl. dSP also was not use to prevent an accidental use of a ++/-- SP
macro in pp_and in the future since there is no PUTBACK now. I guess for a
SPARC with register windowing and no direct memory instructions, accessing
PL_stack_sp twice will take more instructions 2 reads and a write to
PL_stack_sp vs 1 read and 1 write to PL_stack_sp with a dSP design. On
SPARC, with a register window, cross call regs have no cost per reg cost
aslong as you dont exceed their max number.

For me, pp_and went from 0x112 to 0xFF after this commit. Prior to dSP
removal, it was down to 0x109. SvTRUE_NN was named after SvREFCNT_inc_NN.
There remains an inefficiency in pp_and on non-GCC compilers due to
SvPVXtrue using PL_Xpv which will be dealt with in another commit.

11 years agofix a hash order dependency in cpan/List-Util tests
Yves Orton [Wed, 21 Nov 2012 08:45:06 +0000 (09:45 +0100)]
fix a hash order dependency in cpan/List-Util tests

cpan/List-Util/t/tainted.t fails if the environment variable
it access is PERL5LIB as that is set inside the process.

We filter out env vars starting with PERL and bump the version
numbers to 1.25_01.

11 years agoperlhack: better word
Father Chrysostomos [Wed, 21 Nov 2012 02:00:49 +0000 (18:00 -0800)]
perlhack: better word

At Aristotle’s suggestion

11 years agoAdd assertions to S_curse in sv.c
Father Chrysostomos [Tue, 20 Nov 2012 22:43:43 +0000 (14:43 -0800)]
Add assertions to S_curse in sv.c

If anything should go wrong with the order things are freed, we
could get crashes from this code.  The assertions seem like a
good idea.

11 years agoscope.c: Remove XXX tmp comment from SAVEt_FREEOP
Father Chrysostomos [Tue, 20 Nov 2012 22:32:37 +0000 (14:32 -0800)]
scope.c: Remove XXX tmp comment from SAVEt_FREEOP

This assertion helped me to find and fix a crashing bug, so I don’t
want it to be removed.

11 years agoRevert "Revert "8c34e50dc slowed down detruction with no DESTROY""
Father Chrysostomos [Tue, 20 Nov 2012 21:47:27 +0000 (13:47 -0800)]
Revert "Revert "8c34e50dc slowed down detruction with no DESTROY""

This reverts commit 95f9781bc2fad025553db0160ef9c2c5363312a1.

Now that the crash has been fixed by the preceding commit, we can
reinstate 7cc6787e9db.

11 years ago[perl #115830] Fix crash by not copying DESTROY cache
Father Chrysostomos [Wed, 21 Nov 2012 01:52:13 +0000 (17:52 -0800)]
[perl #115830] Fix crash by not copying DESTROY cache

See commits 8c34e50dc and 7cc6787e9db (the latter was reverted by
95f9781bc).

If we are going to store a DESTROY cache in SvSTASH when !SvOBJECT, we
have to make sure not to copy that cache, otherwise other threads will
try to call a CV in the first thread, resulting in a crash.

8c34e50dc introduced this bug, but the crash didn’t start happening
until 7cc6787e9db, and only on Windows.

11 years agosv.c: obsolete comment
Father Chrysostomos [Tue, 20 Nov 2012 21:42:10 +0000 (13:42 -0800)]
sv.c: obsolete comment

This was resolved by the addition of S_curse and do_curse.

11 years agoMention do_curse in alloc section of sv.c apidocs
Father Chrysostomos [Tue, 20 Nov 2012 21:40:54 +0000 (13:40 -0800)]
Mention do_curse in alloc section of sv.c apidocs

11 years agoFix panic/crash with sort { $not_num } and fatal warnings
Father Chrysostomos [Tue, 20 Nov 2012 20:28:57 +0000 (12:28 -0800)]
Fix panic/crash with sort { $not_num } and fatal warnings

I caused this in 5.15.4 in commit 1aa032b25ab:

$ ./miniperl -Ilib -e 'eval q|use warnings FATAL=>all=>; ()=sort{undef}1,2|'
panic: illegal pad in SAVEt_FREEOP: 0x803500[0x0] at -e line 1.

This panic only happens under debugging builds.

But it’s worse than that:

$ ./miniperl -Ilib -e 'eval { use warnings FATAL => all=>; ()=sort{undef}1,2}; my $x'
Bus error

It’s this piece of code in pp_sort.c that is the problem:

    pad = PL_curpad; PL_curpad = 0;
    if (PL_stack_sp != PL_stack_base + 1) {
assert(PL_stack_sp == PL_stack_base);
result = SvIV(&PL_sv_undef);
    }
    else result = SvIV(*PL_stack_sp);
    PL_curpad = pad;

If SvIV dies, then PL_curpad will never be restored.  That results in
a panic error when the string eval exits, under debugging builds, and
a crash for any subsequent pad ops, under any build.

So we need to use the savestack to protect PL_curpad.  To avoid the
overhead most of the time, we should do this only if the result is not
already a number.

Sorting with a sub that has a ($$) prototype follows a different
code path that contains the same logic, but it is safe in that case,
because sort with a sub already localises the pad.  I added tests for
it anyway.

11 years agoperldiag: Correct entry about sort sub and single values
Father Chrysostomos [Tue, 20 Nov 2012 17:56:15 +0000 (09:56 -0800)]
perldiag: Correct entry about sort sub and single values

Pure-Perl sort subroutines are always called in scalar context, so
it is not possible for them to return more or less than one item.

This entry implies that one would have to be careful about that
when writing a pure-Perl sort routine.

This only applies to XS sort routines, which *do* have to be
careful about that.

11 years agobump version to 5.17.7
Ricardo Signes [Wed, 21 Nov 2012 00:35:00 +0000 (19:35 -0500)]
bump version to 5.17.7

11 years agoadd perldelta for 5.17.7
Ricardo Signes [Wed, 21 Nov 2012 00:30:23 +0000 (19:30 -0500)]
add perldelta for 5.17.7

11 years agowrap some very long lines in verbatim blocks
Ricardo Signes [Wed, 21 Nov 2012 00:30:05 +0000 (19:30 -0500)]
wrap some very long lines in verbatim blocks

...I was sorely tempted to skip podcheck from looking at the
epigraphs file, mind you!

11 years agouse verbatim paragraphs for verse epigraphs
Ricardo Signes [Wed, 21 Nov 2012 00:16:35 +0000 (19:16 -0500)]
use verbatim paragraphs for verse epigraphs

...at least when I noticed the verse

11 years agoadd the v5.17.6 epigraph
Ricardo Signes [Wed, 21 Nov 2012 00:14:18 +0000 (19:14 -0500)]
add the v5.17.6 epigraph

11 years agoupdate perlhist and release schedule
Ricardo Signes [Tue, 20 Nov 2012 22:52:25 +0000 (17:52 -0500)]
update perlhist and release schedule

11 years agoupdate Module-CoreList
Ricardo Signes [Tue, 20 Nov 2012 22:49:29 +0000 (17:49 -0500)]
update Module-CoreList

11 years agoclean up and finalize the perldelta
Ricardo Signes [Tue, 20 Nov 2012 22:40:06 +0000 (17:40 -0500)]
clean up and finalize the perldelta

11 years agostart cleaning up perldelta for 5.17.6
Ricardo Signes [Mon, 19 Nov 2012 02:59:20 +0000 (21:59 -0500)]
start cleaning up perldelta for 5.17.6

11 years agoThe MurmurHash3 code can use the existing perl.h #defines for endianness.
Nicholas Clark [Tue, 20 Nov 2012 13:23:47 +0000 (14:23 +0100)]
The MurmurHash3 code can use the existing perl.h #defines for endianness.

The approach MurmurHash3 supplied wasn't able to probe endianness
successfully on (at least) HP-UX.

11 years agoperldelta.pod: Nits
Karl Williamson [Tue, 20 Nov 2012 16:59:28 +0000 (09:59 -0700)]
perldelta.pod: Nits

11 years agoperldelta for VMS case preservation features.
Craig A. Berry [Tue, 20 Nov 2012 13:11:36 +0000 (07:11 -0600)]
perldelta for VMS case preservation features.

11 years agoAdd perldelta for 517bb5c6f8
Steve Hay [Tue, 20 Nov 2012 08:27:17 +0000 (08:27 +0000)]
Add perldelta for 517bb5c6f8

11 years agorefine
Yves Orton [Tue, 20 Nov 2012 07:51:03 +0000 (08:51 +0100)]
refine

11 years agoadd more perldelta changes about hash patch
Yves Orton [Tue, 20 Nov 2012 07:39:36 +0000 (08:39 +0100)]
add more perldelta changes about hash patch

11 years agodocument hash changes in perldelta
Yves Orton [Tue, 20 Nov 2012 07:32:58 +0000 (08:32 +0100)]
document hash changes in perldelta

11 years agoperldelta: Entry for NO_TAINT_SUPPORT
Steffen Mueller [Tue, 20 Nov 2012 07:05:44 +0000 (08:05 +0100)]
perldelta: Entry for NO_TAINT_SUPPORT

11 years agoFix test-skipping logic for File::Find under no-taint-perl
Steffen Mueller [Mon, 19 Nov 2012 06:51:49 +0000 (07:51 +0100)]
Fix test-skipping logic for File::Find under no-taint-perl

11 years agopp_hot.c:padsv: rewrt cmnt for clrty
Father Chrysostomos [Tue, 20 Nov 2012 05:31:11 +0000 (21:31 -0800)]
pp_hot.c:padsv: rewrt cmnt for clrty

11 years agoRevert "8c34e50dc slowed down detruction with no DESTROY"
Father Chrysostomos [Tue, 20 Nov 2012 03:59:49 +0000 (19:59 -0800)]
Revert "8c34e50dc slowed down detruction with no DESTROY"

This reverts commit 7cc6787e9dbebdd83799d997361188ab6dfe8ead.

That commit is causing crashes on Windows for some as yet unknown rea-
son.  (See ticket #115830.)  I don’t have time to fix it before the
release of 5.17.6.

11 years agoperldiag: typo
Father Chrysostomos [Mon, 19 Nov 2012 20:32:02 +0000 (12:32 -0800)]
perldiag: typo

11 years agoembed.fnc: Fix flags problem for regposixcc
Karl Williamson [Tue, 20 Nov 2012 00:39:58 +0000 (17:39 -0700)]
embed.fnc: Fix flags problem for regposixcc

The static and inline flags are considered mutually exclusive.  This is
not a fatal embed error as something can't be inline unless it is also
static, but the warning is there because the entry looks suspicious.
Commit 2fd63cc5b615213574e0153ed2bf14d9df23c073 introduced the flags
that caused the warning

11 years agoregen/embed.pl: Fix uninit variable warning.
Karl Williamson [Tue, 20 Nov 2012 00:38:18 +0000 (17:38 -0700)]
regen/embed.pl: Fix uninit variable warning.

11 years agoMerge topic branch into blead
Karl Williamson [Tue, 20 Nov 2012 00:13:41 +0000 (17:13 -0700)]
Merge topic branch into blead

This branch continues to make more systematic the handy.h definitions of
isFOO() macros started in 53335a31ed2284e8aaf1b6bf1cdcc0c0357841d0,
fixing some bugs and some incidentals found along the way.

Four of these macros are changed to not use function calls for
characters outside the Latin1 range.  Three of these used interpreter
level variables.  All core uses of these three interpreter variables
are removed in this series of commits, so the variables could be removed
without affecting the core.

11 years agoRefactor is(SPACE|PSXSP)_(uni|utf8) macros and utf8.c
Karl Williamson [Mon, 19 Nov 2012 21:36:12 +0000 (14:36 -0700)]
Refactor is(SPACE|PSXSP)_(uni|utf8) macros and utf8.c

This refactors the isSPACE_uni, is_SPACE_utf8, isPSXSPC_uni,
and is_PSXSPC_utf8 macros in handy.h, so that no function call need be
done to handle above Latin1 input.  These macros are quite small, and
unlikely to grow over time, as Unicode has mostly finished adding white
space equivalents to the Standard.  The functions that implement these
in utf8.c are also changed to use the macros instead of generating a
swash.  This should speed things up slightly, with less memory used over
time as the swash fills.

11 years agoregexec.c: Use SPACE macros instead of swash
Karl Williamson [Mon, 19 Nov 2012 21:24:29 +0000 (14:24 -0700)]
regexec.c: Use SPACE macros instead of swash

This will avoid loading a swash when an above Latin1 code point is
tested to see if it matches \s.  The SPACE macro is quite small, and
unlikely to grow over time, as Unicode has mostly finished adding white
space equivalents to the Standard.

The CCC_TRY_U macro in regexec.c could not be used for this, and I just
expanded out what it would generate, modified to use the macro instead
of a swash.

11 years agoRefactor is_XDIGIT_uni(), is_XDIGIT_utf8() and macros
Karl Williamson [Mon, 19 Nov 2012 20:55:13 +0000 (13:55 -0700)]
Refactor is_XDIGIT_uni(), is_XDIGIT_utf8() and macros

This adds macros to regen/regcharclass.pl that are usable as part of the
is_XDIGIT_foo() macros in handy.h, so that no function call need be done
to handle above Latin1 input.  These macros are quite small, and
unlikely to grow over time.  The functions that implement these in
utf8.c are also changed to use the macros instead of generating a swash.
This should speed things up slightly, with less memory used over time as
the swash fills.

11 years agoRefactor is_BLANK_uni() and is_BLANK_utf8() macros
Karl Williamson [Mon, 19 Nov 2012 20:36:56 +0000 (13:36 -0700)]
Refactor is_BLANK_uni() and is_BLANK_utf8() macros

This adds macros to regen/regcharclass.pl that are usable as part of the
is_BLANK_foo() macros in handy.h, so that no function call need be done
to handle above Latin1 input.  These macros are quite small, and
unlikely to grow over time, as Unicode has mostly finished adding white
space equivalents to the Standard.  The functions that implement these
in utf8.c are also changed to use the macros instead of generating a
swash.  This should speed things up slightly, with less memory used over
time as the swash fills.

11 years agohandy.h: Add isVERTWS_uni(), isVERTWS_utf8()
Karl Williamson [Mon, 19 Nov 2012 20:14:24 +0000 (13:14 -0700)]
handy.h: Add isVERTWS_uni(), isVERTWS_utf8()

These two macros match the same things as \v does in patterns.  I'm
leaving them undocumented for now.

11 years agoRefactor is_CNTRL_utf8(), is_utf8_cntrl()
Karl Williamson [Mon, 19 Nov 2012 20:00:47 +0000 (13:00 -0700)]
Refactor is_CNTRL_utf8(), is_utf8_cntrl()

All controls will always be in the Latin1 range by Unicode's stability
policy.  This means that we don't have to call is_utf8_cntrl() when the
input to the is_CNTRL_utf8() macro is above Latin1; we can just fail.
And that means that Perl_is_utf8_cntrl() can just use the macro.

11 years agohandy.h: Refactor macros to avoid aTHX_ problems
Karl Williamson [Mon, 19 Nov 2012 19:08:26 +0000 (12:08 -0700)]
handy.h: Refactor macros to avoid aTHX_ problems

This refactors these macros so that other macros automatically add aTHX_
if necessary.

11 years agoembed.fnc: Make a function global
Karl Williamson [Mon, 19 Nov 2012 18:05:43 +0000 (11:05 -0700)]
embed.fnc: Make a function global

This function is supposed to only be called internally, but it is called
by a macro that has global scope, so it also has to be global.

11 years agoregexec.c: Add PERL_UNIUSED_VAR()
Karl Williamson [Mon, 19 Nov 2012 17:59:38 +0000 (10:59 -0700)]
regexec.c: Add PERL_UNIUSED_VAR()

This is an attempt to silence warnings on some compilers.

11 years agoXS-APItest/t/handy.t: Refactor
Karl Williamson [Mon, 19 Nov 2012 16:58:12 +0000 (09:58 -0700)]
XS-APItest/t/handy.t: Refactor

This takes advantage of the Unicode::UCD::prop_invlist() function,
introduced in 5.16, to replace the hard-coded tables of Unicode values
previously used  (and also relying on recent fixes to an undocumented
function from that module ).  It als changes to give better messages if
the evals fail.  Using prop_invlist() allows us to easily extend to all
tests testing of some non-Latin1 code points.

11 years agoUnicode::UCD.pm: Fix bugs in undocumented binary search function
Karl Williamson [Mon, 19 Nov 2012 17:06:41 +0000 (10:06 -0700)]
Unicode::UCD.pm: Fix bugs in undocumented binary search function

This function is undocumented mostly because I was afraid it would be
buggy, as many such implementations are.  See:
http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html
(I recommend reading that link; it is instructive, entertaining, and
humbling.)

And it turns out I was right that I was wrong (in my original code).  A
test was inexplicably reversed, and another missing.

11 years agoregen/regcharclass.pl: Add 'cp_high' macro type
Karl Williamson [Sat, 17 Nov 2012 03:13:33 +0000 (20:13 -0700)]
regen/regcharclass.pl: Add 'cp_high' macro type

This generates a macro whose code point parameter must be above Latin1.
It will be used in future commits to avoid redundant checks

11 years agoregcomp.c: Revise comment
Karl Williamson [Tue, 30 Oct 2012 03:31:17 +0000 (21:31 -0600)]
regcomp.c: Revise comment

11 years agoregexes: Add \v to table of latin1 char classes
Karl Williamson [Thu, 16 Aug 2012 03:45:05 +0000 (21:45 -0600)]
regexes: Add \v to table of latin1 char classes

This will be used in future commits to allow \v and \V to be treated
consistently with other character classes.  (Doing the same for \h isn't
necessary, as it matches identically to [:blank:] in the entire Unicode
range.)

11 years agoregcomp.h: Make some #defines sequential
Karl Williamson [Thu, 16 Aug 2012 03:32:30 +0000 (21:32 -0600)]
regcomp.h: Make some #defines sequential

ANYOF_MAX is used as the upper boundary in loops.  If we keep it larger
than necessary, the loop does extraneous iterations.

The #defines that come after ANYOF_MAX are moved down to start with it.
This is useful in a later commit that will create an entry in
l1_char_class_tab.h for vertical white space determination.

11 years agoregcomp.sym: Change regkind for NPOSIX regnodes
Karl Williamson [Sun, 12 Aug 2012 17:50:54 +0000 (11:50 -0600)]
regcomp.sym: Change regkind for NPOSIX regnodes

It turns out that it is more convenient for the complement of a node to
have a regkind that is also the complement of a node.  This creates
slight inconveniences that are included in this patch, but will help
further patches.

11 years agoregcomp: Change name of #define to better reflect its purpose
Karl Williamson [Thu, 16 Aug 2012 02:49:59 +0000 (20:49 -0600)]
regcomp: Change name of #define to better reflect its purpose

ANYOF_MAX is used for two different purposes; this separates them and
creates a separate #define for one of them.

11 years agoregcomp.c: Revise debugging function
Karl Williamson [Wed, 25 Jul 2012 02:28:48 +0000 (20:28 -0600)]
regcomp.c: Revise debugging function

I use this function for debugging, but it is normally commented out.
This commit adds an entry to embed.fnc for it that can quickly be
uncommented, and makes some revisions to the function itself.

11 years agohandy.h: white-space, comments only
Karl Williamson [Sat, 21 Jul 2012 19:15:01 +0000 (13:15 -0600)]
handy.h: white-space, comments only

11 years agohandy.h: Mark more clearly things for internal-only use
Karl Williamson [Sat, 21 Jul 2012 19:07:49 +0000 (13:07 -0600)]
handy.h: Mark more clearly things for internal-only use

This changes the names of some macros to begin with an underscore, and
changes comments to more clearly indicate things which aren't to be used
outside the Perl core.

11 years agohandy.h: Use class numbers instead of macros in macro generation
Karl Williamson [Sat, 21 Jul 2012 17:45:18 +0000 (11:45 -0600)]
handy.h: Use class numbers instead of macros in macro generation

This refactors the macro builder macros to accept a class number instead
of a macro name.  This is easier to understand than having to use
CAT2(), and it allows for a potential future commit to use these at
run-time, given a class number.

11 years agohandy.h: Convert 3 macros to standard form
Karl Williamson [Sat, 21 Jul 2012 14:50:29 +0000 (08:50 -0600)]
handy.h: Convert 3 macros to standard form

These three outliers don't have to be.  They can use the same
constructed form as the others surrounding them.  One requires a
temporary #define which will be removed in a future commit

11 years agohandy.h: Define some macros for consistency
Karl Williamson [Fri, 20 Jul 2012 18:57:27 +0000 (12:57 -0600)]
handy.h: Define some macros for consistency

isWORDCHAR_uni() and isWORDCHAR_utf8() are defined for consistency with
the other isWORDCHAR...() macros

The isALNUM_foo() versions are retained for backwards compatibility

11 years agoutf8.c: Request function to be inline
Karl Williamson [Fri, 7 Sep 2012 17:20:49 +0000 (11:20 -0600)]
utf8.c: Request function to be inline

This could remove a layer of function call overhead for this small
function, (if the compiler doesn't already choose to inline it).

11 years agoutf8.c: White-space, comments only
Karl Williamson [Fri, 7 Sep 2012 17:16:40 +0000 (11:16 -0600)]
utf8.c: White-space, comments only

11 years agoutf8.c: Fix potential bug
Karl Williamson [Fri, 7 Sep 2012 16:54:44 +0000 (10:54 -0600)]
utf8.c: Fix potential bug

Commit 87367d5f9dc9bbf7db1a6cf87820cea76571bf1a changed
core_invlist_init() to return not the swash, but the swash's inversion
list if small enough, allowing a faster binary search than a slower hash
look-up on small lists.  Calls to two functions that access swashes were
changed to make this transparent.  However, there are two more such
functions which were overlooked, and need to be upgraded to provide such
transparency, should they ever be called on swashes that have been
converted.  This commit fixes one of them, but leaves the other, with a
comment, as it's much harder to do, and will not ever likely be
called on such a swash (it is for internal core use only).

11 years agoembed.fnc: Restrict access to non-public functions
Karl Williamson [Fri, 16 Nov 2012 21:52:45 +0000 (14:52 -0700)]
embed.fnc: Restrict access to non-public functions

These two functions added earlier in 5.17 are not meant to be public.
This moves them so they are defined only for certain core files, and
marks them as experimental should they show up in any documentation.

11 years agoperldelta: mention OP_PADRANGE
David Mitchell [Mon, 19 Nov 2012 17:23:19 +0000 (17:23 +0000)]
perldelta: mention OP_PADRANGE

11 years agoRemove the EPOC port.
Nicholas Clark [Sat, 17 Nov 2012 14:09:45 +0000 (15:09 +0100)]
Remove the EPOC port.

EPOC was a family of operating systems developed by Psion for mobile
devices. It was the predecessor of Symbian.

The port was last updated in April 2002.

11 years agoUpdate CGI to CPAN version 3.63
Chris 'BinGOs' Williams [Mon, 19 Nov 2012 11:10:21 +0000 (11:10 +0000)]
Update CGI to CPAN version 3.63

  [DELTA]

  Version 3.63 Nov 12, 2012

    [SECURITY]
    - CR escaping for Set-Cookie and P3P headers was improved. There was potential
      for newline injection in these headers.
      (Thanks to anazawa, https://github.com/markstos/CGI.pm/pull/23)

11 years agoUpdate Unicode-Collate to CPAN version 0.93
Chris 'BinGOs' Williams [Mon, 19 Nov 2012 11:07:57 +0000 (11:07 +0000)]
Update Unicode-Collate to CPAN version 0.93

  [DELTA]

  0.93  Sun Nov 18 18:13:42 2012
    - DUCET is updated (for Unicode 6.2.0) as Collate/allkeys.txt.
    ! Please notice that allkeys.txt will be overwritten if you have had
      other allkeys.txt already.
    - The default UCA_Version is 26.
    - Locale/*.pl (except fr.pl) and CJK/Korean.pm are updated.
    - modified tests: loc_es.t, loc_estr.t, version.t in t.

11 years agoFix test-skipping logic for File::Glob under no-taint-perl
Steffen Mueller [Mon, 19 Nov 2012 06:48:03 +0000 (07:48 +0100)]
Fix test-skipping logic for File::Glob under no-taint-perl

11 years agoCPAN for EU::ParseXS is now at 3.18
Steffen Mueller [Mon, 19 Nov 2012 06:39:23 +0000 (07:39 +0100)]
CPAN for EU::ParseXS is now at 3.18

11 years agoComplete ExtUtils::ParseXS/EU::Typemaps version bump
Steffen Mueller [Mon, 19 Nov 2012 06:33:29 +0000 (07:33 +0100)]
Complete ExtUtils::ParseXS/EU::Typemaps version bump

This moves to 3.18 across the entire distribution for a new CPAN release
and completes the changelog.

11 years agorefactor pp_padsv
Daniel Dragan [Sun, 18 Nov 2012 23:37:18 +0000 (18:37 -0500)]
refactor pp_padsv

This commit rearranges the autos in a way to minimize the number of vars
saved across calls. By calculating TARG after EXTEND, TARG does not need
to be saved across a conditional stack grow call. In order to not read
the pad slot and PL_curpad twice (once for TARG, once for save_clearsv),
a * to the pad slot is saved in a volatile. var padentry is calced after
the EXTEND call, but before save_clearsv, and is not saved across
save_clearsv. TARG's scope was not extended to the vifify_ref call, since

1. SP (TOPs assignment) will be referenced anyway after vivify_ref and
this can not be removed.
2. All of pp_padsv has only 3 non-vol inter func vars, my_perl, SP and op.

Adding TARG to remain live past any call (save_clearsv) would add a 4th
non-vol var to this opcode and increase the total stack frame size by
1 pointer, either to save a non-vol reg, or to put TARG directly on the
stack (platform dependent).

The SPAGAIN and RETURN combo was strange, since we fetch global SP, and
then write it right back. But in the old code, the RETURN, if the if branch
is not taken would be required for the XPUSHs. SAVECLEARSV macro included
addr of op, would wouldn't work here, so the func was called directly.
Originally I kept the SAVECLEARSV, but the asm of Visual C showed
recalcing of the pad slot in SAVECLEARSV even though no calls are made in
my revision between EXTEND and SAVECLEARSV, so I forced the compiler to
cache the pad slot. By removing a 2nd PL_curpad dereference, in theory
the CPU can toss a chunk of the pad array from CPU cache away sooner.
TOPs does not inc/dec local SP, so a PUTBACK is not required after
vivify_ref. Brief comments added to explain the unusual code on first
glance. PL_op was cached to remove a couple "*(my_perl+4)"s that were
PL_op being reread after the 2 calls. PL_op caching was the last change I
did. Without PL_op caching, pp_padsv has max 2 cross func saved autos but
was 0x77 long. With PL_op caching, pp_padsv now has 3 saved autos, but is
only 0x72 since some "*(my_perl+4)"s were removed. Since Linux/Win32 32 bit
x86 has only 3 (without ebp) or 4 (with ebp) non-vol regs, this func post
PL_op caching still uses no C stack vars (but nonvol regs are saved and
restored of course). This patch is similar in concept to commit fdf4ddd .

The machine size of pp_padsv dropped from 0x85 to 0x72 for me after this
commit.

11 years agoreduce scope of a var in save_clearsv
Daniel Dragan [Mon, 19 Nov 2012 02:16:39 +0000 (21:16 -0500)]
reduce scope of a var in save_clearsv

svp is a pointer to a pad array slice. It is derefed to set a sv flag.
It's optimized scope previous extended past the savestack_grow call. By
moving the flag setting before any calls in save_clearsv, svp does not have
to be carried across any calls. On some platforms there will be a benefit
(args transfered in vol regs for example, AMD64 Win64), on others none
since it will be reread from the stack after any child call anyway. I
assume the SvPADSTALE_off flag will have no effect on the panic croak.
After this commit, the only auto var carried through a call is
offset_shifted (and unavoidably my_perl).

I saw a drop in the size of save_clearsv from 0x5A to 0x58. The saving
and use of 1 nonvol reg on x86 32 bit VC 2003 was reduced, total stack
frame reduced by 1 pointer, since VC 2003 read svp off the stack only
once at the start of save_clearsv and kept it in a nonvol reg for the rest
of this func's body.

11 years agoperlhack: Note why some t/op tests avoid test.pl
Father Chrysostomos [Mon, 19 Nov 2012 02:52:53 +0000 (18:52 -0800)]
perlhack: Note why some t/op tests avoid test.pl

11 years agoStop \P{Assigned} from leaking
Father Chrysostomos [Mon, 19 Nov 2012 02:36:12 +0000 (18:36 -0800)]
Stop \P{Assigned} from leaking

I suspect this leak also applies to any large character classes.

An HV created with newHV has a reference count of 1, so doing
newRV_inc on it will cause a leak.

11 years agoutf8.c: Fix a minor refcounting bug caused by 02c8547
Father Chrysostomos [Mon, 19 Nov 2012 02:44:16 +0000 (18:44 -0800)]
utf8.c: Fix a minor refcounting bug caused by 02c8547

Under some circumstances it could cause a hash to point to a freed
element.  But the hash itself was leaking, so it caused on problems,
as no attempt to free its element again was made.

The next commit will stop the hash from leaking.

11 years agoRequest that regcomp.c:S_regpposixcc be inlined
Father Chrysostomos [Mon, 19 Nov 2012 01:45:09 +0000 (17:45 -0800)]
Request that regcomp.c:S_regpposixcc be inlined

It is only called from one spot.

11 years agoStop /[.zog.]/ and /[[.zog.]]/ from leaking
Father Chrysostomos [Mon, 19 Nov 2012 01:44:20 +0000 (17:44 -0800)]
Stop /[.zog.]/ and /[[.zog.]]/ from leaking

Before croaking, we need to free any SVs we might have allocated tem-
porarily.  Also, Simple_vFAIL does not free the regular expression.
For that we need vFAIL.

11 years agogv.t: Suppress warning
Father Chrysostomos [Mon, 19 Nov 2012 01:29:33 +0000 (17:29 -0800)]
gv.t: Suppress warning

11 years agoInline regcomp.c:S_checkposixcc into its only caller
Father Chrysostomos [Mon, 19 Nov 2012 00:11:20 +0000 (16:11 -0800)]
Inline regcomp.c:S_checkposixcc into its only caller

In the next commit, it will need to access other variables around its
call site.

11 years agofix -DPERL_GLOBAL_STRUCT builds broken with the hash merge
Tony Cook [Sun, 18 Nov 2012 23:41:32 +0000 (10:41 +1100)]
fix -DPERL_GLOBAL_STRUCT builds broken with the hash merge

note: this failed to build in smoke-me eg.
http://perl.develop-help.com/raw/?id=131750

11 years agoperldelta: hash function still needs mention
Father Chrysostomos [Sun, 18 Nov 2012 22:11:07 +0000 (14:11 -0800)]
perldelta: hash function still needs mention

11 years agogv.t: More *foo{NAME,PACKAGE} tests
Father Chrysostomos [Sun, 18 Nov 2012 22:09:21 +0000 (14:09 -0800)]
gv.t: More *foo{NAME,PACKAGE} tests

11 years agoStop $unicode =~ /[[:posix:]]/ from leaking
Father Chrysostomos [Sun, 18 Nov 2012 21:29:56 +0000 (13:29 -0800)]
Stop $unicode =~ /[[:posix:]]/ from leaking

If we have just created an SV, it has a reference count of 1, so using
newRV_inc on it will create a leak.  So we need to use newRV_noinc and
do SvREFCNT_inc in those cases where the SV is not new.

This has leaked since v5.17.3-117-g87367d5.

11 years agoStop prototype("CORE::...") errors from leaking
Father Chrysostomos [Sun, 18 Nov 2012 06:56:07 +0000 (22:56 -0800)]
Stop prototype("CORE::...") errors from leaking

They have leakd since v5.17.0-54-g1b08e05.

11 years agoStop local $_[0] from leaking
Father Chrysostomos [Sun, 18 Nov 2012 06:49:57 +0000 (22:49 -0800)]
Stop local $_[0] from leaking

local $_[0] puts the current $_[0] on to the savestack and gives the
array a brand new SV.  If the array is not marked REAL, it holds no
reference counts on its elements.  @_ is surreal by default.

The localisation code was making @_ hold a reference count on its new
element.  The restore code was assuming it had a reference count, so
everything worked out if $_[0] was not modified after localisation.

But if the array is surreal, then modifications to it will assume that
it does *not* hold a reference count on $_[0].  So doing shift, or
@_=undef would cause the new element to leak.

Also, taking a reference to the array (\@_) will trigger, making
the reference count of all elements increeas, likwies leaking the
new element.

Since there is only one REAL flag, which indicates that all elements
of the array are reference-counted, we cannot have some elements ref-
erence-counted and some not (which local $_[0] does), and have every-
thing behave correctly.

So the only solution is to reify arrays before localising
their elements.

11 years agoMore perlδ stuff
Father Chrysostomos [Sun, 18 Nov 2012 02:37:32 +0000 (18:37 -0800)]
More perlδ stuff

11 years agoMake *_{ARRAY} reify
Father Chrysostomos [Sun, 18 Nov 2012 01:32:20 +0000 (17:32 -0800)]
Make *_{ARRAY} reify

Otherwise *_{ARRAY} returned from a sub will be kenotic, in the lit-
eral sense.  (If you don’t understand that, just look at the test.)

11 years agoDocument and test *glob{NAME} and *glob{PACKAGE}
Father Chrysostomos [Sun, 18 Nov 2012 01:22:01 +0000 (17:22 -0800)]
Document and test *glob{NAME} and *glob{PACKAGE}

These have been supported since *foo{THING} was added in perl 5.005.
If only I had known about these sooner....  I could have been writing
*$AUTOLOAD{NAME} all this time!

11 years agoAll tests should have descriptions.
James E Keenan [Mon, 22 Oct 2012 01:49:03 +0000 (21:49 -0400)]
All tests should have descriptions.

11 years agoIncrease $XS::APItest::VERSION to 0.45
Father Chrysostomos [Sat, 17 Nov 2012 20:44:31 +0000 (12:44 -0800)]
Increase $XS::APItest::VERSION to 0.45

11 years agorefactor pp_rand
Daniel Dragan [Sat, 17 Nov 2012 07:20:50 +0000 (02:20 -0500)]
refactor pp_rand

Reduce liveness of various variables. srand relies on nothing but a THX
so do that first and don't calculate a local SP yet. Put the EXTEND near SP
calculation. This might refresh SP. MAXARG access PL_op. The POPs balances
the stack. var sv is kept in a volatile, it is out of scope after the SvNV.
Through the SvNV, only 2 autos/regs are carried my_perl and SP.
dTARGET again uses PL_op but it and PUSHs and PUTBACK make no calls. SP is
out of scope after the PUTBACK. In macro Drand01 is the next call. XPUSHn
uses SvSETMAGIC. This is replaced with sv_setnv_mg since rand is not hot.
Now TARG is out of scope. Only my_perl remains in scope. NORMAL uses
PL_op for the 3rd and final time. All x86 32bit C stack usage was for
saving nonvol regs and 2 auto NVs (asm limitations prevent from keeping
it in a normal reg I guess)(VC2003). Caching PL_op->op_next at dTARGET to
avoid a 3rd PL_op dereference was tried with

SV * targ; (op_next = NORMAL), (GETTARGET), (PUSHs(TARG)), (PUTBACK);

to allow reordering, but it generated a stack auto on Visual C even
though 1 non vol reg (edi) was available. Another untried idea would be to
declare a OP * and set it to PL_op, then do the op_next and op_targ derefs,
but with the above mess, PL_op was derefed once by compiler optimization
but still the stack var was used. Also maintainability contributed to
scrapping  the idea. The 1.0 assigns are reordered by comp in a way
that all of them happen after the SvNV but before the next call, which
is rand(), so they are fine order of execution wise. The comment about
SP or TARG means either dTARGET is done before the SvNV and SP is out of
scope before SvNV but SV * targ has to be saved across the SvNV, or SP is
saved across the SvNV. A choice was made save SP since the C code would
be more complicated, probably with gotos and initialing sv to NULL if
dTARGET/PUTBACK had to happen after conditional MAXARG/TOPs
unconditionally, but SvNV is conditonally called. The improvements in
this commit are not specific to x86-32 but all platforms and cpus.

The function dropped from 0xFF to 0xEB for me.

11 years ago[perl #115756] Fix XS::APItest::SvIsCOW
Father Chrysostomos [Sat, 17 Nov 2012 19:01:42 +0000 (11:01 -0800)]
[perl #115756] Fix XS::APItest::SvIsCOW

SvIsCOW returns a flag which will turn into 0 if truncated to 8 bits.

11 years ago8c34e50dc slowed down detruction with no DESTROY
Father Chrysostomos [Sat, 17 Nov 2012 18:49:11 +0000 (10:49 -0800)]
8c34e50dc slowed down detruction with no DESTROY

I changed it to cache the DESTROY method in SvSTASH(stash), instead
of amagic tables, for the sake of speed.  But I made no distinction
between ‘no cache’ and ‘no DESTROY method’.  So classes with no
DESTROY method became as slow as perl 5.6.

To solve that, I’m using an adjusted pointer (following the example
of warnings.h) to mean ‘intentionally blank’.

I also fixed two instances of the DESTROY cache not being updated,
introduced by that commit.

11 years agoHash Function Change - Murmur hash and true per process hash seed
Yves Orton [Sat, 17 Nov 2012 13:12:04 +0000 (14:12 +0100)]
Hash Function Change - Murmur hash and true per process hash seed

This patch does the following:

*) Introduces multiple new hash functions to choose from at build
time. This includes Murmur-32, SDBM, DJB2, SipHash, SuperFast, and
One-at-a-time. Currently this is handled by muning hv.h. Configure
support hopefully to follow.

*) Changes the default hash to Murmur hash which is faster than the
old default One-at-a-time.

*) Rips out the old HvREHASH mechanism and replaces it with a
per-process random hash seed.

*) Changes the old PL_hash_seed from an interpreter value to a
global variable. This means it does not have to be copied during
interpreter setup or cloning.

*) Changes the format of the PERL_HASH_SEED variable to a hex
string so that hash seeds longer than fit in an integer are possible.

*) Changes the return of Hash::Util::hash_seed() from a number to a
string. This is to accomodate hash functions which have more bits than
can be fit in an integer.

*) Adds new functions to Hash::Util to improve introspection of hashes

  -) hash_value() - returns an integer hash value for a given string.
  -) bucket_info() - returns basic hash bucket utilization info
  -) bucket_stats() - returns more hash bucket utilization info
  -) bucket_array() - which keys are in which buckets in a hash

More details on the new hash functions can be found below:

    Murmur Hash: (v3) from google, see
        http://code.google.com/p/smhasher/wiki/MurmurHash3

    Superfast Hash: From Paul Hsieh.
        http://www.azillionmonkeys.com/qed/hash.html

    DJB2: a hash function from Daniel Bernstein
        http://www.cse.yorku.ca/~oz/hash.html

    SDBM: a hash function sdbm.
        http://www.cse.yorku.ca/~oz/hash.html

    SipHash: by Jean-Philippe Aumasson and Daniel J. Bernstein.
        https://www.131002.net/siphash/

They have all be converted into Perl's ugly macro format.
I have not done any rigorous testing to make sure this conversion
is correct. They seem to function as expected however.

All of them use the random hash seed.

You can force the use of a given function by defining one of

    PERL_HASH_FUNC_MURMUR
    PERL_HASH_FUNC_SUPERFAST
    PERL_HASH_FUNC_DJB2
    PERL_HASH_FUNC_SDBM
    PERL_HASH_FUNC_ONE_AT_A_TIME

Setting the environment variable PERL_HASH_SEED_DEBUG to 1 will make
perl output the current seed (changed to hex) and the hash function
it has been built with.

Setting the environment variable PERL_HASH_SEED to a hex value will
cause that value to be used at the seed. Any missing bits of the seed
will be set to 0. The bits are filled in from left to right, not
the traditional right to left so setting it to FE results in a seed
value of "FE000000" not "000000FE".

Note that we do the hash seed initialization in perl_construct().
Doing it via perl_alloc() (via init_tls) causes problems under
threaded builds as the buffers used for reentrant srand48 functions
are not allocated. See also the p5p mail "Hash improvements blocker:
portable random code that doesnt depend on a functional interpreter",
Message-ID:
<CANgJU+X+wNayjsNOpKRqYHnEy_+B9UH_2irRA5O3ZmcYGAAZFQ@mail.gmail.com>

11 years agoleakfinder: More exceptions
Father Chrysostomos [Sat, 17 Nov 2012 18:13:10 +0000 (10:13 -0800)]
leakfinder: More exceptions

11 years agoperlδ
Father Chrysostomos [Sat, 17 Nov 2012 18:09:16 +0000 (10:09 -0800)]
perlδ

11 years ago[perl #114864] Don’t use amt for DESTROY
Father Chrysostomos [Fri, 16 Nov 2012 18:00:50 +0000 (10:00 -0800)]
[perl #114864] Don’t use amt for DESTROY

DESTROY has been cached in overload tables since
perl-5.6.0-2080-g32251b2, making it 4 times faster than before (over-
load tables are faster than method lookup).

But it slows down symbol lookup on stashes with overload tables,
because overload tables use magic, and SvRMAGICAL results in calls to
mg_find on every hash lookup.

By reusing SvSTASH(stash) to cache the DESTROY method (if the stash
is unblessed, of course, as most stashes are), we can avoid making
all destroyable stashes magical and also speed up DESTROY lookup
slightly more.

The results:

• 10% increase in stash lookup speed after destructors.  That was just
  testing $Foo::{x}.  Other stash lookups will have other overheads
  that make the difference less impressive.

• 5% increase in DESTROY lookup speed.  I was using an empty DESTROY
  method to test this, so, again, real DESTROY methods will have more
  overhead and less speedup.

11 years agoPreserve case of command-line arguments on VMS.
Craig A. Berry [Sat, 17 Nov 2012 17:24:43 +0000 (11:24 -0600)]
Preserve case of command-line arguments on VMS.

OpenVMS releases of the last decade or so have had this capability
but it's still not the default.  But it's a reasonable default for
Perl, so enable it in our initialization code.

Unfortunately this feature does not work unless extended parse has
been enabled in the process before invoking Perl.  Enabling
extended parse in our initialization code doesn't do any good
because DCL has already parsed the arguments before we get there.

So we will be limited to documenting that things work better with
extended parse and that the test suite assumes it's enabled.

11 years agoadd .gdb_history to .gitignore
Yves Orton [Sat, 17 Nov 2012 13:10:59 +0000 (14:10 +0100)]
add .gdb_history to .gitignore

11 years agoAdd a utility macro for reading hex digits.
Yves Orton [Sat, 17 Nov 2012 13:04:38 +0000 (14:04 +0100)]
Add a utility macro for reading hex digits.

Karl checked and it seems it actually works on EBCDIC as well
as on ASCII.

11 years agomake regcharclass hash order determinisitic
Yves Orton [Sat, 17 Nov 2012 13:02:18 +0000 (14:02 +0100)]
make regcharclass hash order determinisitic