This is a live mirror of the Perl 5 development currently hosted at
10 years agoutil.c: Add comment
Karl Williamson [Tue, 20 Dec 2011 16:28:47 +0000 (09:28 -0700)]
util.c: Add comment

10 years agoregcomp.c: Don't print incorrect debug info
Karl Williamson [Sun, 18 Dec 2011 20:27:06 +0000 (13:27 -0700)]
regcomp.c: Don't print incorrect debug info

The break out of the loop should be done before the debug statements
that indicate the things that happen only if the break isn't done.

10 years agoregcomp.sym: Change comments
Karl Williamson [Sun, 18 Dec 2011 19:22:11 +0000 (12:22 -0700)]
regcomp.sym: Change comments

10 years agoperl5db.t: add the DebugWrap class
Shlomi Fish [Wed, 11 Jan 2012 18:21:20 +0000 (20:21 +0200)]
perl5db.t: add the DebugWrap class

This helper encapsulates a bit of repeated code in the debugger
tests to avoid quite so much copying and pasting.

10 years agoBump several file copyright dates
Steffen Schwigon [Tue, 17 Jan 2012 14:17:13 +0000 (14:17 +0000)]
Bump several file copyright dates

Sync copyright dates with actual changes according to git history.

[Plus run regen_perly.h to update the SHA-256 checksums, and
regen/ to update regcharclass.h]

10 years agoEU::Typemaps: Helper module for easy typemap inclusion in XS
Steffen Mueller [Thu, 19 Jan 2012 16:58:49 +0000 (17:58 +0100)]
EU::Typemaps: Helper module for easy typemap inclusion in XS

In order to be able to deprecate certain typemaps from the core and send
them to a peaceful retirement on the CPAN, it's necessary to make it
easy to share and include these typemaps in case they're used despite
CPAN greps claiming the opposite. This helper module facilitates
non-copy-and-paste sharing of typemaps by adding a dependency and
including a single line of code in the XS.

10 years agoRemoved more unused boilerplate from perldelta
Chris 'BinGOs' Williams [Thu, 19 Jan 2012 16:46:28 +0000 (16:46 +0000)]
Removed more unused boilerplate from perldelta

10 years agoBump the visible perl -V copyright to 2012
Steffen Schwigon [Tue, 17 Jan 2012 10:26:13 +0000 (10:26 +0000)]
Bump the visible perl -V copyright to 2012

10 years agoAdd Steffen Schwigon to AUTHORS.
Nicholas Clark [Thu, 19 Jan 2012 13:23:33 +0000 (14:23 +0100)]
Add Steffen Schwigon to AUTHORS.

10 years agoEU::Typemaps: Implement embedded-typemap dumping
Steffen Mueller [Thu, 19 Jan 2012 07:46:54 +0000 (08:46 +0100)]
EU::Typemaps: Implement embedded-typemap dumping

This method will return a string representation of the typemap object
that can be included *verbatim* in an XS file.

10 years agoTypo in perlre
Karl Williamson [Thu, 19 Jan 2012 04:10:07 +0000 (21:10 -0700)]
Typo in perlre

Spotted by Jim Avera

10 years agoBegin battering the perldelta into shape for v5.15.7
Chris 'BinGOs' Williams [Wed, 18 Jan 2012 23:06:41 +0000 (23:06 +0000)]
Begin battering the perldelta into shape for v5.15.7

10 years agoregen pod issues
Father Chrysostomos [Wed, 18 Jan 2012 21:34:43 +0000 (13:34 -0800)]
regen pod issues

10 years Smaller indents for long lines
Father Chrysostomos [Wed, 18 Jan 2012 21:34:24 +0000 (13:34 -0800)] Smaller indents for long lines

10 years spaces after dots; wording tweak
Father Chrysostomos [Wed, 18 Jan 2012 21:32:32 +0000 (13:32 -0800)] spaces after dots; wording tweak

10 years agoDocument new overload warning in
Father Chrysostomos [Wed, 18 Jan 2012 21:20:44 +0000 (13:20 -0800)]
Document new overload warning in

as well as perldiag.

10 years Doc tweaks
Father Chrysostomos [Wed, 18 Jan 2012 21:18:58 +0000 (13:18 -0800)] Doc tweaks

This sentence got mangled somehow, somewhen.

10 years agoIncrease $overloading::VERSION to 0.02
Father Chrysostomos [Wed, 18 Jan 2012 20:59:34 +0000 (12:59 -0800)]
Increase $overloading::VERSION to 0.02

10 years Load Carp on demand
Father Chrysostomos [Wed, 18 Jan 2012 18:58:19 +0000 (10:58 -0800)] Load Carp on demand

10 years agoIn overload::ov_method, use ‘no overloading’
Father Chrysostomos [Wed, 18 Jan 2012 18:57:44 +0000 (10:57 -0800)]
In overload::ov_method, use ‘no overloading’

Using this instead of Scalar::Util makes things marginally faster.

10 years agoperldelta: another bug number
Father Chrysostomos [Wed, 18 Jan 2012 18:44:20 +0000 (10:44 -0800)]
perldelta: another bug number

10 years agoperldelta for #108480: $cow |= number
Father Chrysostomos [Wed, 18 Jan 2012 18:43:44 +0000 (10:43 -0800)]
perldelta for #108480: $cow |= number

10 years ago[perl #108480] $cow |= number undefines $cow
Father Chrysostomos [Wed, 18 Jan 2012 06:51:32 +0000 (22:51 -0800)]
[perl #108480] $cow |= number undefines $cow

If a read-only scalar is passed to one of | & ^ and it decides to do
a numeric operation, the numeric flags on the read-only scalar are
turned off afterwards if they were not on to begin with.

This was introduced in commit b20c4ee1f, which did so to stop $x | "0"
from coercing the rhs and making it behave differently the second
time through.

What that commit did not take into account was that the read-only
flag is set on cow scalars, and the same pp function is used for the
assignment forms.  So it was turning off the numeric flags after
$cow |= 1, leaving $cow undef.

I made this numeric flag-twiddling apply only to read-only scalars
(supposedly), because that seemed the most conservative and acceptable
change.  I am actually in favour of extending it to all scalars, to
make these operators less surprising.  For that reason, this commit
preserves the current behaviour with cows in the non-assignment case:
they don’t get coerced into numbers.  Changing them to work the same
way as non-cow writable scalars would make things more consistent, but
more consistently buggy.  I would like to make this non-coercion apply
to all scalars in 5.18.

This commit simply skips the flag-twiddling on the lhs in the assign-
ment case.

10 years agoperldelta for last two fixes
Father Chrysostomos [Wed, 18 Jan 2012 04:35:24 +0000 (20:35 -0800)]
perldelta for last two fixes

10 years agoDon’t crash on @a =~ // warning
Father Chrysostomos [Wed, 18 Jan 2012 04:33:28 +0000 (20:33 -0800)]
Don’t crash on @a =~ // warning

This is similar to bug #106726, caused by 579333ee9e3 and fixed
by c6fb3f6.

This bug was caused by c6771ab63d, which had exactly the same mistake.
Attempting to use find_runcv at compile time to find a variable name
is not going to work in general.  It only works by accident some
of the time.

10 years ago[perl #106726] Don’t crash on length(@arr) warning
Father Chrysostomos [Wed, 18 Jan 2012 02:22:16 +0000 (18:22 -0800)]
[perl #106726] Don’t crash on length(@arr) warning

The RT ticket blames this on 676a678ac, but it was actually commit
579333ee9e3.  676a678ac extended this problem to evals (and modules),
but it already occurred in the main program.

This crashes:

    ./miniperl -Ilib -we 'sub {length my @forecasts}'

because it is trying to find the variable name for the warning in the
CV returned by find_runcv, but this is a *compile-time* warning, so
using find_runcv is just wrong.

It ends up looking for the array in PL_main_cv’s pad, instead of

10 years agoavoid truncating time values when long is smaller than time_t
Tony Cook [Wed, 18 Jan 2012 03:36:12 +0000 (14:36 +1100)]
avoid truncating time values when long is smaller than time_t

long is only 32-bits on x64 Win32, but time_t is 64-bits.  This was warning:

POSIX.xs(1777) : warning C4244: 'initializing' : conversion from 'time_t' to 'const long', possible loss of data

The check against (time_t)-1 is the approved check from ANSI C 89 and

10 years agoAvoid 'defined(@array) is deprecated' warnings in tests.
Nicholas Clark [Tue, 17 Jan 2012 12:29:56 +0000 (13:29 +0100)]
Avoid 'defined(@array) is deprecated' warnings in tests.

Commit 604a99bd464c92d7 enabled the warning for package arrays, but failed
to lexically disable the warning for the various tests for the construction.
Even though the construction is deprecated, we'd still like to know if the
behaviour changes, in case it wasn't intentional.

10 years agoIn Perl_refcounted_he_fetch_pvn(), eliminate nested ? : ternary operators.
Nicholas Clark [Tue, 17 Jan 2012 11:44:42 +0000 (12:44 +0100)]
In Perl_refcounted_he_fetch_pvn(), eliminate nested ? : ternary operators.

10 years agoUpdate Locale-Maketext to CPAN version 1.22
Chris 'BinGOs' Williams [Tue, 17 Jan 2012 10:19:13 +0000 (10:19 +0000)]
Update Locale-Maketext to CPAN version 1.22


    * Minor POD documentation update to sync with upstream blead.

10 years agoMake Pod::Html more robust against malformed L<> contents.
Nicholas Clark [Tue, 10 Jan 2012 14:43:55 +0000 (15:43 +0100)]
Make Pod::Html more robust against malformed L<> contents.

Pod::Html attempts to search for the contents to see if they are a suffix
of any entry in an existing list, using a regular expression.
Previously the contents were interpolated directly into a regex, which
meant that if they happened to be syntactically invalid regular expression
syntax, Pod::Html aborted with a runtime error.

10 years agoPurge references to --netscape and --libpods, no longer in Pod::Html
Nicholas Clark [Tue, 10 Jan 2012 13:36:26 +0000 (14:36 +0100)]
Purge references to --netscape and --libpods, no longer in Pod::Html

The long deprecated --netscape flag was removed in commit 27b29ec338b08496.
This was originally added to control use of Netscape specific HTML
extensions, , but became a no-op when that functionality was removed.
--libpods was removed in commit 3b49d8d9ac841d8e.

However neither commit removed use of these flags by callers to Pod::Html,
notably in installhtml and the Makefiles that invoke it. Hence this commit.

10 years agoperldelta: Typos and calrifications
Father Chrysostomos [Tue, 17 Jan 2012 07:12:12 +0000 (23:12 -0800)]
perldelta: Typos and calrifications

10 years agoperldelta up to 1a50d74bac4
Father Chrysostomos [Tue, 17 Jan 2012 06:59:42 +0000 (22:59 -0800)]
perldelta up to 1a50d74bac4

10 years agoperldelta for @& and PL_sawampersand
Father Chrysostomos [Tue, 17 Jan 2012 04:48:27 +0000 (20:48 -0800)]
perldelta for @& and PL_sawampersand

10 years agoperldelta for tying and autoviv
Father Chrysostomos [Tue, 17 Jan 2012 04:47:46 +0000 (20:47 -0800)]
perldelta for tying and autoviv

10 years agoperldelta for overload::Overloaded/can change
Father Chrysostomos [Tue, 17 Jan 2012 04:42:53 +0000 (20:42 -0800)]
perldelta for overload::Overloaded/can change

10 years agoperldelta for += warning
Father Chrysostomos [Tue, 17 Jan 2012 04:42:35 +0000 (20:42 -0800)]
perldelta for += warning

10 years agoLower $overload::VERSION to 1.17
Father Chrysostomos [Tue, 17 Jan 2012 04:42:11 +0000 (20:42 -0800)]
Lower $overload::VERSION to 1.17

It doesn’t need to be increased twice between releases.

10 years agoconfig.over is generated on some platforms, .gitignore it
Tony Cook [Mon, 16 Jan 2012 10:11:10 +0000 (21:11 +1100)]
config.over is generated on some platforms, .gitignore it

10 years agoavoid overflowing a 32-bit signed int
Tony Cook [Mon, 16 Jan 2012 10:00:00 +0000 (21:00 +1100)]
avoid overflowing a 32-bit signed int

and the associated warning from Solaris C:

"regcomp.c", line 5294: warning: integer overflow detected: op "<<"

10 years agohandle U suffixed unsigned int literals from regexp.h
Tony Cook [Mon, 16 Jan 2012 22:02:50 +0000 (09:02 +1100)]
handle U suffixed unsigned int literals from regexp.h

10 years agoProvide as much diagnostic information as possible in "panic: ..." messages.
Nicholas Clark [Mon, 16 Jan 2012 16:08:38 +0000 (17:08 +0100)]
Provide as much diagnostic information as possible in "panic: ..." messages.

The convention is that when the interpreter dies with an internal error, the
message starts "panic: ". Historically, many panic messages had been terse
fixed strings, which means that the out-of-range values that triggered the
panic are lost. Now we try to report these values, as such panics may not be
repeatable, and the original error message may be the only diagnostic we get
when we try to find the cause.

We can't report diagnostics when the panic message is generated by something
other than croak(), as we don't have *printf-style format strings. Don't
attempt to report values in panics related to *printf buffer overflows, as
attempting to format the values to strings may repeat or compound the
original error.

10 years agoIncrease $Math::BigInt::VERSION to 1.998
Father Chrysostomos [Mon, 16 Jan 2012 18:05:41 +0000 (10:05 -0800)]
Increase $Math::BigInt::VERSION to 1.998

10 years Suppress overload warning
Father Chrysostomos [Mon, 16 Jan 2012 18:04:10 +0000 (10:04 -0800)] Suppress overload warning intentionally registered an unregisterable op.

10 years agoperldiag.pod: Document overload’s invalid arg warning
Father Chrysostomos [Mon, 16 Jan 2012 17:59:49 +0000 (09:59 -0800)]
perldiag.pod: Document overload’s invalid arg warning

10 years Combine two loops
Father Chrysostomos [Mon, 16 Jan 2012 17:59:23 +0000 (09:59 -0800)] Combine two loops

It should go faster if we only iterate through %arg once.

10 years agoTest invalid arg warning from overload
Father Chrysostomos [Mon, 16 Jan 2012 17:50:47 +0000 (09:50 -0800)]
Test invalid arg warning from overload

10 years Put invalid arg warning in "overload" category
Father Chrysostomos [Mon, 16 Jan 2012 17:36:22 +0000 (09:36 -0800)] Put invalid arg warning in "overload" category

Existing overload warnings work that way.

10 years agoSuppress ‘useless’ warning in
Father Chrysostomos [Mon, 16 Jan 2012 17:32:09 +0000 (09:32 -0800)]
Suppress ‘useless’ warning in

10 years agoEmit a warning if an attempt is made to overload an invalid (e.g., misspelled) operat...
jkeenan [Sun, 15 Jan 2012 14:07:13 +0000 (09:07 -0500)]
Emit a warning if an attempt is made to overload an invalid (e.g., misspelled) operator. For RT #74098.

10 years agodefined(@array) now also warns for package variables.
Nicholas Clark [Wed, 4 Jan 2012 10:36:25 +0000 (11:36 +0100)]
defined(@array) now also warns for package variables.

10 years agoTest that defined warns for package arrays and hashes.
Nicholas Clark [Wed, 4 Jan 2012 10:23:17 +0000 (11:23 +0100)]
Test that defined warns for package arrays and hashes.

Currently TODO'd for package arrays. The existing tests were only for

10 years agoIn Perl_feature_is_enabled() use cBOOL to convert the pointer to a "bool".
Nicholas Clark [Mon, 16 Jan 2012 15:21:21 +0000 (16:21 +0100)]
In Perl_feature_is_enabled() use cBOOL to convert the pointer to a "bool".

On some platforms which don't have a (real) bool type, bool is actually a
char, and hence (sadly) it's correct for the compiler to truncate when
assigning to it, instead of what the programmer thought was going to happen
(testing zero or not). In Perl_feature_is_enabled(), the expression is a
pointer, so if it converts to an integer with the bottom 8 bits zero, then
on these platforms it would truncate to "false". Not what was expected.

10 years agoShuffle my entry around to use my name instead of old email
Steffen Mueller [Mon, 16 Jan 2012 07:25:09 +0000 (08:25 +0100)]
Shuffle my entry around to use my name instead of old email

10 years agoCorrect Hojung Youn's name in AUTHORS
Hojung Youn [Mon, 16 Jan 2012 07:19:07 +0000 (08:19 +0100)]
Correct Hojung Youn's name in AUTHORS

10 years agoBump ExtUtils::Manifest version due to commits 97bae9c5 and bf081550
Chris 'BinGOs' Williams [Sun, 15 Jan 2012 21:49:01 +0000 (21:49 +0000)]
Bump ExtUtils::Manifest version due to commits 97bae9c5 and bf081550

10 years agoBump autouse version due to commit f965e9d4a
Chris 'BinGOs' Williams [Sun, 15 Jan 2012 21:42:59 +0000 (21:42 +0000)]
Bump autouse version due to commit f965e9d4a

10 years agostat.t: Avoid unconditional lstat on file name
Father Chrysostomos [Sun, 15 Jan 2012 19:36:35 +0000 (11:36 -0800)]
stat.t: Avoid unconditional lstat on file name

lstat on handles is ok.

10 years agostat.t, filetest.t: Actually gen rand file names
Father Chrysostomos [Sun, 15 Jan 2012 19:22:34 +0000 (11:22 -0800)]
stat.t, filetest.t: Actually gen rand file names

This mistake of mine was stupid enough I laughed out loud.

10 years agoperldelta up to 55b5114f4
Father Chrysostomos [Sun, 15 Jan 2012 06:35:47 +0000 (22:35 -0800)]
perldelta up to 55b5114f4

10 years ago[perl #108224] B::Deparse doesn't recognize for continue block
Hojung Youn [Sun, 15 Jan 2012 03:03:19 +0000 (12:03 +0900)]
[perl #108224] B::Deparse doesn't recognize for continue block

B::Deparse foreach scoping problem was fixed at cf24a84005,
which was issued at #30504. But B::Deparse was blinded
temporarily by this commit so that it couldn't recognize
foreach continue block for a moment.

foreach statement generates 'nextstate', 'stub', 'leave', or
'scope' root opcode at will when foreach statement is not used
as a oneline statement modifier. So all the case of opcodes
should be checked.

Some tests for foreach scoping and continue block are attached.

related: #30504

10 years agoperldelta up to 9f71cfe6ef2
Father Chrysostomos [Sun, 15 Jan 2012 06:05:13 +0000 (22:05 -0800)]
perldelta up to 9f71cfe6ef2

10 years agoIn vmsify, leave ../ path components alone.
Craig A. Berry [Sun, 15 Jan 2012 04:40:24 +0000 (22:40 -0600)]
In vmsify, leave ../ path components alone.

Way back in 08c7cbbb0fc466967038dcb56ca4f1b828b96269, we started
eliminating ../ components when converting paths from Unix syntax
to VMS syntax.  No corresponding change was made when converting
in the opposite direction, so this was inconsistent.  We should
get a valid path either way, but doing more interpretation than
necessary seems uncalled for, so this patch restores the previous

This also paves the way to eliminate some inconsistencies between
what we do when Extended Filename Syntax (EFS) is in effect and
when it's not.

10 years agoUn-TODO some VMS file spec tests under EFS.
Craig A. Berry [Sat, 14 Jan 2012 22:24:16 +0000 (16:24 -0600)]
Un-TODO some VMS file spec tests under EFS.

When Extended Filename Syntax is enabled, several tests were
expecting not to pass, but they do, so we should say so.  Also,
reinstate a test removed in 1fe570cc5e24eecfb07059e53e95fa864bb44142.

10 years agoMake lstat($ioref) and lstat($gv) consistent
Father Chrysostomos [Sat, 14 Jan 2012 21:12:07 +0000 (13:12 -0800)]
Make lstat($ioref) and lstat($gv) consistent

As documented in perldiag, lstat($gv) warns and does an fstat.

lstat($ioref) wasn’t doing what was documented, but after warning
would do the same as stat(_).

10 years agostat.t: Make test for -T _ and lstat more robust
Father Chrysostomos [Sat, 14 Jan 2012 20:59:34 +0000 (12:59 -0800)]
stat.t: Make test for -T _ and lstat more robust

It is now less likely to fail if one runs stat.t manually when tests
are running, due to the random file name.  It also works now when the
script chdirs (when run outside t), because it no longer relies on $0
being a real file.

That last part was broken by commit ad2d99e39, which made -T _ more
consistent when it cannot open the file.  It used to set the stat
type, but not the success status (as of commit 25988e07, which
fixed #4253).

10 years agoDocument the data columns in vms/ext/filespec.t.
Craig A. Berry [Sat, 14 Jan 2012 19:16:26 +0000 (13:16 -0600)]
Document the data columns in vms/ext/filespec.t.

10 years agoStop inadvertently skipping Spec.t on VMS.
Craig A. Berry [Fri, 6 Jan 2012 20:23:59 +0000 (14:23 -0600)]
Stop inadvertently skipping Spec.t on VMS.

ae5a807c7dcf moved a check against $@ away from the eval it was
checking and inserted another eval in between, the effect of which
was to make the tests that can only run on VMS get skipped there
too.  Ouch.

There are other problems with ae5a807c7dcf, but this is a start.

10 years agopp_sys.c: goto mustn’t skip initialisation
Father Chrysostomos [Sat, 14 Jan 2012 19:31:45 +0000 (11:31 -0800)]
pp_sys.c: goto mustn’t skip initialisation

10 years agoperldelta up to 7c2b3c783b
Father Chrysostomos [Sat, 14 Jan 2012 09:16:58 +0000 (01:16 -0800)]
perldelta up to 7c2b3c783b

10 years agomagic.t: Correct miniperl skip count
Father Chrysostomos [Sat, 14 Jan 2012 09:01:33 +0000 (01:01 -0800)]
magic.t: Correct miniperl skip count

10 years ago-T "unreadable file" should set stat info consistently
Father Chrysostomos [Sat, 14 Jan 2012 08:23:23 +0000 (00:23 -0800)]
-T "unreadable file" should set stat info consistently

This was mentioned in ticket #77388.  It turns out to be
related to #4253.

If the file cannot be opened, -T and -B on filenames set the last han-
dle to null and set the last stat type to stat, but leave the actual
stat buffer and success status as they were.

That means that stat(_) will continue to return the previous buffer,
but lstat(_) will no longer work.

This is another of those inconsistent cases where the internal stat
info is only partially set.

Originally, this code would set PL_laststatval (the success status) to
-1.  Commit 25988e07 (the patch in ticket #4253) intentionally changed
this to make -T _ less suprising on read-only files.

But the patch ended up affecting -T with an explicit file name, too.
It also only partially fixed things for -T _, because the last stat
type *was* still being set.

This commit changes it to set all the stat info, for explicit file
names, or no stat info, for _ (if the previous stat was with a
file name).

10 years agostat.t: Add bug number
Father Chrysostomos [Sat, 14 Jan 2012 08:40:05 +0000 (00:40 -0800)]
stat.t: Add bug number

10 years agoDon’t emit unopened warning for other stat(HANDLE) error
Father Chrysostomos [Sat, 14 Jan 2012 08:33:15 +0000 (00:33 -0800)]
Don’t emit unopened warning for other stat(HANDLE) error

-r or -T on a GV with no IO or on an IO with no fp (or dirp for -r)
will produce an ‘unopened’ warning.  stat() on a filehandle will warn
about an unopened filehandle not only if there is no fp, but also if
the fstat call fails (with errno containing EBADP, EFAULT or EIO, at
least on Darwin).

I don’t know if there is a way to test this.

(But pp_stat and my_stat_flags are getting closer, so this must be
correct. :-)

10 years agoMake -T BADHANDLE set errno with fatal warnings
Father Chrysostomos [Sat, 14 Jan 2012 08:07:46 +0000 (00:07 -0800)]
Make -T BADHANDLE set errno with fatal warnings

Due to the order of the statements, SETERRNO would never be reached
with fatal warnings.

I’ve added another SETERRNO out of paranoia.  If there is a nicely-
behaved __WARN__ handler, we should still be setting errno just before
-T returns, in case the handler changed it.  We can’t do much in
the case of fatal handlers that do system calls.  (Is $! localised
for those?)

10 years agoMake -l HANDLE set PL_laststatval with fatal warnings
Father Chrysostomos [Sat, 14 Jan 2012 08:00:26 +0000 (00:00 -0800)]
Make -l HANDLE set PL_laststatval with fatal warnings

Fatal warnings were preventing it from being set, because the warning
came first.

(PL_laststatval records the success status of the previous stat.)

10 years agoMake -T HANDLE and -B HANDLE always set last stat type
Father Chrysostomos [Sat, 14 Jan 2012 07:50:15 +0000 (23:50 -0800)]
Make -T HANDLE and -B HANDLE always set last stat type

-T and -B on handles always set PL_laststatval (which indicates the
success of the previous stat).  But they don’t set the last stat type
(PL_laststype) for closed filehandles.  Those two should always go
together.  stat and -r, -w etc., always set PL_laststype for a closed
or missing filehandle.

10 years agopp_sys.c:pp_fttest: Don’t set PL_statname to SvPV(PL_statname)
Father Chrysostomos [Sat, 14 Jan 2012 07:42:04 +0000 (23:42 -0800)]
pp_sys.c:pp_fttest: Don’t set PL_statname to SvPV(PL_statname)

This is a waste of CPU cycles.

PL_statname is always a PV.

10 years agoMake -T _ and -B _ always set PL_laststatval
Father Chrysostomos [Sat, 14 Jan 2012 07:38:57 +0000 (23:38 -0800)]
Make -T _ and -B _ always set PL_laststatval

-T _ and -B _ always do another stat() on the previous file handle or
filename, unless it is a handle that has been closed.

Normally, the internal stat buffer, status, etc., are reset even for
_.  This happens even on a failed fstat().

-T HANDLE and -B HANDLE currently *do* reset the stat status
(PL_laststatval) if there is no IO thingy, so having -T _ and -B _ not
do that makes things needlessly inconsistent.

10 years agopp_sys.c: Remove space from lstat($ioref) warning
Father Chrysostomos [Sat, 14 Jan 2012 06:47:31 +0000 (22:47 -0800)]
pp_sys.c: Remove space from lstat($ioref) warning

This was emitting two spaces before the ‘at’:

lstat() on filehandle  at -e line 1.

10 years agopp_sys.c:pp_fttext: Don’t extend the stack after popping
Father Chrysostomos [Sat, 14 Jan 2012 06:19:23 +0000 (22:19 -0800)]
pp_sys.c:pp_fttext: Don’t extend the stack after popping

10 years agoSquash repetitititive code in doio.c:my_stat_flags
Father Chrysostomos [Sat, 14 Jan 2012 04:31:23 +0000 (20:31 -0800)]
Squash repetitititive code in doio.c:my_stat_flags

10 years agoMake failed filetests consistent with & w/out fatal warnings
Father Chrysostomos [Sat, 14 Jan 2012 04:28:46 +0000 (20:28 -0800)]
Make failed filetests consistent with & w/out fatal warnings

The result of stat(_) after a failed -r HANDLE would differ depending
on whether fatal warnings are on.  This corrects that, by setting the
internal status before warning about an unopened filehandle.

10 years agostat $ioref should record the handle for -T _
Father Chrysostomos [Sat, 14 Jan 2012 00:52:23 +0000 (16:52 -0800)]
stat $ioref should record the handle for -T _

stat $gv records the handle so that -T _ can use it.  But stat $ioref
hasn’t been doing that, until this commit.

PL_statgv can now hold an SVt_PVIO instead of a SVt_PVGV.

10 years agostat $ioref should reset the internal stat type
Father Chrysostomos [Sat, 14 Jan 2012 00:43:30 +0000 (16:43 -0800)]
stat $ioref should reset the internal stat type

In addition to a stat buffer, Perl keeps track internally of which
type of stat was done last, either stat or lstat, so that lstat _ can
die if the previous type was stat.

This was not being reset for stat $ioref.  Filetest ops were fine.

10 years agoSet PL_statgv to null when freed or coerced
Father Chrysostomos [Fri, 13 Jan 2012 23:50:51 +0000 (15:50 -0800)]
Set PL_statgv to null when freed or coerced

If PL_statgv is not set to null when freed, that same SV could be
reused for another GV, in which case -T _ will then use another handle
unrelated to the previous stat.

Similarly, if PL_statgv points to a fake glob that gets coerced into
a non-glob before it is freed, it will not follow the code path in
sv_free that sets PL_statgv to null.  Furthermore, if it becomes a GV
again, it could be a completely different filehandle, unrelated to the
previous stat.

10 years agoSuppress confusing uninit warning from -T _
Father Chrysostomos [Fri, 13 Jan 2012 22:26:19 +0000 (14:26 -0800)]
Suppress confusing uninit warning from -T _

-T _ uses the file name saved by a preceding stat.  If there was no
preceding stat, the internal sv used to store the file name is unde-
fined, so SvPV producing an uninitialized warning.  Normally a failed
-T will just return undefined and set $!.  Normally stat on a filehan-
dle will set the internal stat file name to "".

This commit sets the internal file name to "" initially on startup,
instead of creating an undefined scalar.

10 years agodefined *{"+"} should not stop %+ from working
Father Chrysostomos [Fri, 13 Jan 2012 17:32:20 +0000 (09:32 -0800)]
defined *{"+"} should not stop %+ from working

The same applies to %-.

This is something I broke when merging is_magical_gv with

gv_fetchpvn_flags must make sure its *+ glob is present in the symbol
table when it loads Tie::Hash::NamedCapture.  If it adds it afterwards
it will clobber another *+ that Tie::Hash::NamedCapture has autovivi-
fied and tied in the mean time.

10 years agodefined *{"!"} should not stop %! from working
Father Chrysostomos [Fri, 13 Jan 2012 17:23:07 +0000 (09:23 -0800)]
defined *{"!"} should not stop %! from working

This is something I broke when merging is_magical_gv with

gv_fetchpvn_flags must make sure its *! glob is present in the sym-
bol table it loads Errno.  If it adds it afterwards it will clobber
another *! that Errno has autovivified and tied in the mean time.

10 years agoSquash repetititive code in util.c:report_evil_fh
Father Chrysostomos [Fri, 13 Jan 2012 00:41:59 +0000 (16:41 -0800)]
Squash repetititive code in util.c:report_evil_fh

10 years agoperldelta for Unicode property performance changes
Karl Williamson [Fri, 13 Jan 2012 16:38:50 +0000 (09:38 -0700)]
perldelta for Unicode property performance changes

I put this under a major change, but would be fine if it is moved to an
=item change.

10 years agoutil.c: Silence compiler warning
Karl Williamson [Sun, 8 Jan 2012 17:23:45 +0000 (10:23 -0700)]
util.c: Silence compiler warning

cc on solaris is smart enough to figure out that this return isn't

10 years agoregcomp.c: Compile inverted character classes with \p{}
Karl Williamson [Fri, 6 Jan 2012 22:05:11 +0000 (15:05 -0700)]
regcomp.c: Compile inverted character classes with \p{}

This commit causes character classes of the form [^\p{...}] to have
their code points known at compile time instead of runtime.  This allows
for better optimization and runtime execution speed.

10 years agoregcomp.c: Prepare for allowing [^\p{...}]
Karl Williamson [Fri, 6 Jan 2012 21:51:27 +0000 (14:51 -0700)]
regcomp.c: Prepare for allowing [^\p{...}]

It turns out that this code is buggy, except for the fact that
<nonbitmap> currently can't contain conflicts.  The trouble would have
started when Unicode properties were moved to being looked at at compile
time -- except when the class is to be inverted, so there isn't a
problem.  But in preparation for handling this case, we fix the
potential bugs, as specified in the comments.

10 years agoregcomp.c; Use Latin1 \p{} in optimization
Karl Williamson [Fri, 6 Jan 2012 21:38:37 +0000 (14:38 -0700)]
regcomp.c; Use Latin1 \p{} in optimization

This commit causes any Latin1-range characters from Unicode properties
to be placed at compile time into the bitmap of the ANYOF node that
implements those properties, and to remove the flag that says they
should be looked for at run time.  This causes the optimizer to generate
a better start class, as it knows more fully which characters can be and
can't be in the start class, and speeds up runtime checking, as it can
just do a bitmap test for these, instead of having to go look at the

10 years agoregcomp.c: Better optimize [classes] under /aa.
Karl Williamson [Fri, 6 Jan 2012 20:46:17 +0000 (13:46 -0700)]
regcomp.c: Better optimize [classes] under /aa.

An optimization introduced in 5.14 is for bracketed character classes of
the very special form like [Bb].  These can be optimized into an
EXACTFish node.  In this case, they can be optimized to an EXACTFA node
since they are ASCII characters.  If the surrounding options are /aa, it
is likely that any adjacent EXACTFish nodes will be EXACTFA, so optimize
to that node instead of the previous EXACTFU.  This will allow the
optimizer to collapse any adjacent nodes.  For example


will now get optimized to  an EXACTFA of "abc".  Previously it would
have gotten optimized to EXACTFA<a> . EXACTFU<b> . EXACTFA<c>.

10 years agoregcomp.c: Avoid unnecessary runtime fold checking
Karl Williamson [Fri, 6 Jan 2012 20:27:17 +0000 (13:27 -0700)]
regcomp.c: Avoid unnecessary runtime fold checking

Since 5.14, the single-char folds have been calculated at compile time,
either by doing it there, or for properties, setting the swash name to
include a foleded or non-folded version of the property.  Thus this
patch could have been done much earlier.

Now, most of the properties are actually computed at compile time by
previous patches, but that isn't relevant to this one.

Thus there really doesn't need to be runtime folding for things that
aren't in the bitmap, except for those things under /d that match only
if the string is in UTF8.

10 years agoregcomp.c: Change loop variable name, associated changes
Karl Williamson [Fri, 6 Jan 2012 17:18:53 +0000 (10:18 -0700)]
regcomp.c: Change loop variable name, associated changes

The variable 'value' is already used for something else.  Using it as a
loop variable corrupts the other use.  This commit changes to a
different name, and adds code to keep 'value', and 'prevvalue' in sync
with their other meanings.

10 years agoregexec.c: Use shared swash in bracketed character classes
Karl Williamson [Fri, 6 Jan 2012 04:15:45 +0000 (21:15 -0700)]
regexec.c: Use shared swash in bracketed character classes

This takes advantage of an earlier commit to use a swash that may be
shared across multiple character class instances.  That means that if a
match in another class has to look up a value, that that same value is
automatically available without further lookup to all character classes
that share the swash.  This means that the lookup result only needs be
cached once for all instances in the thread, saving time and memory.

Note that currently the only swashes that are shared are those that
consist solely of a single Unicode property definition.  Some sort of
checksum would have to be computed if this were to be extended to
custom classes.  But what this does is cause sharing for all Unicode
properties that aren't in bracketed classes (as they are implemented as
a bracketed class with a single element), as well as the few cases where
someone explicitly writes [\p{foo}] without anything else in the class.