Ruslan Zakirov [Sun, 24 Mar 2013 11:53:12 +0000 (15:53 +0400)]
scalar value %x{'a'} better written as $x{'a'}
Ruslan Zakirov [Wed, 27 Feb 2013 15:39:39 +0000 (19:39 +0400)]
key/value hash slice operation
kvhslice operator that implements %h{1,2,3,4} syntax which
returns list of key value pairs rather than just values
(regular slices).
Nicholas Clark [Wed, 11 Sep 2013 09:26:29 +0000 (11:26 +0200)]
Move BmUSEFUL to the IV slot from the NV slot, simplifying union _xnvu.
This change is made possible by commit
8922e4382e9c1488 (June 2013), which
eliminated BmPREVIOUS, which had been using the IV slot.
Father Chrysostomos [Fri, 13 Sep 2013 01:26:30 +0000 (18:26 -0700)]
Preserve undef identity in const ops
This fixes the one remaining issue in ticket #105906.
Under ithreads, the constants are transferred to the pad at compile
time. Since the pads are AVs, and since AVs used &PL_sv_undef to rep-
resent unused slots, &PL_sv_undef could not be stored in the pad, and
so was copied.
That meant the same constant would produce a different scalar at each
call site:
$ ./perl -Ilib -le 'BEGIN { $::{z} = \undef } for(z,z) { print \$_ }'
SCALAR(0x7fecb38062e0)
SCALAR(0x7fecb3806100)
Commit ce0d59f changed the way AVs work, so now we *can* store
&PL_sv_undef in an AV meaningfully, and there is no longer any need
for this copying hack.
Ricardo Signes [Fri, 13 Sep 2013 01:36:54 +0000 (21:36 -0400)]
convert mktables to parent.pm instead of base.pm
Tony Cook [Fri, 13 Sep 2013 01:51:45 +0000 (11:51 +1000)]
Tony Cook [Fri, 13 Sep 2013 01:34:16 +0000 (11:34 +1000)]
[perl #115928] use a consistent internal rand on all platforms
Tony Cook [Tue, 10 Sep 2013 00:09:43 +0000 (10:09 +1000)]
[perl #115928] we don't use drand48_r or random_r any longer
Removing this should mean that metaconfig will remove the units from
the built Configure
Tony Cook [Mon, 9 Sep 2013 04:06:35 +0000 (14:06 +1000)]
[perl #115928] Configure now selects our internal drand48()
Tony Cook [Thu, 29 Aug 2013 04:52:15 +0000 (14:52 +1000)]
revert config_h.SH changes, now handled by Configure
Tony Cook [Mon, 9 Sep 2013 04:44:57 +0000 (14:44 +1000)]
[perl #115928] a consistent (public) rand() implementation
Based on Yves's random branch work.
This version makes the new random number visible to external modules,
for example, List::Util's XS shuffle() implementation.
I've also added a 64-bit implementation when HAS_QUAD is true, this
should be significantly faster, even on 32-bit CPUs. This is intended to
produce exactly the same sequence as the original implementation.
The original version of this commit retained the "freebsd" name from
Yves's original work for the function and data structure names. I've
removed "freebsd" from most function names so the name isn't an issue
if we choose to replace the implementation,
Ricardo Signes [Mon, 9 Sep 2013 02:26:10 +0000 (22:26 -0400)]
perlreapi: use parent in example, not base
Ricardo Signes [Mon, 9 Sep 2013 02:07:03 +0000 (22:07 -0400)]
overload tests: use parent instead of base
Ricardo Signes [Mon, 9 Sep 2013 02:06:57 +0000 (22:06 -0400)]
XS-Typemap tests: use parent instead of base
Ricardo Signes [Mon, 9 Sep 2013 02:06:21 +0000 (22:06 -0400)]
B: use parent instead of base
Ricardo Signes [Mon, 9 Sep 2013 02:01:47 +0000 (22:01 -0400)]
Pod::Html: use parent instead of base
Ricardo Signes [Mon, 9 Sep 2013 02:01:19 +0000 (22:01 -0400)]
Hash::Util::FieldHash: use parent instead of base
Ricardo Signes [Mon, 9 Sep 2013 02:00:46 +0000 (22:00 -0400)]
FileCache: use parent instead of base
Matthew Horsfall [Thu, 12 Sep 2013 18:26:45 +0000 (14:26 -0400)]
Allow semi-colon on TYPEMAP: line to work without it on the closing delim.
This means:
TYPEMAP: <<FOO;
Something T_IV
FOO
will now work.
Steve Hay [Thu, 12 Sep 2013 21:10:56 +0000 (22:10 +0100)]
perldelta - IO and File::Find have been upgraded
Steve Hay [Thu, 12 Sep 2013 20:57:09 +0000 (21:57 +0100)]
Upgrade perlfaq from version 5.0150043 to 5.0150044
Slaven Rezic [Thu, 12 Sep 2013 12:04:27 +0000 (14:04 +0200)]
File::Find: diagnostics in case of a failed chdir
Father Chrysostomos [Thu, 12 Sep 2013 00:53:03 +0000 (17:53 -0700)]
perldiag: Rewrap an entry for better splain output
John P. Linderman [Thu, 12 Sep 2013 14:15:32 +0000 (16:15 +0200)]
Correct the citation for Peter McIlroy's sorting paper.
Also update John P. Linderman's e-mail address.
Nicholas Clark [Thu, 12 Sep 2013 14:22:51 +0000 (16:22 +0200)]
Update John P. Linderman's e-mail address in AUTHORS.
Steve Hay [Thu, 12 Sep 2013 07:53:43 +0000 (08:53 +0100)]
Upgrade autodie from version 2.20 to 2.21
One change pushed upstream has been assimilated, the other not yet.
Steve Hay [Wed, 11 Sep 2013 19:52:44 +0000 (20:52 +0100)]
SADAHIRO confirms that Unicode::(Collate|Normalize) can be UPSTREAM=>'cpan'
Steve Hay [Wed, 11 Sep 2013 19:51:04 +0000 (20:51 +0100)]
Upgrade Module::Metadata from version 1.000017 to 1.000018
The taint.t test can now be included since it no longer uses Test::Fatal.
Steve Hay [Wed, 11 Sep 2013 09:29:09 +0000 (10:29 +0100)]
EXCLUDE Module-Metadata's t/taint.t: we don't have Test::Fatal in core
Steve Hay [Wed, 11 Sep 2013 08:39:17 +0000 (09:39 +0100)]
Upgrade Perl-OSType from version 1.004 to 1.005
Steve Hay [Wed, 11 Sep 2013 08:34:33 +0000 (09:34 +0100)]
Upgrade Module::Metadata from version 1.000016 to 1.000017
Tony Cook [Wed, 11 Sep 2013 13:13:56 +0000 (23:13 +1000)]
[perl #88814] sigdispatch.t work on openbsd 5.2
Karl Williamson [Wed, 11 Sep 2013 03:28:31 +0000 (21:28 -0600)]
perlapi: Add doc for my_strlcpy, my_strlcat
Karl Williamson [Wed, 11 Sep 2013 02:40:25 +0000 (20:40 -0600)]
regcomp.c: Use Perl_form() instead of buggy sprintf
Commit
4cabb89a737018190d4e09360a6615e19160709f introduced tests
which include trying to look up a Unicode property whose name
is an upper Latin-range character. This caused errors and a segfault
on some but not all patforms. It also turns out that the error is in
some locales but not others.
The problem was there all along, and this commit merely exposed it; and
the bug is in the libc sprintf() for those platforms, which was used
to create the look-up property name. This version of sprintf() turns
out to be locale-sensitive, and in a UTF-8 locale, it refuses to format
a %s that isn't valid UTF-8. My guess is that sprintf and printf share
implementation, and such sensitivity may be warranted for printf, but
certainly not for sprintf. It is undocumented behavior. And it is
incorrect UTF-8 handling even if one were to output UTF-8 only. The
reason for that is any malformed text should be turned into the
REPLACEMENT CHARACTER, not just skipped over. This is a potential
security hole in in this sprintf() version.
The solution I ended up for Perl is to replace the sprintf() with
Perl_form(). I also looked at my_strlcpy() and friends. Neither one is
as convenient as the buggy sprintf. Feel free to replace this with
something better.
Karl Williamson [Mon, 25 Mar 2013 19:09:09 +0000 (13:09 -0600)]
Use separate macros for byte vs uv Unicode
This removes a macro not yet even in a development release, and splits
its calls into two classes: those where the input is a byte; and those
where it can be any unsigned integer. The byte implementation avoids a
function call on EBCDIC platforms.
Tony Cook [Wed, 11 Sep 2013 00:47:13 +0000 (10:47 +1000)]
[perl #118091] Split gv_fetchpvn_flags into smaller functions
Brian Fraser [Sun, 4 Aug 2013 17:55:56 +0000 (14:55 -0300)]
gv.c: Split part of find_default_stash into gv_is_in_main.
gv_is_in_main() checks if an unqualified identifier is in the main::
stash.
Brian Fraser [Sun, 4 Aug 2013 17:23:27 +0000 (14:23 -0300)]
gv.c: Rename magicalize_gv into gv_magicalize, make it more specific.
Namely, gv_magicalize no longer stores the GV into the stash, which
is gv_fetchpvn_flags' job.
Brian Fraser [Tue, 21 May 2013 14:32:45 +0000 (11:32 -0300)]
gv.c, gv_fetchpvn_flags: Split another chunk of magic-checking code.
This bit is called when a GV already exists, but it's name is length-one
and it's on the main:: stash, so it might have multiple kinds of magic,
like $! and %!, or @+ and %+.
Brian Fraser [Tue, 21 May 2013 14:25:09 +0000 (11:25 -0300)]
gv.c, gv_fetchpvn_flags: Comments for when the glob already exists.
Brian Fraser [Fri, 10 May 2013 07:17:58 +0000 (04:17 -0300)]
gv.c: Explain the purpose of the <none>:: stash a bit.
It's primarily a historical oddity. Its main purpose is to store
variables after an exception from 'use strict "vars"':
eval q{ use strict; $foo = 1 };
warn keys %{"<none>::"};
Brian Fraser [Thu, 9 May 2013 23:19:33 +0000 (20:19 -0300)]
gv_fetchpvn_flags: Simplify some warnings code
This line originally checked isLEXWARN_on and had two different code
paths depending on that -- one of which called ckWARN(), which already
checks for isLEXWARN_off, so rather than doing duplicate work, we
just call ckWARN().
Brian Fraser [Tue, 9 Apr 2013 08:28:18 +0000 (05:28 -0300)]
gv.c: Move the code that magicalizes new globs into magicalize_gv().
Brian Fraser [Tue, 9 Apr 2013 07:27:16 +0000 (04:27 -0300)]
gv.c: Begin splitting gv_fetchpvn_flags into smaller helper functions.
This commit takes a chunk of code out of gv_fetchpvn_flags and
turns it into two fuctions: parse_gv_stash_name and find_default_stash.
Ricardo Signes [Tue, 10 Sep 2013 22:32:10 +0000 (18:32 -0400)]
release schedule: placeholders for the future
David Golden [Tue, 10 Sep 2013 21:45:36 +0000 (17:45 -0400)]
perldiag: Fix severity of Unicode mapping warning
The "does not map to Unicode" warning severity was incorrect. It is
not fatal and can be controlled with the "utf8" category.
Steve Hay [Tue, 10 Sep 2013 21:26:31 +0000 (22:26 +0100)]
Oops, the HTTP::Tiny upgrade was 0.034->0.035, not 0.34->0.35
Steve Hay [Tue, 10 Sep 2013 21:17:55 +0000 (22:17 +0100)]
Upgrade HTTP::Tiny from version 0.34 o 0.35
EXCLUDE t/00-compile.t, which has been rewritten and no longer works in
core. (Other t/00-compile.t files from the same CPAN author are already
EXCLUDED.)
Brian Fraser [Tue, 10 Sep 2013 20:43:40 +0000 (21:43 +0100)]
Fix Windows compilation failure introduced by
946095af78
Patch taken from
Message-ID: <CA+nL+nad64D8hegnphMLnkLLR6dvcAj1X4eqV3CofMg=xdyu_Q@mail.gmail.com>
Smylers [Fri, 6 Sep 2013 10:56:07 +0000 (11:56 +0100)]
Added release manager test for copyright year
Smylers [Fri, 6 Sep 2013 10:07:27 +0000 (11:07 +0100)]
Test that README and perl -v copyright years match
Smylers [Fri, 6 Sep 2013 09:37:29 +0000 (10:37 +0100)]
Enhance runperl doc to mention its return value
Father Chrysostomos [Tue, 10 Sep 2013 15:36:43 +0000 (08:36 -0700)]
[Merge] Make regexp error messages utf8-clean
Brian Fraser [Thu, 29 Aug 2013 14:18:55 +0000 (11:18 -0300)]
Make the "Switch condition not recognized" error message UTF-8 clean
Brian Fraser [Fri, 30 Aug 2013 16:10:16 +0000 (13:10 -0300)]
t/re/reg_mesg.t: Tests for latin1 error messages/warnings
Brian Fraser [Fri, 6 Sep 2013 00:07:22 +0000 (21:07 -0300)]
regcomp.c: Introduce vFAIL2utf8f to replace the APPLY(X,Y) hack
The APPLY() hack was added in the previous commit to get
vFAIL4("%"UTF8f, UTF8fARG(a,b,c)) working. Without it,
vFAIL4 would complain about missing arguments, since it only
saw one, but if replaced with vFAIL2, then Simple_vFAIL2 would
complain about having too many arguments.
This commit introduces a vFAIL2utf8f macro that works around
this and enables us to remove the hack.
Brian Fraser [Fri, 30 Aug 2013 15:06:11 +0000 (12:06 -0300)]
regcomp.c: Make all warnings and error messages UTF-8 clean
Brian Fraser [Thu, 29 Aug 2013 14:36:12 +0000 (11:36 -0300)]
regcomp.c, S_compile_runtime_code: croak using the SVf format
This makes error messages from code like this:
$f = "(?{q\0foo\0 + \x{FFFF}})";
"a" =~ /^a$f/;
Be both UTF-8 and nul clean.
Brian Fraser [Thu, 29 Aug 2013 14:26:58 +0000 (11:26 -0300)]
toke.c: "Unrecognized character" error shouldn't leak memory or mangle characters.
This error could've leaked memory if used within as eval, and could
cut off in the middle of a character, leaving worthless binary data
in the error message.
Father Chrysostomos [Tue, 10 Sep 2013 15:17:51 +0000 (08:17 -0700)]
pp_ctl.c:pp_goto: Cast a boolean properly
Otherwise we might end up using AvARRAY on a tied array.
David Leadbeater [Sat, 18 Aug 2012 15:44:32 +0000 (16:44 +0100)]
Remove PERL_MICRO where it is conditionally used with other defines
There are several cases where PERL_MICRO is used combined with defines
not set in uconfig.h, the additional test isn't needed.
David Leadbeater [Sat, 18 Aug 2012 15:41:59 +0000 (16:41 +0100)]
Remove including config.h (and co) in perlio.h
As far as I can tell this is entirely dead code.
David Leadbeater [Sat, 18 Aug 2012 15:33:33 +0000 (16:33 +0100)]
Remove defining DIR* to void* on microperl
It's possible some older systems want sys/dir.h rather than dirent.h to
define DIR, however this is just a nasty workaround to the actual issue.
David Leadbeater [Sat, 18 Aug 2012 15:26:11 +0000 (16:26 +0100)]
Use PERL_INT_MAX, this works in microperl
Nicholas Clark [Wed, 4 Sep 2013 13:14:03 +0000 (15:14 +0200)]
Simplify the conditional logic for COW_REFCNT in Devel::Peek's test.
Instead of having a comment on each COW_REFCNT line to skip the line on
earlier versions, move the skip into the existing code which skips the same
lines on current versions built without COW.
Nicholas Clark [Wed, 4 Sep 2013 12:55:00 +0000 (14:55 +0200)]
Fix Devel::Peek's tests when building with -DPERL_NO_COW
One test had a pattern with a (?:...)? construction split across two lines,
specifically enclosing the newline at the end of a line, and the line that
followed.
When perl is built with -DPERL_NO_COW or -DPERL_OLD_COPY_ON_WRITE the test's
do_test() driver routine would remove the second line, which included the
closing ')?', leaving a an invalid regex. The solution is to remove the
(?: )? completely, as the driver routine's line removal has the same intent
as the (?: )? construction.
Steve Hay [Tue, 10 Sep 2013 08:11:07 +0000 (09:11 +0100)]
perldelta - Two more module upgrades
James E Keenan [Mon, 9 Sep 2013 23:05:05 +0000 (01:05 +0200)]
Correct typos reported by Terry Speirs++.
For: RT #119673
Steve Hay [Mon, 9 Sep 2013 19:52:08 +0000 (20:52 +0100)]
Update EXCLUDED for CPAN-Meta-Requirements following
7cb95fb75d
Father Chrysostomos [Mon, 9 Sep 2013 15:21:13 +0000 (08:21 -0700)]
rt119311.t: typo
Father Chrysostomos [Mon, 9 Sep 2013 08:59:33 +0000 (01:59 -0700)]
Make &xsub and goto &xsub work with tied @_
This is the only place where tied @_ does not work, and there appears
to be no reason why it shouldn’t, apart from the fact that it hasn’t
been implemented.
Commit
67955e0c was what made &xsub work to begin with.
93965878572
introduced tied arrays and added the comment to pp_entersub saying
that @_ is not tiable.
goto &xsub has worked since perl 5.000, but
93965878572 did not make
it work with tied arrays.
Father Chrysostomos [Mon, 9 Sep 2013 08:47:42 +0000 (01:47 -0700)]
Dumper.xs: Update comment
Father Chrysostomos [Mon, 9 Sep 2013 08:16:27 +0000 (01:16 -0700)]
perl5200delta: 2 modules fixed; one misspelt
Florian Ragwitz [Mon, 9 Sep 2013 13:18:19 +0000 (09:18 -0400)]
ExtUtils::Command has been synchronised to CPAN
Steve Hay [Mon, 9 Sep 2013 08:09:45 +0000 (09:09 +0100)]
Upgrade Parse::CPAN::Meta from version 1.4405 to 1.4407
Steve Hay [Mon, 9 Sep 2013 07:57:16 +0000 (08:57 +0100)]
Upgrade ExtUtils::CBuilder from version 0.280210 to 0.280212
Steve Hay [Mon, 9 Sep 2013 07:46:18 +0000 (08:46 +0100)]
Upgrade CPAN::Meta from version 2.132140 to 2.132510
Steve Hay [Mon, 9 Sep 2013 07:36:14 +0000 (08:36 +0100)]
Sort the list of IGNORABLES in Porting/Maintainers.pl
Father Chrysostomos [Mon, 9 Sep 2013 08:08:57 +0000 (01:08 -0700)]
Add mods from #119433 to perl5200delta
Father Chrysostomos [Mon, 9 Sep 2013 07:53:43 +0000 (00:53 -0700)]
perlio.c: misuse of SvPV_nolen_const
SvPV_nolen_const takes only one argument and does not return
a length.
Father Chrysostomos [Mon, 9 Sep 2013 07:35:38 +0000 (00:35 -0700)]
Fix buffer overflow with overlong identifiers
This was introduced by commit
32833930e32dc in 5.17.10.
$ ./perl -Ilib -e Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
Identifier too long at -e line 1.
Segmentation fault: 11
(That was an amusing use of macro parentheses for the while condition,
at least while it lasted.)
Father Chrysostomos [Mon, 9 Sep 2013 07:15:58 +0000 (00:15 -0700)]
Fix -DP output
broken by
b66f3475d343.
$ ./perl -Ilib -DP
Screamer: entering, ptr=
140185618803200, cnt=0
Screamer: entering: PerlIO * thinks ptr=
140185618803200, cnt=%z, base=0
Screamer: going to getc, ptr=
140185618803200, cnt=%z
^C
The format is %zd, not %z.
Father Chrysostomos [Mon, 9 Sep 2013 06:05:40 +0000 (23:05 -0700)]
Don’t let reblessing point SvSTASH to a half-freed stash
We should set SvSTASH before calling SvREFCNT_dec on its old value,
otherwise we could free the old stash and trigger a DESTROY that sees
the object blessed into the half-freed stash.
Currently, a second call to bless inside DESTROY can trigger ‘Attempt
to free unreferenced scalar’, because it calls SvREFCNT_dec a second
time on the stash that already has a reference count of 0.
Father Chrysostomos [Mon, 9 Sep 2013 01:51:56 +0000 (18:51 -0700)]
Fix assertion failure with -DT -e\"
$ ./perl -DT -e\"
Assertion failed: (s), function S_printbuf, file toke.c, line 479.
Abort trap: 6
Tony Cook [Mon, 9 Sep 2013 05:36:26 +0000 (15:36 +1000)]
[perl #117265] fix various problems with safesyscalls
- handling "" overloading correctly
- avoid an extraneous warning from glob()
Tony Cook [Thu, 5 Sep 2013 04:14:00 +0000 (14:14 +1000)]
[perl #117265] move the "glob failed" warning to the point of failure
This avoids an extraneous warning when globbing fails for other reasons.
Tony Cook [Tue, 3 Sep 2013 23:55:53 +0000 (09:55 +1000)]
[perl #117265] do most glob \0 checks in the same place
and before we do much processing
Tony Cook [Tue, 3 Sep 2013 00:17:35 +0000 (10:17 +1000)]
[perl #117265] correctly handle overloaded strings
Tony Cook [Mon, 2 Sep 2013 23:05:09 +0000 (09:05 +1000)]
[perl #117265] TODO tests for overloading issues
Father Chrysostomos [Sun, 8 Sep 2013 20:49:22 +0000 (13:49 -0700)]
Fix line numbers with #! -d:foo and PERL5DB=$'\n'
Commit 2179133 inadvertently stopped the PERL5DB env var from being
truncated just before the first line break. (I’m considering that
a bug fix.)
The result is that #!perl -d:foo will throw the line numbers off by
one, as will line breaks in PERL5DB:
$ PERL5DB='sub DB::DB{}'$'\n\n\n''' ./perl -dle 'warn "ok"'
ok at -e line 4.
#!perl -d:foo has thrown off line numbers since
f0e67a1d291 in 5.12.
This commit fixes both, by storing the line number of #! -d or the
number 0 for -d on the command line in the new PL_parser->preambling
member, which now overrides any number in PL_curcop.
Father Chrysostomos [Tue, 27 Aug 2013 20:20:39 +0000 (13:20 -0700)]
Test line breaks in PERL5DB
$ PERL5DB='sub DB::DB{} die' perl5.18.1 -dle 'print "ok"'
Died.
$ PERL5DB='sub DB::DB{}
die' perl5.18.1 -dle 'print "ok"'
ok
So everything after the line break is ignored.
In bleadperl:
$ PERL5DB='sub DB::DB{} die' ./perl -dle 'print "ok"'
Died.
$ PERL5DB='sub DB::DB{}
die' ./perl -dle 'print "ok"'
Died at -e line 1.
Now the whole environment variable is used. This was probably changed
by commit 2179133.
Let’s call it a bug fix and test it.
(The ‘at -e line 1’ is not right, but the next commit will fix it.)
Father Chrysostomos [Wed, 28 Aug 2013 03:38:03 +0000 (20:38 -0700)]
op.c:newSTATEOP: remove unnecessary null check
If PL_parser is null, then the else block will crash on
PL_parser->copline.
Florian Ragwitz [Sun, 8 Sep 2013 15:36:08 +0000 (11:36 -0400)]
ExtUtils::Manifest has been synchronised to CPAN
Father Chrysostomos [Sun, 8 Sep 2013 01:42:07 +0000 (18:42 -0700)]
Revert "Let av_push accept NULL values"
This reverts commit
7b6e8075e45ebc684565efbe3ce7b70435f20c79.
It turns out to be problematic, because it causes NULLs on the stack,
which XSUBs may trip on.
My main reason for it was actually to try to resolve some CPAN
failures, but it turns out that other fixes have removed the
need for that.
Father Chrysostomos [Sun, 8 Sep 2013 01:34:24 +0000 (18:34 -0700)]
Move herelines out of the lex_shared struct
Previously, the line number was localised in lexing scopes. herelines
had to be in the lex_shared struct so that inner lexing scopes
could peek into values belonging to outer lexing scopes and set the
herelines value belonging to the same scope that a here-doc body was
extracted from. (herelines records how much extra to increase the
line number at the next line ending, to jump over a here-doc.)
In commit
ffdb8b167e, I changed things so that lexing scopes no longer
localised the line number, except for here-docs, and the line number
was incremented within the inner lexing scope, instead of during the
initial scan for the terminator. That meant the herelines value had
to be copied into the inner lexing scope.
For nested here-docs, the inner here-doc’s body is always inside the
outer here-doc, so no peeking into outer scopes is necessary.
Hence, there is no longer any reason for herelines to be inside the
lex_shared struct. We can put it directly inside the parser struct.
Here-docs will localise it. Other quote-like constructs will not (and
can avoid the copy.)
Father Chrysostomos [Sun, 8 Sep 2013 00:43:26 +0000 (17:43 -0700)]
Respect #line directives in here-docs
#line directives in here-docs used to be ignored after the heredoc:
<<END
${
#line 27
print __LINE__,"\n" # prints 27
}
END
; print __LINE__, "\n"; # prints 7
This commit changes that by recording in PL_multi_end the end of
the here-doc (more precisely, the last line of the body, before the
terminator) during the initial parse to find the terminator. When
the body is parsed for double-quotish stuff, at the very end (in
sublex_done) the last line number is compared with the one recorded.
Any differences are applied to the current ‘herelines’ value, which
records how many line numbers need to be skipped when the line ending
after the here-doc marked (<<END) is reached.
It conflicts with a line number workaround in op.c, which hasn’t done
anything since I accidentally disabled it in 5.18.
Added in
0244c3a40, this code set the current line number to the end
of the here-doc when creating the substitution op for s//<<foo/e.
Before that, since the line number was localised to the lexing scope,
the new line number set by the here-doc would be undone when the s///
finished, throwing off all subsequent line numbers.
Commit
83944c0156 solved the problem of the line number for code after
the here-doc marker having the wrong line number (because the here-doc
parser would increase the line number by the number of lines in the
here-doc body straightaway). It introduced the ‘herelines’ value,
recording how many lines the here-doc body contained, but without
updating the line number yet, so that code after the <<marker would
have the right line, but the next \n would increment the line number
by herelines+1. That accidentally stopped PL_multi_end from having
the right value, disabling the line number code in op.c. But the
other changes rendered that code unnecessary.
Father Chrysostomos [Sat, 7 Sep 2013 20:34:24 +0000 (13:34 -0700)]
regcomp.c:current_re_engine: Avoid %^H lookup when possible
Modification of %^H sets a flag in PL_hints, so we can check
that flag to avoid the slight overhead of has lookup if %^H
has not been used.
Father Chrysostomos [Sat, 7 Sep 2013 07:27:28 +0000 (00:27 -0700)]
Fix line numbers in <<foo,<<bar
This used to print 9:
<<foo, <<bar
a
b
c
d
e
f
g
foo
${warn __LINE__ }
bar
even though the __LINE__ marker is on line 10. In perl 5.18, I broke
it further, making it print 2.
This commit makes it print 10. We just need to make sure
PL_multi_start is set correctly in scan_heredoc for a second here-doc
marker on the same line.
Father Chrysostomos [Sat, 7 Sep 2013 06:45:36 +0000 (23:45 -0700)]
toke.c: In sublex_push use multi_close to detect here-doc
It is a lot simpler this way. scan_heredoc already sets PL_multi_close
to '<' (the only code that does it). That value does not appear to
be used anywhere. Now it is.
Furthermore, this removes assumptions that the next commit will
likely violate.
Steve Hay [Sun, 8 Sep 2013 00:40:56 +0000 (01:40 +0100)]
perldelta - More recent module upgrades