platform/upstream/perl.git
12 years agoDeparse implicit with ‘use feature’
Father Chrysostomos [Sat, 24 Dec 2011 14:47:41 +0000 (06:47 -0800)]
Deparse implicit with ‘use feature’

When a version declaration has been seen, it’s not possible to deparse
the code perfectly correctly, but using ‘no feature; use feature
"5.14"’ is a reasonable tradeoff.  See also commit 1c74777c25.

This necessitated sorting %^H keys that are output to keep tests pass-
ing.  Previously they were relying on phases of the moon.

12 years agoDeparse CORE::say, etc., when bundle hints are in use
Father Chrysostomos [Sat, 24 Dec 2011 08:06:20 +0000 (00:06 -0800)]
Deparse CORE::say, etc., when bundle hints are in use

12 years agouse VERSION needs to enable uni8bit hint
Father Chrysostomos [Sat, 24 Dec 2011 04:46:00 +0000 (20:46 -0800)]
use VERSION needs to enable uni8bit hint

12 years agoUpdate rmg concerning feature bundles
Father Chrysostomos [Sat, 24 Dec 2011 03:14:25 +0000 (19:14 -0800)]
Update rmg concerning feature bundles

The data are now to be modified in regen/feature.pl, rather than
lib/feature.pm.

12 years agoUpdate perlfunc/use: feature.pm is not loaded
Father Chrysostomos [Sat, 24 Dec 2011 02:19:48 +0000 (18:19 -0800)]
Update perlfunc/use: feature.pm is not loaded

12 years agofeature.pl: Make the perl.h search more resilient
Father Chrysostomos [Fri, 23 Dec 2011 16:27:02 +0000 (08:27 -0800)]
feature.pl: Make the perl.h search more resilient

In case #define is changed to # define some day.  (Not likely, but
this will make things easier for future maintainers.)

12 years agofeature.pl: Mention perl.h as a source
Father Chrysostomos [Fri, 23 Dec 2011 16:25:51 +0000 (08:25 -0800)]
feature.pl: Mention perl.h as a source

12 years agotoke.c: Add assertion to feature_is_enabled
Father Chrysostomos [Fri, 23 Dec 2011 16:21:45 +0000 (08:21 -0800)]
toke.c: Add assertion to feature_is_enabled

This should now only be called by macros in feature.h when PL_hints
indicates that %^H is where the features are.

12 years agoMake MAX_FEATURE_LEN reflect reality
Father Chrysostomos [Fri, 23 Dec 2011 06:51:50 +0000 (22:51 -0800)]
Make MAX_FEATURE_LEN reflect reality

unicode_strings was not the longest string.  We can determine it auto-
matically, now that this macro is in a generated file.

12 years agofeature.h: FEATURE_IS_ENABLED can use CURRENT_HINTS
Father Chrysostomos [Fri, 23 Dec 2011 06:48:58 +0000 (22:48 -0800)]
feature.h: FEATURE_IS_ENABLED can use CURRENT_HINTS

12 years agofeature.pl: Remove unused var
Father Chrysostomos [Fri, 23 Dec 2011 06:47:21 +0000 (22:47 -0800)]
feature.pl: Remove unused var

12 years agoFix up t/lib/feature/implicit
Father Chrysostomos [Fri, 23 Dec 2011 06:37:39 +0000 (22:37 -0800)]
Fix up t/lib/feature/implicit

Some tests were relying on the side effect of ‘use 5.9.5’ loading
feature.pm.

12 years agofeature.pm: Move hint normalisation to separate function
Father Chrysostomos [Fri, 23 Dec 2011 06:31:59 +0000 (22:31 -0800)]
feature.pm: Move hint normalisation to separate function

PL_hints/$^H can hold feature bundle hints that cause %^H to be
ignored when features are looked up.

When feature->import and ->unimport are invoked, they set bits in $^H
such that %^H is used once more.  But they have to modify %^H to con-
tain what the bits in $^H imply.

Up till now, unimport was delegating to import, which meant that more
work was being done than necessary, because import would then detect
the special condition of $^H and repeat (some of) that work.

12 years agoop.c: Use new feature bundle hints
Father Chrysostomos [Fri, 23 Dec 2011 06:22:51 +0000 (22:22 -0800)]
op.c: Use new feature bundle hints

Now ‘use v5.22’ and ‘use 5.005’ no longer have to load feature.pm
to enable the current feature bundle.  All they do is twiddle bits
in PL_hints.

Since version declarations no longer call feature->unimport, there
may be junk left over in %^H (which we leave for speed’s sake), so
feature.pm has to delete that junk before enabling features.

12 years agofeature.h: Function for enabling bundles
Father Chrysostomos [Fri, 23 Dec 2011 06:12:23 +0000 (22:12 -0800)]
feature.h: Function for enabling bundles

12 years agoMove FEATURE_IS_ENABLED to feature.h
Father Chrysostomos [Fri, 23 Dec 2011 05:42:54 +0000 (21:42 -0800)]
Move FEATURE_IS_ENABLED to feature.h

It makes little sense to have it in perl.h any more.  (Until
recently, feature.h didn’t exist.)

12 years agotoke.c: include feature.h
Father Chrysostomos [Fri, 23 Dec 2011 14:29:18 +0000 (06:29 -0800)]
toke.c: include feature.h

It’s going to need it in the next commit.

12 years agoEliminate ‘negative’ features
Father Chrysostomos [Fri, 23 Dec 2011 05:41:00 +0000 (21:41 -0800)]
Eliminate ‘negative’ features

Now that we have hints in $^H to indicate the default feature bun-
dle, there is no need for entries in %^H that turn features off by
their presence.

12 years agofeature.pl: Tweak comment
Father Chrysostomos [Fri, 23 Dec 2011 05:31:34 +0000 (21:31 -0800)]
feature.pl: Tweak comment

so that people as crazy as I won’t try to add internal
names like ~~_--~!_.

12 years agofeature.h: Avoid compiler warning
Father Chrysostomos [Fri, 23 Dec 2011 05:26:33 +0000 (21:26 -0800)]
feature.h: Avoid compiler warning

unsigned >= 0 produces a warning, even if the 0 is actually a macro.

12 years agoUse new feature-testing macros
Father Chrysostomos [Fri, 23 Dec 2011 04:37:59 +0000 (20:37 -0800)]
Use new feature-testing macros

Instead of using FEATURE_IS_ENABLED("say"), etc., now use
FEATURE_SAY_IS_ENABLED instead.  These new macros, in feature.h, also
check feature bundle hints in PL_hints, so we can start using those
hints.  Two commits ago, feature.pm started setting them.

12 years agoExclude regen/feature.pl from podcheck.t
Father Chrysostomos [Fri, 23 Dec 2011 02:26:01 +0000 (18:26 -0800)]
Exclude regen/feature.pl from podcheck.t

12 years agofeature.pm: Set bundle hints when dis/enabling features
Father Chrysostomos [Fri, 23 Dec 2011 02:22:41 +0000 (18:22 -0800)]
feature.pm: Set bundle hints when dis/enabling features

The core does not use these hints just yet, but feature.pm can start
setting them.

Currently, the hint bits for feature bundles (CURRENT_FEATURE_BUNDLE
in feature.h) are equal to FEATURE_BUNDLE_DEFAULT (0) by default.
feature.pm sets them to FEATURE_BUNDLE_CUSTOM when modifying
hint settings.

12 years agofeature.pm: Add function for getting the current bundle
Father Chrysostomos [Fri, 23 Dec 2011 02:12:58 +0000 (18:12 -0800)]
feature.pm: Add function for getting the current bundle

This is for when we switch over to using hints in $^H for feature bun-
dles.  When $bundle_number == $hint_mask, it means that the hints in
%^H apply.

12 years agofeature.pl: Use @HintedBundles for generating feature.h
Father Chrysostomos [Fri, 23 Dec 2011 02:12:35 +0000 (18:12 -0800)]
feature.pl: Use @HintedBundles for generating feature.h

This variable, added in the previous commit for feature.pm’s sake,
also makes generating constants in feature.h simpler.

12 years agoGive feature.pm the bundle hints
Father Chrysostomos [Fri, 23 Dec 2011 02:07:49 +0000 (18:07 -0800)]
Give feature.pm the bundle hints

It’s going to need them, in order to determine which list of features
is currently enabled.

12 years agofeature.pl: Generate list of feature bundles in pod
Father Chrysostomos [Fri, 23 Dec 2011 00:52:10 +0000 (16:52 -0800)]
feature.pl: Generate list of feature bundles in pod

12 years agofeature.pl: Add section headers
Father Chrysostomos [Fri, 23 Dec 2011 00:37:50 +0000 (16:37 -0800)]
feature.pl: Add section headers

This commit adds comments that give this file some semblance of
structure.

12 years agofeature.pl: Move hint-checking code up
Father Chrysostomos [Fri, 23 Dec 2011 00:34:36 +0000 (16:34 -0800)]
feature.pl: Move hint-checking code up

This puts it with the other code that generates ‘global’ variables
used by generation code.

12 years agoAdd macros for checking individual features
Father Chrysostomos [Fri, 23 Dec 2011 00:33:01 +0000 (16:33 -0800)]
Add macros for checking individual features

12 years agofeature.pl: %BundleRanges
Father Chrysostomos [Fri, 23 Dec 2011 00:13:17 +0000 (16:13 -0800)]
feature.pl: %BundleRanges

This hash will be used by subsequent commits to generate macros for
checking individual features.

12 years agoregen.t: update test count
Father Chrysostomos [Thu, 22 Dec 2011 21:30:06 +0000 (13:30 -0800)]
regen.t: update test count

12 years agofeature.h: Add macros for current hints
Father Chrysostomos [Thu, 22 Dec 2011 18:20:01 +0000 (10:20 -0800)]
feature.h: Add macros for current hints

CURRENT_HINTS is not specific to features, but for now will be used by
nothing else.  It returns the compile-time or run-time hints, depend-
ing on whether PL_curcop points to &PL_compiling.

CURRENT_FEATURE_BUNDLE extracts the feature bundle number from the
current hints.

12 years agofeature.h: Parenthesise macro definition
Father Chrysostomos [Thu, 22 Dec 2011 18:16:10 +0000 (10:16 -0800)]
feature.h: Parenthesise macro definition

12 years agoMake feature.pl executable
Father Chrysostomos [Thu, 22 Dec 2011 18:11:47 +0000 (10:11 -0800)]
Make feature.pl executable

12 years agoUse only \w+ for internal feature names
Father Chrysostomos [Thu, 22 Dec 2011 18:10:53 +0000 (10:10 -0800)]
Use only \w+ for internal feature names

This will make it possible to create macros for each.

12 years agofeature.pl: Remove the feature_ prefix from the data
Father Chrysostomos [Thu, 22 Dec 2011 18:07:27 +0000 (10:07 -0800)]
feature.pl: Remove the feature_ prefix from the data

It’s not necessary to repeat it, as we can simply add it to feature.pm
when we generate it.

Removing it makes these data usable for feature.h, too.

12 years agofeature.pl: Gen %feature_bundle from %UniqueBundles
Father Chrysostomos [Thu, 22 Dec 2011 18:05:16 +0000 (10:05 -0800)]
feature.pl: Gen %feature_bundle from %UniqueBundles

%UniqueBundles was added for generating constants in feature.h, but
we can use it for feature.pm’s %feature_bundle as well, simplify-
ing the code.

This eliminates this piece of code in feature.pm, spelling it
out longhand:

# Each of these is the same as the previous bundle
for (12,13,14,16) {
    $feature_bundle{"5.$_"} = $feature_bundle{"5.".($_-1)}
}

While that code might be neat, it would make the generation code
unduly complex.  (It was designed for hand-editing anyway.)

12 years agoAdd lib/feature.pm to makerel’s writables
Father Chrysostomos [Thu, 22 Dec 2011 17:43:54 +0000 (09:43 -0800)]
Add lib/feature.pm to makerel’s writables

12 years agoAdd feature.h, with constants for feature bundles
Father Chrysostomos [Thu, 22 Dec 2011 17:41:37 +0000 (09:41 -0800)]
Add feature.h, with constants for feature bundles

12 years agoParse the feature hint bits & assert their usability
Father Chrysostomos [Thu, 22 Dec 2011 16:34:31 +0000 (08:34 -0800)]
Parse the feature hint bits & assert their usability

12 years agoSet aside hint bits for feature bundles
Father Chrysostomos [Thu, 22 Dec 2011 16:18:45 +0000 (08:18 -0800)]
Set aside hint bits for feature bundles

12 years agoCreate regen/feature.pl
Father Chrysostomos [Thu, 22 Dec 2011 06:46:41 +0000 (22:46 -0800)]
Create regen/feature.pl

This script generates lib/feature.pm.  Soon it will be made to gener-
ate other files, too.

12 years agoIncrease $feature::VERSION to 1.25
Father Chrysostomos [Thu, 22 Dec 2011 06:45:22 +0000 (22:45 -0800)]
Increase $feature::VERSION to 1.25

12 years agoEliminate a couple more suidperl and sperl references.
Nicholas Clark [Sat, 24 Dec 2011 12:19:23 +0000 (13:19 +0100)]
Eliminate a couple more suidperl and sperl references.

Remove a superfluous C<LD_LIBRARY_PATH=`pwd`> - make test does this
automatically.

12 years agoMerge the refactoring of Pod scanning code in installman and buildtoc.
Nicholas Clark [Sat, 24 Dec 2011 09:30:20 +0000 (10:30 +0100)]
Merge the refactoring of Pod scanning code in installman and buildtoc.

12 years agoSome tidying in installman.
Nicholas Clark [Fri, 23 Dec 2011 18:58:50 +0000 (19:58 +0100)]
Some tidying in installman.

Avoid the unnecessary lexicals $xnew and $xold.
Use lexicals for file handles, and check the return of close.
Why import mkpath() from File::Path and then comment its provenance at the
point of use?
Remove an exit(0) which is only 20 lines from the end of the script.
Note why we can't re-use a file handle open on the Pod file we're currently
processing.

12 years agoAdd x2p/a2p.pod to the 'master' array returned by get_pod_metadata().
Nicholas Clark [Fri, 23 Dec 2011 16:15:59 +0000 (17:15 +0100)]
Add x2p/a2p.pod to the 'master' array returned by get_pod_metadata().

This makes installman install it correctly. Flagging it as 'toc_omit' means
that everything else ignores it. This eliminates the last remaining use of the
"pod =" feature of utils.lst, permitting related code to be removed from
installperl and installman.

This change has the possibly unfortunate cosmetic side effect of installman
now installing a2p.1 first, before perl.1

12 years agoAvoid installman warning about "no documentation in pod/perldoc.pod"
Nicholas Clark [Thu, 22 Dec 2011 16:02:01 +0000 (17:02 +0100)]
Avoid installman warning about "no documentation in pod/perldoc.pod"

Since commit a2afbef4476f724a in July 2011 moved perldoc.pod from pod/ to
dist/Pod-Perldoc/lib/ installman will have been warning
"no documentation in pod/perldoc.pod", having already installed the perldoc
man page earlier in the process.

However, the reference in utils.lst has actually been arguably erroneous
since it was added in commit cd0cddc9814dd65e (July 2003) to stop installman
installing an empty perldoc.1 manpage. (Which it had been doing since commit
1a67fee7d910c677 (December 2002), as a side effect of overwriting the
correct file (sourced from pod/perldoc.pod) with an incorrect file (sourced
from scanning utils/perldoc for Pod). The fix "worked" by causing perldoc.1
to be written correctly twice, both times sourced from pod/perldoc.pod :-)

The best fix seems to be to remember the names of the manpages we install
in man1, and automatically skip processing for any utility whose manpage
has already been installed.

12 years agoIn pods_to_install(), use $File::Find::prune to skip t/ directories.
Nicholas Clark [Thu, 22 Dec 2011 11:07:33 +0000 (12:07 +0100)]
In pods_to_install(), use $File::Find::prune to skip t/ directories.

We don't want to install anything within a t/ directory. Previously the code
was determining this based on pattern matching the path. Instead of rejecting
what we find, it's more efficient to avoid scanning the directory tree in the
first place.

12 years agoMove the common Pod scanning code from installman and buildtoc to pod_lib.pl
Nicholas Clark [Thu, 22 Dec 2011 10:26:29 +0000 (11:26 +0100)]
Move the common Pod scanning code from installman and buildtoc to pod_lib.pl

The unified code to scan lib/ for Pod is now in pods_to_install().
It returns found Pods partitioned into 'MODULE' and 'PRAGMA', as buildtoc
needs this distinction. installman installs Pods in the same order as before,
as 'PRAGMA' sort lexically after 'MODULE'.

12 years agoRefactor buildtoc's use of File::Find::find() to converge with installman's.
Nicholas Clark [Thu, 22 Dec 2011 09:41:58 +0000 (10:41 +0100)]
Refactor buildtoc's use of File::Find::find() to converge with installman's.

12 years agoRefactor installman's use of File::Find::find() to converge with buildtoc's.
Nicholas Clark [Thu, 22 Dec 2011 09:31:38 +0000 (10:31 +0100)]
Refactor installman's use of File::Find::find() to converge with buildtoc's.

12 years agoRevert "Increase $XS::APItest::VERSION to 0.35"
Father Chrysostomos [Sat, 24 Dec 2011 07:27:53 +0000 (23:27 -0800)]
Revert "Increase $XS::APItest::VERSION to 0.35"

This reverts commit d54b00ad7f0e9db12ac11e897406b8888fd895bf.

I didn’t mean to push that yet, and it was more than a
version bump.

12 years agoIncrease $XS::APItest::VERSION to 0.35
Father Chrysostomos [Sat, 24 Dec 2011 07:07:48 +0000 (23:07 -0800)]
Increase $XS::APItest::VERSION to 0.35

12 years agoDeparse.pm: More ->pmflags clean-up
Father Chrysostomos [Sat, 24 Dec 2011 06:33:28 +0000 (22:33 -0800)]
Deparse.pm: More ->pmflags clean-up

It should run faster with fewer method calls.

12 years agoDeparse.pm: Add another substword
Father Chrysostomos [Sat, 24 Dec 2011 06:30:55 +0000 (22:30 -0800)]
Deparse.pm: Add another substword

Just couldn’t resist.

Before:

$ ./perl -Ilib -MO=Deparse -e 's///egoru'
s//();/egoru;
-e syntax OK

After:

$ ./perl -Ilib -MO=Deparse -e 's///egoru'
s//();/rogue;
-e syntax OK

12 years agoDeparse.pm: Put re flag logic into its own function
Father Chrysostomos [Sat, 24 Dec 2011 06:22:18 +0000 (22:22 -0800)]
Deparse.pm: Put re flag logic into its own function

Also, sort the flags so that matchwords still work.  It seems they never
did work properly for s///r, so this commit causes this Freudian slip:

$ perl5.14.2 -MO=Deparse -e 's///rose'
s//();/eros;
-e syntax OK

to become this:

$ ./perl -Ilib -MO=Deparse -e 's///sore'
s//();/rose;
-e syntax OK

12 years agoFollowup to b9bc576fd0: deparse s///applaud
Father Chrysostomos [Sat, 24 Dec 2011 06:15:15 +0000 (22:15 -0800)]
Followup to b9bc576fd0: deparse s///applaud

12 years agoDeparse.pm: Don’t call ->pmflags so many times
Father Chrysostomos [Sat, 24 Dec 2011 06:11:23 +0000 (22:11 -0800)]
Deparse.pm: Don’t call ->pmflags so many times

12 years agoDeparse: Ignore strict hh hints
Father Chrysostomos [Sat, 24 Dec 2011 06:09:00 +0000 (22:09 -0800)]
Deparse: Ignore strict hh hints

As of 5.15.6, strict.pm puts hints in %^H.  B::Deparse still deparses
strict hints in $^H with ‘use strict’.  Strictly speaking, deparsing
$^H  hints with ‘use strict’ is not strictly correct any more, because
the result of ‘eval 'use v5.10; ...'’ within the same scope is differ-
ent, in that ‘use v5.10’ will disable strictures enabled only through
$^H, but will not disable those enabled also through %^H.

(Strict entries in %^H strictly indicate that strict.pm is overriding
any version declaration.  They are always set to undef.)

So the correct way to deparse $^H without %^H would be ‘use 5.011’ or
‘use 5.012’ or ‘use 5.011001000000001’, which all work.  The correct
way to deparse $^H *with* %^H is ‘use strict’.

Determining the actual version number to use is a problem.  It is
nowhere to be seen in the op tree.  It is visible in the implied BEGIN
block (BEGIN{require 5.012}).  Due to limitations in Perl itself,
it is not possible to know exactly where the BEGIN block should go,
so trying to pair up $^H changes with BEGIN blocks could never work
reliably.  Simply guessing the version number and printing one the
code did not contain would cause more confusion than the strict
hints in %^H.

Since B::Deparse has special-cased strict mode as far as I can remem-
ber, always putting it in the right place, falling back to relying
BEGIN blocks (collapsing them to version declarations) would be a
regression.

So it seems the best choice is simply to suppress strict hints in %^H
and deparse strict as it has always been deparsed.  It’s not strictly
correct, but neither are the alternatives, and it seems the least bad.

12 years agoUpdate concise-xs.t for B::Deparse’s new imports
Father Chrysostomos [Sat, 24 Dec 2011 05:50:19 +0000 (21:50 -0800)]
Update concise-xs.t for B::Deparse’s new imports

12 years ago[perl #91318] Deparse /regexp/applaud
Father Chrysostomos [Sat, 24 Dec 2011 05:32:39 +0000 (21:32 -0800)]
[perl #91318] Deparse /regexp/applaud

12 years ago[perl #81424] Make Deparse handle /aelemfast_lex/
Father Chrysostomos [Sat, 24 Dec 2011 02:44:43 +0000 (18:44 -0800)]
[perl #81424] Make Deparse handle /aelemfast_lex/

B::Deparse’s pure_string subroutine, that checks whether an op tree
can fit in double-quotish syntax, didn’t know about aelemfast_lex, or,
formerly, aelemfast on lexical variables.  (It did know how to han-
dle aelemfast for package variables.)  Consequently it was deparsing
/$a[0]/ as $a[0] for a lexical @a.

/$a[0]/ with a package variable looks like this:

9        </> match() lK/RTIME ->a
8           <|> regcomp(other->9) sK/1 ->9
6              <1> regcreset sK/1 ->7
-                 <1> ex-aelem sK/2 ->8
-                    <1> ex-rv2av sKR/1 ->-
7                       <#> aelemfast[*s] s/1 ->8
-                    <0> ex-const s ->-

There are two null ops (ex-*) before the aelemfast.

/$a[0]/ with a lexical variable looks like this:

9        </> match() lK/RTIME ->a
8           <|> regcomp(other->9) sK/1 ->9
6              <1> regcreset sK/1 ->7
-                 <1> ex-aelem sK/2 ->8
7                    <0> aelemfast_lex[@s:1,2] sR/1 ->8
-                    <0> ex-const s ->-

There is only one null op (ex-aelem).

12 years agoConsistent use of spaces after dots in Deparse’s pod
Father Chrysostomos [Sat, 24 Dec 2011 01:55:42 +0000 (17:55 -0800)]
Consistent use of spaces after dots in Deparse’s pod

12 years agoperldiag: Consistent use of spaces after dots
Father Chrysostomos [Sat, 24 Dec 2011 00:38:57 +0000 (16:38 -0800)]
perldiag: Consistent use of spaces after dots

6903afa2b8 missed a few.

12 years agosv.c: consistent spaces after dots in apidocs
Father Chrysostomos [Fri, 23 Dec 2011 23:51:29 +0000 (15:51 -0800)]
sv.c: consistent spaces after dots in apidocs

12 years agoUpdate a perldiag entry for 5.16
Father Chrysostomos [Fri, 23 Dec 2011 22:45:30 +0000 (14:45 -0800)]
Update a perldiag entry for 5.16

I’m not deleting it, as one may run error messages from an older perl
through a newer splain.

12 years agoDon’t clobber all magic when clobbering vstring
Father Chrysostomos [Fri, 23 Dec 2011 22:28:33 +0000 (14:28 -0800)]
Don’t clobber all magic when clobbering vstring

This code in sv_setsv, introduced in ece467f9b3, can’t possi-
bly be right:

    if ( SvVOK(dstr) )
    {
/* need to nuke the magic */
mg_free(dstr);
    }

And here is a test to prove it:

sub TIESCALAR { bless[]}
sub STORE {}
tie $@, "";
$@ = v0;
warn tied $@; # main=ARRAY(0xc0ffee)
$@ = 3;
warn tied $@; # something’s wrong

It blows away tiedness.

You could do that to any variable.

Let’s see:

$! = v0;
$! = 3;
open foo, 'oentuhaeontu' or die $!;  # 3 at - line 3.

Youch!

Let’s just free vstring magic, shall we?

12 years agover.t: require test.pl in a BEGIN block
Father Chrysostomos [Fri, 23 Dec 2011 22:20:17 +0000 (14:20 -0800)]
ver.t: require test.pl in a BEGIN block

so that lazy people like me can omit parentheses.

12 years ago[perl #29070] Add vstring set-magic
Father Chrysostomos [Fri, 23 Dec 2011 22:18:16 +0000 (14:18 -0800)]
[perl #29070] Add vstring set-magic

Some operators, like pp_complement, assign their argument to TARG
(which copies vstring magic), modify it in place, and then call set-
magic.  That’s supposed to work, but vstring magic was remaining as it
was, such that ~v7 would still be treated as "v7" by vstring-aware
code, even though the resulting string is not "\7".

This commit adds vstring set-magic that checks to see whether the pv
still matches the vstring.  It cannot simply free the vstring magic,
as that would prevent $x=v0 from working.

12 years agoregexp.h: remove completely redundant return statement
Ævar Arnfjörð Bjarmason [Fri, 23 Dec 2011 22:17:35 +0000 (22:17 +0000)]
regexp.h: remove completely redundant return statement

Remove a redundant return() statement at the end of the
get_regex_charset_name function. The "default" case for the above
switch statement will always return for us.

This was added intentionally in v5.14.0-354-g0984e55 by Jim Cromie,
but the rationale for doing so is that we might have a compiler bug
here, but we're pretty screwed anyway if switch statements stop
working as advertised by the standard so there's no reason to be
defensive in this particular case.

This is also causing a lot of whine from Sun Studio 12 Update 1:

    regexp.h", line 329: warning: statement not reached

12 years agoSync Locale-Maketext version in Maintainers.pl with CPAN
Chris 'BinGOs' Williams [Fri, 23 Dec 2011 21:37:15 +0000 (21:37 +0000)]
Sync Locale-Maketext version in Maintainers.pl with CPAN

12 years agoSync Exporter version in Maintainers.pl with CPAN
Chris 'BinGOs' Williams [Fri, 23 Dec 2011 21:34:05 +0000 (21:34 +0000)]
Sync Exporter version in Maintainers.pl with CPAN

12 years agoMove Tie-File out of cpan/ and into dist/
Todd Rinaldo [Fri, 23 Dec 2011 20:17:58 +0000 (20:17 +0000)]
Move Tie-File out of cpan/ and into dist/

Tie::File has not been changed on CPAN since 2003. It has meanwhile been
actively maintained in p5p.

Signed-off-by: Chris 'BinGOs' Williams <chris@bingosnet.co.uk>
12 years agoDon’t double-free hint hash if copying dies
Father Chrysostomos [Fri, 23 Dec 2011 17:40:52 +0000 (09:40 -0800)]
Don’t double-free hint hash if copying dies

In this horrendous piece of code, the attempt to clone GvHV(PL_hintgv)
in save_hints dies because the NEXTKEY method cannot be found.  But
that happens while GvHV(PL_hintgv) still points to the old value.  So
the old hash gets freed in the new scope (when it unwinds due to the
error in trying to find NEXTKEY) and then gets freed in the outer
scope, too, resulting in the dreaded ‘Attempt to free unrefer-
enced scalar’.

    package namespace::clean::_TieHintHash;

    sub TIEHASH  { bless[] }
    sub STORE    { $_[0][0]{$_[1]} = $_[2] }
    sub FETCH    { $_[0][0]{$_[1]} }
    sub FIRSTKEY { my $a = scalar keys %{$_[0][0]}; each %{$_[0][0]} }
  # Intentionally commented out:
  #  sub NEXTKEY  { each %{$_[0][0]} }

    package main;

    BEGIN {
$^H{foo} = "bar"; # activate localisation magic
tie( %^H, 'namespace::clean::_TieHintHash' ); # sabotage %^H
$^H{foo} = "bar"; # create an element in the tied hash
    }
    { ; } # clone the tied hint hash

The solution is to set GvHV(PL_hintgv) to NULL when copying it.

12 years agoDeparse: remove special casing for main stash
Father Chrysostomos [Fri, 23 Dec 2011 16:43:22 +0000 (08:43 -0800)]
Deparse: remove special casing for main stash

This was to prevent infinite recursion, but the previous commit
added a more general mechanism, rendering this redundant.

12 years ago[perl #91384] Deparse and stash circularities
Father Chrysostomos [Fri, 23 Dec 2011 16:41:36 +0000 (08:41 -0800)]
[perl #91384] Deparse and stash circularities

This commit modifies B::Deparse::stash_subs to keep track of which
stashes it has seen, in order to avoid looping on circularities.

12 years agoFix the calculation for development time so it doesn't come up with things like ...
Dave Rolsky [Fri, 23 Dec 2011 17:01:34 +0000 (11:01 -0600)]
Fix the calculation for development time so it doesn't come up with things like "2 months" between two dev releases

There were a couple bugs ...

First, we should just use the date of the two commits we're looking at rather
than looking at all the commits in between and picking the earliest one. This
can find _much_ earlier things that weren't merged until much later, which
really throws the numbers off.

Second, when calculating the number of weeks and months, we shouldn't use
POSIX::ceil(), that rounds up 4.01 weeks to 5. Instead, I wrote a simple
rounding function that does standard rounding.

12 years agoPort utils test to VMS.
Craig A. Berry [Fri, 23 Dec 2011 12:16:35 +0000 (06:16 -0600)]
Port utils test to VMS.

The utilities from utils.lst end with a .com extension, and the
pseudo-shebang line looks quite different.

12 years agoIncrease $arybase::VERSION to 0.03
Father Chrysostomos [Thu, 22 Dec 2011 17:55:53 +0000 (09:55 -0800)]
Increase $arybase::VERSION to 0.03

12 years agoEek! I left some debug code in arybase.xs
Father Chrysostomos [Thu, 22 Dec 2011 17:55:28 +0000 (09:55 -0800)]
Eek! I left some debug code in arybase.xs

12 years agoDeparse.pm: Uncomment version code
Father Chrysostomos [Thu, 22 Dec 2011 06:29:46 +0000 (22:29 -0800)]
Deparse.pm: Uncomment version code

12 years agospeed up feature-checking slightly
Father Chrysostomos [Thu, 22 Dec 2011 00:15:32 +0000 (16:15 -0800)]
speed up feature-checking slightly

When seeing whether the cop hint hash contains the given feature,
Perl_feature_is_enabled only needs to see whether the hint hash ele-
ment exists.  It doesn’t need to turn it into a scalar.

12 years agoDeparse "a::]"->[0], etc., correctly
Father Chrysostomos [Wed, 21 Dec 2011 21:04:42 +0000 (13:04 -0800)]
Deparse "a::]"->[0], etc., correctly

The package name should not be omitted when the name begins with punc-
tuation unless the variable is in the main package.

"]"->[0] is force into the main package.
"a::]"->[0] is not.

12 years agoDeparse "string"->[$expr] and ->{$expr} correctly
Father Chrysostomos [Wed, 21 Dec 2011 20:55:56 +0000 (12:55 -0800)]
Deparse "string"->[$expr] and ->{$expr} correctly

This commit finishes the work done by b89b7257 and be6cf5cf0a by mak-
ing "string"->[...] and "string"->{...} in general deparse correctly
when "string" is not a valid identifier.

12 years agoUpdate Term-UI to CPAN version 0.30
Chris 'BinGOs' Williams [Thu, 22 Dec 2011 14:25:54 +0000 (14:25 +0000)]
Update Term-UI to CPAN version 0.30

  [DELTA]

  Changes for 0.30        Wed Dec 21 23:30:39 GMT 2011
  =====================================================
  * Resolve PAUSE indexer problems

  Changes for 0.28        Wed Dec 21 22:26:05 GMT 2011
  =====================================================
  * Apply Debian patches [rt.cpan.org #73400]

12 years agoAdded porting tests for CUSTOMIZED files
Chris 'BinGOs' Williams [Thu, 15 Dec 2011 23:11:51 +0000 (23:11 +0000)]
Added porting tests for CUSTOMIZED files

In Porting/Maintainers.pl CUSTOMIZED is a list of files that have been
customized within the Perl core. These tests make SHA digests of the
customized files and do a comparison previously stored digests to
ensure that customization is not lost when updating from upstream.

Update MANIFEST with the customized files

Add --regen ability to porting/customized.t and some documentation

12 years agoCorrect the Pod used to block comment a section of git log output.
Nicholas Clark [Thu, 22 Dec 2011 08:23:47 +0000 (09:23 +0100)]
Correct the Pod used to block comment a section of git log output.

Commit 31940c077ae95db7 added some git log output. To avoid the need to
re-indent it, it was "commented out" using Pod. However, the Pod used was
buggy. It used a =for, when it should have used a =begin/=end pair.

Without this, Pod renderers display the "comment" as if it is part of the
documentation, which isn't desired.

12 years agoAdd t/porting/utils.t, to test that utility scripts still compile.
Nicholas Clark [Wed, 21 Dec 2011 11:29:06 +0000 (12:29 +0100)]
Add t/porting/utils.t, to test that utility scripts still compile.

Right now, without this, it's possible to pass the all the regression tests
even if one has introduced syntax errors into scripts such as installperl
or installman. No tests fail, so it's fair game to push the commit.
Obviously this breaks installing perl, but we won't spot this.

Whilst we can't easily test that the various scripts *work*, we can at least
check that we've not made any trivial screw ups.

12 years agocorelist-perldelta.pl now requires Algorithm::Diff instead of using it.
Nicholas Clark [Wed, 21 Dec 2011 19:19:10 +0000 (20:19 +0100)]
corelist-perldelta.pl now requires Algorithm::Diff instead of using it.

This way ./perl -Ilib -c Porting/corelist-perldelta.pl can be used to syntax
check it.

corelist-perldelta.pl was not importing symbols from Algorithm::Diff, so
there are no changes in runtime behaviour.

12 years agoPorting/cherrymaint now requires LWP::UserAgent instead of using it.
Nicholas Clark [Wed, 21 Dec 2011 18:24:52 +0000 (19:24 +0100)]
Porting/cherrymaint now requires LWP::UserAgent instead of using it.

This way ./perl -Ilib -c Porting/cherrymaint can be used to syntax check it.

cherrymaint was not importing symbols from LWP::UserAgent, so there are no
changes in runtime behaviour.

12 years agoPorting/checkURL.pl now requires rather than uses all non-core modules.
Nicholas Clark [Wed, 21 Dec 2011 18:14:13 +0000 (19:14 +0100)]
Porting/checkURL.pl now requires rather than uses all non-core modules.

This way ./perl -Ilib -c Porting/checkURL.pl can be used to syntax check it.

Only File::Slurp and URI::Find::Simple were actually relying on C<use> to
import subroutines - replace the two uses with fully qualified names.
All other packages are needed for object constructors, not imports, so there
is no change in loading them with C<require>.

12 years agoUpdate CPANPLUS to CPAN version 0.9115
Chris 'BinGOs' Williams [Wed, 21 Dec 2011 20:06:41 +0000 (20:06 +0000)]
Update CPANPLUS to CPAN version 0.9115

  [DELTA]

  Changes for 0.9115      Tue Dec 20 21:10:24 2011
  ================================================
  * Added new config option 'allow_unknown_prereqs'
    to resolve issues with 0.9114 release

12 years agoCopy hints from tied hh to inner compile scopes
Father Chrysostomos [Wed, 21 Dec 2011 20:29:12 +0000 (12:29 -0800)]
Copy hints from tied hh to inner compile scopes

Entries from a tied %^H were not being copied to inner compile-time
scopes, resulting in %^H appearing empty in BEGIN blocks, even
though the underlying he chain *was* being propagated properly (so
(caller)[10] at run time still worked.

I was surprised that, in writing tests for this, I produced another
crash.  I thought I had fixed them with 95cf23680 and 7ef9d42ce.  It
turns out that pp_helem doesn’t support hashes with null values.
(That’s a separate bug that needs fixing, since the XS API allows for
them.)  For now, cloning the hh properly stops pp_helem from getting a
null value.

12 years agoregen pod issues
Father Chrysostomos [Wed, 21 Dec 2011 18:51:55 +0000 (10:51 -0800)]
regen pod issues

12 years agopodcheck.t: skip make-rmg-checklist
Father Chrysostomos [Wed, 21 Dec 2011 18:51:38 +0000 (10:51 -0800)]
podcheck.t: skip make-rmg-checklist

12 years agoFix pod errors in rmg
Father Chrysostomos [Wed, 21 Dec 2011 18:43:34 +0000 (10:43 -0800)]
Fix pod errors in rmg

12 years agoAdd Porting/make_rmg-checklist to MANIFEST
Father Chrysostomos [Wed, 21 Dec 2011 18:39:32 +0000 (10:39 -0800)]
Add Porting/make_rmg-checklist to MANIFEST

12 years agoDeparse "string"->[0] correctly
Father Chrysostomos [Wed, 21 Dec 2011 16:17:01 +0000 (08:17 -0800)]
Deparse "string"->[0] correctly

"foo"->[0] and $foo[0] compile down to the same thing.  B::Deparse was
assuming that an rv2gv with a gv kid would have to be $foo[0] syntax,
so it didn’t take things like '!@T#$'->[0] into account.

This commit only fixes aelemfast.  It is related to b89b7257.