This is a live mirror of the Perl 5 development currently hosted at
11 years agomktables: Remove extraneous error message
Karl Williamson [Mon, 11 Oct 2010 16:47:04 +0000 (10:47 -0600)]
mktables: Remove extraneous error message

When I created matches_identically_to() originally, I just copied from
another subroutine, changing a few things.  I shouldn't have copied this
message, as it was only applicable to the original routine.

11 years agomktables: Change method name for clarity
Karl Williamson [Mon, 11 Oct 2010 16:33:06 +0000 (10:33 -0600)]
mktables: Change method name for clarity

is_equivalent_to() doesn't mean what it says.  Instead it means if the
two objects have been set equivalent to each other.

11 years agomktables: Finish the refactoring out of a pass.
Karl Williamson [Mon, 11 Oct 2010 03:59:25 +0000 (21:59 -0600)]
mktables: Finish the refactoring out of a pass.

Commit e1a3bfbd2f5194edc05010f0b5e5a568b1fdf508
omitted some code that was in my working version.  My git skills aren't
good enough to go back and add that in without zapping everything else.

11 years agomktables: Remove unshift onto large array
Karl Williamson [Mon, 11 Oct 2010 00:14:08 +0000 (18:14 -0600)]
mktables: Remove unshift onto large array

This changes the parameters to write() so it can accept more than one
array ref, thus eliminating the need for an unshift onto a large array.

11 years agomktables: Rmv obsolete field
Karl Williamson [Sun, 10 Oct 2010 22:36:06 +0000 (16:36 -0600)]
mktables: Rmv obsolete field

has_specials was used to avoid an extra pass for tables that didn't
need it.  That pass has been eliminated, so this code is useless.

11 years agomktables: refactor to eliminate a pass over tables
Karl Williamson [Sun, 10 Oct 2010 22:22:44 +0000 (16:22 -0600)]
mktables: refactor to eliminate a pass over tables

This patch is mainly for performance, but in eliminating a pass which
modified the tables, it allows for later changes to not have to rely on
things happening in a certain order.

Previously, tables that had special ranges in them, such as mappings to
multiple characters and character names that are algorithmically
derivable had a separate pass to process those ranges ahead of the main
table, as the information about these is output at the beginning of the

What this patch does is to add a call-back for the processing of
the main body to call when it finds a special range that it doesn't
handle.  That call-back just adds the information to various
temporaries, depending on what the range is.

After the processing of all the ranges, those temporaries hold all the
information needed to output the specials data.  This is processed and
the text is unshifted to the beginning of the output.

pre_body() used to process all this.  But it has been split up.  The
code that does need to go at the beginning is moved to the write()
routine for the sub-class, which processes it before calling the super
class's write.  The code that figured out about the special ranges is
moved to the new call-back handle_special_range().  The remaining code
remains in pre_body(), but it is now called later in the process.

11 years agomktables: Add # XXX so can find experimental code
Karl Williamson [Sun, 10 Oct 2010 21:01:28 +0000 (15:01 -0600)]
mktables: Add # XXX so can find experimental code

11 years agomktables: Move 'format' to base class
Karl Williamson [Sun, 10 Oct 2010 15:58:24 +0000 (09:58 -0600)]
mktables: Move 'format' to base class

This patch is in preparation for adding more complete annotations to the
output tables.  Previously, only Map tables had a listed format.  Match
tables also have a format (empty), but that was understood.  But the new
annotation code will need to refer to that format, so I moved the field
into the base class common to both types of tables, and added the
EMPTY_FORMAT for use by Match tables.

11 years agomktables: Change format name for
Karl Williamson [Sun, 10 Oct 2010 15:41:44 +0000 (09:41 -0600)]
mktables: Change format name for

This table which is used only by has a special format that
is used in no other table.  In preparation for adding annotations to it,
make a special format signifier for it.  This affects only one line at
the top that indicates to the user the format of the table.

The table has comments in it to say it is volatile and no one should use
this table besides, which currently doesn't look at that

11 years agomktables: change variable name for clarity
Karl Williamson [Sun, 10 Oct 2010 15:36:45 +0000 (09:36 -0600)]
mktables: change variable name for clarity

I found that 'youngest' was confusing

11 years agomktables: if modify during run, regen tables
Karl Williamson [Sun, 10 Oct 2010 15:28:09 +0000 (09:28 -0600)]
mktables: if modify during run, regen tables

This bug has bitten me enough times that I decided to fix it.  It would
only be applicable to someone who is developing mktables, and making
changes to it while the program is running.  Due to the complicated
nature of the dependencies of mktables, it basically functions as its
own make command, knowing when to rebuild or not based on the
modification times of itself and its input and output files.
Previously, it did not account for changes to itself made while running,
so it would think that it wouldn't have to rebuild, even though it did.

I solve this problem by keeping track of the time the process started,
and storing it in mktables.lst.  If something has changed since then,
then the files need to be rebuilt.

11 years agomktables: rewrite 'if' statement for clarity
Karl Williamson [Sun, 10 Oct 2010 15:08:05 +0000 (09:08 -0600)]
mktables: rewrite 'if' statement for clarity

11 years agomktables: complement variable name for rebuilding
Karl Williamson [Sun, 10 Oct 2010 14:57:56 +0000 (08:57 -0600)]
mktables: complement variable name for rebuilding

This is an intermediate patch that changes the variable name as to
whether the files need rebuilding or not to something I understand
better.  This has long been confusing, as up until a year ago, there had
been a long-standing bug in the program that didn't get it right.

11 years agomktables: Add type_of() method to get range's type
Karl Williamson [Sat, 9 Oct 2010 23:58:11 +0000 (17:58 -0600)]
mktables: Add type_of() method to get range's type

This will be useful in outputting better annotations.

11 years agomktables: Convert value_of() to use containing_range()
Karl Williamson [Sat, 9 Oct 2010 23:42:48 +0000 (17:42 -0600)]
mktables: Convert value_of() to use containing_range()

11 years agomktables: Remove extraneous debug statement
Karl Williamson [Sat, 9 Oct 2010 23:40:45 +0000 (17:40 -0600)]
mktables: Remove extraneous debug statement

11 years agomktables: Add containing_range method
Karl Williamson [Sat, 9 Oct 2010 23:33:30 +0000 (17:33 -0600)]
mktables: Add containing_range method

This method will be used in multiple places

11 years agomktables: Clarify comment in generated tables
Karl Williamson [Sat, 9 Oct 2010 23:29:35 +0000 (17:29 -0600)]
mktables: Clarify comment in generated tables

Tables whose values are strings, aren't arbitrary strings, as for
example they can't contain '#' characters that start comments.  So,
don't say they are 'arbitrary'.

11 years agomktables: Clarify comment in generated tables
Karl Williamson [Sat, 9 Oct 2010 22:49:59 +0000 (16:49 -0600)]
mktables: Clarify comment in generated tables

An installation may choose to output more tables than by default.  The
comment in tables should make it clearer that these are not necessarily

11 years agomktables: Save reference to two commonly used tables
Karl Williamson [Sat, 9 Oct 2010 21:28:58 +0000 (15:28 -0600)]
mktables: Save reference to two commonly used tables

These two tables can be used frequently, so save a reference instead of
looking it up each time

11 years agomktables: Improve message
Karl Williamson [Sat, 9 Oct 2010 20:59:15 +0000 (14:59 -0600)]
mktables: Improve message

11 years agomktables: Remove commented out obsolete code
Karl Williamson [Sat, 9 Oct 2010 20:56:46 +0000 (14:56 -0600)]
mktables: Remove commented out obsolete code

This functionality is now in charnames.

11 years agomktables: Can't generate simple casing tables
Karl Williamson [Sat, 9 Oct 2010 20:35:08 +0000 (14:35 -0600)]
mktables: Can't generate simple casing tables

The simple as opposed to the full casing tables weren't able to be
generated correctly because I was passing the name of a table instead of
its object.  Normally these tables are generated at all, but I turned
generation of them on temporarily for development purposes, and found
this bug.  So there is no test case that can be generated for this fix.

11 years agomktables: Use more descriptive property names
Karl Williamson [Sat, 9 Oct 2010 20:29:45 +0000 (14:29 -0600)]
mktables: Use more descriptive property names

11 years agomktables: Make generated files use hex code points
Karl Williamson [Sat, 9 Oct 2010 20:18:56 +0000 (14:18 -0600)]
mktables: Make generated files use hex code points

Certain generated files had some values converted from hex into decimal.
All the published values are in hex, so should use the more familiar
form for readability.

11 years agomktables: fix typos in comments
Karl Williamson [Sat, 9 Oct 2010 20:04:24 +0000 (14:04 -0600)]
mktables: fix typos in comments

11 years agoperldelta entry for cv_set_call_checker
Zefram [Tue, 12 Oct 2010 17:32:06 +0000 (10:32 -0700)]
perldelta entry for cv_set_call_checker

plus tweaks from Reini Urban and the committer

11 years agoAdd LINKLIST to the API.
Ben Morrow [Mon, 11 Oct 2010 05:19:44 +0000 (06:19 +0100)]
Add LINKLIST to the API.

Also rename the underlying function to op_linklist, to match the other
API op functions.

11 years agoAPIify op list constructors
Zefram [Mon, 4 Oct 2010 21:19:08 +0000 (22:19 +0100)]
APIify op list constructors

Put into the API op_append_elem, op_prepend_elem, and op_append_list.  All
renamed from op_-less internal names.  Parameter types for op_append_list
changed to match the rest of the op API and avoid some casting.

11 years agoReset isa caches on nonexistent substashes when stash trees are moved
Father Chrysostomos [Tue, 12 Oct 2010 17:13:58 +0000 (10:13 -0700)]
Reset isa caches on nonexistent substashes when stash trees are moved

This fixes the problem of isa cache linearisations’ and method caches’
not being reset on nonexistent packages when they are replaced with
real packages as a result of parent stashes’ being moved. This can
happen in cases like this:

  @left::ISA = 'outer::inner';
  @right::ISA = 'clone::inner';
  {package outer::inner}
  *clone:: = \%outer::;
  print "ok 1", "\n" if left->isa("clone::inner");
  print "ok 2", "\n" if right->isa("outer::inner");

This changes mro_package_moved’s parameter list as documented in the
diff for mro.c. See also the new comments in that function.

11 years agoIn APItest.xs, augment croak("fail") with the file name and line number.
Nicholas Clark [Tue, 12 Oct 2010 19:41:36 +0000 (20:41 +0100)]
In APItest.xs, augment croak("fail") with the file name and line number.

With this, it should be possible to determine which C condition failed without
needing to run the test under a debugger. A debugger may still be needed to
determine *why*.

11 years agoXS_Tie_Hash_NamedCapture_STORE should always croak on invalid parameters.
Nicholas Clark [Tue, 12 Oct 2010 17:03:45 +0000 (18:03 +0100)]
XS_Tie_Hash_NamedCapture_STORE should always croak on invalid parameters.

Previously, it would return undef instead of calling Perl_croak_no_modify() if
PL_localizing was true. However, that case can never be reached. PL_localizing
is set non-zero for

1: Perl_mg_localize and PL_save_scalar, for the duration of executing the local
2: Perl_leave_scope for the duration of unwinding the local

However, XS_Tie_Hash_NamedCapture_STORE can't be reached in either case, with
PL_curpm NULL (or otherwise invalid) || !SvROK(ST(0)).

Case 1 would be the call to save_helem_flags() in pp_helem. However, this is
only reached if preeminent is TRUE, which will only hold if hv_exists_ent()
has already returned TRUE, which will only be possible if PL_curpm and ST(0)
are valid.

Case 2 would be the case SAVEt_HELEM in Perl_leave_scope(). However, this
case is only reached as part of the unwinding from Case 1 above, so again
PL_curpm and ST(0) will be valid, for this dynamic scope.

This commit is the patch proposed in RT ##77610. It does not resolve all issues
in that ticket.

Currently C<local $1> is legal - it's a runtime no-op, which neither errors
*nor* resets $1 to undef. Clearly C<local $+{k}> is inconsistent with this,
(as it errors at scope exit for all cases, and additionally errors at local
time if $+{k} exists) but I consider it not worth fixing until we decide
whether C<local $1>'s current behaviour is a "bug" or a "feature".

11 years agoCorrect mistaken references to &PL_sv_true and &PL_sv false in perlguts
Andrew Rodland [Tue, 12 Oct 2010 12:27:23 +0000 (07:27 -0500)]
Correct mistaken references to &PL_sv_true and &PL_sv false in perlguts

Their correct names are &PL_sv_yes and &PL_sv_no.

11 years agoMemoize has CPAN as its upstream
Florian Ragwitz [Tue, 12 Oct 2010 09:43:17 +0000 (11:43 +0200)]
Memoize has CPAN as its upstream

11 years agoImprove documentation of \Q
Eric Brine [Tue, 12 Oct 2010 00:17:15 +0000 (17:17 -0700)]
Improve documentation of \Q

11 years agoCorrect prototype of mathom Perl_mro_isa_changed_in() for ithreads.
Nicholas Clark [Mon, 11 Oct 2010 19:41:35 +0000 (20:41 +0100)]
Correct prototype of mathom Perl_mro_isa_changed_in() for ithreads.

6f86b615fa775fad forgot the pTHX_

11 years agoAllow mro_isa_changed_in to be called on nonexistent packages
Father Chrysostomos [Mon, 11 Oct 2010 17:10:06 +0000 (10:10 -0700)]
Allow mro_isa_changed_in to be called on nonexistent packages

This is necessary for an upcoming bug fix.

(For this bug:

 @left::ISA = 'outer::inner';
 @right::ISA = 'clone::inner';
 *clone:: = \%outer::;
 print left->isa('clone::inner'),"\n";
 print right->isa('outer::inner'),"\n";


This commit actually replaces mro_isa_changed_in with
mro_isa_changed_in3. See the docs for it in the diff for mro.c.

11 years agoAvoid calling Gcovert() when stringifying 0.0 and -0.0
Nicholas Clark [Mon, 11 Oct 2010 12:12:04 +0000 (13:12 +0100)]
Avoid calling Gcovert() when stringifying 0.0 and -0.0

Previously we always called Gconvert(), then tested its string output, then
fixed that up if necessary. This way has fewer tests. We can also reduce the
memory allocation for the string output for the case of zero.

11 years agoInstall l1_char_class_tab.h on VMS.
Craig A. Berry [Mon, 11 Oct 2010 03:56:49 +0000 (22:56 -0500)]
Install l1_char_class_tab.h on VMS.

11 years agoRemove some excess cleverness from the Bhk macros.
Ben Morrow [Sun, 10 Oct 2010 22:10:15 +0000 (23:10 +0100)]
Remove some excess cleverness from the Bhk macros.

Allowing BhkENTRY(bhk, start) to look up the bhk_start member defeats
much of the point of having a bhk_ prefix in the first place: if a
member is added later called (say) 'bhk_die', any invocation of
BhkENTRY(bhk, die) will expand to BhkENTRY(bhk, Perl_die) because of the
API macros. Requiring BhkENTRY(bhk, bhk_start), while tedious, is much

11 years agoplugin mechanism to rewrite calls to a subroutine
Zefram [Sun, 3 Oct 2010 13:53:16 +0000 (14:53 +0100)]
plugin mechanism to rewrite calls to a subroutine

New magic type PERL_MAGIC_checkcall attaches a function to a CV, which
will be called as the second half of the op checker for an entersub
op calling that CV.  Default state, in the absence of this magic,
is to process the CV's prototype if it has one, or apply list context
to all the arguments if not.  New API functions cv_get_call_checker()
and cv_set_call_checker() provide a clean interface to this facility,
hiding the internal use of magic.

Expose in the API the new functions rv2cv_op_cv(),
ck_entersub_args_list(), ck_entersub_args_proto(), and
ck_entersub_args_proto_or_list(), which are meaningful segments of
standard entersub op checking and are likely to be useful in plugged-in
call checker functions.

Expose new API function op_contextualize(), which is a public interface
to the internal scalar()/list()/scalarvoid() functions.  This API is
likely to be required in most plugged-in call checker functions.

Incidentally add new function mg_free_type(), in the API, which will
remove magic of one type from an SV.  (mg_free() removes all magic,
and there isn't anything else more selective.)

11 years agomake sv_clear() non-recursive on RVs
David Mitchell [Sun, 10 Oct 2010 23:13:07 +0000 (00:13 +0100)]
make sv_clear() non-recursive on RVs

The previous two commits made it non-recursive on AVs. With that
machinery in place, it's now trivial to extend it to RVs too.
This means that now any depth nesting of AVs and RVs will be freed
in a single call to sv_clear().

11 years agore-indent sv_clear()
David Mitchell [Sun, 10 Oct 2010 23:05:26 +0000 (00:05 +0100)]
re-indent sv_clear()

The previous commit wrapped most of sv_clear in a big while loop,
but didn't re-indent everything, to keep the change clear.
So re-indent now, and wrap long lines. Only whitespace changes.

11 years agomake sv_clear() iterate over AVs
David Mitchell [Fri, 8 Oct 2010 15:22:42 +0000 (16:22 +0100)]
make sv_clear() iterate over AVs

In sv_clear(), rather than calling av_undef(), iterate over the AV's
elements. This is the first stage in making sv_clear() non-recursive,
and thus non-stack-blowing when freeing deeply nested structures.

Since we no longer have the stack to maintain the chain of AVs currently
being iterated over, we instead store a pointer to the previous AV in the
AvARRAY[AvMAX] slot of the currently-being-iterated AV. Since our first
action is to pop the first SV, that slot is guaranteed to be free, and
(in theory) nothing should be messing with the AV while we iterate over
its elements, so that slot should remain undisturbed.

11 years agostop DEBUG_LEAKING_SCALARS, er, leaking!
David Mitchell [Sun, 10 Oct 2010 18:48:23 +0000 (19:48 +0100)]
stop DEBUG_LEAKING_SCALARS, er, leaking!

When cloning an SV, new_SV() was setting sv_debug_file, then we
immediately set it again without freeing the first one.

11 years agoregcomp.c: Fix compiler warning
Karl Williamson [Tue, 5 Oct 2010 05:15:53 +0000 (23:15 -0600)]
regcomp.c: Fix compiler warning

Another compiler gave another warning, that this should fix.  The
expression should have been cast to a bool all along

11 years agoAdd an inheritance diagram to package_aliases.t
Father Chrysostomos [Sun, 10 Oct 2010 18:39:57 +0000 (11:39 -0700)]
Add an inheritance diagram to package_aliases.t

11 years agoDon't assume filenames can contain parentheses
Craig A. Berry [Sun, 10 Oct 2010 03:31:37 +0000 (22:31 -0500)]
Don't assume filenames can contain parentheses
in the new File::DosGlob tests that came in with

11 years agoMove regen scripts to regen/
Steffen Mueller [Sun, 10 Oct 2010 13:43:47 +0000 (15:43 +0200)]
Move regen scripts to regen/

Moves the various scripts that are called by to a subdirectory
to reduce clutter.

11 years agoMention a few more auto-generated files in pumpkin.pod
Steffen Mueller [Sun, 10 Oct 2010 13:12:53 +0000 (15:12 +0200)]
Mention a few more auto-generated files in pumpkin.pod

11 years agoMake more ways to move packages around reset isa caches
Father Chrysostomos [Sun, 10 Oct 2010 05:29:19 +0000 (22:29 -0700)]
Make more ways to move packages around reset isa caches

This makes string-to-glob assignment and hashref-to-glob assignment
reset isa caches by calling mro_package_moved, if the glob’s name
ends with ::.

Related to [perl #75176].

11 years agoAvoid uninitialized warning in glob_assign_glob
Father Chrysostomos [Sun, 10 Oct 2010 05:18:30 +0000 (22:18 -0700)]
Avoid uninitialized warning in glob_assign_glob

11 years agoRemove code added by c8bbf675 that turns out to be unnecessary
Father Chrysostomos [Sun, 10 Oct 2010 05:18:08 +0000 (22:18 -0700)]
Remove code added by c8bbf675 that turns out to be unnecessary

11 years agoOops. Remove a duplicate require.
Father Chrysostomos [Sun, 10 Oct 2010 05:12:46 +0000 (22:12 -0700)]
Oops. Remove a duplicate require.

11 years agoUpdate gitignore files for moved pod scripts
Florian Ragwitz [Sun, 10 Oct 2010 03:55:11 +0000 (05:55 +0200)]
Update gitignore files for moved pod scripts

11 years agoPod/ is now in ext/Pod-Html
Florian Ragwitz [Sun, 10 Oct 2010 03:51:15 +0000 (05:51 +0200)]
Pod/ is now in ext/Pod-Html

11 years ago[perl #78306] Clearify inc_version_list config in INSTALL
Zsbán Ambrus [Sun, 10 Oct 2010 01:46:04 +0000 (18:46 -0700)]
[perl #78306] Clearify inc_version_list config in INSTALL

11 years agoReset isa on stash manipulation
Father Chrysostomos [Sun, 10 Oct 2010 01:42:01 +0000 (18:42 -0700)]
Reset isa on stash manipulation

This only applies to glob-to-glob assignments and deletions of stash
elements. Other types of stash manipulation are dealt with by subse-
quent patches.

It adds mro_package_moved, a private function that iterates through
subpackages, calling mro_isa_changed_in on each.

This is related to [perl #75176], but is not the same bug. It simply
got in the way of fixing [perl #75176].

11 years agoMake the new perl5db.t taint test work on VMS.
Craig A. Berry [Sat, 9 Oct 2010 23:32:41 +0000 (18:32 -0500)]
Make the new perl5db.t taint test work on VMS.

Follow-up to 07004ebbe530fe5ce1c67e63c0b8e1c0aa77b3b9.

11 years agoAdd VMS symbol shortening to PL_bincompat_options.
Craig A. Berry [Sat, 9 Oct 2010 22:41:27 +0000 (17:41 -0500)]
Add VMS symbol shortening to PL_bincompat_options.

11 years agoCreate populate_isa() to de-duplicate logic to populate @ISA.
Nicholas Clark [Sat, 9 Oct 2010 19:34:29 +0000 (20:34 +0100)]
Create populate_isa() to de-duplicate logic to populate @ISA.

Previously yylex() was conditionally populating @AnyDBM_File::ISA (if it was not
set, and the token dbmopen was seen), and init_predump_symbols() was populating
@IO::File::ISA (unconditionally, but this is so early that nothing previously
could have set it). This refactoring eliminates code duplication.

11 years agodo not use both "a lvalue" and "an lvalue" but pick one
Ricardo Signes [Sat, 9 Oct 2010 18:17:34 +0000 (14:17 -0400)]
do not use both "a lvalue" and "an lvalue" but pick one

11 years agoRemove now-unused parameters from S_gv_magicalize_isa().
Nicholas Clark [Sat, 9 Oct 2010 11:24:10 +0000 (12:24 +0100)]
Remove now-unused parameters from S_gv_magicalize_isa().

997daa56862a0fc7 eliminated the need for passing these in.

11 years agoMove the automatic instantiation of @AnyDBM_File::ISA to Perl_yylex()
Nicholas Clark [Sat, 9 Oct 2010 08:02:15 +0000 (09:02 +0100)]
Move the automatic instantiation of @AnyDBM_File::ISA to Perl_yylex()

case KEY_dbmopen in Perl_yylex() has always had special-case code to create
@AnyDBM_File::ISA, using GV_ADDMULTI. S_gv_magicalize_isa() [part of
Perl_gv_fetchpvn_flags()] has special case code to spot "AnyDBM_File::ISA"
being created with GV_ADDMULTI, and populate the variable if it is empty.

Grouping the special case code in one place makes more sense. Removing the
special case code from gv.c means that there is no longer a check clause in the
code path for *every* package's @ISA initialisation.

11 years agoUpdate perldelta.pod for threads::shared upgrade
Chris 'BinGOs' Williams [Fri, 8 Oct 2010 22:33:46 +0000 (23:33 +0100)]
Update perldelta.pod for threads::shared upgrade

11 years agoUpgrade to threads::shared 1.34
Jerry D. Hedden [Fri, 8 Oct 2010 16:58:33 +0000 (12:58 -0400)]
Upgrade to threads::shared 1.34

Signed-off-by: Chris 'BinGOs' Williams <>
11 years agoRemove dead code from Perl_gv_stashpvn().
Nicholas Clark [Fri, 8 Oct 2010 20:33:29 +0000 (21:33 +0100)]
Remove dead code from Perl_gv_stashpvn().

GvHV() and HvNAME() will both always already be set, as gv_fetchpvn_flags()
will initialise these as it walks the string in its initial loop to locate the
correct stash, then return early because name == name_end.

This code has been dead since it was added in 5.000.

11 years agoMake compiler-shortened symbols the default on VMS.
Craig A. Berry [Fri, 8 Oct 2010 19:44:15 +0000 (14:44 -0500)]
Make compiler-shortened symbols the default on VMS.

It used to be that once or twice per decade a symbol longer than
31 characters snuck into the core and we had to manually shorten
it to get the build working.  But it's happened twice in the last
month, most recently with the humanly unswallowable function name
XS_XS__APItest__XSUB_XS_VERSION_undef, so the need for a more
general solution has become not only apparent but mandatory.

11 years agoLet the compiler shorten symbols on VMS.
Craig A. Berry [Fri, 8 Oct 2010 19:18:49 +0000 (14:18 -0500)]
Let the compiler shorten symbols on VMS.

Traditionally Perl does its own name shortening in
ExtUtils::XSSymSet to get around the 31-character limit
on symbol names in the VMS linker.  That method predates
the availability of the /NAMES=SHORTENED option in the
C compiler, which uses the same algorithm as the C++
name mangler to produce shortened symbols.  This change
makes configuration with -Duseshortenedsymbols select
the compiler's shortening over the home-grown shortening.

The advantages of the compiler option over the home-grown
option are that hand-coded long symbols in the core can be
handled (instead of only generated XS_... symbols); long
symbols in external libraries can be handled; and eventually
we can remove XSSymSet and have less to maintain.

84efe3dfc6afbd8ea017ddcc4d5d213cc1a35c72 is required to travel
wherever this change travels for extension building to work

11 years agoExtUtils::XSSymSet can now let the compiler shorten symbols.
Craig A. Berry [Fri, 8 Oct 2010 19:07:59 +0000 (14:07 -0500)]
ExtUtils::XSSymSet can now let the compiler shorten symbols.

If the soon-to-be-implemented configuration option
-Duseshortenedsymbols has been selected, bypass the home-grown
symbol shortening traditionally done by xsubpp because the
compiler's /NAMES=SHORTENED feature will be used instead.

This is only relevant on VMS.

11 years agoFix bugs in e771aaa95f65a9c4 (reducing copying in gv_fetchpvn_flags)
Nicholas Clark [Fri, 8 Oct 2010 18:58:34 +0000 (19:58 +0100)]
Fix bugs in e771aaa95f65a9c4 (reducing copying in gv_fetchpvn_flags)

Bug spotting and 1 fix by Jerry D. Hedden.

11 years agoRefactor Perl_xs_apiversion_bootcheck()
Nicholas Clark [Fri, 8 Oct 2010 15:56:50 +0000 (16:56 +0100)]
Refactor Perl_xs_apiversion_bootcheck()

Use fewer mortals, and avoid leaking an SV if upg_version() croaks.

11 years agoConvert the implementation of XS_APIVERSION_BOOTCHECK to a function.
Nicholas Clark [Fri, 8 Oct 2010 15:13:38 +0000 (16:13 +0100)]
Convert the implementation of XS_APIVERSION_BOOTCHECK to a function.

The previous macro generated over .5K of object code. This is in every shared
object, and is only called once. Hence this change increases the perl binary
by about .5K (once), to save .5K for every XS module loaded.

11 years agoXS::APItest tests for XS_APIVERSION_BOOTCHECK.
Nicholas Clark [Fri, 8 Oct 2010 14:55:08 +0000 (15:55 +0100)]

11 years agoxs_version_bootcheck() is an implementation detail, rather than a public API.
Nicholas Clark [Fri, 8 Oct 2010 14:12:30 +0000 (15:12 +0100)]
xs_version_bootcheck() is an implementation detail, rather than a public API.


11 years agoRefactor xs_version_bootcheck() to remove complex constructions.
Nicholas Clark [Fri, 8 Oct 2010 13:59:10 +0000 (14:59 +0100)]
Refactor xs_version_bootcheck() to remove complex constructions.

Replace complex format strings ternary conditionals with an if/else block.
Avoid assignment within expressions. Directly use the SV for the module's name,
rather than converting it to a char *.

11 years agoxs_version_bootcheck() must use mortals, as {new,upg}_version() can croak.
Nicholas Clark [Fri, 8 Oct 2010 10:59:47 +0000 (11:59 +0100)]
xs_version_bootcheck() must use mortals, as {new,upg}_version() can croak.

It's unlikely that XS_VERSION will contain a bogus version string (for long),
but the value passed in (or derived from $XS_VERSION or $VERSION) might well.
For that case, without this change, temporary SVs created within
xs_version_bootcheck() won't be freed (before interpreter exit).

11 years agothreads::shared should not FREETMPS in its BOOT code.
Nicholas Clark [Fri, 8 Oct 2010 13:00:43 +0000 (14:00 +0100)]
threads::shared should not FREETMPS in its BOOT code.

perl_construct() sets the current interpreter context, and ends in an ENTER.
Hence threads::shared needs to restore the interpreter context, and balance the
ENTER with a leave. Previously it was using its PERL_SET_CONTEXT() macro,
which also contains a FREETMPS. However, this FREETMPS is erroneous in this
specific context, as it does not have a balancing SAVETMPS. Hence calling
SAVETMPS here would run it in the context of the shared interpreter, but it
would (attempt to) free up temporaries created in the context of the parent

11 years agoChange vverify() to return HV or NULL (RT#78286)
David Golden [Fri, 8 Oct 2010 15:39:52 +0000 (11:39 -0400)]
Change vverify() to return HV or NULL (RT#78286)

Multiple code paths were dereferencing version objects without
checking the underlying type, which could result in segmentation
faults per RT#78286

This patch consolidates all dereferencing into vverify() and
has vverify return the underlying HV or NULL instead of
a boolean value.

11 years agoPerl_gv_fetchpvn_flags() can avoid copying when the package separator is ::
Nicholas Clark [Fri, 8 Oct 2010 14:39:24 +0000 (15:39 +0100)]
Perl_gv_fetchpvn_flags() can avoid copying when the package separator is ::

11 years agoFix unicode characters in Locale-Maketext ChangeLog
Chris 'BinGOs' Williams [Fri, 8 Oct 2010 11:55:48 +0000 (12:55 +0100)]
Fix unicode characters in Locale-Maketext ChangeLog

11 years agoFix pod/buildtoc's handling of Win32 makefiles
Steve Hay [Thu, 7 Oct 2010 20:56:41 +0000 (21:56 +0100)]
Fix pod/buildtoc's handling of Win32 makefiles

The state of the POD file cleanup code in the Win32 makefiles had parted
company with what pod/buildtoc was looking for. Fix the script for the
current state of play and regenerate the makefiles.

11 years agoBring Locale::Maketext ChangeLog up to date with all recent commits
Todd Rinaldo [Thu, 7 Oct 2010 18:41:21 +0000 (19:41 +0100)]
Bring Locale::Maketext ChangeLog up to date with all recent commits

Signed-off-by: Chris 'BinGOs' Williams <>
11 years agoConvert the implementation of XS_VERSION_BOOTCHECK to a function from a macro.
Nicholas Clark [Thu, 7 Oct 2010 15:30:32 +0000 (16:30 +0100)]
Convert the implementation of XS_VERSION_BOOTCHECK to a function from a macro.

The macro expansion generates over 1K of object code. This is in every shared
object, and is only called once. Hence this change increases the perl binary
by about 1K (once), to save 1K for every XS module loaded.

11 years agoXS::APItest tests for XS_VERSION_BOOTCHECK.
Nicholas Clark [Thu, 7 Oct 2010 14:47:14 +0000 (15:47 +0100)]

11 years agoImprove XSLoader::load documentation.
Nicholas Clark [Thu, 7 Oct 2010 10:19:26 +0000 (11:19 +0100)]
Improve XSLoader::load documentation.

Document that all arguments are passed on to the module's bootstrap function,
and the behaviour of the bootstrap function in modules built by xsubpp.

11 years agoImprove DynaLoader::bootstrap documentation.
Nicholas Clark [Thu, 7 Oct 2010 10:16:30 +0000 (11:16 +0100)]
Improve DynaLoader::bootstrap documentation.

Document that all arguments are passed on to the module's bootstrap function,
and the behaviour of the bootstrap function in modules built by xsubpp.

11 years agoUpdate Win32 makefiles to remove perl5136delta.pod rather than perl5135delta.pod...
Steve Hay [Thu, 7 Oct 2010 09:22:41 +0000 (10:22 +0100)]
Update Win32 makefiles to remove perl5136delta.pod rather than perl5135delta.pod when cleaning

11 years agoPatch for Stratus VOS for extended file names
Paul Green [Thu, 7 Oct 2010 06:43:18 +0000 (23:43 -0700)]
Patch for Stratus VOS for extended file names

The attached 1-line patch to hints/ defines a C macro that enables
support for file names longer than 32 characters on the Stratus OpenVOS
port of perl. As there are now some files in the base package whose
names exceed 32 chars, this is an important change.

This change only applies to OpenVOS (horay for the hints files)! I
tested this change on OpenVOS Release 17.0.2ab.

I have also updated the .pod files that refer to VOS/OpenVOS.

11 years agoRemove MEMBER_TO_FPTR.
Ben Morrow [Tue, 5 Oct 2010 17:55:41 +0000 (18:55 +0100)]

This is left over from PERL_OBJECT (see beeff2, 16c915, and so on).

11 years agoNo distinction between .PL and .pl if case is not preserved.
Craig A. Berry [Thu, 7 Oct 2010 00:19:33 +0000 (19:19 -0500)]
No distinction between .PL and .pl if case is not preserved.

Follow-up to 13b5e8d8173af2197798ae78b4520ece8cb1151c.

On VMS, the CRTL downcases filenames by default, so pod2foo.PL
comes through as  We need to match that so we paste
on the right extension for the generated command procedure.

11 years agoUpdate Unicode-Collate to CPAN version 0.62
Chris 'BinGOs' Williams [Wed, 6 Oct 2010 23:12:46 +0000 (00:12 +0100)]
Update Unicode-Collate to CPAN version 0.62


  0.62  Wed Oct  6 21:35:54 2010
    - U::C::Locale newly supports locales: ar, hu, hy, se, to, uk.
    - Vietnamese (vi): added tailoring for U+0340 and U+0341.

11 years agoAvoid defining a full XSLoader::bootstrap_inherit post 5.6, as it's not needed.
Nicholas Clark [Wed, 6 Oct 2010 18:20:04 +0000 (19:20 +0100)]
Avoid defining a full XSLoader::bootstrap_inherit post 5.6, as it's not needed.

Previously the full pre 5.6 XSLoader::bootstrap_inherit emulation code was
always declared, but only used with a *runtime* check of Perl version.

However, it appears to be part of the implicit API of XSLoader that
XSLoader::bootstrap_inherit exists, so keep a stub implementation post 5.6
 the commit.

11 years agoAdd 'dlext' and 'so' to the initial %Config::Config
Nicholas Clark [Wed, 6 Oct 2010 14:17:08 +0000 (15:17 +0100)]
Add 'dlext' and 'so' to the initial %Config::Config

This avoids loading when is loaded.
It has been reading these at run time since 37589e1eefb1bd62, which post-dates
the analysis of which %Config::Config values are most "popular".

11 years agoGenerate the core-only Makefile.PL for podlators using make_ext.
Nicholas Clark [Tue, 5 Oct 2010 18:30:59 +0000 (19:30 +0100)]
Generate the core-only Makefile.PL for podlators using make_ext.

Using make_ext to generate it uses less code than committing a special
core-only Makefile.PL to the repository, and is no more complex.

11 years agoMoving all pod/*.PL files to ext/ (and cpan/) is now done.
Nicholas Clark [Tue, 5 Oct 2010 16:39:01 +0000 (17:39 +0100)]
Moving all pod/*.PL files to ext/ (and cpan/) is now done.

11 years agoEliminate the now unused Makefile targets plextract, pl and pllist.
Nicholas Clark [Tue, 5 Oct 2010 13:45:15 +0000 (14:45 +0100)]
Eliminate the now unused Makefile targets plextract, pl and pllist.

11 years agoMove pod2html.PL into ext/Pod-Html
Nicholas Clark [Tue, 5 Oct 2010 13:19:08 +0000 (14:19 +0100)]
Move pod2html.PL into ext/Pod-Html

Let ExtUtils::MakeMaker deal with running these extraction scripts, rather than
repeating the logic in (at least) 5 places.

11 years agoMove pod2man.PL, pod2text.PL, podselect.PL into cpan/podlators/scripts
Nicholas Clark [Tue, 5 Oct 2010 10:07:14 +0000 (11:07 +0100)]
Move pod2man.PL, pod2text.PL, podselect.PL into cpan/podlators/scripts

Let ExtUtils::MakeMaker deal with running these extraction scripts, rather than
repeating the logic in (at least) 5 places.

11 years agoMove pod2usage.PL, podchecker.PL, podselect.PL into cpan/Pod-Parser/scripts
Nicholas Clark [Tue, 5 Oct 2010 06:32:21 +0000 (07:32 +0100)]
Move pod2usage.PL, podchecker.PL, podselect.PL into cpan/Pod-Parser/scripts

Let ExtUtils::MakeMaker deal with running these extraction scripts, rather than
repeating the logic in (at least) 5 places.