Nicholas Clark [Sat, 3 Jan 2009 10:23:16 +0000 (10:23 +0000)]
Following change 34356, which decoupled get_isa_hash() from
S_mro_get_linear_isa_dfs(), we can move get_isa_hash() to any other source file.
Ben Morrow [Sat, 3 Jan 2009 08:23:32 +0000 (09:23 +0100)]
Fix a thinko in regression test for [perl #54956]
(follows to commit
8c8eee8276dbc780932b841fe5183943a7117a3d)
Paul Fenwick [Sat, 3 Jan 2009 01:17:32 +0000 (19:17 -0600)]
Subject: [PATCH] Update autodie to 1.998
From: Paul Fenwick <pjf@perltraining.com.au>
Date: Sat, 03 Jan 2009 11:32:59 +1100
Message-ID: <
495EB23B.6080504@perltraining.com.au>
Yuval Kogman [Fri, 15 Aug 2008 13:59:15 +0000 (16:59 +0300)]
a test for Paul Evan's qr leak
ian.goodacre@xtra.co.nz (via RT) [Fri, 2 Jan 2009 13:36:54 +0000 (14:36 +0100)]
[perl #61392] Method call documentation in perlobj.pod
Yuval Kogman [Sat, 28 Jun 2008 22:40:36 +0000 (01:40 +0300)]
More comprehensive smartmatch.t, supersedes smobj.t
Yuval Kogman [Sat, 28 Jun 2008 22:40:35 +0000 (01:40 +0300)]
add eval and error support to the t/op/smartmatch.t test
Yuval Kogman [Sat, 28 Jun 2008 22:40:34 +0000 (01:40 +0300)]
add undef tests to t/op/smartmatch.t
Paul Fenwick [Fri, 2 Jan 2009 11:26:29 +0000 (12:26 +0100)]
Minimal mention of overloading.pm in overload.pm
Vincent Pit [Fri, 2 Jan 2009 11:24:44 +0000 (12:24 +0100)]
In amagic_call(), offset should be strictly lesser than the SV len to be allowed to access the corresponding string buffer byte
Rafael Garcia-Suarez [Fri, 2 Jan 2009 11:08:13 +0000 (12:08 +0100)]
Merge branch 'failing-test-for-overloading-pragma' into blead
Rafael Garcia-Suarez [Fri, 2 Jan 2009 11:05:59 +0000 (12:05 +0100)]
Add a new test for overloading.pm
This one overloads "cos", which is currently at the end of the
overload table, so we properly test the bitstring stored in %^H
Vincent Pit [Fri, 2 Jan 2009 11:01:50 +0000 (12:01 +0100)]
Fix overload index mismatch in overloading logic.
In amagic_call(), the 'method' arg comes the overload enum in overload.h, but is expected to match the bit set from %overloading::numbers::names. It values wrongly start at 1, differing by 1 from the enum indexes. This didn't appear in the tests because 'method' was reduced modulo 7 instead of 8.
Rafael Garcia-Suarez [Fri, 2 Jan 2009 10:41:41 +0000 (11:41 +0100)]
Bump coopyright year in embed.pl and various files that were just touched
(and run "make regen")
Rafael Garcia-Suarez [Fri, 2 Jan 2009 10:40:48 +0000 (11:40 +0100)]
Factorize numeric constant for "overloading" lexical hint
karl williamson [Fri, 2 Jan 2009 10:22:02 +0000 (11:22 +0100)]
Faster sv_utf8_upgrade()
Consider what currently happens when the tokenizer is scanning a string.
It looks through it byte-by-byte until it finds a character that forces
it to decide to go to utf8. It then calls sv_utf8_upgrade() with the
portion of the string scanned so far.
sv_utf8_upgrade() starts over from the beginning, and scans the string
byte-by-byte until it finds a character that varies between non-utf8 and
utf8. It then calls bytes_to_utf8().
bytes_to_utf8() allocates a new string that can handle the worst case
expansion, 2n+1, of the entire string, and starts over from the
beginning, and scans the input string byte-by-byte copying and
converting each character to the output string as it goes.
It doesn't return the size of the new string, so sv_utf8_upgrade()
assumes it is only as big as what actually got converted, throwing away
knowledge of any spare.
It then returns to the tokenizer, which immediately does a grow to get
space for the unparsed input. This is likely to cause a new string to
be allocated and copied from the one we had just created, even if that
string in actuality had enough space in it.
Thus, the invariant head portion of the string is scanned 3 times, and
probably 2 strings will be allocated and copied.
My solution to cutting this down is to do several things.
First, I added an extra flag for sv_utf8_upgrade that says don't bother
to check if the string needs to be converted to utf8, just assume it
does. This eliminates one of the passes.
I also added a new parameter to sv_utf8_upgrade that says when you
return, I want this much unused space in the string. That eliminates
the extra grow.
This was all done by renaming the current work-horse function from
sv_utf8_upgrade_flags to be sv_utf8_upgrade_flags_grow() and making the
current function name be a macro which calls the revised one with a 0
grow parameter.
I also improved the internal efficiency of sv_utf8_upgrade so that when
it does scan the string, it doesn't call bytes_to_utf8, but does the
conversion itself, using a fast memory copy instead of the byte-oriented
one for the invariant header, and it uses that header to get a better
estimate of the needed size of the new string, and it doesn't throw away
the knowledge of the allocated size.
And, if it is clear without scanning the whole string that the
conversion will fit in the already allocated string, it just uses that
instead of allocating and copying a new one, using the algorithm I
copied from the tokenizer. (In this case it does have to finish
scanning the whole string to get the correct size.) The comments have
details.
It still is byte-oriented. Vectorization et. al. could yield
performance improvements. One idea for that is in the comments.
The patch also includes a new synonym I created which is a more accurate
name than NATIVE_TO_ASCII.
Rafael Garcia-Suarez [Fri, 2 Jan 2009 09:46:53 +0000 (10:46 +0100)]
Merge branch 'yuval/overloading' into blead
Rafael Garcia-Suarez [Fri, 2 Jan 2009 09:46:22 +0000 (10:46 +0100)]
Bump copyright year after previous change
Ben Morrow [Fri, 2 Jan 2009 09:41:52 +0000 (10:41 +0100)]
[perl #54956] crash on binary-or lvalue operation on qr//
This fixes the following problem:
-e 'my $re = qr/x/; $re |= "y"'
assert failure under 5.10.0, 10-maint, bleed, but not 5.8.8
Rafael Garcia-Suarez [Fri, 2 Jan 2009 09:31:24 +0000 (10:31 +0100)]
Mention overloading.pm in perl5110delta
Rafael Garcia-Suarez [Fri, 2 Jan 2009 09:30:43 +0000 (10:30 +0100)]
Bump copyright year after previous change
d15cd8313063e574
Rafael Garcia-Suarez [Fri, 2 Jan 2009 09:00:35 +0000 (10:00 +0100)]
Move variable declaration without initialisation at the top
Plus a comment by Nicholas
Rafael Garcia-Suarez [Fri, 2 Jan 2009 08:55:03 +0000 (09:55 +0100)]
Fix a couple of typos in overloading.pm docs
Yuval Kogman [Sat, 9 Aug 2008 13:01:15 +0000 (16:01 +0300)]
'overloading' pragma
Abigail [Thu, 1 Jan 2009 17:54:01 +0000 (18:54 +0100)]
From: Max Maischein <corion@corion.net>
Date: Thu, 01 Jan 2009 17:22:41 +0100
Subject: pod/perlrepositories.pod: s/asterix/asterisk/
Craig A. Berry [Thu, 1 Jan 2009 16:41:35 +0000 (10:41 -0600)]
First cut at handling git patch numbers on VMS.
Partially based on suggestions from John Malmberg at <
495C279C.7020106@gmail.com>.
Nicholas Clark [Wed, 31 Dec 2008 07:44:28 +0000 (07:44 +0000)]
Switching to `` requires one more \ to escape $Config in new_config=`...`
Nicholas Clark [Wed, 31 Dec 2008 07:42:55 +0000 (07:42 +0000)]
Switching from $() to `` requires two more backticks in unpushed_commits=`...`
Nicholas Clark [Wed, 31 Dec 2008 07:32:42 +0000 (07:32 +0000)]
More efficient API choices for string appending.
Nicholas Clark [Wed, 31 Dec 2008 07:30:24 +0000 (23:30 -0800)]
cflags also runs under /bin/sh so can't use $()
Nicholas Clark [Wed, 31 Dec 2008 07:18:37 +0000 (23:18 -0800)]
Solaris awk (at least) thinks that + should be escaped.
Nicholas Clark [Wed, 31 Dec 2008 07:16:50 +0000 (23:16 -0800)]
Solaris /bin/sh doesn't do POSIX $( ... ) syntax for ` .... `
Nicholas Clark [Wed, 31 Dec 2008 07:14:15 +0000 (07:14 +0000)]
varargs functions such as sv_catpvf can't have compatibility wrappers for
threads, so have to be written longhand as Perl_sv_catpvf(aTHX_ ...) :-(
Yves Orton [Wed, 31 Dec 2008 00:16:23 +0000 (01:16 +0100)]
much better git related version numbering in our (*nix for now) build process
The net result of this patch is to make available via Config.pm and -v/-V the
details about the git version info we have available for the build. When built within
a git repository git is queried directly. When built from a snapshot or bundle
it is assumed that the source is unchanged, and that the required details are
avaialble in a file called .patch, whose format current is a four field string
in the following format: "$branchname $date.$time $sha1 $describe". The
generator of these files currently resides on camel.booking.com.
* git-describe is now used more directly with -v.
When the prefix of git-describe matches the version number
as determined by the defines in patchlevel.h then we use ONLY
the git-describe output, otherwise we include
the git describe in parenthesis after the version number. Either way
the describe text is optionally followed by a star should there be
uncommitted changes.
eg: This is perl, v5.11.0 (GitLive-blead-136-g58ca560) built for i686-linux
or: This is perl, v5.11.0-1-g58ca560 built for i686-linux
or: This is perl, v5.11.0 built for i686-linux
* include the SHA1 in perl -V summary, and automatically include unpushed
commits in the registered patches list
* include various git/version/.patch details in %Config, as follows:
git_commit_id # sha1 of HEAD
git_ancestor # ancestor in $remote/$branch (presumably canonical)
git_describe # git describe
git_branch # current branch
git_uncommitted_changes # "true" if there are any, empty otherwise
git_unpushed_commits # List of sha1's of unpushed commits
git_commit_id_title # Used to make the perl -V summary output
Additionally one more value is added depending on build process used: when
building from an rsynced snapshot (or any dist including a file called
.patch) then the second field will be used to populate the
"git_snapshot_date" field. Otherwise if built in a git directory (as is hopefully
recommended these day) then the field will be "git_commit_date" which will be the
commit date of HEAD.
This patch introduces two new files (on top of .patchnum) that will be generated by
make_patchnum.sh: "lib/Config_git.pl" and "unpushed.h", the former is used to make
git data available to Config.pm/%Config without rebuilding everything else, and the
second is used to expose unpushed commits (if any) via the registered patch facility
of patchlevel.h
Igor Sutton [Tue, 30 Dec 2008 23:41:07 +0000 (00:41 +0100)]
added information how to build on Leopard
Nicholas Clark [Mon, 29 Dec 2008 22:43:40 +0000 (22:43 +0000)]
In mro_get_mro, use the length and UTF-8-ness now contained in struct mro_alg
when generating an SV containing the name.
Rafael Garcia-Suarez [Mon, 29 Dec 2008 12:39:48 +0000 (13:39 +0100)]
Mark my dual-life modules as authoritative in blead
Nicholas Clark [Mon, 29 Dec 2008 11:22:55 +0000 (11:22 +0000)]
PL_registered_mros can start with 1 hash bucket, as it will probably never
contain more than "dfs", and even if C3 is loaded, 2 buckets are less than the
default of 8.
Rafael Garcia-Suarez [Mon, 29 Dec 2008 08:50:06 +0000 (09:50 +0100)]
Bump switch version to 2.14
Rafael Garcia-Suarez [Sun, 28 Dec 2008 22:30:57 +0000 (23:30 +0100)]
Make Switch.pm skip POD like perl does
Patch provided by Daniel Klein <danielklein-à-airpost.net> :
It also doesn't check for invalid POD which gets ignored by the
compiler anyway.
Seems that Damian had a POD parser in mind when he devised those
regular expressions, but perl only looks for =cut followed by a
non-letter.
Rafael Garcia-Suarez [Sun, 28 Dec 2008 22:20:46 +0000 (23:20 +0100)]
Fix line numbering issues with POD filtered by Switch.pm
Patch provided by Daniel Klein <danielklein-à-airpost.net> :
I noticed a very subtle bug in the code: it filters out all detected POD
from the source code. This means that any line number reporting after
POD code will be out by the number of POD lines removed. So if there is
an error or a "warn"ing in the code it will be harder for the programmer
to track down.
Rafael Garcia-Suarez [Sun, 28 Dec 2008 22:03:27 +0000 (23:03 +0100)]
Switch.pm doesn't appear to support plain arrays and hashes in case().
Rafael Garcia-Suarez [Sun, 28 Dec 2008 18:52:44 +0000 (19:52 +0100)]
Let us direct Switch questions to P5P.
I still can release versions of Switch to CPAN, but I prefer
to consider the blead version canonical.
Jerry Hedden [Tue, 23 Dec 2008 16:49:36 +0000 (11:49 -0500)]
Handle non-numeric version numbers in ext/Digest/MD5/Makefile.PL
Vincent Pit [Sun, 28 Dec 2008 16:10:31 +0000 (17:10 +0100)]
Also define 'localizing' in pp_helem for the sake of clarity
Vincent Pit [Sun, 28 Dec 2008 14:08:05 +0000 (15:08 +0100)]
On scope end, delete localized array elements that should not exist anymore, so that the array recovers its previous length. Honour EXISTS and DELETE for tied arrays.
Vincent Pit [Sun, 28 Dec 2008 12:49:41 +0000 (13:49 +0100)]
Add save_adelete()/SAVEADELETE() to save on the stack an array element delete
Vincent Pit [Sun, 28 Dec 2008 10:16:54 +0000 (11:16 +0100)]
Introduce SvCANEXISTDELETE in pp.h, which simplify the logic in pp_helem and pp_hslice
Karl [Fri, 26 Dec 2008 17:45:05 +0000 (10:45 -0700)]
Fix malformed utf8 in regexec.c
Karl [Sun, 28 Dec 2008 14:18:24 +0000 (07:18 -0700)]
Revise malformed utf8 test case
Nicholas Clark [Sun, 28 Dec 2008 14:21:03 +0000 (14:21 +0000)]
Add casts to gain C++ compatibility, as spotted by Yves.
Nicholas Clark [Sun, 28 Dec 2008 13:06:42 +0000 (13:06 +0000)]
Add a key flag HVhek_KEYCANONICAL for Perl_hv_common(), which signals that the
key is in canonical form - any key passed encoded in UTF-8 cannot be represented
as bytes, hence the downgrade check can be skipped. Use this internally for
shared hash key scalars, as they are always canonical.
Nicholas Clark [Sun, 28 Dec 2008 12:36:16 +0000 (12:36 +0000)]
Verify that pre-computing hashes with shared hash key scalars does not cause
problems.
Nicholas Clark [Sun, 28 Dec 2008 09:50:21 +0000 (09:50 +0000)]
Also test Perl_hv_common() and pre-computed hashes for SV keys.
Nicholas Clark [Sun, 28 Dec 2008 09:36:16 +0000 (09:36 +0000)]
Precomputing the hash value for a string representable in bytes, but passed in
in UTF-8, would result in storing the wrong hash value in the hash, and hence
failing lookups. I guess not that much XS code precomputes hash values.
Nicholas Clark [Sun, 28 Dec 2008 08:57:25 +0000 (08:57 +0000)]
Fix typo in code not yet used.
Nicholas Clark [Sat, 27 Dec 2008 20:54:01 +0000 (20:54 +0000)]
Move all mro:: XS functions from mro.c to ext/mro/mro.xs, except for
mro::method_changed_in(), which is used by constant.
Nicholas Clark [Sat, 27 Dec 2008 11:19:37 +0000 (11:19 +0000)]
In struct mro_meta, rename mro_linear_dfs to mro_linear_all, and change it from
AV * to HV *.
Nicholas Clark [Sat, 27 Dec 2008 11:05:03 +0000 (11:05 +0000)]
In struct mro_meta, rename mro_linear_c3 to mro_linear_current, and change it
from AV * to SV *.
Nicholas Clark [Sat, 27 Dec 2008 14:32:59 +0000 (14:32 +0000)]
Break out the set-the-MRO logic from the XS_mro_set_mro into Perl_mro_set_mro(),
which can be called from C code (such as the guts of extensions).
Nicholas Clark [Sat, 27 Dec 2008 09:20:21 +0000 (09:20 +0000)]
Optimisation of the use of the meta structure - don't create a hash if all we
are dealing with is data for the current MRO. Instead the direct pointer "owns"
the (reference to the) data, with the hash pointer left as NULL to signal this.
Nicholas Clark [Sat, 27 Dec 2008 08:39:14 +0000 (08:39 +0000)]
Remove the comment that the mro:: functions are actually in the core
interpreter, hence you don't actually need to use mro;
This should have remained an implementation detail, as it limits the scope to
move things around within a stable branch. So for now, remove the expectation.
Nicholas Clark [Sat, 27 Dec 2008 00:20:35 +0000 (00:20 +0000)]
Proper pluggable Method Resolution Orders. 'c3' is now implemented outside the
core, in ext/mro/mro.xs. Also move mro::_nextcan() to mro.xs. It needs direct
access to S_mro_get_linear_isa_c3(), and nothing on CPAN calls it, except via
methods defined in mro.pm. Hence all users already require mro;
Nicholas Clark [Fri, 26 Dec 2008 21:31:47 +0000 (21:31 +0000)]
Explictly export Perl_mro_meta_init() so that HvMROMETA() can become part of the
public API and be used outside the core. However, leave Perl_mro_meta_init() as
a private implementation detail.
Nicholas Clark [Fri, 26 Dec 2008 18:26:53 +0000 (18:26 +0000)]
Add Perl_mro_register() to register Method Resolution Orders,
Perl_mro_get_from_name() to retrieve MROs by name, and PL_registered_mros to
store them in. Abolish the static array of mros, and instead register the dfs
and c3 MRO structures.
Nicholas Clark [Fri, 26 Dec 2008 17:14:44 +0000 (17:14 +0000)]
Add MRO_GET_PRIVATE_DATA() to use the cached mro private data where possible.
Nicholas Clark [Fri, 26 Dec 2008 16:38:58 +0000 (16:38 +0000)]
Repurpose struct mro_meta to allow it to store cached linear ISA for arbitary
method resolution orders.
mro_linear_dfs becomes a hash holding the different MROs' private data.
mro_linear_c3 becomes a shortcut pointer to the current MRO's private data.
Nicholas Clark [Sat, 27 Dec 2008 21:07:29 +0000 (13:07 -0800)]
Merge branch 'blead' of nicholas@perl5.git.perl.org:/gitroot/perl into blead
Yves Orton [Sat, 27 Dec 2008 21:03:37 +0000 (22:03 +0100)]
fix problem on some platforms
Nicholas Clark [Sat, 27 Dec 2008 21:01:02 +0000 (13:01 -0800)]
Tweak make_patchnum.sh to cope with /bin/sh on Solaris 9, in particular errors
most hateful in the man page for test.
Yves Orton [Sat, 27 Dec 2008 20:08:52 +0000 (21:08 +0100)]
tweak dependency
Yves Orton [Sat, 27 Dec 2008 19:19:31 +0000 (20:19 +0100)]
fix bug #57042 - preserve $^R across TRIE matches
Yves Orton [Sat, 27 Dec 2008 19:18:24 +0000 (20:18 +0100)]
ignore bugBLAH.pl files as they are likely dev/test/debugging byproduct
Yves Orton [Sat, 27 Dec 2008 18:39:02 +0000 (19:39 +0100)]
better .patchnum/.sha1 dependency stuff
hopefully this makes FreeBSD happy
Yves Orton [Sat, 27 Dec 2008 15:05:03 +0000 (16:05 +0100)]
add cflags as a dependency for all object files. (it is used to control the arguments they are compiled with)
Yves Orton [Sat, 27 Dec 2008 13:48:02 +0000 (14:48 +0100)]
apparently this isnt necessary after all.
Yves Orton [Sat, 27 Dec 2008 13:41:41 +0000 (14:41 +0100)]
make make_patchnum.sh (more) portable
Yves Orton [Sat, 27 Dec 2008 13:41:18 +0000 (14:41 +0100)]
rebuild cflags if cflags.sh changes
Yves Orton [Sat, 27 Dec 2008 10:30:17 +0000 (11:30 +0100)]
come new version related code in perl.c is not enabled -- explain why
Yves Orton [Fri, 26 Dec 2008 16:36:50 +0000 (17:36 +0100)]
remove .sha1 file as well if necessary
Yves Orton [Fri, 26 Dec 2008 16:26:44 +0000 (17:26 +0100)]
forgot that i was modifying a generated file
Yves Orton [Fri, 26 Dec 2008 16:16:57 +0000 (17:16 +0100)]
add a newline for clarity
Yves Orton [Fri, 26 Dec 2008 16:12:22 +0000 (17:12 +0100)]
better git based version numbering (hopefully sane)
Yves Orton [Fri, 26 Dec 2008 15:01:32 +0000 (16:01 +0100)]
tidier -v output
Yves Orton [Fri, 26 Dec 2008 14:48:03 +0000 (15:48 +0100)]
make git-describe info show up in -V output in the "Characteristics of this binary" section.
H.M. Brand [Tue, 23 Dec 2008 12:48:33 +0000 (13:48 +0100)]
Generate .patchnum from .patch or .git
Yves Orton [Sun, 21 Dec 2008 18:40:18 +0000 (19:40 +0100)]
slightly smarter make_patchnum logic, detect if there are changes to the working directory so we dont lie about our version
Yves Orton [Sun, 21 Dec 2008 17:49:27 +0000 (18:49 +0100)]
smarter make_patchnum.sh, get the .patchnum from the .patch file if it exists
Yves Orton [Sun, 21 Dec 2008 17:48:27 +0000 (18:48 +0100)]
clean up .patchnum in make clean
Yves Orton [Sun, 21 Dec 2008 17:38:46 +0000 (18:38 +0100)]
fix broken indentation, and move PERL_PATCHNUM logic to a different place so it only affects perl.c
Yves Orton [Sun, 21 Dec 2008 16:04:33 +0000 (17:04 +0100)]
more build dependency changes, we should make sure that cflags is updated whenever cflags.SH changes
Yves Orton [Sun, 21 Dec 2008 15:34:56 +0000 (16:34 +0100)]
make sure that the perl -v/-V output corresponds to the latest commit
Rafael Garcia-Suarez [Sat, 27 Dec 2008 08:26:09 +0000 (09:26 +0100)]
Remove "b" flag for sv_utf8_upgrade_nomg in embed.fnc
This is only a macro, without a Perl_ implementation.
Hopefully this fixes the Win32 build.
kevin brintnall [Thu, 25 Dec 2008 02:59:15 +0000 (20:59 -0600)]
sv_dup(): avoid cloning empty arrays
Testing the ARRAY pointer is insufficent. Arrays emptied by 'shift' or
'pop' may still have non-NULL 'ARRAY' pointers. Check more carefully to
determine whether the array has anything worth duplicating. If not, reset
the FILL and MAX offsets to -1 just as 'undef @ARRAY' would.
This avoids potential corruption in the PL_ptr_table during perl_clone().
Rafael Garcia-Suarez [Fri, 26 Dec 2008 22:27:46 +0000 (23:27 +0100)]
Regen docs and headers
Necessary after change
fe749c9aa803ce74d997ff797103481a55741837
Rafael Garcia-Suarez [Fri, 26 Dec 2008 22:27:03 +0000 (23:27 +0100)]
Fix two pod links
Karl [Fri, 26 Dec 2008 17:18:34 +0000 (10:18 -0700)]
Update comments and documentation dealing with utf
Rafael Garcia-Suarez [Fri, 26 Dec 2008 14:09:49 +0000 (15:09 +0100)]
Upgrade to podlators 2.2.1
Nicholas Clark [Fri, 26 Dec 2008 13:19:14 +0000 (13:19 +0000)]
The string "." cannot possibly contain a PATH sepatator, so don't tell S_pushinc
to go searching for one. (And the analagous change for MacOS classic.)
Nicholas Clark [Fri, 26 Dec 2008 13:04:38 +0000 (13:04 +0000)]
Merge branch 'blead' of nicholas@perl5.git.perl.org:/gitroot/perl into blead