Subject: | unreleased contexts on 5.13 |
Date: | Tue, 18 Jul 2017 20:46:08 +0100 |
To: | bug-Test-Simple [...] rt.cpan.org |
From: | Zefram <zefram [...] fysh.org> |
Test-Simple has a problem with unreleased contexts on some 5.13 Perl
versions. The attached patch renders it as workable as possible.
As with the 5.19 constant subs thing, this enables testing of other
modules across interesting Perl versions.
The problem is that Test-Simple is relying on $@ during unwinding as an
indicator of whether unwinding is due to an exception. (This was never
actually a reliable mechanism, always subject to false positives.)
In Perl 5.13.1 I changed the core to set $@ after unwinding, rather
than before, to fix the problem of destructors clobbering $@. This had
the side effect of destroying what value $@ had as such an indicator.
Because some modules turned out to be relying on that, and we didn't have
any proper way of introspecting the cause of unwinding, in Perl 5.13.8
I changed the core again, to set $@ both before and after unwinding.
That restores $@'s use as an unreliable indicator of unwinding reason,
as a temporary measure until we have proper introspection, while retaining
the resistance to clobbering by destructors.
So on Perl 5.13.<1-7> Test-Simple's check of the unwinding reason
doesn't work, and there isn't any other way to get that information.
Fortunately it only controls a warning, about unreleased contexts.
I therefore think that on these Perl versions the warning should simply
be suppressed entirely. That's losing a feature that was of some value,
but it's not a critical feature, and anyone who's failing to release a
context will presumably notice it when testing on other Perl versions.
The attached patch does so, skipping the tests for warnings being
generated on the affected Perls. I couldn't figure out how to properly
skip tests in one of the test scripts (context()->skip() errored);
maybe you can improve on my fakery.
-zefram
Message body is not shown because sender requested not to inline it.