This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl5.git
6 years agoEliminate eliminate_macros and fixpath.
Craig A. Berry [Wed, 3 Dec 2014 04:09:12 +0000 (22:09 -0600)]
Eliminate eliminate_macros and fixpath.

These functions have been deprecated outside of MakeMaker for
many years, but due to the complicated inheritance situation
in EUMM have been difficult to get rid of because sometimes the
File::Spec versions would get called when we thought we were
calling the MakeMaker versions.  As of MakeMaker 7.04, the last
call to the File::Spec version of fixpath is gone, so we can
finally remove these from File::Spec.

And bump PathTools versions once again.

6 years agoreduce stderr noise in build
David Mitchell [Wed, 3 Dec 2014 13:30:12 +0000 (13:30 +0000)]
reduce stderr noise in build

Ideally you should be able to do

    (Configure && make test) 2> /tmp/err

with /tmp/err being empty. This is not the case, and this commit
is a first step towards that goal.

The

    fprintf (stderr, "Sizeof time_t = %ld\n", sizeof (time_t));

in Configure appears to be just a debugging aid; it's also a copy of the
code in Porting/timecheck.c, which people can always run if need-be.

hints/linux.sh appears to be looking for symbols in libdb.so; if the
library is stripped, this produces to stderr:

    /bin/nm: /lib/libdb.so: no symbols

I've silenced it for now with a 2>/dev/null, but I'm not sure if the whole
test is flawed, since with no symbols, 'nm libdb.so | grep pthread' is a
no-op.

make_patchnum.pl, when running backticks, prints $? to stderr if it's
non-zero; since a similar print in the other branch is already commented
out, I assume its just left-over debugging.

6 years agoStop test suite filling /tmp
David Mitchell [Wed, 3 Dec 2014 10:53:00 +0000 (10:53 +0000)]
Stop test suite filling /tmp

Some test files use File::Temp in such a way that the temporary files and
directories under /tmp aren't deleted at the end. On a smoker system, this
can gradually accumulate thousands of entries under /tmp.

The general culprits fixed by this commit are:

1) using tempfile() without the UNLINK => 1 argument;

2) Using Test::More (which uses Test::Stream), which creates a test
   directory in such a way that only the original parent thread will
   remove it; for some reason I still don't fully understand, detaching a
   thread rather than joining it stops this clean up happening. In the
   affected test files, I replaced the ->detach() with a ->join() just
   before exit, and the problem went away.

Some tests under cpan/ are still leaky; these will be addressed upstream.

6 years agopp_eof: a new SV can't have setmagic
Daniel Dragan [Wed, 3 Dec 2014 00:31:35 +0000 (19:31 -0500)]
pp_eof: a new SV can't have setmagic

-dont compute GvSV multiple times

6 years agoperldelta for faa5d6ec871c
Tony Cook [Wed, 3 Dec 2014 03:02:28 +0000 (14:02 +1100)]
perldelta for faa5d6ec871c

6 years ago[perl #122635] avoid turning a leading // into / on cygwin
Tony Cook [Wed, 3 Dec 2014 02:51:59 +0000 (13:51 +1100)]
[perl #122635] avoid turning a leading // into / on cygwin

//server/sharename is used for Win32 shares on cygwin

bump version, synchronizing across all of PathTools.

6 years agoSpeed up method calls like $o->Other::method() and $o->Other::SUPER::method().
syber [Mon, 1 Dec 2014 20:20:27 +0000 (23:20 +0300)]
Speed up method calls like $o->Other::method() and $o->Other::SUPER::method().

It was done by adding new OP_METHOD_REDIR and OP_METHOD_REDIR_SUPER optypes.
Class name to redirect is saved into METHOP as a shared hash string.
Method name is changed (class name removed) an saved into op_meth_sv as
a shared string hash.

So there is no need now to scan for '::' and calculate class and method names
at runtime (in gv_fetchmethod_*) and searching cache HV without precomputed hash.

B::* modules are changed to support new op types.
method_redir is now printed by Concise like (for threaded perl)
$obj->AAA::meth
5        <.> method_redir[PACKAGE "AAA", PV "meth"] ->6

6 years ago[perl #123063] allow assert() to be used as an expression
Tony Cook [Wed, 12 Nov 2014 02:53:48 +0000 (13:53 +1100)]
[perl #123063] allow assert() to be used as an expression

In non-DEBUGGING builds it would be replaced with nothing, producing
a syntax error

6 years agoTARG slots have no name, and produced undefined value warnings
Tony Cook [Tue, 2 Dec 2014 23:32:20 +0000 (10:32 +1100)]
TARG slots have no name, and produced undefined value warnings

6 years agoAdd James Raspass to AUTHORS
Father Chrysostomos [Tue, 2 Dec 2014 22:10:58 +0000 (14:10 -0800)]
Add James Raspass to AUTHORS

6 years agoIncrease $strict::VERSION to 1.09
Father Chrysostomos [Tue, 2 Dec 2014 22:10:27 +0000 (14:10 -0800)]
Increase $strict::VERSION to 1.09

6 years agoOptimise strict.pm for the common case
James Raspass [Tue, 2 Dec 2014 21:41:19 +0000 (13:41 -0800)]
Optimise strict.pm for the common case

6 years agopad.h: Use PERL_PADNAME_MINIMAL by default
Father Chrysostomos [Tue, 2 Dec 2014 13:48:33 +0000 (05:48 -0800)]
pad.h: Use PERL_PADNAME_MINIMAL by default

See
<CACmk_tvkTETxz2eFc-bJfXEhWRjAexuvv4zw4Z036OJHpWfXVA@mail.gmail.com>
and <20141202004047.10267.qmail@lists-nntp.develooper.com>.

6 years agoperl5220delta: Want 0.24 has been released
Father Chrysostomos [Tue, 2 Dec 2014 13:35:08 +0000 (05:35 -0800)]
perl5220delta: Want 0.24 has been released

6 years agoAdd B::PMOP::pmregexp
Father Chrysostomos [Tue, 2 Dec 2014 06:26:33 +0000 (22:26 -0800)]
Add B::PMOP::pmregexp

There was no way to get from a PMOP to its regexp object under non-
threaded builds.  The threaded pmoffset field was exposed, but not its
non-threaded counterpart.

I implemented pmregexp in terms of PM_GETRE (which uses op_pmoffset
with threads and op_pmregexp without), so it works under threads, too.
It’s easier than conditionally using the regex_padav to get at things
like this:

$ ./perl -Ilib -MB -e 'use O "Concise", B::regex_padav->ARRAYelt(B::svref_2object(sub {qr/(??{})/})->ROOT->first->first->sibling->pmoffset)->qr_anoncv->object_2svref'
B::Concise::compile(CODE(0x7f8e9185ba08))
2  <1> leavesub[1 ref] K/REFC,1 ->(end)
1     </> qr() P/RTIME ->2
-        <@> list K ->-
-           <0> pushmark s ->-
-           <1> null sK*/1 ->-
-              <1> ex-scope sK ->(end)
-                 <0> stub s ->(end)
-           <$> const(PV "(\077?{})") s ->-
-e syntax OK

With pmregexp, it is ‘only’:

$ ./perl -Ilib -MB -e 'use O "Concise", B::svref_2object(sub {qr/(??{})/})->ROOT->first->first->sibling->pmregexp->qr_anoncv->object_2svref'

6 years agob.t: Move a test
Father Chrysostomos [Tue, 2 Dec 2014 06:08:49 +0000 (22:08 -0800)]
b.t: Move a test

This should go with the other regexp tests.

6 years agoUpdate ExtUtils-MakeMaker to CPAN version 7.04
Chris 'BinGOs' Williams [Tue, 2 Dec 2014 14:21:54 +0000 (14:21 +0000)]
Update ExtUtils-MakeMaker to CPAN version 7.04

  [DELTA]

7.04 Tue Dec  2 12:43:48 GMT 2014

    No changes from 7.03_06

7.03_06 Mon Dec  1 15:35:28 GMT 2014
    Doc fixes:
    - Corrected MAGICXS documentation

7.03_05 Fri Nov 28 18:27:09 GMT 2014
    Doc fixes:
    - Remove Module::Build encouragement

7.03_04 Thu Nov 27 14:35:15 GMT 2014
    Core fixes:
    - Do not use ccstdflags with the core extensions

7.03_03 Tue Nov 25 16:37:57 GMT 2014
    Win32 Fixes:
    - Eliminate sub-process spawning when checking make type

7.03_02 Mon Nov 24 13:18:09 GMT 2014
    VMS fixes:
    - Fix a couple of missing vendor targets
    - Remove VAXCCURSE from ExtUtils::Liblist::Kid::_vms_ext.

7.03_01 Tue Nov 18 21:29:40 GMT 2014
    VMS fixes:
    - Handle spaces in install targets
    - Allow spaces in eliminate_macros and fixpath
    - Remove fixpath call from ExtUtils::Liblist::Kid::_vms_ext.
    - Override is_make_type() as checks as unnecessary

    Core fixes:
    - Wrap parse_abstract() call to Encode in eval() to
      avoid build failures
    - Fix issue with CCFLAGS in core

6 years agoUpgrade Devel::PPPort from 3.24 to 3.25
Matthew Horsfall (alh) [Tue, 2 Dec 2014 13:18:32 +0000 (08:18 -0500)]
Upgrade Devel::PPPort from 3.24 to 3.25

6 years agoperlfunc: document immediate stricture effect of "our"
Aristotle Pagaltzis [Tue, 2 Dec 2014 03:05:20 +0000 (04:05 +0100)]
perlfunc: document immediate stricture effect of "our"

6 years agoShow elapsed wallclock time in t/TEST.
Jarkko Hietaniemi [Sat, 29 Nov 2014 17:54:59 +0000 (12:54 -0500)]
Show elapsed wallclock time in t/TEST.

6 years agobench.pl: Load IO::File explicitly
Father Chrysostomos [Tue, 2 Dec 2014 00:32:06 +0000 (16:32 -0800)]
bench.pl: Load IO::File explicitly

to work with older perls that don’t load it automatically.

$ Porting/bench.pl perl5.8.8 perl5.8.7
Can't locate object method "blocking" via package "IO::File" at Porting/bench.pl line 737.

(In this case the system perl is 5.12.4.)

6 years agobench.pl: Correct optional = in pod synopsis
Father Chrysostomos [Tue, 2 Dec 2014 00:29:22 +0000 (16:29 -0800)]
bench.pl: Correct optional = in pod synopsis

6 years agofix g++ builds: conversions from void * need a cast
Tony Cook [Mon, 1 Dec 2014 23:28:08 +0000 (10:28 +1100)]
fix g++ builds: conversions from void * need a cast

6 years agoPorting/bench.pl: handle perl select with --write
David Mitchell [Mon, 1 Dec 2014 23:15:39 +0000 (23:15 +0000)]
Porting/bench.pl: handle perl select with --write

The cmd-line opts that include a perl, --norm and --sort,
didn't work correctly in the presence of --read, which by-passed
the code that processes the list of perls.

6 years agouse more STATIC_ASSERT
Lukas Mai [Mon, 1 Dec 2014 19:56:25 +0000 (20:56 +0100)]
use more STATIC_ASSERT

6 years agofix segv for psudofork duping of SAVEt_GP_ALIASED_SV
Daniel Dragan [Mon, 1 Dec 2014 17:43:16 +0000 (12:43 -0500)]
fix segv for psudofork duping of SAVEt_GP_ALIASED_SV

op/fork.t test 6 that contains "@a = (1..3);" will crash on Win32 with
special debugging heap and race condition rarely crash otherwise.
Refcnt mistake is from commit ff2a62e0c8 . See perl #40565 for details.

6 years agot/op/taint.t: Perform SHA-256 algorithm by crypt() if default one is disabled
Petr Písař [Mon, 1 Dec 2014 14:28:36 +0000 (15:28 +0100)]
t/op/taint.t: Perform SHA-256 algorithm by crypt() if default one is disabled

The crypt(3) call may return NULL. This is the case on FIPS-enabled
platforms. Then "tainted crypt" test would fail.

See RT#121591 for similar fix in t/op/crypt.t.

Signed-off-by: Petr Písař <ppisar@redhat.com>
6 years agomake link->copy fallback work again [#123141]
Lukas Mai [Thu, 6 Nov 2014 19:24:25 +0000 (20:24 +0100)]
make link->copy fallback work again [#123141]

6 years ago[PATCH] Bump Locale-Codes from 3.32 to 3.33
Sullivan Beck [Mon, 1 Dec 2014 14:59:37 +0000 (14:59 +0000)]
[PATCH] Bump Locale-Codes from 3.32 to 3.33

Signed-off-by: Chris 'BinGOs' Williams <chris@bingosnet.co.uk>
6 years agobench.pl: improve single-field formatting
David Mitchell [Mon, 1 Dec 2014 12:48:12 +0000 (12:48 +0000)]
bench.pl: improve single-field formatting

With a single field specified by --fields=foo, bench.pl uses a more
compact output format. Tidy this a bit: left-justify the test names,
and describe which field is being listed in the header.

6 years agoMore branch prediction hints for sv_setsv_flags
Steffen Mueller [Sun, 30 Nov 2014 16:26:38 +0000 (17:26 +0100)]
More branch prediction hints for sv_setsv_flags

Dave's cachegrind benchmark says "small win":

          REF   THIS
       ------ ------
    Ir 105.35 105.91
    Dr 104.45 105.42
    Dw 105.42 105.17
  COND 104.33 104.58
   IND 107.04 106.76

COND_m 98.55  110.11
 IND_m 110.09 111.08

6 years agoComment clarification for NULL => IV sv_setsv_flags optimization
Steffen Mueller [Sun, 30 Nov 2014 16:25:52 +0000 (17:25 +0100)]
Comment clarification for NULL => IV sv_setsv_flags optimization

6 years agoTell known_pod_issues.dat about Want.pm
Father Chrysostomos [Mon, 1 Dec 2014 06:29:09 +0000 (22:29 -0800)]
Tell known_pod_issues.dat about Want.pm

6 years agoperl5220delta: Mention Want 0.23
Father Chrysostomos [Mon, 1 Dec 2014 06:12:39 +0000 (22:12 -0800)]
perl5220delta: Mention Want 0.23

for perl #123332.

6 years agoop.c: Fix compiler warning
Father Chrysostomos [Mon, 1 Dec 2014 03:27:43 +0000 (19:27 -0800)]
op.c: Fix compiler warning

6 years agoUpdate B::Showlex docs
Father Chrysostomos [Mon, 1 Dec 2014 03:26:38 +0000 (19:26 -0800)]
Update B::Showlex docs

I forgot this in 0f94cb1fe.

6 years agoFix assertion failure with qr/\Q(?{})/
Father Chrysostomos [Mon, 1 Dec 2014 01:46:38 +0000 (17:46 -0800)]
Fix assertion failure with qr/\Q(?{})/

\Q and \u  create ops that need targets, and hence use the pad of
the anonymous sub created temporarily when parsing something like
qr/\Q(?{})/.  If it turns out we don’t have a code block (in this
case), that anon sub is thrown away, but there is an assertion that
makes sure its pad has not been used, which fails:

$ ./perl -e 'qr/\Q(?{})/'
Assertion failed: (AvFILLp(PL_comppad) == 0), function Perl_pmruntime, file op.c, line 5395.
Abort trap: 6

(That assertion was added by d63c20f27.)

If we have had \Q or \l, then the length of the pad may be more than
1, but constant folding should have stolen the values from the pad, so
assert that instead.

6 years agopp.c: dont work around glibc 2.2.5 _moddi3 bugs past 2.7
Jim Cromie [Thu, 20 Nov 2014 21:45:02 +0000 (14:45 -0700)]
pp.c: dont work around glibc 2.2.5 _moddi3 bugs past 2.7

Add glibc version checks to avoid runtime workarounds for an ancient bug.

p1- 224ec32361 in 2003 added a per-op one-time test to detect the bug,
    and patch around it in op_ppaddr.
p2- befad5d118 in 2007 limited the workaround to GLIBC and IVSIZE == 8
p3- a5bd31f4dc in 2012 suppressed it for defined(PERL_DEBUG_READONLY_OPS)

https://bugzilla.redhat.com/show_bug.cgi?id=65612
describes the test implemented in [p1]

Per wikipedia:
v2.2.5 isnt dated, but 2.2.4 is 7/2001.  redhat fixed theirs in 9/2002
v2.3 is 10/2002, and likely never had the bug released.
v2.3.2 in debian sarge, 2.3.4 in RHEL4

So picking v2.7 (10/2007) as last version pessimized is still quite
conservative, but also already 7 years old, 2x++ our perlpolicy support
window.  Its unlikely that such a platform would be seeing an install
of v5.22 or later.

6 years agofix incomplete mathoming of Perl_pad_compname_type
Daniel Dragan [Sun, 30 Nov 2014 21:31:13 +0000 (16:31 -0500)]
fix incomplete mathoming of Perl_pad_compname_type

commit 09d7a3ba91 moved Perl_pad_compname_type to mathoms but didn't
update makedef.pl. This causes a link failure of perl521.dll on Win32.

6 years ago[Merge] Inflict PADNAMEs on everyone
Father Chrysostomos [Sun, 30 Nov 2014 19:49:11 +0000 (11:49 -0800)]
[Merge] Inflict PADNAMEs on everyone

This makes PADNAME into a separate type from SV.  See
<https://rt.perl.org/rt3/Ticket/Display.html?id=123223> for the
reasoning.

6 years agoMinimise the size of padname + string buffer
Father Chrysostomos [Fri, 28 Nov 2014 22:35:40 +0000 (14:35 -0800)]
Minimise the size of padname + string buffer

If we define the struct a little differently, we can begin the string
buffer two bytes into a pointer, rather than pointer-aligned.  In case
some platforms can compare pointer-aligned string faster, I added a
#define to allow that.  But on 64-bit darwin the speed is identical
either way:

$ time ./miniperl -e 'eval q|my$a;|x50000 . q|eval q<my $A>|'

I ran this three times in each mode, and the average of the user times
differed by less than 1%.

6 years agoRemove proto magic type
Father Chrysostomos [Fri, 28 Nov 2014 06:35:17 +0000 (22:35 -0800)]
Remove proto magic type

It is no longer in use, as of two commits ago.

6 years agopad.c: Various doc updates
Father Chrysostomos [Fri, 28 Nov 2014 06:33:20 +0000 (22:33 -0800)]
pad.c: Various doc updates

6 years ago[perl #123223] Make PADNAME a separate type
Father Chrysostomos [Fri, 28 Nov 2014 06:30:54 +0000 (22:30 -0800)]
[perl #123223] Make PADNAME a separate type

distinct from SV.  This should fix the CPAN modules that were failing
when the PadnameLVALUE flag was added, because it shared the same
bit as SVs_OBJECT and pad names were going through code paths not
designed to handle pad names.

Unfortunately, it will probably break other CPAN modules, but I think
this change is for the better, as it makes both pad names and SVs sim-
pler and makes pad names take less memory.

6 years agopad.h: Mention ‘fake’ under PadnameOUTER
Father Chrysostomos [Fri, 28 Nov 2014 06:20:47 +0000 (22:20 -0800)]
pad.h: Mention ‘fake’ under PadnameOUTER

We refer to ‘fake’ entries in various places in the documentation,
and we still have the word FAKE in PARENT_FAKELEX_FLAGS, so noting
this should be helpful.

6 years agopad.h: Update PadnamePV description
Father Chrysostomos [Fri, 28 Nov 2014 06:18:31 +0000 (22:18 -0800)]
pad.h: Update PadnamePV description

GVs have been using ‘constant’ pad names for a while now, since
v5.21.3-188-gc2bad63.

6 years agoUse PADNAME rather than SV in pad.c:padlist_dup
Father Chrysostomos [Fri, 28 Nov 2014 06:14:39 +0000 (22:14 -0800)]
Use PADNAME rather than SV in pad.c:padlist_dup

6 years agoUse PADNAME rather than SV in pad.c:pad_push
Father Chrysostomos [Fri, 28 Nov 2014 06:14:08 +0000 (22:14 -0800)]
Use PADNAME rather than SV in pad.c:pad_push

6 years agoUse PADNAME rather than SV in pad.c:cv_clone_pad
Father Chrysostomos [Fri, 28 Nov 2014 06:12:56 +0000 (22:12 -0800)]
Use PADNAME rather than SV in pad.c:cv_clone_pad

6 years agoUse PADNAME rather than SV in pad.c:do_dump_pad
Father Chrysostomos [Fri, 28 Nov 2014 06:12:11 +0000 (22:12 -0800)]
Use PADNAME rather than SV in pad.c:do_dump_pad

6 years agoUse PADNAME rather than SV in pad.c:pad_tidy
Father Chrysostomos [Fri, 28 Nov 2014 06:11:29 +0000 (22:11 -0800)]
Use PADNAME rather than SV in pad.c:pad_tidy

6 years agoUse PADNAME rather than SV in pad.c:pad_leavemy
Father Chrysostomos [Fri, 28 Nov 2014 06:10:31 +0000 (22:10 -0800)]
Use PADNAME rather than SV in pad.c:pad_leavemy

6 years agoUse PADNAME rather than SV in pad.c:intro_my
Father Chrysostomos [Fri, 28 Nov 2014 06:09:38 +0000 (22:09 -0800)]
Use PADNAME rather than SV in pad.c:intro_my

6 years agopad.c: Don’t mk temp SVs for unavailable warnings
Father Chrysostomos [Fri, 28 Nov 2014 06:07:53 +0000 (22:07 -0800)]
pad.c: Don’t mk temp SVs for unavailable warnings

We already have the name SVs available, not just the string and length.

6 years agoUse PADNAME rather than SV in pad.c:S_unavailable
Father Chrysostomos [Fri, 28 Nov 2014 06:04:56 +0000 (22:04 -0800)]
Use PADNAME rather than SV in pad.c:S_unavailable

6 years agoUse PADNAME rather than SV in pad.c:pad_check_dup
Father Chrysostomos [Fri, 28 Nov 2014 03:30:06 +0000 (19:30 -0800)]
Use PADNAME rather than SV in pad.c:pad_check_dup

6 years agoUse PADNAME rather than SV in pad.c:pad_alloc
Father Chrysostomos [Fri, 28 Nov 2014 03:28:44 +0000 (19:28 -0800)]
Use PADNAME rather than SV in pad.c:pad_alloc

6 years agoUse PADNAME rather than SV in pad.c:cv_undef_flags
Father Chrysostomos [Fri, 28 Nov 2014 03:26:14 +0000 (19:26 -0800)]
Use PADNAME rather than SV in pad.c:cv_undef_flags

6 years agopad.c apidocs: Note the separate state for state
Father Chrysostomos [Fri, 28 Nov 2014 03:25:18 +0000 (19:25 -0800)]
pad.c apidocs: Note the separate state for state

6 years agoTeach diag.t about PNf
Father Chrysostomos [Fri, 28 Nov 2014 01:58:49 +0000 (17:58 -0800)]
Teach diag.t about PNf

6 years agoUse PadnameSV in op.c:newMYSUB
Father Chrysostomos [Fri, 28 Nov 2014 01:38:36 +0000 (17:38 -0800)]
Use PadnameSV in op.c:newMYSUB

6 years agoUse PNf rather than SVf in op.c:op_lvalue_flags
Father Chrysostomos [Fri, 28 Nov 2014 01:36:54 +0000 (17:36 -0800)]
Use PNf rather than SVf in op.c:op_lvalue_flags

6 years agoUse PADNAME rather than SV in op.c:finalize_op
Father Chrysostomos [Fri, 28 Nov 2014 01:36:26 +0000 (17:36 -0800)]
Use PADNAME rather than SV in op.c:finalize_op

6 years agoAdd ‘immortal’ pad name intrp vars
Father Chrysostomos [Fri, 28 Nov 2014 01:35:34 +0000 (17:35 -0800)]
Add ‘immortal’ pad name intrp vars

These will replace the current use of &PL_sv_undef and &PL_sv_no as
pad names.

6 years agoPrepare B typemap for upcoming pad name changes
Father Chrysostomos [Fri, 28 Nov 2014 01:07:44 +0000 (17:07 -0800)]
Prepare B typemap for upcoming pad name changes

6 years agoIncrease $B::Showlex::VERSION to 1.05
Father Chrysostomos [Fri, 28 Nov 2014 01:05:54 +0000 (17:05 -0800)]
Increase $B::Showlex::VERSION to 1.05

6 years agoPrepare B::Concise for upcoming pad name changes
Father Chrysostomos [Fri, 28 Nov 2014 01:02:44 +0000 (17:02 -0800)]
Prepare B::Concise for upcoming pad name changes

When pad names become their own type, separate from SVs, the ‘immor-
tal’ pad names, &PL_padname_undef and &PL_padname_const (to replace
&PL_sv_undef and &PL_sv_no), will no longer be B::SPECIAL objects,
but B::PADNAMEs.  The way to distinguish them is to check the
length.  This method happens to work both before and after the pad
name changes.

6 years agoB.pm: Clarify classes used for pad names
Father Chrysostomos [Fri, 28 Nov 2014 00:59:39 +0000 (16:59 -0800)]
B.pm: Clarify classes used for pad names

6 years agoB.pm: Document upcoming PADLIST changes
Father Chrysostomos [Fri, 28 Nov 2014 00:57:39 +0000 (16:57 -0800)]
B.pm: Document upcoming PADLIST changes

6 years agoUse PADNAME rather than SV in dump.c:debop
Father Chrysostomos [Fri, 28 Nov 2014 00:48:48 +0000 (16:48 -0800)]
Use PADNAME rather than SV in dump.c:debop

6 years agoperl.h: Add PNf and PNfARG
Father Chrysostomos [Fri, 28 Nov 2014 00:48:03 +0000 (16:48 -0800)]
perl.h: Add PNf and PNfARG

for pad names.  Currently equivalent to SVf(ARG), they will be changed
shortly when I make pad names a separate type.

6 years agofetch_pad_names.t: Emit all test names
Father Chrysostomos [Mon, 24 Nov 2014 08:42:20 +0000 (00:42 -0800)]
fetch_pad_names.t: Emit all test names

They were defined in the structure passed to the general_tests func-
tion, but not all of them were used.

6 years ago‘Subroutine (not var) "&x" will not stay shared’
Father Chrysostomos [Mon, 24 Nov 2014 08:33:35 +0000 (00:33 -0800)]
‘Subroutine (not var) "&x" will not stay shared’

Another ‘variable’ warning about lexical subs that I missed.

6 years agodiag.t: Allow multiline diag_listed_as
Father Chrysostomos [Mon, 24 Nov 2014 08:27:12 +0000 (00:27 -0800)]
diag.t: Allow multiline diag_listed_as

6 years agopad.c: Use UTF8f for ‘will not stay shared’
Father Chrysostomos [Mon, 24 Nov 2014 08:05:33 +0000 (00:05 -0800)]
pad.c: Use UTF8f for ‘will not stay shared’

This is more efficient than creating a temporary SV.

6 years agoMake pad names always UTF8
Father Chrysostomos [Mon, 24 Nov 2014 08:00:51 +0000 (00:00 -0800)]
Make pad names always UTF8

Prior to 5.16, pad names never used the UTF8 flag, and all non-ASCII
pad names were in UTF8.  Because the latter was consistently true,
everything just worked anyway.

In 5.16, UTF8 handling was done ‘properly’, so that non-ASCII UTF8
strings were always accompanied by the UTF8 flag.

Now, it is still the case that the only non-ASCII names to make their
way into pad name code are in UTF8.  Since ASCII is a subset of UTF8,
we effectively *always* have UTF8 pad names.  So the flag handling is
actually redundant.

If we just assume that all pad names are UTF8 (which is true), then
we don’t need to bother with the flag checking.  There is actually
no reason why we should have two different encodings for storing
pad names.

So this commit enforces what has always been the case and removes the
extra code for converting between Latin-1 and UTF8.  Nothing on CPAN
is using the UTF8 flag with pads, so nothing should break.  In fact,
we never documented padadd_UTF8_NAME.

6 years agopad.c:padlist_dup: Remove refcnt check
Father Chrysostomos [Sun, 23 Nov 2014 22:51:21 +0000 (14:51 -0800)]
pad.c:padlist_dup: Remove refcnt check

This was added by 6de654a5, and the assert that makes sure the
reference count is exactly 1 was added in the same commit.  After
several years, I think we can be sure now that the reference count
is indeed always 1.  We don’t need to ‘play it safe’ for non-debug-
ging builds.

6 years agoMake PADNAMELIST a separate type
Father Chrysostomos [Sun, 23 Nov 2014 22:25:22 +0000 (14:25 -0800)]
Make PADNAMELIST a separate type

This is in preparation for making PADNAME a separate type.

6 years agopad.c: Remove encoding handling
Father Chrysostomos [Fri, 21 Nov 2014 22:54:50 +0000 (14:54 -0800)]
pad.c: Remove encoding handling

When encoding.pm affects variable names, it decodes them to UTF-8, and
when it doesn’t non-ASCII lexical variable names are prohibited.  So
this code is not necessary.

6 years agoMathomise pad_compname_type
Father Chrysostomos [Fri, 21 Nov 2014 08:22:38 +0000 (00:22 -0800)]
Mathomise pad_compname_type

6 years agopad.h: Don’t use pad_compname_type
Father Chrysostomos [Fri, 21 Nov 2014 08:19:27 +0000 (00:19 -0800)]
pad.h: Don’t use pad_compname_type

We only use PAD_COMPNAME_TYPE in one place, so wrapping it in a func-
tion doesn’t save us anything, and probably slows things down if
anything.  Furthermore, PadnameTYPE will soon become even simpler
than before.

6 years agoUse PADNAME rather than SV in the source
Father Chrysostomos [Fri, 21 Nov 2014 08:17:08 +0000 (00:17 -0800)]
Use PADNAME rather than SV in the source

This is in preparation for making PADNAME a separate type.

This commit is not perfect.  What I did was temporarily make PADNAME a
separate struct identical to struct sv and make whatever changes were
necessary to avoid compiler warnings.  In some cases I had to add tem-
porary SV casts.

6 years agoFix qr/@array(?{block})/
Father Chrysostomos [Sun, 30 Nov 2014 16:19:59 +0000 (08:19 -0800)]
Fix qr/@array(?{block})/

For qr/(?{})/ to work closurewise, it has to have an implicit anony-
mous sub that the blocks run in.  To that end, the parser compiles the
entire thing in the context of a new anonymous sub.

For a run-time, pattern (with @a or $b outside the block), since the
ops have been compiled in the context of that anonymous sub, they must
be run within it, too (otherwise the ops point to the wrong pad), so
at compile time the ‘arguments’ to qr are turned into a call to an
anonymous sub that looks like like sub { @a, "(?{...})", ...}.

This was causing a bizarre copy:

$ perl5.18.1 -e 'qr/@a(?{})/'
Bizarre copy of ARRAY in subroutine exit at -e line 1.

Bisect points to v5.17.10-92-g491453b:

$  ../perl.git/Porting/bisect.pl --target=miniperl  --start=v5.14.0   --end=v5.18.1 -e 'BEGIN{$^H|=0x00200000} qr/@a(?{})/'
...
491453ba443e114f751f325a4734b3d07b897606 is the first bad commit
commit 491453ba443e114f751f325a4734b3d07b897606
Author: David Mitchell <davem@iabyn.com>
Date:   Wed Apr 17 17:51:16 2013 +0100

    Handle /@a/ array expansion within regex engine

The array op was not being flagged as a flattening op, and sub exit
was trying to copy an unflattened array.  We don’t want the array
flattened.  To allow it to pass through sub exit unscathed, we need to
make this an lvalue sub.  That fixes it and everything just works.  It
even makes non-array cases slightly faster, because nothing is copied
at sub exit now:

before$ time ./miniperl -e 'qr/$a(?{})/ for 1..1000000'

real 0m3.321s
user 0m3.312s
sys 0m0.006s
after$ time ./miniperl -e 'qr/$a(?{})/ for 1..1000000'

real 0m2.855s
user 0m2.845s
sys 0m0.006s

6 years agoFix newRV_noinc assertions
Father Chrysostomos [Sun, 30 Nov 2014 15:04:04 +0000 (07:04 -0800)]
Fix newRV_noinc assertions

As of 7777302a PERL_ARGS_ASSERT_NEWRV_NOINC has been failing an asser-
tion, because the variable mentioned in embed.fnc (which the macro
uses) is not the function’s parameter, but another, uninitial-
ised variable.

This disparity between the variable names in the function definition
and its prototype goes back to e3b8966e2a.

6 years agoB::Concise: Dump regexp code blocks
Father Chrysostomos [Sun, 30 Nov 2014 05:53:14 +0000 (21:53 -0800)]
B::Concise: Dump regexp code blocks

As of perl 5.18, pmops have a code_list pointer that points to a list
of ops representing the constants, variables and code blocks that
make up the regular expression.  For run-time compilation, these ops
are also accessible via pmop->op_first->op_first (i.e., the kids of
the regcomp op), so they are already dumped.  But for regexp compiled
at compile time, these ops were not being dumped.  So this commit
makes them appear as kids of the pmop, right before the replacement
block in the case of subst.

6 years agoAttempt to bring newSViv/uv optimization to newRV
Steffen Mueller [Fri, 28 Nov 2014 17:05:34 +0000 (18:05 +0100)]
Attempt to bring newSViv/uv optimization to newRV

Cf. bd30fe8921c88e4677c2279b442a56a11ae037b4 for details.

6 years agoRepeat newSViv optimization for newSVuv
Steffen Mueller [Fri, 28 Nov 2014 16:34:00 +0000 (17:34 +0100)]
Repeat newSViv optimization for newSVuv

Pretty much the same change as
bd30fe8921c88e4677c2279b442a56a11ae037b4 was for newSViv.

6 years agoBranch predictor hint for exceptional branch
Steffen Mueller [Fri, 28 Nov 2014 16:33:42 +0000 (17:33 +0100)]
Branch predictor hint for exceptional branch

6 years agoWrap long verbatim pod lines in bench.pl
Father Chrysostomos [Sun, 30 Nov 2014 06:08:21 +0000 (22:08 -0800)]
Wrap long verbatim pod lines in bench.pl

6 years agoExpose qr_anoncv via B::REGEXP
Father Chrysostomos [Sun, 30 Nov 2014 02:47:36 +0000 (18:47 -0800)]
Expose qr_anoncv via B::REGEXP

This is necessary to get to the code blocks in qr/(?{...})/.

6 years agoB.pm: Document the B::REGEXP methods
Father Chrysostomos [Sun, 30 Nov 2014 01:38:03 +0000 (17:38 -0800)]
B.pm: Document the B::REGEXP methods

6 years agoDeparse.pm: Update docs concerning lex subs
Father Chrysostomos [Sun, 30 Nov 2014 01:24:11 +0000 (17:24 -0800)]
Deparse.pm: Update docs concerning lex subs

6 years agoDeparse: Qualify pkg CVs that conflict w. lex CVs
Father Chrysostomos [Sun, 30 Nov 2014 01:18:52 +0000 (17:18 -0800)]
Deparse: Qualify pkg CVs that conflict w. lex CVs

6 years agoDeparse lexical subs
Father Chrysostomos [Fri, 14 Nov 2014 06:32:26 +0000 (22:32 -0800)]
Deparse lexical subs

We currently have a problem with the hints to allow lexical subs to
begin with not necessarily being in scope at the point of the declara-
tion.  So the fix for that (which is a bit of a kludge) is to emit
‘use feature 'lexical_subs'’ and the equivalent of turning off the
corresponding warnings category, which may result in a surfeit of
^WARNING_BITS gibberish.  But at least it works. :-)

Also, package subs are not yet disambiguated with package name pre-
fixes if they fall in the same scope as lexical subs of the same name.

6 years agoadd Porting/bench.pl
David Mitchell [Fri, 14 Nov 2014 12:18:12 +0000 (12:18 +0000)]
add Porting/bench.pl

This tool runs code snippets found in t/perf/benchmarks (or similar) under
cachegrind, in order to calculate how many instruction reads, data writes,
branches, cache misses, etc. that one execution of the snippet uses. It
will run them against two or more perl executables and show how much each
test has gotten better or worse.

It is modelled on the perlbench tool, but since it measures instruction
reads etc., rather than timings, it is much more precise and reproducible.
It is also considerably faster, and is capable or running tests in
parallel. Rather than displaying a single relative percentage per
test/perl combination, it displays values for 13 different measurements,
such as instruction reads, conditional branch misses etc.

This commit also changes the format of t/perf/benchmarks slightly; it
becomes an AoH rather than a HoH (to allow checking for duplicate keys),
and the test names themselves become a :: hierarchy.

6 years agoComment tweak.
Jarkko Hietaniemi [Fri, 28 Nov 2014 17:30:35 +0000 (12:30 -0500)]
Comment tweak.

6 years agoIf neither quad nor long double, %Ld etc need to fail.
Jarkko Hietaniemi [Sat, 29 Nov 2014 20:50:28 +0000 (15:50 -0500)]
If neither quad nor long double, %Ld etc need to fail.

(hpux 10.20 has no quad, and its long double is non-standard)

6 years agoUse LONG_DOUBLEKIND only if HAS_LONG_DOUBLE.
Jarkko Hietaniemi [Sat, 29 Nov 2014 16:12:24 +0000 (11:12 -0500)]
Use LONG_DOUBLEKIND only if HAS_LONG_DOUBLE.

6 years agoHP-UX 10.20 has pseudo-long-double which shouldn't be used.
Jarkko Hietaniemi [Fri, 28 Nov 2014 16:53:57 +0000 (11:53 -0500)]
HP-UX 10.20 has pseudo-long-double which shouldn't be used.

6 years agoComment tweak.
Jarkko Hietaniemi [Fri, 28 Nov 2014 17:30:35 +0000 (12:30 -0500)]
Comment tweak.