9 months ago[perl #57512] Warnings for implicitly closed handles sprout/destroio
Father Chrysostomos [Wed, 3 Jul 2013 15:48:23 +0000]
[perl #57512] Warnings for implicitly closed handles

If the implicit close() fails, warn about it, mentioning $! in the
message.  This is a default warning in the io category.

When compiling with -Accflags=-DPERL_NOISY_IO_DESTROY the warning
‘Handle implicitly closed’ applies to any handle that is successfully
implicitly closed.  Enabling this warning in general provides obnox-
iously verbose output, since this practice is so widespread.  I
thought leaving it in might be useful as a tool to make the core Perl
code more robust against I/O errors.  It probably should not be docu-
mented, as such a tool for general use is better implemented as in a
CPAN module that overrides IO::Handle::DESTROY.

This currently produces warnings for code like this:

my $pid = open my $fh, "| perl -e0";
waitpid $pid, 0;
close $fh or die $!;
__END__

Output:
No child processes at - line 3.

I’m not so sure that should warn.  I am not sufficiently versed in
I/O to know when we do and do not want to warn, so I cannot proceed
much further with this.

9 months agoDelete superfluous lines; clarify identifier parsing.
James E Keenan [Tue, 2 Jul 2013 23:20:23 +0000]
Delete superfluous lines; clarify identifier parsing.

Grammar correction suggested by Father Chrysostomos.
For RT #118723.

9 months ago[perl #118561] note that the check is fragile and refer to parent.pm
Tony Cook [Wed, 3 Jul 2013 00:46:59 +0000]
[perl #118561] note that the check is fragile and refer to parent.pm

9 months agoRevert "[perl #118561] failures loading modules are ignored when sub-package exists"
Tony Cook [Wed, 3 Jul 2013 00:33:52 +0000]
Revert "[perl #118561] failures loading modules are ignored when sub-package exists"

This reverts commit c4f21d8bae2372c750ff63b7e5df47996baa1f39.

This broke tests in Moose.

9 months agoperlretut.pod: Rephrase about \p{}.
Karl Williamson [Tue, 2 Jul 2013 21:28:44 +0000]
perlretut.pod: Rephrase about \p{}.

This is in response to ticket [perl #118667].  This commit removes the
confusing table of equivalent Unicode properties.  It contained material
about Unicode without adequate explanation beyond what a tutorial reader
would be expected to know, so I just pulled it out.  The POSIX classes
haven't been introduced at this point, which really are needed for
understanding this.  Below, where they are introduced, I believe the
examples make things adequately clear.

9 months agoperlretut.pod: Rephrase to be consistent with other pods
Karl Williamson [Tue, 2 Jul 2013 20:58:48 +0000]
perlretut.pod: Rephrase to be consistent with other pods

This pod was calling bracketed character classes as just plain
"character classes", but in one place it referred to the period as a
character class as well, which is the terminology used elsewhere.  This
commit notes the distinction.

9 months agoperlgit.pod: Remove one mention of p5p
Father Chrysostomos [Tue, 2 Jul 2013 20:13:44 +0000]
perlgit.pod: Remove one mention of p5p

We oughtn’t encourage people to send patches where they are likely
to be lost.

9 months agoIn the PERL_IMPLICIT_SYS section in perl_free(), use fewer CPP directives.
Nicholas Clark [Mon, 18 Jul 2011 18:49:28 +0000]
In the PERL_IMPLICIT_SYS section in perl_free(), use fewer CPP directives.

The diff is actually confusing to look at - the code itself makes things a
lot clearer:

#    ifdef NETWARE
        void *host = nw_internal_host;
        PerlMem_free(aTHXx);
        nw_delete_internal_host(host);
#    else
        void *host = w32_internal_host;
        PerlMem_free(aTHXx);
        win32_delete_internal_host(host);
#    endif

9 months agoIn embed.fnc, reorder the symbols conditional on HAVE_INTERP_INTERP.
Nicholas Clark [Mon, 18 Jul 2011 17:31:55 +0000]
In embed.fnc, reorder the symbols conditional on HAVE_INTERP_INTERP.

This reordering removes 2 pre-processor directives.

9 months agoTerser fix to avoid warning about an empty body for Slab_to_rw().
Nicholas Clark [Tue, 4 Sep 2012 21:05:09 +0000]
Terser fix to avoid warning about an empty body for Slab_to_rw().

Slab_to_rw() is only defined as a function with -DPERL_DEBUG_READONLY_OPS.
This approach to silencing the warning feels more robust, because it ensures
that Slab_to_rw() acts as a single statement whatever compile-time options
are used.

9 months agoTeach makedef.pl that PL_op_exec_cnt is only available with -DPERL_TRACE_OPS.
Nicholas Clark [Tue, 2 Jul 2013 19:23:46 +0000]
Teach makedef.pl that PL_op_exec_cnt is only available with -DPERL_TRACE_OPS.

9 months agoVery few PAD[HA]Vs are "LVALUE": branch predictor hints
Steffen Mueller [Tue, 2 Jul 2013 17:33:53 +0000]
Very few PAD[HA]Vs are "LVALUE": branch predictor hints

In a nutshell, very few PADHV and PADAV OPs are executed that have
the OPpLVAL_INTRO flag set. To wit, "my %h" does whereas "$h{foo}" and
similar (also "$h{foo} = 1") do not. Also, traditional lexicals greatly
outnumber state variables, so pessimize "state" slightly.

This was determined with a nifty new trick. With a Perl compiled with
-DPERL_TRACE_OPS, we get a summary of all executed op counts by type at
the end of the program execution. The above was figured out (naively) by
adding the following:

--- a/dump.c
+++ b/dump.c
@@ -2215,6 +2215,8 @@ Perl_runops_debug(pTHX)
     do {
 #ifdef PERL_TRACE_OPS
         ++PL_op_exec_cnt[PL_op->op_type];
+        if (PL_op->op_type == OP_PADHV && PL_op->op_private & OPpLVAL_INTRO)
+            ++PL_op_exec_cnt[OP_max+1];
 #endif
        if (PL_debug) {
            if (PL_watchaddr && (*PL_watchaddr != PL_watchok))

Which adds a special case (OP_max+1) to the OP report. Dividing that
count by the total PADHV count gives a diminishingly small percentage.

9 months ago-DPERL_TRACE_OPS to produce reports on executed OP counts
Steffen Mueller [Tue, 2 Jul 2013 17:06:01 +0000]
-DPERL_TRACE_OPS to produce reports on executed OP counts

This produces a report on the number of OPs of a given type that were
executed at the end of a program run. This can be useful in multiple
ways. One, it can help determine hotspots for optimization (yes, I know
execution count is not equal execution time). It can also help with
determining whether a given change to perl has had the desired effect on
deterministic programs.

9 months agoRemove defunct DESCRIP.MMS cleanup rules.
Nicholas Clark [Mon, 17 Jun 2013 13:52:30 +0000]
Remove defunct DESCRIP.MMS cleanup rules.

Rules to remove C and object files from vms/ext were made redundant when
commit 26dd53a231877708 in Sep 2009 moved the XS extensions from there to
ext/

The wildcard rule to remove t/lib/vms*.t, which has been in
vms/descrip_mms.template since the file was added by commit 97abc6adffcd3efc
in June 1998 was effectively made redundant when it was duplicated by 4
specific rules for the 4 files it matched added by commit 493ba88a837f5a6b
in June 2001.

The rule to delete t/lib/vmsish.t was made redundant when vms/ext/vmsish.*
were moved to lib/ by commit 9f84c00564fd021b in Nov 2001.

9 months agoMove VMS::Filespec from vms/ext to ext/
Nicholas Clark [Mon, 17 Jun 2013 09:49:39 +0000]
Move VMS::Filespec from vms/ext to ext/

This simplifies the VMS Makefile. It would have simplified the VMS Makefile
further if it had had the correct rules to delete [.lib.VMS]Filespec.pm
which are now no longer needed. (The generated ext/VMS-Filespec/DESCRIP.MMS
will now take care of this.)

9 months agovms/ext/filespec.t does not need to be +x
Nicholas Clark [Mon, 17 Jun 2013 09:37:50 +0000]
vms/ext/filespec.t does not need to be +x

The mode of this file has rattled back and forth between +x and -x since it
was first added. It makes no difference which it is, so remove -x and hence
1 special case.

9 months agoMerge in the improvements to the build helper module FindExt.
Nicholas Clark [Tue, 2 Jul 2013 13:33:46 +0000]
Merge in the improvements to the build helper module FindExt.

9 months agoRefactor FindExt, merging scan_ext() and find_ext().
Nicholas Clark [Mon, 17 Jun 2013 09:27:16 +0000]
Refactor FindExt, merging scan_ext() and find_ext().

The return value of FindExt::scan_ext() has never been used, since FindExt
was first added by commit 8e2329934bcca9c5 in April 2001. The call to
FindExt::extensions() has no side effects, so it can be eliminated. Hence
FindExt::scan_ext() is a trivial wrapper around FindExt::find_ext(), and the
two can be merged.

Also, simplify the logic for "known" extensions. The complexity of checking
the hash first was needed when extension directories were nested. It should
have been removed as part of commit 1f8a0b38638b171c in Feb 2009.

9 months agoSkip most of FindExt's tests for troublesome configurations.
Nicholas Clark [Mon, 17 Jun 2013 08:50:33 +0000]
Skip most of FindExt's tests for troublesome configurations.

There are various various things that break the test's assumptions.
1) If Encode is a static extension, then Configure has special case logic
   to add Encode/* as static extensions
2) -Uusedl causes Encode to be a static extension, and drops building
    XS::APItest and XS::Typemap
3) Any use of -Dnoextensions to choose not to build a extension is not known
   by the test

If any of these are true, FindExt::extensions() and $Config{extensions} will
differ, and most of the tests are going to fail. Moreover, failure doesn't
tell us anything interesting. So don't run those tests.

9 months agoIn FindExt.t, move the main loop's comparison logic into a subroutine.
Nicholas Clark [Mon, 17 Jun 2013 08:19:48 +0000]
In FindExt.t, move the main loop's comparison logic into a subroutine.

9 months agoMinor refactors to FindExt's test, removing code duplication.
Nicholas Clark [Fri, 14 Jun 2013 09:28:31 +0000]
Minor refactors to FindExt's test, removing code duplication.

Use a ternary instead of if/unless on the same $^O test.
Use a loop to call FindExt::scan_ext()
As FindExt exports nothing, we can require it rather than using it.

9 months agoThanks to FindExt::apply_config() we're now able to test dynamic extensions.
Nicholas Clark [Wed, 5 Jun 2013 19:19:12 +0000]
Thanks to FindExt::apply_config() we're now able to test dynamic extensions.

FindExt::apply_config() mimic's Configure's logic, which means that FindExt's
idea of which extensions should be built is consistent with Configure's.

9 months agoCorrect a type in FindExt::apply_config in the "I18N-Langinfo" code.
Nicholas Clark [Wed, 5 Jun 2013 18:15:12 +0000]
Correct a type in FindExt::apply_config in the "I18N-Langinfo" code.

Commit 557ab4cb986767c7 (Feb 2011) which added this routine had
$config->{i_nl_langinfo} not $config->{d_nl_langinfo} ('i' should be 'd').

The logic for I18N::Langinfo should now be correct.

9 months agoIn FindExt, eliminate _ext_ne() and make extensions() a simple subroutine.
Nicholas Clark [Fri, 14 Jun 2013 15:10:31 +0000]
In FindExt, eliminate _ext_ne() and make extensions() a simple subroutine.

Previously _ext_ne() was a generator function, and extensions() and
known_extensions() were generated by it. Now that known_extensions() has a
different implementation, extensions() was the last user of _ext_ne(), so
there's no saving by keeping the complexity.

9 months agoAlso add Encode's sub-modules to known_extensions when building statically.
Nicholas Clark [Tue, 18 Jun 2013 10:00:38 +0000]
Also add Encode's sub-modules to known_extensions when building statically.

There is code in Configure to treat Encode specially when it is specified as
a statically linked extension. By default, Encode builds separated shared
objects for each of its subdirectories. This works well with DynaLoader,
and the top level perl Makefile doesn't even notice this, because it doesn't
have to list these libraries as things it links with at compile time.

For a static link, Encode builds a separate *.a file for each of its
subdirectories. The top level Makefile *does* need to know about these, as
a static link requires them all to be listed. Hence the work-around is to
treat Encode as a set of nested modules if linked statically.

We can't do this in Makefile.SH because the various Encode submodules are
installed as separate *.a files in the tree, and so need to continue to be
treated as distinct modules in case ExtUtils::MakeMaker is asked to (re)link
a static perl with an additional extension.

I suspect that the most elegant fix would be to tweak Encode's top level
Makefile.PL to link everything into one *.a if it is building statically.
I'm not sure how to do that, and it would need to be accepted upstream.

9 months agoAdd non-XS extensions to known_extensions.
Nicholas Clark [Fri, 14 Jun 2013 14:56:28 +0000]
Add non-XS extensions to known_extensions.

Previously "known_extensions" was misnamed, as it only contained known XS
extensions. grep.cpan.me suggests that there are only 10 mentions of it
outside the core, and none of them rely on this existing behaviour.

Update the descriptions of extensions, known_extensions and nonxs_ext in
Porting/Glossary.

These changes need replicating into configure.com.

9 months agoRemove Configure code that supported the old-style nested layout for ext/
Nicholas Clark [Fri, 14 Jun 2013 14:19:06 +0000]
Remove Configure code that supported the old-style nested layout for ext/

5.10.1 switched to the new layout, so this code would only be useful for
backporting to maint-5.8. That isn't going happen, so it can go.

9 months agoTrim the explicit Makefile rules to generate {mini,}perlmain.o
Nicholas Clark [Mon, 30 Apr 2012 16:00:39 +0000]
Trim the explicit Makefile rules to generate {mini,}perlmain.o

These duplicate the suffix rules used for general .c -> .o compilation.
makedepend automatically generates a dependency for miniperlmain.o on
patchlevel.h

9 months agoOP*method was added in c106c2be8b83ee but never used
Tony Cook [Tue, 2 Jul 2013 05:27:12 +0000]
OP*method was added in c106c2be8b83ee but never used

9 months agoBranch predictor hints: exists is mostly run on hashes
Steffen Mueller [Tue, 2 Jul 2013 05:25:45 +0000]
Branch predictor hints: exists is mostly run on hashes

9 months agoS_strip_spaces doesn't need to be seen out of core
Peter Martini [Mon, 1 Jul 2013 20:09:02 +0000]
S_strip_spaces doesn't need to be seen out of core

9 months agoPatches must not be sent via git's format-patch/send-email
Tony Cook [Tue, 25 Jun 2013 06:43:35 +0000]
Patches must not be sent via git's format-patch/send-email

updated to match perlgit.pod

9 months ago#118675 fix 4 porting/pod_rules.t uses different perl than compiled one
Daniel Dragan [Sat, 29 Jun 2013 00:53:12 +0000]
#118675 fix 4 porting/pod_rules.t uses different perl than compiled one

See rt ticket #118675 for background on this patch.

9 months agodist/lib/Makefile.PL: change INSTALLDIRS to 'site' for 5.12 and later
Brian Gottreu [Tue, 2 Jul 2013 00:54:03 +0000]
dist/lib/Makefile.PL: change INSTALLDIRS to 'site' for 5.12 and later

9 months agoperldelta for c448c12411b1ba
Tony Cook [Tue, 2 Jul 2013 01:25:29 +0000]
perldelta for c448c12411b1ba

9 months agoMake perlbug look up the list of local patches at run time
Niko Tyni [Thu, 27 Jun 2013 11:37:01 +0000]
Make perlbug look up the list of local patches at run time

Re-parsing patchlevel.h in Perl by perlbug.PL is error prone
and apparently unnecessary. The same information is available
to perlbug via Config::local_patches().

This fixes [perl #118433].

9 months agoFix to make 8d455b9f99c1046e969462419b0eb5b8bf740a47 not a lie
Steffen Mueller [Mon, 1 Jul 2013 19:29:14 +0000]
Fix to make 8d455b9f99c1046e969462419b0eb5b8bf740a47 not a lie

Previous commit 8d455b9f99c1046e969462419b0eb5b8bf740a47 was a partial
lie. This commit fixes it up not to be a lie and to avoid mortalizing
the HV.

9 months agoAvoid needless refcount and mortialization on pp_anonhash
Steffen Mueller [Mon, 1 Jul 2013 18:33:05 +0000]
Avoid needless refcount and mortialization on pp_anonhash

pp_anonhash can be used to construct both bare hashes and hashrefs. In
the hashref case, it used to create an HV and mortalize it. Then it went
through the parameters on the stack and copied them into the hashref.
This can throw exceptions which would make the HV leak if it hadn't been
mortalized.

After potentially copying the arguments, pp_anonhash would then in the
hashREF case increment the refcount on the HV *again*, create an RV for
the HV, and mortalize that RV before pushing it on the stack.

Instead, we can get away with constructing the HV and only mortalizing
it if there's no mortalizable ref to clean up if there's an exception.
This should remove a fair fraction of work in the common case of empty {}
hash ref construction.

9 months agoFix regex seqfault 5.18 regression
Karl Williamson [Mon, 1 Jul 2013 16:26:14 +0000]
Fix regex seqfault 5.18 regression

This segfault is a result of an optimization that can leave the
compilation in an inconsistent state.

  /f{0}/

doesn't match anything, and hence should be removable from the regex for
all f.  However,

  qr{(?&foo){0}(?<foo>)}

caused a segfault.  What was happening prior to this commit is that
(?&foo) refers to a named capture group further along in the regex.
The "{0}" caused the "(?&foo)" to be discarded prior to setting up the
pointers between the two related subexpressions; a segfault follows.

This commit removes the optimization, and should be suitable for a
maintenance release.

One might think that no one would be writing code like this, but this
example was distilled from machine-generated code in Regexp::Grammars.

Perhaps this optimization can be done, but the location I chose for
checking it was during parsing, which turns out to be premature.  It
would be better to do it in the optimization phase of regex compilation.
Another option would be to retain it where it was, but for it to operate
only on a limited set of nodes, such as EXACTish, which would have no
unintended consequences.  But that is for looking at in the future; the
important thing is to have a simple patch suitable for fixing this
regression in a maintenance release.

For the record, the code being reverted was mistakenly added by me in
commit 3018b823898645e44b8c37c70ac5c6302b031381, and wasn't even
mentioned in that commit message.  It should have had its own commit.

9 months agoMerge the branch that purged various under-used Makefile targets.
Nicholas Clark [Mon, 1 Jul 2013 09:40:12 +0000]
Merge the branch that purged various under-used Makefile targets.

9 months agoDocument the removed Makefile targets in perldelta.
Nicholas Clark [Mon, 1 Jul 2013 09:39:39 +0000]
Document the removed Makefile targets in perldelta.

9 months agoIn perlhacktips, suggest a shell loop to generate all .gcov files.
Nicholas Clark [Thu, 20 Jun 2013 14:46:05 +0000]
In perlhacktips, suggest a shell loop to generate all .gcov files.

9 months agoEliminate the perl.gprof and perl.gcov Makefile targets.
Nicholas Clark [Thu, 20 Jun 2013 11:52:15 +0000]
Eliminate the perl.gprof and perl.gcov Makefile targets.

I don't feel that it's worthwhile having specific named targets for
building named binaries for use with gprof and gcov given that one has to
(re)Configure with the appropriate C compiler flags, hence all the object
files and the F<perl> that the build tree would build are just as enabled
(or contaminated) with profiling code as the specially named binary.

Update the documentation on using gprof and gcov to reflect that the binary
named F<perl> is now the binary that is profiled.

9 months agoRun Porting/podtidy on pod/perlhacktips.pod
Nicholas Clark [Thu, 20 Jun 2013 09:00:34 +0000]
Run Porting/podtidy on pod/perlhacktips.pod

9 months agoUpdate perlhacktips to note that Address Sanitizer is now also in gcc 4.8
Nicholas Clark [Thu, 20 Jun 2013 08:51:17 +0000]
Update perlhacktips to note that Address Sanitizer is now also in gcc 4.8

Also s/linux/Linux/ in two places.

9 months agoIn perlhacktips, no need to give 3 ways to set an environment variable.
Nicholas Clark [Thu, 20 Jun 2013 08:15:31 +0000]
In perlhacktips, no need to give 3 ways to set an environment variable.

9 months agoRemove the explicit purify/quantify/purecov targets and documentation.
Nicholas Clark [Thu, 20 Jun 2013 08:01:20 +0000]
Remove the explicit purify/quantify/purecov targets and documentation.

It's not clear whether IBM still sell quantify or purecov. They still seem
to sell purify, but I'm not sure if anyone is using it these days to detect
bugs in perl.

This doesn't prevent anyone from using these tools if they have them, as
it's still possible to run the commands by "hand". But by removing probably
unused code and documentation, the signal to noise ratio improves.

9 months agoWe don't actually need to set $ENV{PERL} for the tests to work.
Nicholas Clark [Wed, 19 Jun 2013 19:39:39 +0000]
We don't actually need to set $ENV{PERL} for the tests to work.

Whatever the executable is named at the top level, it's always symlinked
as ./perl in t, so there's no need to set an environment variable to
override the expected name.

9 months agovalgrind doesn't require that perl was built with -g, so remove the check.
Nicholas Clark [Wed, 19 Jun 2013 19:13:45 +0000]
valgrind doesn't require that perl was built with -g, so remove the check.

C<make test.valgrind> will run quite happily on a perl built with
optimisation and without debugging symbols. So don't enforce -g.

9 months agoInline the Makefile target minitest.prep into its only user.
Nicholas Clark [Wed, 19 Jun 2013 12:09:55 +0000]
Inline the Makefile target minitest.prep into its only user.

This is strictly a refactoring, so do not change the rules themselves, despite
them being ugly and fragile.

9 months agoRemove Makefile targets and tools related to Irix and Tru64 debugging tools.
Nicholas Clark [Wed, 19 Jun 2013 11:37:25 +0000]
Remove Makefile targets and tools related to Irix and Tru64 debugging tools.

Remove the targets:

perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix perl.third
perl.third.config

It's still possible to run the actions these targets "by hand", if desired.
This commit removes the convenience targets from the Makefile, reducing its
complexity. It also removes the related support scripts testall.atom and
thirdclean from Porting/

pixie is a performance analysis tool for Irix and Tru64
Third Degree is a memory checker tool for Tru64

Given that Tru64 went out of support at the end of 2012, and Irix goes out
of support at the end of 2013, it's very unlikely that anyone is still
actively profiling or debugging perl on either platform, and hence using
these targets. It's been several years since we've even had a regular bug
report from either platform.

9 months agoRemove various rarely used test targets from the generated Makefile.
Nicholas Clark [Wed, 19 Jun 2013 10:35:33 +0000]
Remove various rarely used test targets from the generated Makefile.

Remove these targets and their documentation:

check.third check.utf16 check.utf8 coretest minitest.utf16 test.deparse
test.taintwarn test.third test.torture test.utf16 test.utf8
test_notty.deparse test_notty.third test_prep.third torturetest ucheck
ucheck.third ucheck.utf16 ucheck.valgrind utest utest.third utest.utf16
utest.valgrind

It's still possible to run the actions these targets "by hand", if desired.
This commit simply removes the convenience targets from the Makefile,
reducing its complexity.

9 months ago[perl #71680] hints to use gdbm compat for [NO]DBM_File on Win32
Tony Cook [Mon, 24 Jun 2013 06:27:42 +0000]
[perl #71680] hints to use gdbm compat for [NO]DBM_File on Win32

9 months agoSmall stylistic improvement; add one POD formatting character.
James E Keenan [Sat, 26 Jan 2013 15:05:29 +0000]
Small stylistic improvement; add one POD formatting character.

9 months agoGive little more examples to interpolated typemap variables
Hojung Youn [Fri, 25 Jan 2013 09:52:53 +0000]
Give little more examples to interpolated typemap variables

Added an example for $type Perl variable interpolated by typemap.
and adjusted an example of $ntype Perl variable of typemap to
illustrate its effect.

9 months agoMake t/comp/parser.t get the correct libraries.
Craig A. Berry [Mon, 1 Jul 2013 02:09:21 +0000]
Make t/comp/parser.t get the correct libraries.

In principle it shouldn't need libraries, but an eval of a utf8
constant now triggers automatic loading of utf8.pm, and it was
looking for that in the usual @INC locations set at configuration
time.  Which just might match an installed perl rather than the
perl being tested.  So make sure we get the correct libraries.

9 months agochange tied_method to use SVs with precomputed hash values
Ruslan Zakirov [Mon, 25 Feb 2013 09:46:02 +0000]
change tied_method to use SVs with precomputed hash values

9 months agochange magic_methcall to use SV with shared hash value
Ruslan Zakirov [Sun, 24 Feb 2013 12:05:51 +0000]
change magic_methcall to use SV with shared hash value

Perl_magic_methcall is not public API, so there is no
need to add another function and we can just change
function's arguments.

9 months agoSV_CONST(name) and PL_sv_consts
Ruslan Zakirov [Mon, 25 Mar 2013 01:31:35 +0000]
SV_CONST(name) and PL_sv_consts

SV_CONST(XXX) returns SV* that contains "XXX" string.
SVs are built on demand and stored in interp's structure
for re-use. All SVs have precomputed hash value.

Creates SVs on demand, we don't want 35 SV created during
compile time or cloned during thread creation.

9 months agoG_METHOD_NAMED flag for call_method and call_sv
Ruslan Zakirov [Sat, 29 Sep 2012 16:41:10 +0000]
G_METHOD_NAMED flag for call_method and call_sv

Can be used when it's known that method name has no
package part - just method name.

With flag set SV with precomputed hash value is used
and pp_method_named is called instead of pp_method.
Method lookup is faster.

9 months agoperldiag: Consistent spaces after dots
Father Chrysostomos [Sun, 30 Jun 2013 06:44:30 +0000]
perldiag: Consistent spaces after dots

9 months agoUpdate IPC-Cmd to CPAN version 0.82
Chris 'BinGOs' Williams [Sat, 29 Jun 2013 21:34:17 +0000]
Update IPC-Cmd to CPAN version 0.82

  [DELTA]

  Changes for 0.82    Sat Jun 29 22:11:22 BST 2013
  =================================================
  * Typo fixes (David Steinbrunner)

9 months agoop.c: Suppress compiler warning
Father Chrysostomos [Sat, 29 Jun 2013 01:31:26 +0000]
op.c: Suppress compiler warning

Sorry, commit 08aff5359 was not quite ready and I pushed it too soon.

The purpose of the if block that it removed was to suppress a warn-
ing about an unused variable, but it was a very strange way of accom-
plishing that.

We have a much simpler way that takes only one line and expresses its
intent clearly.

9 months agoregenerate t/porting/known_pod_issues.dat
Brian Gottreu [Fri, 28 Jun 2013 23:43:41 +0000]
regenerate t/porting/known_pod_issues.dat

9 months agoRun the pedantic checks when regenerating the database
Brian Gottreu [Fri, 28 Jun 2013 23:07:49 +0000]
Run the pedantic checks when regenerating the database

Make the two checks of possible poor uses of C<>
pedantic checks.

Allow --pedantic to turn on those tests in addition to
the environmnt variable.

9 months agodo not worry about long verbatim lines w/o env var
Ricardo Signes [Tue, 18 Jun 2013 23:45:56 +0000]
do not worry about long verbatim lines w/o env var

To run these tests, set PERL_POD_PEDANTIC in the environment.

This needs further testing, at least, to ensure that it behaves correctly
when regenerating the known problem files.

9 months agoRevert "Make t/podcheck.t less sensitive"
Ricardo Signes [Tue, 18 Jun 2013 23:27:11 +0000]
Revert "Make t/podcheck.t less sensitive"

This reverts commit f26da014a698383ac348973050af3e754752e6ab.

Conflicts:
t/porting/known_pod_issues.dat

9 months agoop.c: Remove dummy code from const_sv_xsub
Father Chrysostomos [Fri, 28 Jun 2013 21:24:59 +0000]
op.c: Remove dummy code from const_sv_xsub

This was added in commit 9cbac4c7 with no explanation.  It has been
#ifdeffed out since it was added.  That commit was supposedly just for
compiler warnings.  I think this was something else the author was
playing with that got combined in the same patch by mistake.

9 months agoperlfunc: consistent spaces after dots
Father Chrysostomos [Fri, 28 Jun 2013 19:45:41 +0000]
perlfunc: consistent spaces after dots

plus one typo fix

9 months agoClarify variable lists for my, our, state.
Johan Vromans [Mon, 24 Jun 2013 07:23:49 +0000]
Clarify variable lists for my, our, state.

9 months ago7b2d3c0 Added description of the Benchmark object to doc
Neil Bowers [Wed, 26 Jun 2013 21:53:55 +0000]
7b2d3c0 Added description of the Benchmark object to doc

9 months agoop.c:cv_ckproto_len_flags: do null checks first
Father Chrysostomos [Fri, 28 Jun 2013 07:09:02 +0000]
op.c:cv_ckproto_len_flags: do null checks first

Checking local variables for nullness is faster than calling ckWARN_d,
which involves a function call.

9 months agoReinstate UTF8f
Father Chrysostomos [Wed, 26 Jun 2013 03:31:54 +0000]
Reinstate UTF8f

This format string allows char*s to be interpolated with the
utf8ness and length specified as well, avoiding the need to create
extra SVs:

Perl_croak(aTHX_ "Couldn't twiggle the twoggle in \"%"UTF8f"\"",
                  UTF8fARG(is_utf8, len, s));

This is the second attempt.

I screwed up in commits 1c8b67b38f0a5 and b3e714770ee1 because
I didn’t really understand how varargs functions receive their
arguments.

They are like structs, in that different members can be different
sizes.  So therefore both ends--the caller and the called--*must* get
the casts right, or the data will be corrupted.

The main mistake I made was to use %u in the format for the first
argument and then retrieve it as UV (a simple typo, I meant unsigned
int or U32--I don’t remember).

To be on the safe side, I added a UTF8fARG macro (after SVfARG), which
(unlike SVfARG) takes three arguments and casts them explicitly, mak-
ing it much harder to get this wrong at call sites.

9 months agomake sure the prototype actually matches
Tony Cook [Fri, 28 Jun 2013 01:55:27 +0000]
make sure the prototype actually matches

because:

a) I think it better demonstrates the fix, the following failed without
the patch:

./perl -Ilib -le 'my $proto = "\x{30cd}"; eval "sub f($proto) {}"; print prototype(\&f); print prototype(\&f) eq $proto'

b) I can envision bugs that might preserve UTF-8 but mis-manage the content

9 months agopad.c, S_cv_clone: Maintain the utf8-ness of the cloned cv
Brian Fraser [Sun, 24 Mar 2013 08:58:43 +0000]
pad.c, S_cv_clone: Maintain the utf8-ness of the cloned cv

Because of a missing SvUTF8_on() in cv_clone(), these two were different:

    use utf8;
    eval "   sub foo ($;\x{30cd});"
    eval "my sub foo ($;\x{30cd});"

Because the lexical version would lose the UTF8 flag in the
prototype.

9 months agoperlexperiment: mark :pop layer as accepted
Ricardo Signes [Thu, 27 Jun 2013 02:12:34 +0000]
perlexperiment: mark :pop layer as accepted

9 months agoMANIFEST: add t/porting/readme.t
Brian Gottreu [Thu, 27 Jun 2013 03:11:17 +0000]
MANIFEST: add t/porting/readme.t

9 months agoFix Porting/README.pod so it passes its new test.
Brian Gottreu [Thu, 27 Jun 2013 00:44:34 +0000]
Fix Porting/README.pod so it passes its new test.

Added entries for sync-with-cpan and README.pod itself.  Rearranged
entries to be sorted consistently.

9 months agot/porting/readme.t: Check Porting/README.pod consistency
Brian Gottreu [Thu, 27 Jun 2013 00:39:25 +0000]
t/porting/readme.t: Check Porting/README.pod consistency

This is a slightly expanded (or bloated) version of the patch
Dennis Kaarsemaker <dennis@kaarsemaker.net> submitted.

9 months agoCorrect the SYNOPSIS for Module::CoreList::Utils
Chris 'BinGOs' Williams [Thu, 27 Jun 2013 15:15:32 +0000]
Correct the SYNOPSIS for Module::CoreList::Utils

9 months agoUpdate HTTP-Tiny to CPAN version 0.034
Chris 'BinGOs' Williams [Thu, 27 Jun 2013 10:04:53 +0000]
Update HTTP-Tiny to CPAN version 0.034

  [DELTA]

0.034     2013-06-26 19:02:25 America/New_York

  [ADDED]

  - Added support for 'Basic' authorization from
    user:password parameters in the URL

9 months agocv_ckproto should disregard spaces
Peter Martini [Thu, 27 Jun 2013 04:06:16 +0000]
cv_ckproto should disregard spaces

This included some refactoring to break down the original
large if block into smaller, more manageable chunks,
although the only functional change was to pass the two
string buffers through S_strip_spaces.

9 months agot/re/reg_mesg.t: Add diagnostic output on some failures
Karl Williamson [Wed, 26 Jun 2013 23:51:36 +0000]
t/re/reg_mesg.t: Add diagnostic output on some failures

9 months ago[perl #117751] prevent POSIX::AUTOLOAD recursing if POSIX$(so) fails to load
Aristotle Pagaltzis [Thu, 27 Jun 2013 01:55:13 +0000]
[perl #117751] prevent POSIX::AUTOLOAD recursing if POSIX$(so) fails to load

9 months agoUse -Wno-unused-value also on other clang compilers
Reini Urban [Mon, 8 Apr 2013 17:25:27 +0000]
Use -Wno-unused-value also on other clang compilers

clang++ or clang-3.2, ...

9 months ago[perl #117535, #76910] Fix bogus ambiguity warnings
Father Chrysostomos [Thu, 27 Jun 2013 01:03:04 +0000]
[perl #117535, #76910] Fix bogus ambiguity warnings

‘Ambiguous use of * resolved as operator *’: This message can occur in
cases where there is no multiplication operator, so what it is saying
is completely wrong.

When the lexer parses a bareword, it looks at the previous character
and warns if it happens to match /[*%&]/, so foo**bar and foo&&bar
result in this warning, as does print $%foo.

The purpose of the code is to catch *bar *bar or &black &sheep.

To avoid false positives, when emitting one of the three operators
* % & the lexer can record that fact, so when it sees a bareword pre-
ceded by one of those three characters, instead of guessing that the
infix operator was used, it will *know*.

The test cases added also trigger ‘Bareword found where operator
expected’.  I don’t know whether that should change, but at least the
current behaviour is tested, so we will know when it does change.

9 months agoregen/genpacksizetables.pl: Add comment
Karl Williamson [Wed, 26 Jun 2013 21:52:01 +0000]
regen/genpacksizetables.pl: Add comment

9 months agoperlguts: Nit
Karl Williamson [Wed, 26 Jun 2013 21:50:37 +0000]
perlguts: Nit

9 months agoembed.fnc: S_ptr_hash is inline
Father Chrysostomos [Wed, 26 Jun 2013 13:05:06 +0000]
embed.fnc: S_ptr_hash is inline

S_ptr_hash is declared with PERL_STATIC_INLINE in hv.c, but embed
thinks it is just static, so the proto.h and hv.c definitions do not
match, resulting in warnings.

9 months agoUpdate Digest-SHA to CPAN version 5.85
Chris 'BinGOs' Williams [Wed, 26 Jun 2013 11:42:13 +0000]
Update Digest-SHA to CPAN version 5.85

  [DELTA]

5.85  Wed Jun 26 04:05:26 MST 2013
  - workaround for repeated calls to shaclose (ref. Bug #86295)
    -- need to explicitly reset internal pointer to NULL
      ref. shaclose() in SHA.xs
  - corrected typos in shasum script
    -- ref. Bug #85430

9 months agoPut all sort arguments in list context
Father Chrysostomos [Wed, 26 Jun 2013 07:38:52 +0000]
Put all sort arguments in list context

The arguments following the first were using the context the enclosing
function was called in.

sub context { warn qw[void scalar list][wantarray + defined wantarray ] }
sub foo { sort +context, context; print "------\n"; }
foo;
$_ = foo;
[foo];
__END__

Output:

list at - line 1.
void at - line 1.
------
list at - line 1.
scalar at - line 1.
------
list at - line 1.
list at - line 1.
------

Extend the list context to all arguments.

9 months agoFix up f_sort.t for changes in the prev commit
Father Chrysostomos [Wed, 26 Jun 2013 08:08:29 +0000]
Fix up f_sort.t for changes in the prev commit

9 months agoPut sort arguments in lvalue context
Father Chrysostomos [Wed, 26 Jun 2013 07:32:58 +0000]
Put sort arguments in lvalue context

Since $a and $b are aliased to the actual scalars being sorted, and
since they can be modified, the list of items needs to be in lvalue
context, like the arguments to grep.  Otherwise implementation
details leak through, in that sort{$a=1} $_,... will modify $_, but
sort{$a=1} $#_,... will fail to modify $#_.

The way I have written the loop and if() condition (the if inside the
loop) may seem odd and inefficient, but the next commit will take
advantage of that.

9 months agoIn-place sort should not leave array read-only
Father Chrysostomos [Wed, 26 Jun 2013 07:18:03 +0000]
In-place sort should not leave array read-only

$ ./perl -Ilib -e '@a=1..2; eval { @a=sort{die} @a }; warn "ok so far\n"; @a = 1'
ok so far
Modification of a read-only value attempted at -e line 1.

If something goes wrong inside the sort block and it dies, we still
need to make sure we turn off the read-only flag on that array.

9 months agodocument that it is the operator that determines the operation
Moritz Lenz [Sun, 21 Apr 2013 14:11:06 +0000]
document that it is the operator that determines the operation

In many other dynamic languages it is the operator plus the type of the
first operand, so it is worth mentioning.

9 months agoIncrease $if::VERSION to 0.0603
Father Chrysostomos [Wed, 26 Jun 2013 06:31:34 +0000]
Increase $if::VERSION to 0.0603

9 months agoAdded example usage and SEE ALSO links to similar modules in doc for if.pm
Neil Bowers [Mon, 24 Jun 2013 23:51:49 +0000]
Added example usage and SEE ALSO links to similar modules in doc for if.pm

9 months agoop.c:S_simplify_sort: remove redundant OPf_STACKED check
Father Chrysostomos [Wed, 26 Jun 2013 05:06:57 +0000]
op.c:S_simplify_sort: remove redundant OPf_STACKED check

S_simplify_sort is only called from one spot and only when the
OPf_STACKED flag is not set.

9 months agoop.c:ck_sort: Restore HINT_LOCALIZE_HH check
Father Chrysostomos [Wed, 26 Jun 2013 04:47:44 +0000]
op.c:ck_sort: Restore HINT_LOCALIZE_HH check

I remove this by mistake in commit 354dd559d99.  It makes no
difference to the behaviour.  This check is just for efficiency.

9 months agoRevert "Use UTF8f in more places"
Karl Williamson [Wed, 26 Jun 2013 00:42:45 +0000]
Revert "Use UTF8f in more places"

This reverts commit acc19697c67fa63c10e07491b670a26c48f4175f.

This and the other UTF8f patch are causing significant problems on some
configurations on 32-bit platforms.  We've decided to revert them until
they can be resubmitted after the kinks get ironed out.