18 hours agoperldelta for 27895dda8085, ac3b837b9e1b, f05081b8ef22, 000814da4770 blead
Tony Cook [Mon, 8 Feb 2016 04:20:40 +0000]
perldelta for 27895dda8085ac3b837b9e1bf05081b8ef22000814da4770

19 hours ago[perl #124387] call AUTOLOAD when DESTROY isn't defined
Tony Cook [Tue, 19 Jan 2016 00:42:21 +0000]
[perl #124387] call AUTOLOAD when DESTROY isn't defined

19 hours ago[perl #124387] TODO test for AUTOLOAD on DESTROY
Tony Cook [Tue, 19 Jan 2016 00:39:48 +0000]
[perl #124387] TODO test for AUTOLOAD on DESTROY

19 hours ago[perl #126410] keep the DESTROY cache in mro_meta
Tony Cook [Mon, 18 Jan 2016 06:42:32 +0000]
[perl #126410] keep the DESTROY cache in mro_meta

We're already keeping destroy_gen there, so keep the CV there too.

The previous implementation, introduced in 8c34e50d, kept the
destroy method cache in the stash's stash, which broke B's SvSTASH
method.

Before that, the DESTROY method was cached in overload magic.

A previous version of this patch didn't clear the destructor cache on
a clone, which caused ext/XS-APItest/t/clone_with_stack.t to fail.

19 hours agoDocument broken SvSTASH for %version:: in B's test suite
Todd Rinaldo [Mon, 18 Jan 2016 05:30:37 +0000]
Document broken SvSTASH for %version:: in B's test suite

RT 126410: This may not be a B bug but we have no test coverage for SvSTASH at
the moment. TODO the test until it is working correctly.

TonyC: fix syntax error and update MANIFEST

23 hours agoperldelta for 071db91b12fc
Tony Cook [Sun, 7 Feb 2016 23:16:50 +0000]
perldelta for 071db91b12fc

24 hours agoadd Pip Cet to AUTHORS
Tony Cook [Sun, 7 Feb 2016 23:02:48 +0000]
add Pip Cet to AUTHORS

24 hours ago[perl #127474] fix operator precedence when (castflags & 2)
Pip Cet [Sun, 7 Feb 2016 23:01:06 +0000]
[perl #127474] fix operator precedence when (castflags & 2)

33 hours agoStorable version bump.
Jarkko Hietaniemi [Fri, 5 Feb 2016 17:00:06 +0000]
Storable version bump.

33 hours agoPOSIX version bump.
Jarkko Hietaniemi [Thu, 4 Feb 2016 01:35:49 +0000]
POSIX version bump.

33 hours agoPOSIX: strcmp NE strEQ().
Jarkko Hietaniemi [Fri, 5 Feb 2016 21:37:58 +0000]
POSIX: strcmp NE strEQ().

CID 135006: Constant expression result (CONSTANT_EXPRESSION_RESULT)

The Coverity 'detail' is priceless:

always_true_or: The "or" condition strcmp(strings->name, "decimal_point") || strcmp(strings->name, "thousands_sep") || strcmp(strings->name, "grouping") will always be true because strings->name cannot be equal to two different values at the same time, so it must be not equal to at least one of them.

33 hours agoPOSIX: Check fds against negatives.
Jarkko Hietaniemi [Thu, 4 Feb 2016 02:40:34 +0000]
POSIX: Check fds against negatives.

Not directly an open Coverity issue (though previously we have had
similar ones) but inspired by the similar change for signal numbers.

33 hours agoPOSIX: Check signal numbers against negatives.
Jarkko Hietaniemi [Thu, 4 Feb 2016 01:06:38 +0000]
POSIX: Check signal numbers against negatives.

CID 135020: Argument cannot be negative (NEGATIVE_RETURNS)
CID 135021: Argument cannot be negative (NEGATIVE_RETURNS)

sigismember()
sigaddset()
sigdelset()

Note that sigaction() already has its own handling for the signal number.

33 hours agoStorable: Own ASSERT or no, we want to assert(prev).
Jarkko Hietaniemi [Thu, 4 Feb 2016 00:40:21 +0000]
Storable: Own ASSERT or no, we want to assert(prev).

Coverity CID 135012: Explicit null dereferenced (FORWARD_NULL)

The prev can be set to NULL (zero) just few lines earlier.

33 hours agoXS-APItest: Length cannot be negative.
Jarkko Hietaniemi [Thu, 4 Feb 2016 02:42:36 +0000]
XS-APItest: Length cannot be negative.

Coverity CID 135019: Argument cannot be negative (NEGATIVE_RETURNS)

33 hours agoODBM_File: Avoid TOCTOU and using negative returns.
Jarkko Hietaniemi [Wed, 3 Feb 2016 15:53:23 +0000]
ODBM_File: Avoid TOCTOU and using negative returns.

Coverity CID 135022: Argument cannot be negative (NEGATIVE_RETURNS)
Coverity CID 135027: Time of check time of use (TOCTOU)

Replace use of stat()-guarded use of creat() (wow) with open(...O_EXCL...)
(when O_CREAT) so that there is no race condition (TOCTOU) window
between the stat() check for non-existence (which can fail also for
other reasons) and the two (sic) creat() calls.

Similarly, without O_CREAT, use open(...O_RDONLY...) instead of the stat().

Possible problem: arguably, systems old enough to be still using
ODBM_File (or requiring creat()) might not have the O_EXCL.

33 hours agoAdd missing break in switch.
Jarkko Hietaniemi [Sun, 7 Feb 2016 00:59:09 +0000]
Add missing break in switch.

Coverity CID 135145: Missing break in switch (MISSING_BREAK)

33 hours agoAdd missing break in switch.
Jarkko Hietaniemi [Sun, 7 Feb 2016 00:55:53 +0000]
Add missing break in switch.

Coverity CID 28986: Missing break in switch (MISSING_BREAK)

33 hours agoassert(PL_parser)
Jarkko Hietaniemi [Sun, 7 Feb 2016 00:50:33 +0000]
assert(PL_parser)

Coverity CID 135144: Dereference after null check (FORWARD_NULL)

Earlier, pp.c:8254-ish, PL_parser is tested against NULL, so it
presumably can be NULL.

33 hours agoAssert no bad array access.
Jarkko Hietaniemi [Sun, 7 Feb 2016 00:28:00 +0000]
Assert no bad array access.

Coverity CID 135147: Out-of-bounds access (OVERRUN)

Long-distance trouble: regexec.c:8922-ish calls (if DEBUGGING) the
regprop() in regcomp.c, which can access the five-element bounds[]
array with the flags value as the offset.  However, Coverity thinks
it sees that in regexec.c the flags value may be up to nine.

33 hours agoDo not try to fchown() to uid -1 and gid -1.
Jarkko Hietaniemi [Sun, 7 Feb 2016 01:21:03 +0000]
Do not try to fchown() to uid -1 and gid -1.

33 hours agoCheck against negative uid/gid for fchown().
Jarkko Hietaniemi [Sun, 7 Feb 2016 00:05:10 +0000]
Check against negative uid/gid for fchown().

Coverity CID 135145: Argument cannot be negative (NEGATIVE_RETURNS)

33 hours agoassert(cv) before doing CvROOT(cv)
Jarkko Hietaniemi [Sat, 6 Feb 2016 23:54:29 +0000]
assert(cv) before doing CvROOT(cv)

Coverity CID 29020 (an old one from 2014, wondering why it now resurfaced)

33 hours agoCheck for invlist_search() returning negative array indices.
Jarkko Hietaniemi [Wed, 3 Feb 2016 21:33:20 +0000]
Check for invlist_search() returning negative array indices.

Coverity CID 135014: Negative array index read (NEGATIVE_RETURNS)
Coverity CID 135015: Negative array index read (NEGATIVE_RETURNS)

Multiple cases, all the getLB_...() uses in regexec.c.

Address this by under DEBUGGING rerouting the invlist_search()
result through a static helper function which does the sanity
checking against negatives and then returns the result.

33 hours agoIf not using smallbuf and len > sizeof(d_name), Move() is illegal.
Jarkko Hietaniemi [Wed, 3 Feb 2016 14:53:54 +0000]
If not using smallbuf and len > sizeof(d_name), Move() is illegal.

Coverity CID 135024: Out-of-bounds access (OVERRUN)

If the len is not <= sizeof(smallbuf), the len is at least
sizeof(smallbuf) + 1, which means at least 257.  Now, if the
sizeof(dirent->d_name) is < 257, the Move() would access bytes
beyond the end of d_name[].  Yes, this would need for the d_namlen
(for example) to be out of sync with d_name[].  But paranoia is good.

Because of the severity of the problem (indicating serious mess),
returning NULL instead of partial result is probably better.

Possible portability problem: can d_name ever be not an array,
but instead a bare char pointer?  If that can happen, the sizeof(d_name)
is wrong, and in that case we have to have some other way of figuring
out the maximum size for a directory entry name.

The smallbuf probably could/should be of size MAXPATHLEN.

33 hours agoWhitespace only: zap empty lines.
Jarkko Hietaniemi [Fri, 5 Feb 2016 23:48:02 +0000]
Whitespace only: zap empty lines.

33 hours agoLexical scoping in case statement is tricky.
Jarkko Hietaniemi [Fri, 5 Feb 2016 21:06:53 +0000]
Lexical scoping in case statement is tricky.

Coverity CID 135142: Structurally dead code (UNREACHABLE)

The case labels are just effectively goto labels, and therefore
any variable initialization will not happen.  That is not the case
luckily here, the variables will be always overwritten as needed.
But better not to introduce false lexical scopes to avoid future
misery.

In the general case, the only way to have lexically tighter scopes is
to have dedicated blocks for each case, but that doesn't easily work here,
with all the tricky jumping.

We could switch() the second time on CxTYPE(), and have these variables
scoped on an inner block, but since this is hot hot hot code, better
not to mess with that, and just hoist the variables to an outer scope.
Any deeper refactoring should be done with profilers at hand.

33 hours agoassert() that itersvp is non-NULL.
Jarkko Hietaniemi [Wed, 3 Feb 2016 13:11:14 +0000]
assert() that itersvp is non-NULL.

Coverity CID 135011 Explicit null derefenced

In pp_iter() there are multiple derefers of *itersvp, but at the
setting of itersvp the CxITERVAR() can return NULL, add an assert()
to catch the badness in debug builds (as the Coverity builds are).

2 days agopp_enter: calculate gimme earlier in XS branch
David Mitchell [Sat, 6 Feb 2016 11:04:45 +0000]
pp_enter: calculate gimme earlier in XS branch

My commit 801bbf618dc make it so that pp_entersub only calculates
gimme at the point its needed, to avoid wasting register resource.
However in n the XS branch it was a bit over-enthusiatic: its possible
for an XS sub to save PL_op and change its value. The old value will
only get restored when pp_entersub soes LEAVE, which is *after* we
cacluate gimme. So grab the value before the XS sub is called.

2 days agoperldelta: recent %ENV changes on VMS.
Craig A. Berry [Sat, 6 Feb 2016 02:29:20 +0000]
perldelta: recent %ENV changes on VMS.

2 days agoperldelta for podlators update.
Craig A. Berry [Sat, 6 Feb 2016 00:26:06 +0000]
perldelta for podlators update.

3 days agoIntegrate podlators 4.06.
Craig A. Berry [Fri, 5 Feb 2016 19:24:20 +0000]
Integrate podlators 4.06.

3 days agocmpVERSION STDERR messages for test failures.
Jarkko Hietaniemi [Fri, 5 Feb 2016 16:35:20 +0000]
cmpVERSION STDERR messages for test failures.

Better known as t/porting/cmp_version

4 days agoDo environ key case consistently on VMS.
Craig A. Berry [Thu, 4 Feb 2016 22:26:05 +0000]
Do environ key case consistently on VMS.

For those %ENV elements based on the CRTL environ array, we've
always preserved case when setting them but done look-ups only
after upcasing the key first, which makes lower- or mixed-case
entries go missing.

So make them consistently case-preserved and in the docs
distinguish this behavior from the case-blind behavior of keys
for %ENV entries based on logical namees and DCL symbols, which
remains unchanged.

4 days agoCast away Solaris Studio 12.3 warning.
Jarkko Hietaniemi [Thu, 4 Feb 2016 14:54:53 +0000]
Cast away Solaris Studio 12.3 warning.

"pp.c", line 3220: warning: initializer will be sign-extended: -2147483648

4 days agoOpenBSD does not do si_uid with sigaction().
Jarkko Hietaniemi [Thu, 4 Feb 2016 12:38:56 +0000]
OpenBSD does not do si_uid with sigaction().

Seen in OpenBSD 4.8, but found no mention of this working in 5.x.

4 days agoperldelta the fix for [perl #126621]
Tony Cook [Thu, 4 Feb 2016 06:12:23 +0000]
perldelta the fix for [perl #126621]

which was in 2e2d7405a2b751f778ee3118a87a5f31233efc77

4 days agoPOSIX version bump.
Jarkko Hietaniemi [Thu, 4 Feb 2016 01:18:23 +0000]
POSIX version bump.

4 days agoWe're against contractions.
Jarkko Hietaniemi [Thu, 4 Feb 2016 01:16:39 +0000]
We're against contractions.

More importantly: that apostrophe messed up my Emacs' syntax highlighting.

4 days agoOddly placed unused decls for fma() and the gamma funcs.
Jarkko Hietaniemi [Thu, 4 Feb 2016 01:15:21 +0000]
Oddly placed unused decls for fma() and the gamma funcs.

The fma() also missing not_here().

4 days agoperldelta, perlguts: Fix typos
Karl Williamson [Wed, 3 Feb 2016 23:06:13 +0000]
perldelta, perlguts: Fix typos

5 days agoperlapi: Clarify that a literal string must end in a NUL
Karl Williamson [Wed, 3 Feb 2016 19:03:09 +0000]
perlapi: Clarify that a literal string must end in a NUL

Some entries already had this.  For those, it standardizes the text.

5 days agopodcheck.t: regen db for overlong verbatim lines
Karl Williamson [Wed, 3 Feb 2016 17:29:17 +0000]
podcheck.t: regen db for overlong verbatim lines

It seems to me best to keep these new overlong verbatim lines in
perlandroid.pod (introduced in 2000dc211bab554f6ffba69e510ae90f85f8c931)

5 days agoperlguts: Make verbatim lines fit in 79 cols
Karl Williamson [Wed, 3 Feb 2016 17:27:53 +0000]
perlguts: Make verbatim lines fit in 79 cols

5 days agoperldelta: Make verbatim line fit in 79 columns
Karl Williamson [Wed, 3 Feb 2016 17:27:14 +0000]
perldelta: Make verbatim line fit in 79 columns

5 days agore/uniprops: Fix EBCDIC issue
Karl Williamson [Fri, 29 Jan 2016 04:31:36 +0000]
re/uniprops: Fix EBCDIC issue

Things like qr/\s/ are expecting native code points, not EBCDIC.

5 days agoregexec.c: Refactor \b{sb} handling
Karl Williamson [Fri, 22 Jan 2016 18:04:51 +0000]
regexec.c: Refactor \b{sb} handling

This rule, unlike the other Unicode boundary ones, does not really lend
itself to a decision pair table, because most of the decisions require
more context than just the current pair.  However, when I wrote the code
this replaces, I couldn't see the forest for the trees.  It turns out
that the needed context is the same or almost the same for many of the
rules, so only has to be found once, as opposed to the old rules, where
it could need to be re-found several times.

5 days agoregexec.c: Fix comment, white-space
Karl Williamson [Fri, 22 Jan 2016 18:01:16 +0000]
regexec.c: Fix comment, white-space

5 days agoUse table lookup for qr/\b{wb}/
Karl Williamson [Wed, 20 Jan 2016 23:15:38 +0000]
Use table lookup for qr/\b{wb}/

This follows the recent commits for lb and gcb, and generates a table at
regen time for Word Breaking.  The result may run faster, depending on
the compiler optimization capabilities, than before, and is easier to
maintain, as it's easier to smack a new rule into the regen perl script
than it is to change the C code.

5 days agoAdd support for bison 3.0
David Mitchell [Tue, 26 Jan 2016 15:14:50 +0000]
Add support for bison 3.0

Mainly it no longer generates some tables used for debugging.

This commit also adds a new define showing what bison version was used.

5 days agoadd perldelta entry for context stack work
David Mitchell [Wed, 3 Feb 2016 13:01:27 +0000]
add perldelta entry for context stack work

5 days agoAdditional hexfp %a tests inspired by c95ea682.
Jarkko Hietaniemi [Wed, 3 Feb 2016 02:28:32 +0000]
Additional hexfp %a tests inspired by c95ea682.

If both plus and space are specified, the space is ignored.

5 days ago[MERGE] revamp context system
David Mitchell [Wed, 3 Feb 2016 09:35:46 +0000]
[MERGE] revamp context system

5 days agoremove dSP from a couple of pp_enter* fns
David Mitchell [Mon, 18 Jan 2016 13:23:14 +0000]
remove dSP from a couple of pp_enter* fns

These functions don't modify the args stack, so there's no need
to dSP; ...; PUTBACK.

Also write a negated bit test condition in pp_enterwhen() a bit less
clumsily.

5 days agoleave_adjust_stacks() fix some code comments
David Mitchell [Mon, 18 Jan 2016 13:09:35 +0000]
leave_adjust_stacks() fix some code comments

One comment was obsolete; the other referred to the wrong pp function

5 days agoleave_adjust_stacks(): avoid accessing random tmps
David Mitchell [Mon, 18 Jan 2016 12:31:24 +0000]
leave_adjust_stacks(): avoid accessing random tmps

There was some code in leave_adjust_stacks() that checked whether the
current arg sv being processed was the same SV as the first SvTEMP
above the 'cut' on the tmps stack. If there was nothing above the cut,
it was actually comparing against whatever garbage was 1 slot above the
current PL_tmps_ix. This was almost always harmless (but of course wrong);
the only symptom was an occasional smoke failure in t/re/pat_re_eval_thr.t,
due to this:

    local our $s = "abc";
    my $qr = qr/^(?{1})$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s/;

where a qr// with a code blocks acts like

    my $qr = sub : lvalue { .....; }->()

to make closures happen correctly. The lvalue return from the anon sub was
triggering this because the address of $s was in one of the unused slots
above PL_tmp_ix.

I couldn't get it to fail in a simple test case.

At the same time, I moved a SvREFCNT_inc() inside a check for
!SvIMMORTAL(sv) since there's no need to do it for PL_sv_undef etc.

5 days agomake gimme consistently U8
David Mitchell [Mon, 4 Jan 2016 09:16:52 +0000]
make gimme consistently U8

The value of gimme stored in the context stack is U8.
Make all other uses in the main core consistent with this.

My primary motivation on this was that the new function cx_pushblock(),
which I gave a 'U8 gimme' parameter, was generating warnings where callers
were passing I32 gimme vars to it. Rather than play whack-a-mole, it
seemed simpler to just uniformly use U8 everywhere.

Porting/bench.pl shows a consistent reduction of about 2 instructions on
the loop and sub benchmarks, so this change isn't harming performance.

5 days agofix -DPERL_GLOBAL_STRUCT_PRIVATE
David Mitchell [Sun, 3 Jan 2016 19:38:13 +0000]
fix -DPERL_GLOBAL_STRUCT_PRIVATE

Perl_leave_adjust_stacks() needed a dVAR

5 days agoperlfunc: say what block types 'return' recognises
David Mitchell [Sun, 3 Jan 2016 17:28:06 +0000]
perlfunc: say what block types 'return' recognises

'return' recognises these blocks

    sort { ...; return } ...
    /(?{ ...; return })/;

but ignores these:

    grep { ...; return } ...;
    map  { ...; return } ...;

5 days agoperlguts: add section on context stack
David Mitchell [Sun, 3 Jan 2016 15:23:56 +0000]
perlguts: add section on context stack

5 days agofix cx_dup for CXt_LOOP_PLAIN
David Mitchell [Sun, 3 Jan 2016 15:17:40 +0000]
fix cx_dup for CXt_LOOP_PLAIN

The context stack duplication code tries to duplicate the loop var
even for CXt_LOOP_PLAIN, which doesn't have a loop var. This didn't
use to matter, since PUSHLOOP_PLAIN() used to set the field to NULL;
for efficiency its now left untouched. So don't try to use it.

Also update the debugging context names since the ordering of the
CXt_LOOP_* has changed recently.

5 days agoMULTICALL *shouldn't* clear savestack
David Mitchell [Thu, 31 Dec 2015 10:39:17 +0000]
MULTICALL *shouldn't* clear savestack

About 25 commits ago in this branch I added a commit:

    MULTICALL should clear scope after each call

To fix RT #116577, which reported that lexicals were only being freed
at the end of the MULTICALL, not after each individual call to the sub.

In that commit, I added a LEAVE_SCOPE() to the end of the MULTICALL()
definition. However, after further thought I realise that's wrong.  If a
multicall sub does something like { my $x = $_*2; $x }, then the returned
value would be freed before the XS code which calls MULTICALL() has a
chance to do anything with it (e.g. test for truth, or add it to the return
args or whatever).

So I think popping the save stack should be the responsibility of the
caller of MULTICALL(), rather than of MULTICALL() itself.

5 days agoadd blk_old_tmpsfloor shortcut
David Mitchell [Wed, 30 Dec 2015 15:48:52 +0000]
add blk_old_tmpsfloor shortcut

Add

    #define blk_old_tmpsfloor cx_u.cx_blk.blku_old_tmpsfloor

to match all the other 'struct block' fields which have similar short cuts

5 days agodMULTICALL: remove unused vars
David Mitchell [Wed, 30 Dec 2015 15:20:41 +0000]
dMULTICALL: remove unused vars

dMULTICALL declares several vars that are used either to maintain
state across multiple calls, or to pass values to PUSHSUB etc, where
those macros expected to obtain some of their args by values being
implicitly passed via local vars. Since PUSHSUB has been replaced by
cx_pushsub() which now has all parameters explicitly passed, there is
no longer any need for those vars. So this commit eliminates them:

    newsp
    hasargs

There are also a couple vars which are no longer used due to changes to
the implementation over time; these can also be eliminated:

    cx multicall_cv

Finally, this branch introduced a new var, saveix_floor; rename it to
multicall_saveix_floor for consistency with other dMULTICALL vars.

Although none of these vars are listed in the documentation, its possible
that some code out there may rely on them in some way, and will need to be
fixed up.

5 days agoconvert CX_{PUSH|POP}{WHEN|GIVEN} to inline fns
David Mitchell [Wed, 30 Dec 2015 14:33:51 +0000]
convert CX_{PUSH|POP}{WHEN|GIVEN} to inline fns

Replace CX_PUSHGIVEN() with cx_pushgiven() etc.

5 days agoconvert CX_PUSHLOOP*/POPLOOP to inline fns
David Mitchell [Wed, 30 Dec 2015 14:18:05 +0000]
convert CX_PUSHLOOP*/POPLOOP to inline fns

Replace CX_PUSHLOOP_FOR() with cx_pushfloop_for() etc.

5 days agoconvert CX_PUSHEVAL/POPEVAL to inline fns
David Mitchell [Wed, 30 Dec 2015 13:23:47 +0000]
convert CX_PUSHEVAL/POPEVAL to inline fns

Replace CX_PUSHEVAL() with cx_pusheval() etc.

No functional changes.

5 days agoconvert CX_PUSHFORMAT/POPFORMAT to inline fns
David Mitchell [Wed, 30 Dec 2015 13:09:36 +0000]
convert CX_PUSHFORMAT/POPFORMAT to inline fns

Replace CX_PUSHFORMAT() with cx_pushformat() etc.

No functional changes.

5 days agoconvert CX_PUSHSUB/POPSUB to inline fns
David Mitchell [Wed, 30 Dec 2015 12:33:48 +0000]
convert CX_PUSHSUB/POPSUB to inline fns

Replace CX_PUSHSUB() with cx_pushsub() etc.

No functional changes.

5 days agoconvert CX_PUSH/POP/TOPBLOCK to inline fns
David Mitchell [Wed, 30 Dec 2015 11:46:22 +0000]
convert  CX_PUSH/POP/TOPBLOCK to inline fns

Replace CX_PUSHBLOCK() with cx_pushblock() etc.

No functional changes.

5 days agoadd a few grep and map benchmarks
David Mitchell [Tue, 29 Dec 2015 10:05:29 +0000]
add a few grep and map benchmarks

5 days agooffset PL_savestack_max by SS_MAXPUSH
David Mitchell [Sun, 27 Dec 2015 14:07:02 +0000]
offset PL_savestack_max by SS_MAXPUSH

The newer SS_ADD macros expect there to always be SS_MAXPUSH slots
free on the savestack; so they can push multiple items, then only check
once at the end whether stack needs expanding.

This commit makes savestack_grow() set PL_savestack_max to SS_MAXPUSH
short of what has actually been allocated. This makes the tests
to see whether the stack needs growing slightly simpler, i.e.

    PL_savestack_ix > PL_savestack_max

rather than

    PL_savestack_ix + SS_MAXPUSH > PL_savestack_max

5 days agoadd SAVEt_TMPSFLOOR save type and Perl_savetmps()
David Mitchell [Sun, 27 Dec 2015 10:41:41 +0000]
add SAVEt_TMPSFLOOR save type and Perl_savetmps()

By making SAVETMPS have its own dedicated save type, it avoids having to
push the address of PL_tmps_floor onto the save stack each time.
By also giving it a dedicated save function, the function can do
the PL_tmpsfloor = PL_tmps_ix step too, making the binary slightly more
compact.

5 days agorename PUSHBLOCK,PUSHSUB etc to CX_PUSHBLOCK etc
David Mitchell [Sat, 26 Dec 2015 22:28:59 +0000]
rename PUSHBLOCK,PUSHSUB etc to CX_PUSHBLOCK etc

Earlier all the POPFOO macros were renamed to CX_POPFOO to reflect
the changed API (like POPBLOCK no longer decremented cxstack_ix).

Now rename the PUSH ones for consistency.

5 days agoeliminate PUSH/POPBASICBLK macros
David Mitchell [Sat, 26 Dec 2015 22:14:00 +0000]
eliminate PUSH/POPBASICBLK macros

These are both NOOPs now, and were introduced within this branch
as a temporary measure while extra stuff needed doing when pushing or
popping a CXt_BOCK (pp_enter/pp_leave).

5 days agopp_enteriter: add comment about setting cxt type
David Mitchell [Sat, 26 Dec 2015 21:49:28 +0000]
pp_enteriter: add comment about setting cxt type

5 days agoconsolidate common code in PUSHLOOP_FOR,_PLAIN
David Mitchell [Sat, 26 Dec 2015 13:48:43 +0000]
consolidate common code in PUSHLOOP_FOR,_PLAIN

5 days agoPUSHEVAL: make n param an SV rather than a string
David Mitchell [Sat, 26 Dec 2015 12:45:01 +0000]
PUSHEVAL: make n param an SV rather than a string

Rather than doing

    cx->blk_eval.old_namesv = (n ? newSVpv(n,0) : NULL);

make the caller responsible for creating and passing in the SV. Since
only only place (pp_require) passes a non-null value, this saves the
other places having to test for nullness.

5 days agoPUSHSUB: make retop a parameter
David Mitchell [Sat, 26 Dec 2015 12:37:30 +0000]
PUSHSUB: make retop a parameter

Rather than doing cx->blk_sub.retop = NULL in PUSHSUB, then relying on
the caller to subsequently change it to something more useful, make it an
arg to PUSHSUB.

5 days agoPUSHEVAL: make retop a parameter
David Mitchell [Sat, 26 Dec 2015 12:30:25 +0000]
PUSHEVAL: make retop a parameter

Rather than doing cx->blk_eval.retop = NULL in PUSHEVAL, then relying on
the caller to subsequently change it to something more useful, make it an
arg to PUSHEVAL.

5 days agoPUSHFORMAT: don't use implicit args
David Mitchell [Sat, 26 Dec 2015 12:07:50 +0000]
PUSHFORMAT: don't use implicit args

Make cv and gv explicit parameters of PUSHFORMAT(), rather than just
assuming that there are such vars in scope.

5 days agoPUSHSUB: don't use implicit args
David Mitchell [Sat, 26 Dec 2015 11:52:33 +0000]
PUSHSUB: don't use implicit args

Make cv and hasargs explicit parameters of PUSHSUB(), rather than just
assuming that there are such vars in scope.

5 days agoPUSHBLOCK: don't use implicit args
David Mitchell [Sat, 26 Dec 2015 11:39:30 +0000]
PUSHBLOCK: don't use implicit args

Make gimme a parameter of PUSHBLOCK() rather than just assuming that
there's a 'gimme' var in scope.

5 days agomove PL_savestack_ix saving into PUSHBLOCK
David Mitchell [Fri, 25 Dec 2015 23:54:23 +0000]
move PL_savestack_ix saving into PUSHBLOCK

Currently blku_oldsaveix was being set by the various PUSHFOO macros,
except for PUSHSUB and PUSHEVAL which expected their caller to do it
manually.

Now that all the main context state is stored on the context stack
rather than than some on the save stack too, things are a lot simpler,
and this messy transitional state can now be rationalised, whereby
blku_oldsaveix is now always set by PUSHBLOCK; the exact value being
specified by a new arg to PUSHBLOCK.

5 days agoPUSH_MULTICALL: use SAVEOP()
David Mitchell [Fri, 25 Dec 2015 23:12:29 +0000]
PUSH_MULTICALL: use SAVEOP()

SAVEOP() should be more efficient than SAVEVPTR(PL_op), since it
uses the dedicated SAVEt_OP.

5 days agoeliminate PERL_STACK_OVERFLOW_CHECK
David Mitchell [Fri, 25 Dec 2015 22:41:21 +0000]
eliminate PERL_STACK_OVERFLOW_CHECK

This macro is defined as NOOP on all platforms except for MacOS classic,
where it was added as a hook to allow for OSes that have a small CPU
stack size. Since pp_entersub et al don't actually use the CPU stack,
this hook looks misconceived from the beginning. So remove all
uses of it in the core.

5 days agosort compare subs: don't do unnecessary scope work
David Mitchell [Fri, 25 Dec 2015 22:28:14 +0000]
sort compare subs: don't do unnecessary scope work

The 3 functions S_sortcv(), S_sortcv_stacked(), S_sortcv_xsub(),
which call a comparison function to compare $a and $b, do unnecessary work
with the scope and save stacks.

First, they pop any excess scope stack entries; but there shouldn't
be, since exiting the sort sub should have already pooped any inner
scopes. Indeed, running with an assert that PL_scopestack_ix == oldscopeix
didn't trigger any failures.

Secondly replace the unconditional leave_scope(oldsaveix) with
LEAVE_SCOPE(), which only calls the function if PL_savestack_ix >
oldsaveix.

5 days agoMULTICALL should clear scope after each call
David Mitchell [Fri, 25 Dec 2015 22:03:10 +0000]
MULTICALL should clear scope after each call

RT #116577

Lexicals etc were only being freed at the end of the MULTICALL, not
after each individual call to the sub.

5 days agoDocument CxLVAL()
David Mitchell [Fri, 25 Dec 2015 12:03:00 +0000]
Document CxLVAL()

5 days agoCX_POPFOO(): assert cx is of the right type
David Mitchell [Fri, 25 Dec 2015 11:51:37 +0000]
CX_POPFOO(): assert cx is of the right type

At the start of each CX_POPFOO(cx) macro, add an assertion that cx is of
type CXt_FOO.

5 days agorename POPFOO() to CX_POPFOO()
David Mitchell [Fri, 25 Dec 2015 11:07:28 +0000]
rename POPFOO() to CX_POPFOO()

Rename all the context-popping macros such as POPBLOCK and POPSUB, by
giving them a CX_ prefix. (Do TOPBLOCK too).

This is principally to  deliberately break any existing non-core use of
these non-API macros, as their behaviour has changed in this branch.
In particular, POPBLOCK(cx) no longer decrements the cxt stack pointer
nor sets cx; instead, cx is now expected to already point to the stack
frame which POPBLOCK should process.

At the same time, giving them a CX_ prefix makes it clearer that these
are all part of a family of macros that manipulate the context stack.

The PUSHFOO() macros will be renamed in a later commit.

5 days agopp_redo()): reorder some stuff
David Mitchell [Thu, 24 Dec 2015 23:12:37 +0000]
pp_redo()): reorder some stuff

It probably doesn't make any difference, but reorder the FREETMPS,
CX_LEAVE_SCOPE and TOPBLOCK so it matches the order we do things when
leaving a scope.

5 days agooptimise bare 'next'
David Mitchell [Thu, 24 Dec 2015 22:37:48 +0000]
optimise bare 'next'

If a 'next' without a label appears directly in the scope of the current
loop, then skip searching the context stack for a suitable LOOP context.

5 days agomake S_unwind_loop static again
David Mitchell [Wed, 3 Feb 2016 09:12:56 +0000]
make S_unwind_loop static again

The previous commit but one accidentally removed the 'static' declaration

5 days agoS_unwind_loop(): remove opname param
David Mitchell [Thu, 24 Dec 2015 21:48:23 +0000]
S_unwind_loop(): remove opname param

This is only used for error messages, and can be derived from
OP_NAME(PL_op); so for efficiency, don't pass it.

5 days agoS_unwind_loop(): return pointer rather than index
David Mitchell [Thu, 24 Dec 2015 21:33:49 +0000]
S_unwind_loop(): return pointer rather than index

return &cxstack[cxix] rather than cxix, since this is what the caller
actually needs.

5 days agofactor out common actions in TOPBLOCK and POPBLOCK
David Mitchell [Thu, 24 Dec 2015 20:30:15 +0000]
factor out common actions in TOPBLOCK and POPBLOCK

5 days agodounwind(): do a POPBLOCK for final cx frame.
David Mitchell [Thu, 24 Dec 2015 19:44:05 +0000]
dounwind(): do a POPBLOCK for final cx frame.

Previously dounwind() relied on the caller to a TOPBLOCK or POPBLOCK
following the call to dounwind(). It's debatable who should be
responsible. Arguably its more efficient for dounwind() not to do a
POPBLOCK, since the caller will probably immediately follow on with
POPFOO; POPBLOCK for the next context frame anyway.

Logically however, dounwind() should do this, and its not possible
for the caller to do so retrospectively, as context frame cxstack_ix + 1
may have been overwritten by the time dounwind returns.

Also, the changes in this branch mean that the old PL_tmps_floor is now
saved in the context struct rather than on the save stack, so code that
does C<dounwind(-1); LEAVE_SCOPE();> will no longer automatically
restore PL_tmps_floor. With thiis commit, it will.

The change to pp_return reflects that we now need to copy any return args
*before* donwind() is called, so that "return $1" will mg_get($1) while
the correct (inner) PL_curpm is still in scope.

5 days agopp_break(): don't use TOPBLOCK
David Mitchell [Mon, 21 Dec 2015 16:33:57 +0000]
pp_break(): don't use TOPBLOCK

It appears to be using TOPBLOCK purely for its effect of resetting
PL_stack_sp. Since the next op will be pp_leavegiven which will do a
POPBLOCK, the other actions of TOPBLOCK are redundant. So just set
PL_stack_sp directly.

5 days agotweak POPLOOP and CXt_LOOP_* order
David Mitchell [Mon, 21 Dec 2015 16:00:59 +0000]
tweak POPLOOP and CXt_LOOP_* order

Re-arrange the order of the CXt_LOOP_* to make it easier for compilers
to produce efficient code, and tweak POPLOOP so that the code for
freeing ary and cur is shared (as they occupy the same position in the
union).