In perl.git, the branch smoke-me/BeOS-is-late has been created <http://perl5.git.perl.org/perl.git/commitdiff/8c6c6997cf2a8cd5e947a61f94ca02dd8b963334?hp=0000000000000000000000000000000000000000>
at 8c6c6997cf2a8cd5e947a61f94ca02dd8b963334 (commit) - Log ----------------------------------------------------------------- commit 8c6c6997cf2a8cd5e947a61f94ca02dd8b963334 Author: Karl Williamson <pub...@khwilliamson.com> Date: Wed Nov 28 15:01:29 2012 -0700 mktables: Sort some outputs for repeatability The recent change to random hash ordering caused some of the files output by mktables to vary from run to run. Everything still worked. However, one of the ways I debug mktables is to make a change, and then compare the tables it generates with those from before the change. That tells me the precise effect of the change. That no longer works if the tables come out in random order from run to run. This patch just sorts certain things so that the tables are output in the same order each time. M lib/unicore/mktables commit 55cb5ee05bfa53af92bb56c9ce4ceb2037ace231 Author: Karl Williamson <pub...@khwilliamson.com> Date: Wed Nov 28 08:46:52 2012 -0700 embed.fnc, mathoms.c: Add comments M embed.fnc M mathoms.c commit 6b785ed7762408e359d2dd31a91df1216e750448 Author: Karl Williamson <pub...@khwilliamson.com> Date: Tue Nov 27 15:24:17 2012 -0700 perlapi: Don't mention internal function This function is undocumented, and is for internal core use only. Cause it to not be mentioned in perlapi M embed.fnc commit cd298ce42eb3c82a651608c3fbd658ec616b0297 Merge: 08bf00b f5a0fd1 Author: Father Chrysostomos <spr...@cpan.org> Date: Tue Nov 27 07:08:08 2012 -0800 [Merge] New COW mechanism This branch makes string copying faster by introducing a new copy-on- write mechanism. A reference count for the string buffer is now stored inside the string buffer itself. This can be disabled with -Accflags=-DPERL_NO_COW. It also disables the PL_sawampersand mechanism, as copy-on-write can now be used for the pre-match âcopyâ, resulting in no slow- down from using $& and f(r)iends. This can be reënabled with -Accflags=-DPERL_SAWAMPERSAND. commit f5a0fd1e07ceb4866d2eee4eb9283498cd3ef1be Author: Father Chrysostomos <spr...@cpan.org> Date: Mon Nov 26 22:23:53 2012 -0800 Donât share TARGs between recursive ops I had to change the definition of IS_PADCONST to account for the SVf_IsCOW flag. Previously, anything marked READONLY would be consid- ered a pad constant, to be shared by pads of different recursion lev- els. Some of those READONLY things were not actually read-only, as they were copy-on-write scalars, which are never read-only. So I changed the definition of IS_PADCONST in e3918bb703c to accept COWs as well as read-only scalars, since I was removing the READONLY flag from COWs. With the new copy-on-write scheme, it is easy for a TARG to turn into a COW. If that happens and then the same subroutine calls itself recursively for the first time after that, pad_push will see that this is a pad âconstantâ and allow the next recursion level to share it. If pp_concat calls itself recursively, the recursive call can modify the scalar the outer call is in the middle of using, causing the return value to be doubled up (âtmptmpâ) in the test case added here. Since pad constants are marked PADTMP (I would like to change that eventually), there is no way to distinguish them from TARGs when the are COWs, except for the fact that pad constants that are COWs are always shared hash keys (SvLEN==0). M op.h M t/op/concat2.t commit e1b145039d15f6202e21cd23abb95117153eb816 Author: Father Chrysostomos <spr...@cpan.org> Date: Mon Nov 26 09:40:34 2012 -0800 subst.t: Test something I nearly broke The saving and restoring of $@ when utf8 tables were looked up was causing pp_substâs string pointers to go stale. The existing mechanism of copying it temporarily to another scalar was already very fragile, and the new COW mechanism broke it (but I fixed it in the same commit that introduced the new COW mechanism). M t/re/subst.t commit d78f32f607952d58a998c5b7554572320dc57b2a Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Nov 25 14:50:48 2012 -0800 Update docs to concur with $`,$&,$' changes plus a couple of other pod tweaks. M pod/perlre.pod M pod/perlreref.pod M pod/perlretut.pod M pod/perlvar.pod commit 20961b6483f3653e3bf928a60cca828e2b13e098 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Nov 25 14:31:25 2012 -0800 Increase $English::VERSION to 1.06 M lib/English.pm commit 3b5bc0ddfbcdd17ef47d61fbce7a265b219a5889 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Nov 25 14:31:04 2012 -0800 English.pm: Update -no_match_vars docs M lib/English.pm commit 00f6437b30bbbd24904cbecfa1c00ab91f7315e5 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Nov 25 14:28:25 2012 -0800 Test perl #4289 This was fixed by the disabling of PL_sawampersand a few commits ago. The output used to be like this: $ perl -e '$_ = "abc"; /b/g; $_ = "hello"; print eval q|$&|, "\n"' e $ perl -e '$_ = "abc"; /b/g; $_ = "hello"; print eval q|$`|, "\n"' h $ perl -e '$_ = "abc"; /b/g; $_ = "hello"; print eval q|$'\''|, "\n"' l Now itâs like this: $ ./perl -e '$_ = "abc"; /b/g; $_ = "hello"; print eval q|$&|, "\n"' b $ ./perl -e '$_ = "abc"; /b/g; $_ = "hello"; print eval q|$`|, "\n"' a $ ./perl -e '$_ = "abc"; /b/g; $_ = "hello"; print eval q|$'\''|, "\n"' c M t/re/pat_rt_report.t commit aaee23ae9c2dfc4e671dcc6a11a59f9baf00f533 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Nov 25 14:04:05 2012 -0800 test_bootstrap.t: Skip PL_sawampersand tests unless PERL_SAWAMPERSAND is defined. M t/porting/test_bootstrap.t commit c9669de21442b78c25b8a9d8500a806a25fb9194 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Nov 25 13:58:40 2012 -0800 Fix up Peek.t to account for preceding commits M ext/Devel-Peek/t/Peek.t commit 5b50f57e3c9dd69e1372943621f74736a63b65e5 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Nov 25 13:52:27 2012 -0800 perl.h: Mention PERL_SAWAMPERSAND in perl -V output M perl.h commit 1a904fc88069e249a4bd0ef196a3f1a7f549e0fe Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Nov 25 12:57:04 2012 -0800 Disable PL_sawampersand PL_sawampersand actually causes bugs (e.g., perl #4289), because the behaviour changes. eval '$&' after a match will produce different results depending on whether $& was seen before the match. Using copy-on-write for the pre-match copy (preceding patches do that) alleviates the slowdown caused by mentioning $&. The copy doesnât happen unless the string is modified after the match. Itâs now a post- match copy. So we no longer need to do things differently depending on whether $& has been seen. PL_sawampersand is now #defined to be equal to what it would be if every program began with $',$&,$`. I left the PL_sawampersand code in place, in case this commit proves immature. Running Configure with -Accflags=PERL_SAWAMPERSAND will reënable the PL_sawampersand mechanism. M embedvar.h M gv.c M intrpvar.h M makedef.pl M perl.c M perl.h M regen/embed.pl M sv.c commit 07d01d6ec25527bf0236de2205ea412d40353058 Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Nov 21 12:45:33 2012 -0800 Enable PERL_NEW_COPY_ON_WRITE by default One can disable this with -Accflags=-DPERL_NO_COW. I am leaving this in for debugging purposes. If it causes no problems in 5.18, we might remove the defines and enable it unconditionally in 5.20, but then again we might not. M perl.h commit f7a8268cd8b5af71e2d24a595ca88e48464a3e94 Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Nov 4 00:07:31 2012 -0700 Allow COW with magical and blessed scalars (among others) Under PERL_NEW_COPY_ON_WRITE (and I suspect under PERL_OLD_COPY_ON_WRITE, too, but have not confirmed) it is harmless to do copy-on-write with a magical or blessed scalar. Also, under PERL_NEW_COPY_ON_WRITE, it is safe to do copy-on-write with scalars that have numbers in them as well as strings (though not under PERL_OLD_COPY_ON_WRITE). So redefine CAN_COW_MASK under PERL_NEW_COPY_ON_WRITE to be less restrictive. We still canât do it when the SvOOK hack is in place, and I donât feel comfortable doing it with regexps, even if it could be proven feasible (regexps are SVf_FAKE, so that covers them). Anything SvROK cannot be SvPOK, so obviously we canât COW with that, but I left SVf_ROK in for good measure. This change to CAN_COW_MASK affects whether non-cow scalars will be turned into cows in sv_setsv_flags. It is already possible for exist- ing cows to become magical, blessed or numeric elsewhere. Also, we donât need to check the flags on the lhs in sv_setsv_flags, except for SVf_BREAK. This is similar to ecd5fa70f3, but applies to another branch just below it. pp_subst needs a little bit of adjustment, as it is not expecting a vstring to turn into a cow. M pp_hot.c M sv.c M sv.h commit 9fd2152b911b1c311a72e55728050bfa2fc67ca6 Author: Father Chrysostomos <spr...@cpan.org> Date: Fri Oct 19 09:52:03 2012 -0700 Min string length for COW We have two separate length thresholds for when copy-on-write kicks in, one for when a buffer would have had to be (re)allocated (SV_COW_THRESHOLD) and another for when there is already a large enough buffer available (SV_COWBUF_THRESHOLD). Benchmarking against mktables and against Test.Simpleâs test suite (see JS::Test::Simple on CPAN) run with WWW::Scripter and JE shows that 0/1250 is the best combination, at least on 32-bit darwin. Apparently, copying into an existing buffer is much faster than the bookkeeping overhead of sv_force_normal_flags (which I see no way to speed up). I have defined these conditionally with #ifndef, so that platform-spe- cific hints can override them with values appropriate to the platform. Also, refactor things in sv_setsv_flags slightly to avoid using SvLEN and SvCUR repeatedly. M sv.c M sv.h commit db2c6cb33ec067c880a2cb3c4efdb33f7e3e3d0f Author: Father Chrysostomos <spr...@cpan.org> Date: Mon Oct 8 00:20:21 2012 -0700 New COW mechanism This was discussed in ticket #114820. This new copy-on-write mechanism stores a reference count for the PV inside the PV itself, at the very end. (I was using SvEND+1 at first, but parts of the regexp engine expect to be able to do SvCUR_set(sv,0), which causes the wrong byte of the string to be used as the reference count.) Only 256 SVs can share the same PV this way. Also, only strings with allocated space after the trailing null can be used for copy-on-write. Much of the code is shared with PERL_OLD_COPY_ON_WRITE. The restric- tion against doing copy-on-write with magical variables has hence been inherited, though it is not necessary. A future commit will take care of that. I had to modify _core_swash_init to handle $@ differently. The exist- ing mechanism of copying $@ to a new scalar and back again was very fragile. With copy-on-write, $@ =~ s/// can cause pp_substâs string pointers to become stale. So now we remove the scalar from *@ and allow the utf8-table-loading code to autovivify a new one. Then we restore the untouched $@ afterwards if all goes well. M dump.c M embed.fnc M embed.h M makedef.pl M perl.h M pp_ctl.c M pp_hot.c M proto.h M regcomp.c M regexec.c M regexp.h M sv.c M sv.h M utf8.c commit 08bf00be470db7b367e14733226d4fddc004c796 Author: Matthew Horsfall (alh) <wolfs...@gmail.com> Date: Sun Nov 25 11:13:05 2012 -0500 Fix comment referencing pp_iterinit (should be pp_enteriter) M op.c commit 9566f14a1e60201c203759da1798f55f226bac9e Author: Karl Williamson <pub...@khwilliamson.com> Date: Mon Nov 26 16:18:47 2012 -0700 regexec.c: White space only; no code changes M regexec.c commit 33f29a4cec504672835fd47a5b11657983d0209e Author: Karl Williamson <pub...@khwilliamson.com> Date: Mon Nov 26 16:06:53 2012 -0700 Remove 3 unused interpreter variables These variables have been unused in the Perl core since commit 4c88d5e0740d796bf5064336d280bba72897f385. The variables are undocumented. The only real use of any of these I found in CPAN is at https://metacpan.org/source/ABERGMAN/Devel-GC-Helper-0.25/Helper.xs#L1 The uses there appear to be in a list of known Perl variables. Since the module was published, more than a few new variables have been added, making this code obsolete anyway. M embedvar.h M intrpvar.h M perl.c M sv.c commit 06099f79acc9684bcbd2efbb1efe56ce80c65f08 Author: Craig A. Berry <craigbe...@mac.com> Date: Mon Nov 26 07:07:21 2012 -0600 Consider /... a directory component with EFS on VMS. For some reason the omnibus patch (360732b5267d5dfe) that brought Extended Filename Syntax support to the VMS port considered three dots part of the filename portion rather than part of the directory portion when converting a Unix-format path to VMS format. There's no reason this should be different with EFS, so make it the same as without EFS, which gets two TODO tests passing. M vms/ext/filespec.t M vms/vms.c commit 05a206c836e4d4e324996ada45136cc40a68126c Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Nov 25 17:13:21 2012 -0800 Add Bob Ernst to AUTHORS M AUTHORS commit 98c9650cd6a4e552074e5a73bc335c5d9f92ff52 Author: Father Chrysostomos <spr...@cpan.org> Date: Fri Oct 5 13:00:35 2012 -0700 Move a CAN_COW_MASK comment from sv.c to sv.h It got left behind in ed25273444 when the macro moved. M sv.c M sv.h commit 048a2f473ab9e1649559f56eff334b3c25289f57 Author: Father Chrysostomos <spr...@cpan.org> Date: Thu Oct 4 12:45:45 2012 -0700 Missing dependency in XS::APItestâs Makefile When core_or_not.inc is modified, core.c and notcore.c should be recompiled. M ext/XS-APItest/Makefile.PL commit 0f534aaf12174a6c02f455475bef3141f46c221b Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Nov 25 13:03:07 2012 -0800 Stop cv-to-glob assignment redef warnings from leaking We should not increment the reference count of the assignee until we are past the warnings. It should only happen when the reference- counted location is actually made to hold the assignee. At the same time, I changed it to use a more specific variant of SvREFCNT_inc, for speed. M sv.c M t/op/svleak.t commit e759bc314f0fb0eebf211ca20ce3b52cbce6bd71 Author: Bob Ernst <bober...@cpan.org> Date: Sun Nov 18 00:03:58 2012 +0000 Add descriptions to tests for exp.t M t/op/exp.t commit 66745c0bdc21eaccfcea80c9af21d23eadd859ab Author: Bob Ernst <bober...@cpan.org> Date: Sat Nov 17 22:14:53 2012 +0000 Add descriptions to tests for fh.t M t/op/fh.t commit af1b6079f4f58b6c4af6ba7874b8b96fa7dfd92d Author: Bob Ernst <bober...@cpan.org> Date: Sat Nov 17 21:18:20 2012 +0000 Added descriptions to tests in reverse.t M t/op/reverse.t commit 7231abfa401098a696dd1efea7bea4e81edbe44f Author: Bob Ernst <bober...@cpan.org> Date: Sat Nov 17 19:57:39 2012 +0000 Add descriptions to tests for int.t M t/op/int.t commit 2f54119d20adde7812afae1aa17e80481871bc2f Author: Chris 'BinGOs' Williams <ch...@bingosnet.co.uk> Date: Sun Nov 25 17:39:29 2012 +0000 Update Compress-Raw-Zlib to CPAN version 2.059 [DELTA] 2.059 24 November 2012 * Copy-on-write support [#81353] M Porting/Maintainers.pl M cpan/Compress-Raw-Zlib/Changes M cpan/Compress-Raw-Zlib/README M cpan/Compress-Raw-Zlib/Zlib.xs M cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm commit ae48cd005ca79179175ad324e832a74269fc746b Author: Chris 'BinGOs' Williams <ch...@bingosnet.co.uk> Date: Sun Nov 25 17:38:06 2012 +0000 Update Compress-Raw-Bzip2 to CPAN version 2.059 [DELTA] 2.059 24 November 2012 * Copy-on-write support [#81352] M Porting/Maintainers.pl M cpan/Compress-Raw-Bzip2/Bzip2.xs M cpan/Compress-Raw-Bzip2/Changes M cpan/Compress-Raw-Bzip2/README M cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm M cpan/Compress-Raw-Bzip2/t/000prereq.t commit ab2aaaf441daa1a553b795d595da60aa52091a3d Author: Chris 'BinGOs' Williams <ch...@bingosnet.co.uk> Date: Sun Nov 25 17:36:18 2012 +0000 Update Digest-SHA to CPAN version 5.74 [DELTA] 5.74 Sat Nov 24 03:10:18 MST 2012 - handle wide-string input by converting to bytes first -- viz. use SvPVbyte instead of SvPV in SHA.xs -- thanks to Eric Brine for summary and code M Porting/Maintainers.pl M cpan/Digest-SHA/Changes M cpan/Digest-SHA/README M cpan/Digest-SHA/SHA.xs M cpan/Digest-SHA/lib/Digest/SHA.pm M cpan/Digest-SHA/shasum M cpan/Digest-SHA/src/hmac.c M cpan/Digest-SHA/src/hmac.h M cpan/Digest-SHA/src/sha.c M cpan/Digest-SHA/src/sha.h commit b219737899b7744755182cf4dadebfabb21e24bc Author: Craig A. Berry <craigbe...@mac.com> Date: Sun Nov 25 10:03:25 2012 -0600 Bump Term::ReadLine version. M dist/Term-ReadLine/lib/Term/ReadLine.pm commit 9afdad132fb2f9cac46d8860924ad2b4384f4090 Author: Craig A. Berry <craigbe...@mac.com> Date: Sun Nov 25 09:09:59 2012 -0600 Add Sven Strickroth to AUTHORS. M AUTHORS commit c0788ef2f042eecbda736216fc6338474b161551 Author: Craig A. Berry <craigbe...@mac.com> Date: Sun Nov 25 08:54:32 2012 -0600 Rational findConsole dispatch for Term::ReadLine. Back in 5.002 or so, if we didn't find /dev/tty and weren't on Windows, the console was assumed to be sys$command, which only makes sense on VMS (possibly $^O didn't work yet on VMS?). Later accretions have assumed that the sys$command default meant something other than laziness and a second if block with various specific overrides was added, some of which set the console back to undef after its having been set to sys$command. That can all be avoided by simply checking we're on VMS before setting the console to sys$command and letting it default to STDIN for cases where we don't know of something else specific that it should be. M dist/Term-ReadLine/lib/Term/ReadLine.pm commit 0a616d17c63ccea3e07a9370becf1d236ce89558 Author: Sven Strickroth <sven.strickr...@tu-clausthal.de> Date: Sun Nov 25 08:44:02 2012 -0600 (msys) perl readline creates sys$command files w/o STDIN connected This fixes [perl #115900]. M dist/Term-ReadLine/lib/Term/ReadLine.pm commit 6c864ec2ac9f9d9be7636d00f6c73b0fe89025b8 Author: Karl Williamson <pub...@khwilliamson.com> Date: Sun Nov 25 07:58:21 2012 -0700 pp_hot.c: Comment typo, white-space only No code changes M pp_hot.c commit 5aaab254c02795622bdf42e348ad8473aa1fc643 Author: Karl Williamson <pub...@khwilliamson.com> Date: Sat Nov 24 21:06:36 2012 -0700 Remove "register" declarations This finishes the removal of register declarations started by eb578fdb5569b91c28466a4d1939e381ff6ceaf4. It neglected the ones in function parameter declarations, and didn't include things in dist, ext, and lib, which this does include M NetWare/nwhashcls.cpp M NetWare/sv_nw.c M av.c M dist/Cwd/Cwd.pm M dist/Cwd/Cwd.xs M dist/Data-Dumper/Dumper.pm M dist/Data-Dumper/Dumper.xs M doio.c M doop.c M dquote_static.c M ext/Devel-Peek/Peek.pm M ext/Devel-Peek/Peek.xs M ext/DynaLoader/DynaLoader_pm.PL M ext/DynaLoader/dl_aix.xs M ext/File-Glob/bsd_glob.c M ext/SDBM_File/sdbm/README M ext/SDBM_File/sdbm/dba.c M ext/SDBM_File/sdbm/dbd.c M ext/SDBM_File/sdbm/dbe.c M ext/SDBM_File/sdbm/dbu.c M ext/SDBM_File/sdbm/hash.c M ext/SDBM_File/sdbm/pair.c M ext/SDBM_File/sdbm/readme.ms M ext/SDBM_File/sdbm/sdbm.c M ext/SDBM_File/sdbm/util.c M ext/VMS-Stdio/Stdio.xs M ext/XS-APItest/APItest.pm M ext/XS-APItest/APItest.xs M ext/arybase/ptable.h M ext/mro/mro.pm M ext/mro/mro.xs M haiku/Haiku/Haiku.pm M haiku/Haiku/Haiku.xs M hv.c M hv.h M malloc.c M mathoms.c M op.c M os2/os2.c M pad.c M perl.c M perl.h M pod/perlcall.pod M pod/perlguts.pod M pod/perlinterp.pod M pp.h M pp_pack.c M pp_sort.c M regcomp.c M regexec.c M scope.c M sv.c M t/porting/known_pod_issues.dat M toke.c M utf8.c M util.c M vms/vmsish.h M x2p/a2py.c M x2p/hash.c M x2p/str.c M x2p/util.c M x2p/walk.c commit a8bd0d47f960000fee81e97d55dd5e8bac15e034 Author: Karl Williamson <pub...@khwilliamson.com> Date: Sat Nov 24 20:59:39 2012 -0700 perlhack: Add note to not use "register" declarations M pod/perlhack.pod commit de0df3c095e361fff88c58066233c2210f8a55b1 Author: Matthew Horsfall (alh) <wolfs...@gmail.com> Date: Sat Nov 24 13:05:49 2012 -0500 RT-23180 - If we skip matching in pp_match for any reason, pos() must still be updated. M MANIFEST M pp_hot.c A t/re/pos.t commit d5eaec228240ca8b0e978d5ff4742f6feadef98e Author: Craig A. Berry <craigbe...@mac.com> Date: Sat Nov 24 19:06:45 2012 -0600 Clarify reporting of .DIR extension on VMS. In readdir and start_glob, we were removing the .DIR extension from VMS directory names when reporting results in Unix format, but also when Extended Filename Syntax (EFS) was enabled. The former makes sense, but the latter (by itself) doesn't. M vms/vms.c commit 0753128385586b74fb493c6e49d37e471ee085fb Author: Craig A. Berry <craigbe...@mac.com> Date: Sat Nov 24 18:46:44 2012 -0600 Handle invalid directory spec with EFS in pathify_dirspec. When Extended Filename Syntax is enabled on VMS (which is not [yet] the default), we were allowing invalid directory specifications consisting of a .DIR extension but some version other than ;1 to be passed through. Now we flag that as an invalid directory just as we were doing without EFS. This gets a test passing in vms/ext/filespec.t that was failing under EFS. M vms/vms.c commit c6c09ee83a5807437228496363dc96efab78f90a Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Nov 24 15:55:04 2012 -0800 Increase $Module::CoreList::VERSION to 2.79 M dist/Module-CoreList/lib/Module/CoreList.pm commit 1549d03d8e1310b147b48bc8dbf1f788a451db15 Author: Alexandr Ciornii <alexcho...@gmail.com> Date: Sat Nov 24 20:24:26 2012 +0200 Errno was added in 5.5, not in 5.5.4 M dist/Module-CoreList/Changes M dist/Module-CoreList/lib/Module/CoreList.pm commit 7af276bcacd71d557a403b1d416e975ea139994c Author: Karl Williamson <pub...@khwilliamson.com> Date: Sat Nov 24 11:18:31 2012 -0700 Request is_utf8_char_slow() be inlined M embed.fnc M proto.h M utf8.c commit 457a9a829c2fcc56599d6950dcb6861c119bd191 Author: Karl Williamson <pub...@khwilliamson.com> Date: Sat Nov 24 11:14:28 2012 -0700 regen/embed.pl: flag 'i' didn't work with 'n' M regen/embed.pl commit 4886dc4f5813d46e391c2336d87c89a3f270b7f9 Author: Yves Orton <demer...@gmail.com> Date: Sat Nov 24 19:21:38 2012 +0100 Add "buzzhash16" - a random hash function This is just a toy. Probably not worth using in production. But interesting enough I thought I would include it. The idea is to use the hash seed as a table of random 16 bit integers whose values are what we hash depending on the character we read. It is pretty fast, I have no idea how secure it is. It will probably work really badly if the seed is crap. YMMV. M hv.h commit d0761305e645847e893799c475b2a24d15afbcd0 Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Nov 24 00:31:01 2012 -0800 Stop sub decl redef warnings from leaking CVs When newMYSUB and newATTRSUB are called, PL_compcv has an unclaimed reference count, so any code that croaks must decrement the reference count or make arrangements for such to happen. This commit applies only to redefinition warnings triggered by sub declarations, like âsub foo {}â and âmy sub foo {}â. M op.c M t/op/svleak.t commit 58d67a2773e32367cd7f045a3afaebf08da91194 Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Nov 24 00:24:25 2012 -0800 perldiag: Correct wording of âUsing just the first char...â M pod/perldiag.pod commit 687531b57f8d0312f4d2044c692a7c9514472f85 Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Nov 24 00:20:17 2012 -0800 perldiag: Add cat to âUsing just the first char...â M pod/perldiag.pod commit c732bbdcdefee234a43597f835893a13be397daf Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Nov 24 00:19:05 2012 -0800 Increase $feature::VERSION to 1.32 M lib/feature.pm M regen/feature.pl commit 64fbf0dd43246bda0d854a4cbf1884b785d4d890 Author: Father Chrysostomos <spr...@cpan.org> Date: Sat Nov 24 00:10:15 2012 -0800 Warn when declaring lexsubs, not when enabling them feature.pm has an ":all" tag. So if we warn when lexical subs are enabled, then âuse feature ":all"â will also warn. Thatâs unkind. Instead, warn when a lexical sub is declared via âmy/our/state sub...â. M lib/feature.pm M pod/perldiag.pod M regen/feature.pl M t/cmd/lexsub.t M t/lib/croak/toke M t/lib/warnings/op M t/lib/warnings/toke M t/porting/diag.t M toke.c commit 2b141370e47820eefd315393146f44b116c3b058 Author: Father Chrysostomos <spr...@cpan.org> Date: Fri Nov 23 23:47:05 2012 -0800 op.c: Factor common âexisting subâ logic into static routine newMYSUB and newATTRSUB are very similar but differ in small ways throughout. This particular block of code is close enough it can be moved into a separate static routine to avoid repetition. M op.c commit ee0832ceab256e5d1ed74d0767fa3bd420bc5bd6 Author: Father Chrysostomos <spr...@cpan.org> Date: Fri Nov 23 23:44:49 2012 -0800 Warn by default for constant my sub redefinition I apparently never had this working and never tested it either. I was checking whether the new sub was a constant, rather than the one it was clobbering. M op.c M t/lib/warnings/op commit 4ded55f35550b45910091ebeac7889f08d209fe4 Author: Father Chrysostomos <spr...@cpan.org> Date: Fri Nov 23 23:32:55 2012 -0800 Prevent double frees with lexical constants my sub foo() { 2 } This produces a double free, because SAVEPADSVANDMORTALIZE causes the reference count to go down on scope exit, and nothing was increment- ing it to compensate. M pp.c M t/cmd/lexsub.t commit 7e18702058e5564da44e84546c67056637b62d83 Author: Father Chrysostomos <spr...@cpan.org> Date: Fri Nov 23 20:40:39 2012 -0800 op.c:newATTRSUB: Change an if condition to an else In one spot we have if(blah blah balh) {...} followed by if (<exactly the opposite>). We can just change the second if to an else, since the condition is not going to change here. This brings newATTRSUB and newMYSUB slightly closer, allowing me to factor some of it out into a static routine in the next commit. M op.c commit 8daf8916b49984fc91791e8265cd7e1ca36b836c Author: Father Chrysostomos <spr...@cpan.org> Date: Fri Nov 23 20:32:49 2012 -0800 Stop ignored :lvalue warning from leaking CVs When newMYSUB and newATTRSUB are called, PL_compcv has an unclaimed reference count, so any code that croaks must decrement the reference count or make arrangements for such to happen. M op.c M t/op/svleak.t commit 8e3171984bd6a5f4edf04ec5b91032d053bdd8a5 Author: Yves Orton <demer...@gmail.com> Date: Sat Nov 24 11:16:48 2012 +0100 prevent memory exhaustion from hash attacks We do not want to resize the hash every time the bucket length is too long. Nor do we want to pay the price of checking how long the bucket length is when there is nothing we can do about it anyway. M hv.c commit 630b72b081fe290d04732279e069c327eea82b09 Author: Daniel Dragan <bul...@hotmail.com> Date: Fri Nov 23 16:15:04 2012 -0500 SvPVXtrue single eval->multiple eval Make SvTRUE and SvPVXtrue smaller and faster in machine code on non GCC compilers. This commit implements my posts here, http://www.nntp.perl.org/group/perl.perl5.porters/2012/11/msg195720.html and in my commit message in commit 4cc783efe0 . SvPVXtrue was added in commit 4bac9ae47b . No reason was given why SvPVXtrue is single eval, but its only use is in multi eval SvTRUE. A non GCC compiler will write to PL_Xpv and PL_Sv, and still keep the SV * and PV *s in a register for the next operations/instructions. The writes to PL_Xpv and PL_Sv are needless. The use of PL_Xpv and PL_Sv is self explanatory C lang wise. As said in the ML post, this commit causes overall code bloat because of incorrect uses of passing macro args that make calls (ERRSV for example) to SvTRUE. This will have to be fixed in the future. All of the pp opcode funcs decrease tiny bit in size after this commit. See the ML list post for details. M sv.h commit b899e89d91e81e631e553a5b805e8d068828dbf0 Author: Father Chrysostomos <spr...@cpan.org> Date: Fri Nov 23 17:54:09 2012 -0800 Stop toke.c:S_scan_const from leaking Fatal warnings and errors can cause the string buffer used when scanning a quote-like operator to leak. This commit fixes it by using the savestack. There are still a few leaks from that code path that are not fixed by this. M t/op/svleak.t M toke.c commit eed484f95050ad51c720521f68c6341a14bf5638 Author: Daniel Dragan <bul...@hotmail.com> Date: Thu Nov 22 23:37:29 2012 -0500 prevent multiple evaluations of ERRSV Remove a large amount of machine code (~4KB for me) from funcs that use ERRSV making Perl faster and smaller by preventing multiple evaluation. ERRSV is a macro that contains GvSVn which eventually conditionally calls Perl_gv_add_by_type. If a SvTRUE or any other multiple evaluation macro is used on ERRSV, the expansion will, in asm have dozens of calls to Perl_gv_add_by_type one for each test/deref of the SV in SvTRUE. A less severe problem exists when multiple funcs (sv_set*) in a row call, each with ERRSV as an arg. Its recalculated then, Perl_gv_add_by_type and all. I think ERRSV macro got the func call in commit f5fa9033b8, Perl RT #70862. Prior to that commit it would be pure derefs I think. Saving the SV* is still better than looking into interp->gv->gp to get the SV * after each func call. I received no responses to http://www.nntp.perl.org/group/perl.perl5.porters/2012/11/msg195724.html explaining when the SV is replaced in PL_errgv, so took a conservative view and assumed callbacks (with Perl stack/ENTER/LEAVE/eval_*/call_*) can change it. I also assume ERRSV will never return null, this allows a more efficiently version of SvTRUE to be used. In Perl_newATTRSUB_flags a wasteful copy to C stack operation with the string was removed, and a croak_notcontext to remove push instructions to the stack. I was not sure about the interaction between ERRSV and message sv, I didn't change it to a more efficient (instruction wise, speed, idk) format string combining of the not safe string and ERRSV in the croak call. If such an optimization is done, a compiler potentially will put the not safe string on the first, unconditionally, then check PL_in_eval, and then jump to the croak call site, or eval ERRSV, push the SV on the C stack then push the format string "%"SVf"%s". The C stack allocated const char array came from commit e1ec3a884f . In Perl_eval_pv, croak_on_error was checked first to not eval ERRSV unless necessery. I was not sure about the side effects of using a more efficient croak_sv instead of Perl_croak (null chars, utf8, etc) so I left a comment. nocontext used to save an push instruction on implicit sys perl. In S_doeval, don't open a new block to avoid large whitespace changes. The NULL assignment should optimize away unless accidental usage of errsv in the future happens through a code change. There might be a bug here from commit ecad31f018 since previous a char * was derefed to check for null char, but ERRSV will never be null, so "Unknown error\n" branch will never be taken. For pp_sys.c, in pp_die a new block was opened to not eval ERRSV if "well-formed exception supplied". The else if else if else blocks all used ERRSV, so a "SV * errsv = NULL;" and a eval in the conditional with comma op thing wouldn't work (maybe it would, see toke.c comments later in this message). pp_warn, I have no comments. In S_compile_runtime_code, a croak_sv question comes up same as in Perl_eval_pv. In S_new_constant, a eval in the conditional is done to avoid evaling ERRSV if PL_in_eval short circuits. Same thing in Perl_yyerror_pvn. Perl__core_swash_init I have no comments. In the future, a SvEMPTYSTRING macro should be considered (not fully thought out by me) to replace the SvTRUEs with something smaller and faster when dealing with ERRSV. _nomg is another thing to think about. In S_init_main_stash there is an opportunity to prevent an extra ERRSV between "sv_grow(ERRSV, 240);" and "CLEAR_ERRSV();" that was too complicated for me to optimize. before perl517.dll .text 0xc2f77 .rdata 0x212dc .data 0x3948 after perl517.dll .text 0xc20d7 .rdata 0x212dc .data 0x3948 Numbers are from VC 2003 x86 32 bit. M mg.c M op.c M perl.c M pp_ctl.c M pp_sys.c M regcomp.c M toke.c M utf8.c commit b99c9e9a2fb2fff6d70f66d59c376cf258e2c047 Author: Father Chrysostomos <spr...@cpan.org> Date: Thu Nov 22 19:18:57 2012 -0800 sv.c:S_curse: move assertions to make them useful I added these when debugging something, and decided to keep them, as they could be useful. So I committed them as 14eebc59. But now I realise that they are quite useless where they are, as a program will crash before the failed assertions are reached. M sv.c commit 4b748257c65d0cf78771db569a081f98eb77c7fa Author: Father Chrysostomos <spr...@cpan.org> Date: Thu Nov 22 14:53:47 2012 -0800 sv.c:S_curse: remove unnecessary null check If an SV has the OBJECT flag on but no STASH, it will cause crashes elsewhere. So there has to be a stash here. I only put the null check there in 8c34e50dc because I was copying what StashHANDLER used to do. 8c34e50dc removed the use of StashHANDLER (which calls gv_handler, which has a null check), replacing it with a different caching mechanism inlined into S_curse. M sv.c commit 38b1111c5f4e6340ce434a21336fe7350c148b03 Author: Father Chrysostomos <spr...@cpan.org> Date: Wed Nov 21 22:52:14 2012 -0800 svleak.t: To-do tests for fatal warnings and some syntax errs M t/op/svleak.t ----------------------------------------------------------------------- -- Perl5 Master Repository