Vincent Pit [Mon, 3 Aug 2015 13:42:36 +0000 (10:42 -0300)]
Revamp the different su_ud_* subtypes
For reap(), su_call() now only gets the SV cb and not the whole su_ud_reap
structure. This lets us free the ud in su_pop(), and likewise for
su_localize(). As for the uid feature, it gets its own su_ud_uid structure
instead of hijacking su_ud_reap, so that su_uid_bump() is no longer needed.
Vincent Pit [Fri, 24 Jul 2015 20:20:18 +0000 (17:20 -0300)]
Refactor the su_ud_common structure
The handler member is replaced by a small integer index into a static array.
The pad member is shrank so that it can be packed together with the type.
In the remaining space, we fit a private member that can be used to remove
the type member of su_ud_localize.
Vincent Pit [Fri, 24 Jul 2015 19:22:21 +0000 (16:22 -0300)]
Greatly simplify the depth computation in su_init()
In order to count how many scopes we will have to pop, it is enough to take
the difference between the current scope (PL_scopestack_ix) and the one
just below the target context (cxstack[cxix].blk_oldscopesp).
Vincent Pit [Fri, 27 Mar 2015 18:47:42 +0000 (15:47 -0300)]
Preserve PL_scopestack[cx->blk_oldscopesp - 1] in su_pop()
Starting from perl 5.19.4 commit 2537512, pp_leavesub does a second
leave_scope(PL_scopestack[cx->blk_oldscopesp - 1]) just after the usual
LEAVE call. However, this index in the scope stack may be overwritten
by our own "flush" leave_scope() call in su_pop(). More precisely, this
seems to happen in sv_clear() (called from sv_free2() called from
sv_unref_flags() called from sv_force_normal_flags() called from
leave_scope()) and only when the debugger is enabled.
Vincent Pit [Tue, 24 Mar 2015 19:54:30 +0000 (16:54 -0300)]
Update the ActivePerl/gcc-3.4 hack for EUMM 7.04
Starting from this version, PERL_ARCHIVE is quoted so we can no longer set
it to the empty string. Instead, we remove all occurrences of PERL_ARCHIVE
in the linking step section of the Makefile, which is OK since we specify
the perl DLL in other variables. This new technique is still valid for
older versions of EUMM.
Vincent Pit [Sat, 20 Sep 2014 16:11:14 +0000 (18:11 +0200)]
Work around an assertion failure in perl 5.21.4
This was fixed in perl by commit 5988f306, in which Father Chrysostomos
says "CvNAMED should never be on after calling [CvGV_set], regardless
of the previous state of the CV".
Vincent Pit [Mon, 9 Sep 2013 17:07:53 +0000 (19:07 +0200)]
Preserve lexicals across dounwind() calls on perl 5.19.4 and above
unwind() used to rely on the stack being preserved when dounwind() is
called. However, starting with change 25375124, dounwind() can now call
leave_scope() which will clean up lexicals in the unwinded scopes. We
can work around this by temporarily bumping the refcount of possibly
problematic scalars before calling dounwind().
See also https://rt.perl.org/rt3/Ticket/Display.html?id=119681.
Vincent Pit [Wed, 14 Aug 2013 17:34:02 +0000 (14:34 -0300)]
Silence experimental warnings on perl 5.17.11+ for given/when in tests
Using if.pm would have been cleaner but it is core only on perl 5.6.2, and
we still support 5.6.1. Moreover, trusting the toolchain on such old perls
is not really an option.
Vincent Pit [Tue, 6 Aug 2013 03:07:59 +0000 (00:07 -0300)]
Get rid of t/99-kwalitee.t
New versions started to throw warnings if specific environment variables
are not set. This may be appropriate for dist manager users, but not really
for the rest of the world.
Since kwalitee metrics are either obvious or useless, there's no big loss
in removing this test anyway.
Vincent Pit [Fri, 4 Jan 2013 12:25:03 +0000 (13:25 +0100)]
Correct the top warnings mask for 5.6 in t/07-context_info.t
It changes depending on whether the test is called with -w or not, which
itself depends on the version of Test::Harness used. To add to the
confusion, perl 5.6.1 comes without Test::More, so installing it pulls a
recent version of Test::Harness that does no longer enforces -w.
Vincent Pit [Wed, 2 Jan 2013 00:39:05 +0000 (01:39 +0100)]
Also skip the uplevel across eval/local $@ test on perl 5.8.[345]
A more recent set of debugging 5.8 perls shows that this test also causes
"Can't undef active subroutine during global destruction" errors with
perl 5.8.[345]. The test used to be skipped for perl 5.8.[0126], it is now
skipped for perl 5.8.[0-6], which makes definitely more sense anyway.
Vincent Pit [Fri, 2 Nov 2012 00:27:25 +0000 (22:27 -0200)]
Don't run the POD spelling test in taint mode
This causes the test to crash on perl 5.12 and below with sensitive
architectures like FreeBSD. Ultimately the root of the issue seems to have
been https://rt.perl.org/rt3/Public/Bug/Display.html?id=60378.
Vincent Pit [Fri, 21 Sep 2012 14:07:13 +0000 (16:07 +0200)]
Force linking against the perl dll when using gcc 3.4 on Windows
When a Windows perl links an XS shared object to an import library using
gcc/g++ version 3.4.x, strange breakage happens at load time because the
mutex-related symbols seems not to be reachable. This situation happens
especially for AS perl and the default compiler suite it installs.
We fix this by forcing g++ to link against the dll instead, which should
be in the same directory as the perl executable (at least for AS perl).