perl.perl5.changes https://www.nntp.perl.org/group/perl.perl5.changes/ ... Copyright 1998-2025 perl.org Tue, 16 Dec 2025 23:18:36 +0000 [email protected] [Perl/perl5] by Tony Cook via perl5-changes Branch: refs/heads/23918-cmp-api<br/> Home: https://github.com/Perl/perl5<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65368.html Tue, 16 Dec 2025 22:56:06 +0000 [Perl/perl5] 16717d: add sv_numne() to the API by Tony Cook via perl5-changes Branch: refs/heads/23918-cmp-api<br/> Home: https://github.com/Perl/perl5<br/> Commit: 16717d448459b076eee9955b9b9923de17cbf6b5<br/> https://github.com/Perl/perl5/commit/16717d448459b076eee9955b9b9923de17cbf6b5<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M MANIFEST<br/> M embed.fnc<br/> M embed.h<br/> M ext/XS-APItest/APItest.xs<br/> M ext/XS-APItest/t/sv_numeq.t<br/> A ext/XS-APItest/t/sv_numne.t<br/> M proto.h<br/> M sv.c<br/> M sv.h<br/><br/> Log Message:<br/> -----------<br/> add sv_numne() to the API<br/><br/>some refactoring next, since sv_numeq_flags and sv_numne_flags are<br/>similar.<br/><br/>Used a separate test file since putting every sv_num*() variant in the<br/>one file would be ugly<br/><br/>Addresses GH #23918 but isn&#39;t a direct fix<br/><br/><br/> Commit: d06055fc3362aa7ca9af4eb22fa414cfeb431dc7<br/> https://github.com/Perl/perl5/commit/d06055fc3362aa7ca9af4eb22fa414cfeb431dc7<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M ext/XS-APItest/APItest.xs<br/> M ext/XS-APItest/t/sv_numeq.t<br/> M ext/XS-APItest/t/sv_numne.t<br/> M proto.h<br/> M sv.c<br/><br/> Log Message:<br/> -----------<br/> sv.c: extract the common parts of sv_numeq_flags and sv_numne_flags<br/><br/><br/> Commit: bd4bba678c8e556fa082f87eeaa8eda489693b8f<br/> https://github.com/Perl/perl5/commit/bd4bba678c8e556fa082f87eeaa8eda489693b8f<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M sv.c<br/><br/> Log Message:<br/> -----------<br/> sv_numeq/sv_numne: consolidate the similar documentation<br/><br/>If nothing else putting them together may avoid someone doing<br/>`!sv_numeq(...)`<br/><br/><br/> Commit: d41101a00dfbe22df4ee5c25c1ead01a6668c632<br/> https://github.com/Perl/perl5/commit/d41101a00dfbe22df4ee5c25c1ead01a6668c632<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M MANIFEST<br/> M embed.fnc<br/> M embed.h<br/> M ext/XS-APItest/APItest.xs<br/> A ext/XS-APItest/t/sv_numcmp.t<br/> M ext/XS-APItest/t/sv_numeq.t<br/> M ext/XS-APItest/t/sv_numne.t<br/> M proto.h<br/> M sv.c<br/> M sv.h<br/><br/> Log Message:<br/> -----------<br/> add sv_numcmp() to the API<br/><br/><br/> Commit: ecff2db8c63f27bd4f055e13f2176b18910c9b28<br/> https://github.com/Perl/perl5/commit/ecff2db8c63f27bd4f055e13f2176b18910c9b28<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M ext/XS-APItest/t/sv_numcmp.t<br/> M ext/XS-APItest/t/sv_numeq.t<br/> M ext/XS-APItest/t/sv_numne.t<br/> M sv.c<br/><br/> Log Message:<br/> -----------<br/> sv_num*: correctly handle &quot;0+&quot; overloaded values<br/><br/>do_ncmp() expects simple SVs and for overloaded SVs will just compare<br/>the SvNV() of each SV, mishandling the case where the 0+ overload<br/>returns a large UV or IV that isn&#39;t exactly representable as an NV.<br/><br/># Conflicts:<br/># ext/XS-APItest/t/sv_numeq.t<br/># ext/XS-APItest/t/sv_numne.t<br/># sv.c<br/><br/><br/> Commit: 5c2ee02593cacca06d81769bc9486627d7c1a046<br/> https://github.com/Perl/perl5/commit/5c2ee02593cacca06d81769bc9486627d7c1a046<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M MANIFEST<br/> M embed.fnc<br/> M embed.h<br/> M ext/XS-APItest/APItest.xs<br/> A ext/XS-APItest/t/sv_numlget.t<br/> M proto.h<br/> M sv.c<br/> M sv.h<br/><br/> Log Message:<br/> -----------<br/> add sv_numle(), sv_numlt(), sv_numge(), sv_numgt() APIs<br/><br/>These are all needed because overloading may make them inconsistent<br/>with &lt;=&gt; overloading.<br/><br/><br/> Commit: 2dd07a2e7fca1f23aba7e89992259301d3673849<br/> https://github.com/Perl/perl5/commit/2dd07a2e7fca1f23aba7e89992259301d3673849<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M sv.c<br/><br/> Log Message:<br/> -----------<br/> sv_numcmp_common: only call magic once if the SVs are the same<br/><br/>similar to try_amagic_bin()<br/><br/><br/> Commit: 09fe3a12eea2360fa8d24811ed99727292d66681<br/> https://github.com/Perl/perl5/commit/09fe3a12eea2360fa8d24811ed99727292d66681<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M ext/XS-APItest/APItest.xs<br/> M ext/XS-APItest/t/sv_numne.t<br/><br/> Log Message:<br/> -----------<br/> add tests for void context calls to overloads<br/><br/>Discovered while working on another module, in many amagic_call() will<br/>use the current context when calling the overload sub, but these APIs<br/>might be called in XS code that simply needs a comparison, regardless<br/>of the current OP context.<br/><br/><br/> Commit: 0bb419d9ace4835b7d119b2d5b93f52dc4c6efb3<br/> https://github.com/Perl/perl5/commit/0bb419d9ace4835b7d119b2d5b93f52dc4c6efb3<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M gv.c<br/> M pp.h<br/> M sv.c<br/><br/> Log Message:<br/> -----------<br/> amagic_call: accept a AMGf_force_scalar flag to force scalar context<br/><br/>and use it from the numeric comparison APIs.<br/><br/><br/> Commit: 1ce4bc0d13d6268cce62bd1ac221c1f3b44069b8<br/> https://github.com/Perl/perl5/commit/1ce4bc0d13d6268cce62bd1ac221c1f3b44069b8<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M gv.c<br/> M pp_hot.c<br/><br/> Log Message:<br/> -----------<br/> pp_multiconcat: use the new AMGf_force_scalar<br/><br/>instead of a special case in amagic_call()<br/><br/><br/> Commit: f4f735a8eb264c0c079b578c83dd1e790b436734<br/> https://github.com/Perl/perl5/commit/f4f735a8eb264c0c079b578c83dd1e790b436734<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M ext/XS-APItest/t/sv_numeq.t<br/> M proto.h<br/> M sv.c<br/> M sv.h<br/><br/> Log Message:<br/> -----------<br/> sv_numeq etc: don&#39;t do numify overloading with SV_SKIP_OVERLOAD<br/><br/><br/> Commit: 2f8d46d1fef55f2cc85b77de1562e81b6eae4a9a<br/> https://github.com/Perl/perl5/commit/2f8d46d1fef55f2cc85b77de1562e81b6eae4a9a<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M ext/XS-APItest/Makefile.PL<br/> M ext/XS-APItest/t/sv_numne.t<br/> M gv.c<br/> M pp.h<br/> M sv.c<br/> M sv.h<br/><br/> Log Message:<br/> -----------<br/> add SV_FORCE_OVERLOAD to the sv_numcmp() APIs<br/><br/>and add AMGf_force_overload to amagic_call() which does the actual work.<br/><br/><br/> Commit: 15e9ee5594598906c45e939b0d43a43d8eb2caa4<br/> https://github.com/Perl/perl5/commit/15e9ee5594598906c45e939b0d43a43d8eb2caa4<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M ext/XS-APItest/APItest.xs<br/> M ext/XS-APItest/t/sv_numeq.t<br/><br/> Log Message:<br/> -----------<br/> check the void context fix for sv_numeq too<br/><br/><br/> Commit: 9db4e168080eaea3c6f9df8782220250b7171a2b<br/> https://github.com/Perl/perl5/commit/9db4e168080eaea3c6f9df8782220250b7171a2b<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M pod/perldelta.pod<br/> M sv.c<br/><br/> Log Message:<br/> -----------<br/> add perldelta for sv_numeq fix and other sv_num* additions<br/><br/>modified the sv.c documentation since the perldelta sv_numeq link had<br/>multiple targets.<br/><br/><br/> Commit: 178011c1679060e99d900a0e2e949be08faee2e3<br/> https://github.com/Perl/perl5/commit/178011c1679060e99d900a0e2e949be08faee2e3<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-17 (Wed, 17 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M sv.c<br/><br/> Log Message:<br/> -----------<br/> Add some documentation for sv_numcmp_common()<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/16717d448459%5E...178011c16790<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65367.html Tue, 16 Dec 2025 22:55:57 +0000 [Perl/perl5] d30679: Fatalize use of goto to jump into construct by James E Keenan via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: d306795336cc8ce0c7c80e251adb1343497abbbd<br/> https://github.com/Perl/perl5/commit/d306795336cc8ce0c7c80e251adb1343497abbbd<br/> Author: James E Keenan &lt;[email protected]&gt;<br/> Date: 2025-12-16 (Tue, 16 Dec 2025)<br/><br/> Changed paths:<br/> M lib/warnings.pm<br/> M pod/perldelta.pod<br/> M pod/perldeprecation.pod<br/> M pod/perldiag.pod<br/> M pod/perlfunc.pod<br/> M pp_ctl.c<br/> M regen/warnings.pl<br/> M t/comp/package_block.t<br/> M t/op/goto.t<br/> M t/porting/deprecation.t<br/> M t/uni/labels.t<br/> M warnings.h<br/><br/> Log Message:<br/> -----------<br/> Fatalize use of goto to jump into construct<br/><br/>* Adapt all tests.<br/><br/>* Revise discussion of &#39;goto&#39; in perlfunc.<br/><br/>* Perl 5.44 fatalization: document goto_construct Also, note that no<br/> deprecations or fatalizations occurred in perl-5.42.<br/><br/>* Remove &#39;goto_construct&#39; from list of warnings. This entails:<br/><br/>** Entering &#39;deprecated::goto_construct&quot; into %NO_BIT_FOR inside<br/>regen/warnings.pl;<br/><br/>** Incrementing $VERSION in that file;<br/><br/>** Running `make regen` to propagate these changes to lib/warnings.pm and<br/>warnings.h, in the process renumbering the warnings categories and<br/>adding &#39;deprecated::goto_construct&#39; to %NoOp inside lib/warnings.pm.<br/><br/>* Add entry to perldiag.pod<br/><br/>* Update perldelta: partial fatalization of goto construct.<br/><br/>* t/op/goto.t: Restore tests deleted during work on branch.<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65366.html Tue, 16 Dec 2025 15:14:12 +0000 [Perl/perl5] 966e97: perlfunc: document return behavior of requireand ... by Grinnz via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 966e97bd7e70f107042cfdeef1bc5bc7f69cb0c8<br/> https://github.com/Perl/perl5/commit/966e97bd7e70f107042cfdeef1bc5bc7f69cb0c8<br/> Author: Grinnz &lt;[email protected]&gt;<br/> Date: 2025-12-16 (Tue, 16 Dec 2025)<br/><br/> Changed paths:<br/> M .mailmap<br/> M pod/perlfunc.pod<br/><br/> Log Message:<br/> -----------<br/> perlfunc: document return behavior of require and module_true feature<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65365.html Tue, 16 Dec 2025 12:08:36 +0000 [Perl/perl5] 386a35: regex: eval/cut: fix premature local undo and$^R by David Mitchell via perl5-changes Branch: refs/heads/davem/re_savestack_eval<br/> Home: https://github.com/Perl/perl5<br/> Commit: 386a359b4adc7a9b56b300cab367d14f7cddd068<br/> https://github.com/Perl/perl5/commit/386a359b4adc7a9b56b300cab367d14f7cddd068<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-16 (Tue, 16 Dec 2025)<br/><br/> Changed paths:<br/> M regexec.c<br/> M regexp.h<br/> M t/op/svleak.t<br/> M t/re/pat_re_eval.t<br/><br/> Log Message:<br/> -----------<br/> regex: eval/cut: fix premature local undo and $^R<br/><br/>GH #16197<br/><br/>The main purpose of this commit is to stop premature scope unwinding<br/>within eval code in regexes. Aside from backtracking on failure, the<br/>scopes of every eval, such as (?{ local $x }), are supposed to accumulate,<br/>and are only unwound en-masse at the very end of the pattern match.<br/>However, a combination of a sub-pattern call, such as (??{...}) or<br/>(?&amp;...), combined with a cut, (?&gt;...), can trigger earlier savestack<br/>popping.<br/><br/>The direct fix for this, as explained below, is to remove this single<br/>line from the EVAL_postponed_A/B: case:<br/><br/> REGCP_UNWIND(ST.cp); /* LEAVE in disguise */<br/><br/>However, that line is entwined with code which attempts to preserve the<br/>final value of $^R during scope unwinding. Since that code was kind of<br/>working around the misplaced REGCP_UNWIND(), it needs ripping out and<br/>re-implementing. This has to be done at the same time, so the bulk of<br/>this commit is actually concerned with $^R, even though it isn&#39;t the<br/>subject of this ticket. So this commit doesn&#39;t change the behaviour of<br/>$^R, but just changes its implementation somewhat.<br/><br/>The $^R issue is that every /(?{...})/ causes the equivalent of<br/><br/> local $^R = ...;<br/><br/>to be executed. During final exit, the savestack gets unwound, and all<br/>those local&#39;s get undone, leaving $^R with the value it had before the<br/>match started. But we promise that after the match, $^R will hold the<br/>value of the most recent (?{...}). The code which this commit rips out<br/>restored that value in one way; the new code in this commit does it a<br/>different way. Basically, almost the last thing S_regmatch() does is a<br/>LEAVE_SCOPE(orig_savestack_ix); This commit makes it so that the current<br/>value of $^R is copied just before the LEAVE_SCOPE(), and that value is<br/>copied back to $^R just after the LEAVE_SCOPE().<br/><br/>For efficiency, we only do the copy if we&#39;ve actually set $^R. A mechanism<br/>is also needed to ensure that the temporary copy doesn&#39;t leak if we die<br/>during the savestack unwind. This is achieved by holding a pointer to<br/>the copy in the aux_eval struct, which gets processed even if we die.<br/><br/>Now back to the main purpose of this commit, the premature stack unwind<br/>in the presence of a cut with a sub-pattern. This bug has been there<br/>since these features were added. It is instructive to look at a somewhat<br/>idealised overview of the S_regmatch() function from around 5.6.0 (with<br/>some bug fixes from later releases added). This was while the function<br/>was still recursive. It looks approximately like:<br/><br/> pp_match(...) {<br/> I32 ix = PL_savestack_ix;<br/> ... do a match ...<br/> LEAVE_SCOPE(ix);<br/> }<br/><br/> S_regmatch(...) {<br/> while (scan) {<br/> switch (OP(scan)) {<br/> case FOO:<br/> if (! there&#39;s a FOO)<br/> return 0;<br/> I32 ix = PL_savestack_ix;<br/> if (regmatch(...)) /* recursively match rest of pattern */<br/> return 1;<br/> LEAVE_SCOPE(ix);<br/> return 0;<br/><br/> case END:<br/> if (doing a (??{...}) ) {<br/> I32 ix = PL_savestack_ix;<br/> if (regmatch(...) { /* recursively match rest of pattern */<br/> LEAVE_SCOPE(ix);<br/> return 1;<br/> }<br/> LEAVE_SCOPE(ix);<br/> return 0;<br/> }<br/> return 1;<br/><br/> case EVAL:<br/> ... run the code, then, if its a (?{...}) ...<br/> I32 ix = PL_savestack_ix;<br/> if (regmatch(...) { /* recursively run subpattern */<br/> LEAVE_SCOPE(ix)<br/> return 1;<br/> }<br/> LEAVE_SCOPE(ix);<br/> return 0;<br/> }<br/> }<br/><br/>Here, the FOO: case represents all the various ops which recurse. In<br/>general, they match the next item and then recurse to match the rest of<br/>the pattern.<br/><br/>Note that they all do a LEAVE_SCOPE() only in the *failure* branch.<br/><br/>At the end of a successful match, there is potentially much recursion,<br/>and much stuff on the savestack. When the END op is reached, the series<br/>of &#39;return 1&#39;s causes all the recursion to unwind, while leaving the<br/>savestack untouched. Finally, the caller - such as pp_match() - clears<br/>the savestack. In more recent perls the recursion has been removed and<br/>the final LEAVE_SCOPE() is done within S_regmatch() itself, but the<br/>principle remains the same: no stack freeing is done *during* matching,<br/>and instead there&#39;s a single big clean up at the end.<br/><br/>Once (??{...}) enters the picture, that changes a bit. When the END op<br/>associated with the &#39;...&#39; sub-pattern is reached, regmatch() is called<br/>recursively to process any pattern after the (??{..}); then on success,<br/>while working its way back through the nested regmatch() calls, both the<br/>END and the EVAL code do a LEAVE_SCOPE() in the *success* branch.<br/><br/>This is anomalous, and those two LEAVE_SCOPE()&#39;s are what this commit<br/>removes (although in the current non-recursive regex engine, they are<br/>shared by the same piece of code, so only one had to be removed). By<br/>removing them, this regularises the behaviour of sub-patterns. I can&#39;t<br/>think why those LEAVE_SCOPE()s were originally added, and assume it was a<br/>thinko.<br/><br/>Normally it makes no difference whether the savestack is popped near the<br/>end, interleaved with popping all recursive regmatch calls (or<br/>equivalently on non-recursive engines popping the regmatch_state stack),<br/>or whether the savestack is popped only after all the recursion is<br/>exited from.<br/><br/>However, it makes a difference in the presence of a cut, (?&gt;...). Here,<br/>the final op of the sub-pattern &#39;...&#39; is SUCCEED, which rather than<br/>recursing to match anything following the cut block, just returns. The<br/>recursion pops back to the SUSPEND op which started the cut, which then<br/>continues with the op loop as normal.<br/><br/>Thus when about to match the first op following a (?&gt;...), the recursion<br/>*within* the cut has been blown away as if it never happened, but the<br/>accumulated savestack entries (e.g. from evals within the cut block) are<br/>preserved and continue to accumulate.<br/><br/>Now, if there is a (??{...}) sub-pattern, or similarly a (?&amp;FOO), within<br/>the cut, then at the end of the cut, the recursion is unwound, which<br/>includes the stacked EVAL and END recursions, which at this time call<br/>LEAVE_SCOPE(), which frees part of the savestack, even though the<br/>pattern match hasn&#39;t ended yet. That&#39;s the bug which this commit fixes.<br/><br/>The tests added to pat_re_eval.t check that the scope bug has been<br/>fixed. The test added to svleak.t checks that the new $^R copying code<br/>doesn&#39;t leak.<br/><br/><br/> Commit: d377999ae732c860f975e756f66b36e7dafeb2f2<br/> https://github.com/Perl/perl5/commit/d377999ae732c860f975e756f66b36e7dafeb2f2<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-16 (Tue, 16 Dec 2025)<br/><br/> Changed paths:<br/> M regexec.c<br/><br/> Log Message:<br/> -----------<br/> regex: don&#39;t LEAVE_SCOPE() in S_regtry()<br/><br/>This commit should produce no practical change in functionality.<br/><br/>Currently, S_regtry() notes the position of PL_savestack_ix, calls<br/>S_regmatch(), then pops the savestack back to that position. However,<br/>S_regmatch() also does this just before returning, so it&#39;s redundant in<br/>S_regtry(). (A temporary assert confirmed that lastcp == PL_savestack_ix<br/>in S_regtry always while running the test suite).<br/><br/>So this commit removes the REGCP_UNWIND(lastcp) and associated machinery<br/>from S_regtry().<br/><br/>It also regularises the &quot;note current ix; pop back to old ix&quot; code at<br/>the start and end of S_regmatch() to use the standard REGCP_SET() and<br/>REGCP_UNWIND() macros which do the same thing but also produce debugging<br/>messages.<br/><br/><br/> Commit: 8f9d341018ab6d57e646d218fc8e5ed5555963d8<br/> https://github.com/Perl/perl5/commit/8f9d341018ab6d57e646d218fc8e5ed5555963d8<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-16 (Tue, 16 Dec 2025)<br/><br/> Changed paths:<br/> M pod/perldelta.pod<br/><br/> Log Message:<br/> -----------<br/> perldelta for GH #16197 fix<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/97c59b72e204...8f9d341018ab<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65364.html Tue, 16 Dec 2025 11:19:26 +0000 [Perl/perl5] 8fd53b: RMG, remove trailing whitespace by Eric Herman via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 8fd53b46c59e507154709ba96ed3456263999135<br/> https://github.com/Perl/perl5/commit/8fd53b46c59e507154709ba96ed3456263999135<br/> Author: Eric Herman &lt;[email protected]&gt;<br/> Date: 2025-12-16 (Tue, 16 Dec 2025)<br/><br/> Changed paths:<br/> M Porting/release_managers_guide.pod<br/><br/> Log Message:<br/> -----------<br/> RMG, remove trailing whitespace<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65363.html Tue, 16 Dec 2025 09:10:51 +0000 [Perl/perl5] acc8ad: embed.fnc: Rename EPTR qualifiers by Karl Williamson via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: acc8ad3a2865555ac1ee10ef8e728321bb8e7076<br/> https://github.com/Perl/perl5/commit/acc8ad3a2865555ac1ee10ef8e728321bb8e7076<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-15 (Mon, 15 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M regen/embed.pl<br/><br/> Log Message:<br/> -----------<br/> embed.fnc: Rename EPTR qualifiers<br/><br/>People found the former names confusing. This changes to use EPTRgt and<br/>EPTRge that explicitly give the relation that gets used.<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65362.html Mon, 15 Dec 2025 23:58:17 +0000 [Perl/perl5] 7ddc00: regex: eval/cut: fix premature local undo and$^R by David Mitchell via perl5-changes Branch: refs/heads/davem/re_savestack_eval<br/> Home: https://github.com/Perl/perl5<br/> Commit: 7ddc0085812ab89a573ada9988fdb81e91f1a041<br/> https://github.com/Perl/perl5/commit/7ddc0085812ab89a573ada9988fdb81e91f1a041<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-14 (Sun, 14 Dec 2025)<br/><br/> Changed paths:<br/> M regexec.c<br/> M regexp.h<br/> M t/op/svleak.t<br/> M t/re/pat_re_eval.t<br/><br/> Log Message:<br/> -----------<br/> regex: eval/cut: fix premature local undo and $^R<br/><br/>GH #16197<br/><br/>The main purpose of this commit is to stop premature scope unwinding<br/>within eval code in regexes. Aside from backtracking on failure, the<br/>scopes of every eval, such as (?{ local $x }), are supposed to accumulate,<br/>and are only unwound en-masse at the very end of the pattern match.<br/>However, a combination of a sub-pattern call, such as (??{...}) or<br/>(?&amp;...), combined with a cut, (?&gt;...), can trigger earlier savestack<br/>popping.<br/><br/>The direct fix for this, as explained below, is to remove this single<br/>line from the EVAL_postponed_A/B: case:<br/><br/> REGCP_UNWIND(ST.cp); /* LEAVE in disguise */<br/><br/>However, that line is entwined with code which attempts to preserve the<br/>final value of $^R during scope unwinding. Since that code was kind of<br/>working around the misplaced REGCP_UNWIND(), it needs ripping out and<br/>re-implementing. This has to be done at the same time, so the bulk of<br/>this commit is actually concerned with $^R, even though it isn&#39;t the<br/>subject of this ticket. So this commit doesn&#39;t change the behaviour of<br/>$^R, but just changes its implementation somewhat.<br/><br/>The $^R issue is that every /(?{...})/ causes the equivalent of<br/><br/> local $^R = ...;<br/><br/>to be executed. During final exit, the savestack gets unwound, and all<br/>those local&#39;s get undone, leaving $^R with the value it had before the<br/>match started. But we promise that after the match, $^R will hold the<br/>value of the most recent (?{...}). The code which this commit rips out<br/>restored that value in one way; the new code in this commit does it a<br/>different way. Basically, almost the last thing S_regmatch() does is a<br/>LEAVE_SCOPE(orig_savestack_ix); This commit makes it so that the current<br/>value of $^R is copied just before the LEAVE_SCOPE(), and that value is<br/>copied back to $^R just after the LEAVE_SCOPE().<br/><br/>For efficiency, we only do the copy if we&#39;ve actually set $^R. A mechanism<br/>is also needed to ensure that the temporary copy doesn&#39;t leak if we die<br/>during the savestack unwind. This is achieved by holding a pointer to<br/>the copy in the aux_eval struct, which gets processed even if we die.<br/><br/>Now back to the main purpose of this commit, the premature stack unwind<br/>in the presence of a cut with a sub-pattern. This bug has been there<br/>since these features were added. It is instructive to look at a somewhat<br/>idealised overview of the S_regmatch() function from around 5.6.0 (with<br/>some bug fixes from later releases added). This was while the function<br/>was still recursive. It looks approximately like:<br/><br/> pp_match(...) {<br/> I32 ix = PL_savestack_ix;<br/> ... do a match ...<br/> LEAVE_SCOPE(ix);<br/> }<br/><br/> S_regmatch(...) {<br/> while (scan) {<br/> switch (OP(scan)) {<br/> case FOO:<br/> if (! there&#39;s a FOO)<br/> return 0;<br/> I32 ix = PL_savestack_ix;<br/> if (regmatch(...)) /* recursively match rest of pattern */<br/> return 1;<br/> LEAVE_SCOPE(ix);<br/> return 0;<br/><br/> case END:<br/> if (doing a (??{...}) ) {<br/> I32 ix = PL_savestack_ix;<br/> if (regmatch(...) { /* recursively match rest of pattern */<br/> LEAVE_SCOPE(ix);<br/> return 1;<br/> }<br/> LEAVE_SCOPE(ix);<br/> return 0;<br/> }<br/> return 1;<br/><br/> case EVAL:<br/> ... run the code, then, if its a (?{...}) ...<br/> I32 ix = PL_savestack_ix;<br/> if (regmatch(...) { /* recursively run subpattern */<br/> LEAVE_SCOPE(ix)<br/> return 1;<br/> }<br/> LEAVE_SCOPE(ix);<br/> return 0;<br/> }<br/> }<br/><br/>Here, the FOO: case represents all the various ops which recurse. In<br/>general, they match the next item and then recurse to match the rest of<br/>the pattern.<br/><br/>Note that they all do a LEAVE_SCOPE() only in the *failure* branch.<br/><br/>At the end of a successful match, there is potentially much recursion,<br/>and much stuff on the savestack. When the END op is reached, the series<br/>of &#39;return 1&#39;s causes all the recursion to unwind, while leaving the<br/>savestack untouched. Finally, the caller - such as pp_match() - clears<br/>the savestack. In more recent perls the recursion has been removed and<br/>the final LEAVE_SCOPE() is done within S_regmatch() itself, but the<br/>principle remains the same: no stack freeing is done *during* matching,<br/>and instead there&#39;s a single big clean up at the end.<br/><br/>Once (??{...}) enters the picture, that changes a bit. When the END op<br/>associated with the &#39;...&#39; sub-pattern is reached, regmatch() is called<br/>recursively to process any pattern after the (??{..}); then on success,<br/>while working its way back through the nested regmatch() calls, both the<br/>END and the EVAL code do a LEAVE_SCOPE() in the *success* branch.<br/><br/>This is anomalous, and those two LEAVE_SCOPE()&#39;s are what this commit<br/>removes (although in the current non-recursive regex engine, they are<br/>shared by the same piece of code, so only one had to be removed). By<br/>removing them, this regularises the behaviour of sub-patterns. I can&#39;t<br/>think why those LEAVE_SCOPE()s were originally added, and assume it was a<br/>thinko.<br/><br/>Normally it makes no difference whether the savestack is popped near the<br/>end, interleaved with popping all recursive regmatch calls (or<br/>equivalently on non-recursive engines popping the regmatch_state stack),<br/>or whether the savestack is popped only after all the recursion is<br/>exited from.<br/><br/>However, it makes a difference in the presence of a cut, (?&gt;...). Here,<br/>the final op of the sub-pattern &#39;...&#39; is SUCCEED, which rather than<br/>recursing to match anything following the cut block, just returns. The<br/>recursion pops back to the SUSPEND op which started the cut, which then<br/>continues with the op loop as normal.<br/><br/>Thus when about to match the first op following a (?&gt;...), the recursion<br/>*within* the cut has been blown away as if it never happened, but the<br/>accumulated savestack entries (e.g. from evals within the cut block) are<br/>preserved and continue to accumulate.<br/><br/>Now, if there is a (??{...}) sub-pattern, or similarly a (?&amp;FOO), within<br/>the cut, then at the end of the cut, the recursion is unwound, which<br/>includes the stacked EVAL and END recursions, which at this time call<br/>LEAVE_SCOPE(), which frees part of the savestack, even though the<br/>pattern match hasn&#39;t ended yet. That&#39;s the bug which this commit fixes.<br/><br/>The tests added to pat_re_eval.t check that the scope bug has been<br/>fixed. The test added to svleak.t checks that the new $^R copying code<br/>doesn&#39;t leak.<br/><br/><br/> Commit: eaa68d31d4451ce89c75e3c1ca265479259a6a8f<br/> https://github.com/Perl/perl5/commit/eaa68d31d4451ce89c75e3c1ca265479259a6a8f<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-14 (Sun, 14 Dec 2025)<br/><br/> Changed paths:<br/> M regexec.c<br/><br/> Log Message:<br/> -----------<br/> regex: don&#39;t LEAVE_SCOPE() in S_regtry()<br/><br/>This commit should produce no practical change in functionality.<br/><br/>Currently, S_regtry() notes the position of PL_savestack_ix, calls<br/>S_regmatch(), then pops the savestack back to that position. However,<br/>S_regmatch() also does this just before returning, so it&#39;s redundant in<br/>S_regtry(). (A temporary assert confirmed that lastcp == PL_savestack_ix<br/>in S_regtry always while running the test suite).<br/><br/>So this commit removes the REGCP_UNWIND(lastcp) and associated machinery<br/>from S_regtry().<br/><br/>It also regularises the &quot;note current ix; pop back to old ix&quot; code at<br/>the start and end of S_regmatch() to use the standard REGCP_SET() and<br/>REGCP_UNWIND() macros which do the same thing but also produce debugging<br/>messages.<br/><br/><br/> Commit: 97c59b72e2049cf3c8787e81f291fbf7a3ba21de<br/> https://github.com/Perl/perl5/commit/97c59b72e2049cf3c8787e81f291fbf7a3ba21de<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-14 (Sun, 14 Dec 2025)<br/><br/> Changed paths:<br/> M pod/perldelta.pod<br/><br/> Log Message:<br/> -----------<br/> perldelta for GH #16197 fix<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/7ddc0085812a%5E...97c59b72e204<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65361.html Sun, 14 Dec 2025 14:43:45 +0000 [Perl/perl5] 55631d: Refactor Perl_av_fetch: remove goto, reduce thenu... by Bartosz Jarzyna via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 55631dd1f86b43a00fcc9fb5a70ed8fc52eeaa93<br/> https://github.com/Perl/perl5/commit/55631dd1f86b43a00fcc9fb5a70ed8fc52eeaa93<br/> Author: bbrtj &lt;[email protected]&gt;<br/> Date: 2025-12-14 (Sun, 14 Dec 2025)<br/><br/> Changed paths:<br/> M av.c<br/><br/> Log Message:<br/> -----------<br/> Refactor Perl_av_fetch: remove goto, reduce the number of branches<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65360.html Sun, 14 Dec 2025 10:39:28 +0000 [Perl/perl5] 10adbc: cpan/Test-Simple - Update to version 1.302219 by James E Keenan via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 10adbc06411081cf1df37c2a3cd8546d565f1f1e<br/> https://github.com/Perl/perl5/commit/10adbc06411081cf1df37c2a3cd8546d565f1f1e<br/> Author: Chad Granum &lt;[email protected]&gt;<br/> Date: 2025-12-13 (Sat, 13 Dec 2025)<br/><br/> Changed paths:<br/> M MANIFEST<br/> M Makefile.SH<br/> M Porting/Maintainers.pl<br/> M cpan/Test-Simple/lib/Test/Builder.pm<br/> M cpan/Test-Simple/lib/Test/Builder/Formatter.pm<br/> M cpan/Test-Simple/lib/Test/Builder/Module.pm<br/> M cpan/Test-Simple/lib/Test/Builder/Tester.pm<br/> M cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm<br/> M cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm<br/> M cpan/Test-Simple/lib/Test/More.pm<br/> M cpan/Test-Simple/lib/Test/Simple.pm<br/> M cpan/Test-Simple/lib/Test/Tester.pm<br/> M cpan/Test-Simple/lib/Test/Tester/Capture.pm<br/> M cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm<br/> M cpan/Test-Simple/lib/Test/Tester/Delegate.pm<br/> M cpan/Test-Simple/lib/Test/use/ok.pm<br/> M cpan/Test-Simple/lib/Test2.pm<br/> M cpan/Test-Simple/lib/Test2/API.pm<br/> M cpan/Test-Simple/lib/Test2/API/Breakage.pm<br/> M cpan/Test-Simple/lib/Test2/API/Context.pm<br/> M cpan/Test-Simple/lib/Test2/API/Instance.pm<br/> M cpan/Test-Simple/lib/Test2/API/InterceptResult.pm<br/> M cpan/Test-Simple/lib/Test2/API/InterceptResult/Event.pm<br/> M cpan/Test-Simple/lib/Test2/API/InterceptResult/Facet.pm<br/> M cpan/Test-Simple/lib/Test2/API/InterceptResult/Hub.pm<br/> M cpan/Test-Simple/lib/Test2/API/InterceptResult/Squasher.pm<br/> M cpan/Test-Simple/lib/Test2/API/Stack.pm<br/> M cpan/Test-Simple/lib/Test2/AsyncSubtest.pm<br/> M cpan/Test-Simple/lib/Test2/AsyncSubtest/Event/Attach.pm<br/> M cpan/Test-Simple/lib/Test2/AsyncSubtest/Event/Detach.pm<br/> M cpan/Test-Simple/lib/Test2/AsyncSubtest/Formatter.pm<br/> M cpan/Test-Simple/lib/Test2/AsyncSubtest/Hub.pm<br/> M cpan/Test-Simple/lib/Test2/Bundle.pm<br/> M cpan/Test-Simple/lib/Test2/Bundle/Extended.pm<br/> M cpan/Test-Simple/lib/Test2/Bundle/More.pm<br/> M cpan/Test-Simple/lib/Test2/Bundle/Simple.pm<br/> M cpan/Test-Simple/lib/Test2/Compare.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Array.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Bag.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Base.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Bool.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Custom.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/DeepRef.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Delta.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Event.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/EventMeta.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Float.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Hash.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Isa.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Meta.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Negatable.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Number.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Object.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/OrderedSubset.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Pattern.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Ref.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Regex.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Scalar.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Set.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/String.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Undef.pm<br/> M cpan/Test-Simple/lib/Test2/Compare/Wildcard.pm<br/> M cpan/Test-Simple/lib/Test2/Env.pm<br/> M cpan/Test-Simple/lib/Test2/Event.pm<br/> M cpan/Test-Simple/lib/Test2/Event/Bail.pm<br/> M cpan/Test-Simple/lib/Test2/Event/Diag.pm<br/> M cpan/Test-Simple/lib/Test2/Event/Encoding.pm<br/> M cpan/Test-Simple/lib/Test2/Event/Exception.pm<br/> M cpan/Test-Simple/lib/Test2/Event/Fail.pm<br/> M cpan/Test-Simple/lib/Test2/Event/Generic.pm<br/> M cpan/Test-Simple/lib/Test2/Event/Note.pm<br/> M cpan/Test-Simple/lib/Test2/Event/Ok.pm<br/> M cpan/Test-Simple/lib/Test2/Event/Pass.pm<br/> M cpan/Test-Simple/lib/Test2/Event/Plan.pm<br/> M cpan/Test-Simple/lib/Test2/Event/Skip.pm<br/> M cpan/Test-Simple/lib/Test2/Event/Subtest.pm<br/> M cpan/Test-Simple/lib/Test2/Event/TAP/Version.pm<br/> M cpan/Test-Simple/lib/Test2/Event/V2.pm<br/> M cpan/Test-Simple/lib/Test2/Event/Waiting.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet/About.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet/Amnesty.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet/Assert.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet/Control.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet/Error.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet/Hub.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet/Info.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet/Info/Table.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet/Meta.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet/Parent.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet/Plan.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet/Render.pm<br/> M cpan/Test-Simple/lib/Test2/EventFacet/Trace.pm<br/> M cpan/Test-Simple/lib/Test2/Formatter.pm<br/> M cpan/Test-Simple/lib/Test2/Formatter/TAP.pm<br/> A cpan/Test-Simple/lib/Test2/Handle.pm<br/> M cpan/Test-Simple/lib/Test2/Hub.pm<br/> M cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm<br/> M cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm<br/> M cpan/Test-Simple/lib/Test2/Hub/Subtest.pm<br/> M cpan/Test-Simple/lib/Test2/IPC.pm<br/> M cpan/Test-Simple/lib/Test2/IPC/Driver.pm<br/> M cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm<br/> M cpan/Test-Simple/lib/Test2/Manual.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Anatomy.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Anatomy/API.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Anatomy/Context.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Anatomy/EndToEnd.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Anatomy/Event.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Anatomy/Hubs.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Anatomy/IPC.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Anatomy/Utilities.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Concurrency.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Contributing.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Testing.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Testing/Introduction.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Testing/Migrating.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Testing/Planning.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Testing/Todo.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Tooling.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Tooling/FirstTool.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Tooling/Formatter.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Tooling/Nesting.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Tooling/Plugin/TestExit.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Tooling/Plugin/TestingDone.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Tooling/Plugin/ToolCompletes.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Tooling/Plugin/ToolStarts.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Tooling/Subtest.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Tooling/TestBuilder.pm<br/> M cpan/Test-Simple/lib/Test2/Manual/Tooling/Testing.pm<br/> M cpan/Test-Simple/lib/Test2/Mock.pm<br/> M cpan/Test-Simple/lib/Test2/Plugin.pm<br/> M cpan/Test-Simple/lib/Test2/Plugin/BailOnFail.pm<br/> M cpan/Test-Simple/lib/Test2/Plugin/DieOnFail.pm<br/> M cpan/Test-Simple/lib/Test2/Plugin/ExitSummary.pm<br/> M cpan/Test-Simple/lib/Test2/Plugin/SRand.pm<br/> M cpan/Test-Simple/lib/Test2/Plugin/Times.pm<br/> M cpan/Test-Simple/lib/Test2/Plugin/UTF8.pm<br/> M cpan/Test-Simple/lib/Test2/Require.pm<br/> M cpan/Test-Simple/lib/Test2/Require/AuthorTesting.pm<br/> M cpan/Test-Simple/lib/Test2/Require/AutomatedTesting.pm<br/> M cpan/Test-Simple/lib/Test2/Require/EnvVar.pm<br/> M cpan/Test-Simple/lib/Test2/Require/ExtendedTesting.pm<br/> M cpan/Test-Simple/lib/Test2/Require/Fork.pm<br/> M cpan/Test-Simple/lib/Test2/Require/Module.pm<br/> M cpan/Test-Simple/lib/Test2/Require/NonInteractiveTesting.pm<br/> M cpan/Test-Simple/lib/Test2/Require/Perl.pm<br/> M cpan/Test-Simple/lib/Test2/Require/RealFork.pm<br/> M cpan/Test-Simple/lib/Test2/Require/ReleaseTesting.pm<br/> M cpan/Test-Simple/lib/Test2/Require/Threads.pm<br/> M cpan/Test-Simple/lib/Test2/Suite.pm<br/> M cpan/Test-Simple/lib/Test2/Todo.pm<br/> M cpan/Test-Simple/lib/Test2/Tools.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/AsyncSubtest.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Basic.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Class.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/ClassicCompare.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Compare.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Defer.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Encoding.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Event.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Exception.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Exports.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/GenTemp.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Grab.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Mock.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Ref.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Refcount.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Spec.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Subtest.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Target.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Tester.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Tiny.pm<br/> M cpan/Test-Simple/lib/Test2/Tools/Warnings.pm<br/> M cpan/Test-Simple/lib/Test2/Util.pm<br/> M cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Facets2Legacy.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Grabber.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Guard.pm<br/> M cpan/Test-Simple/lib/Test2/Util/HashBase.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Importer.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Ref.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Sig.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Stash.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Sub.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Table.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Table/Cell.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Table/LineBreak.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Term.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Times.pm<br/> M cpan/Test-Simple/lib/Test2/Util/Trace.pm<br/> M cpan/Test-Simple/lib/Test2/V0.pm<br/> A cpan/Test-Simple/lib/Test2/V1.pm<br/> A cpan/Test-Simple/lib/Test2/V1/Base.pm<br/> A cpan/Test-Simple/lib/Test2/V1/Handle.pm<br/> M cpan/Test-Simple/lib/Test2/Workflow.pm<br/> M cpan/Test-Simple/lib/Test2/Workflow/BlockBase.pm<br/> M cpan/Test-Simple/lib/Test2/Workflow/Build.pm<br/> M cpan/Test-Simple/lib/Test2/Workflow/Runner.pm<br/> M cpan/Test-Simple/lib/Test2/Workflow/Task.pm<br/> M cpan/Test-Simple/lib/Test2/Workflow/Task/Action.pm<br/> M cpan/Test-Simple/lib/Test2/Workflow/Task/Group.pm<br/> M cpan/Test-Simple/lib/ok.pm<br/> A cpan/Test-Simple/t/modules/Handle.t<br/> A cpan/Test-Simple/t/modules/V1.t<br/> A cpan/Test-Simple/t/modules/V1/Base.t<br/> A cpan/Test-Simple/t/modules/V1/Handle.t<br/><br/> Log Message:<br/> -----------<br/> cpan/Test-Simple - Update to version 1.302219<br/><br/>1.302219 2025-12-08 16:09:01-08:00 America/Los_Angeles<br/><br/> - Fix downstream test not to install Test2::Suite<br/> - Fix documentation mistakes<br/><br/>Committer: Changes to Makefile.SH.<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65359.html Sun, 14 Dec 2025 02:18:36 +0000 [Perl/perl5] 53d914: perlxs.pod: remove section on %v by David Mitchell via perl5-changes Branch: refs/heads/davem/xspod<br/> Home: https://github.com/Perl/perl5<br/> Commit: 53d9146f7eaf0eccd08f2bc301ce2424170f9218<br/> https://github.com/Perl/perl5/commit/53d9146f7eaf0eccd08f2bc301ce2424170f9218<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: remove section on %v<br/><br/>The XS parser supported an extremely obscure bit of functionality which<br/>made use of the %v package variable to maintain state between different<br/>bits of typemap processing. This was accidentally broken in 5.10.0:<br/>refactoring removed the &#39;use vars &quot;%v&quot;&#39; line, and no one seemed to<br/>notice or care.<br/><br/>Also, the sole example of its use in the docs seemed to be obscure,<br/>confusing and probably wrong.<br/><br/>There was a consensus in the discussion at<br/><br/> http://nntp.perl.org/group/perl.perl5.porters/267667<br/><br/>that we should stop documenting this feature rather than trying to fix<br/>it.<br/><br/><br/> Commit: 88fb9b221bcba5d6c75dcb76060fbf3f9245e45d<br/> https://github.com/Perl/perl5/commit/88fb9b221bcba5d6c75dcb76060fbf3f9245e45d<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: reindent and reformat code examples<br/><br/>The various XS code examples had odd and inconsistent indentation (often<br/>with 5 leading spaces) and inconsistent formatting, e.g. foo(a,b) vs<br/>foo( a, b ) vs foo(a, b). Fix that, and also remove any tab chars.<br/><br/>Whitespace-only change.<br/><br/><br/> Commit: 74260e4e198ac6c139ad7d8ed73c135538033195<br/> https://github.com/Perl/perl5/commit/74260e4e198ac6c139ad7d8ed73c135538033195<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: delete most non-ref sections<br/><br/>This commit is a simple cut which deletes several &#39;=head2&#39; sections from<br/>perlxs.pod. The next commit will tidy up and fix any broken links etc.<br/><br/>These sections are more tutorial-like, and aren&#39;t in line with the goal<br/>of this branch that perlxs.pod becomes purely a reference manual for XS.<br/>Any relevant information from these sections may be incorporated later<br/>into new sections in perlxs.pod and/or be included in a future rewrite<br/>of perlxstut.pod.<br/><br/>The sections deleted are:<br/><br/> =head2 Introduction<br/> =head2 On The Road<br/> =head2 The Anatomy of an XSUB<br/> =head2 The Argument Stack<br/> =head2 The RETVAL Variable<br/> =head2 Returning SVs, AVs and HVs through RETVAL<br/> =head2 Returning Undef And Empty Lists<br/> =head2 Interface Strategy<br/> =head2 Perl Objects And C Structures<br/><br/><br/> Commit: a15b0e56b70a167456221e3ed10721c15fdefc13<br/> https://github.com/Perl/perl5/commit/a15b0e56b70a167456221e3ed10721c15fdefc13<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M XSUB.h<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: fix up links after deleting sections<br/><br/>The previous commit deleted several sections from perlxs.pod. This<br/>commit fixes things up; done as a separate commit so that the changes<br/>aren&#39;t drowned out in the diff listing.<br/><br/><br/> Commit: 1463566d83d7b94c5045970689ceb475767f8560<br/> https://github.com/Perl/perl5/commit/1463566d83d7b94c5045970689ceb475767f8560<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: reorder sections<br/><br/>This big commit does a series of plain cut+pastes to reorder all the<br/>=head2 sections within the file.<br/><br/>This changes the order from semi-random into roughly the order the<br/>various XS keywords would appear within an XS file, and then within an<br/>XSUB declaration/definition.<br/><br/>No changes have been made to the text: simply that all lines from a<br/>particular &#39;^=head2&#39; up until the next head2 have been cut+paste as<br/>a single unit.<br/><br/>No attempt has been made yet to make the text consistent with the new<br/>ordering; that will be done by the subsequent commits of this branch.<br/><br/>The previous ordering in this file was:<br/><br/> =head1 NAME<br/> =head1 DESCRIPTION<br/> =head2 The MODULE Keyword<br/> =head2 The PACKAGE Keyword<br/> =head2 The PREFIX Keyword<br/> =head2 The OUTPUT: Keyword<br/> =head2 The NO_OUTPUT Keyword<br/> =head2 The CODE: Keyword<br/> =head2 The INIT: Keyword<br/> =head2 The NO_INIT Keyword<br/> =head2 The TYPEMAP: Keyword<br/> =head2 Initializing Function Parameters<br/> =head2 Default Parameter Values<br/> =head2 The PREINIT: Keyword<br/> =head2 The SCOPE: Keyword<br/> =head2 The INPUT: Keyword<br/> =head2 The IN/OUTLIST/IN_OUTLIST/OUT/IN_OUT Keywords<br/> =head2 The C&lt;length(NAME)&gt; Keyword<br/> =head2 Variable-length Parameter Lists<br/> =head2 The C_ARGS: Keyword<br/> =head2 The PPCODE: Keyword<br/> =head2 The REQUIRE: Keyword<br/> =head2 The CLEANUP: Keyword<br/> =head2 The POSTCALL: Keyword<br/> =head2 The BOOT: Keyword<br/> =head2 The VERSIONCHECK: Keyword<br/> =head2 The PROTOTYPES: Keyword<br/> =head2 The PROTOTYPE: Keyword<br/> =head2 The ALIAS: Keyword<br/> =head2 The OVERLOAD: Keyword<br/> =head2 The FALLBACK: Keyword<br/> =head2 The INTERFACE: Keyword<br/> =head2 The INTERFACE_MACRO: Keyword<br/> =head2 The INCLUDE: Keyword<br/> =head2 The INCLUDE_COMMAND: Keyword<br/> =head2 The CASE: Keyword<br/> =head2 The EXPORT_XSUB_SYMBOLS: Keyword<br/> =head2 The &amp; Unary Operator<br/> =head2 Inserting POD, Comments and C Preprocessor Directives<br/> =head2 Using XS With C++<br/> =head2 Safely Storing Static Data in XS<br/> =head3 MY_CXT REFERENCE<br/> =head1 EXAMPLES<br/> =head1 CAVEATS<br/> =head2 Use of standard C library functions<br/> =head2 Event loops and control flow<br/> =head1 XS VERSION<br/> =head1 AUTHOR DIAGNOSTICS<br/> =head1 AUTHOR<br/><br/>and is now:<br/><br/> =head1 NAME<br/> =head1 DESCRIPTION<br/> =head2 The MODULE Keyword<br/> =head2 The PACKAGE Keyword<br/> =head2 The PREFIX Keyword<br/> =head2 Inserting POD, Comments and C Preprocessor Directives<br/> =head2 The REQUIRE: Keyword<br/> =head2 The VERSIONCHECK: Keyword<br/> =head2 The PROTOTYPES: Keyword<br/> =head2 The EXPORT_XSUB_SYMBOLS: Keyword<br/> =head2 The INCLUDE: Keyword<br/> =head2 The INCLUDE_COMMAND: Keyword<br/> =head2 The TYPEMAP: Keyword<br/> =head2 The BOOT: Keyword<br/> =head2 The FALLBACK: Keyword<br/> =head2 The NO_OUTPUT Keyword<br/> =head2 The IN/OUTLIST/IN_OUTLIST/OUT/IN_OUT Keywords<br/> =head2 Default Parameter Values<br/> =head2 The C&lt;length(NAME)&gt; Keyword<br/> =head2 Variable-length Parameter Lists<br/> =head2 The PREINIT: Keyword<br/> =head2 The INPUT: Keyword<br/> =head2 The NO_INIT Keyword<br/> =head2 Initializing Function Parameters<br/> =head2 The &amp; Unary Operator<br/> =head2 The SCOPE: Keyword<br/> =head2 The INIT: Keyword<br/> =head2 The C_ARGS: Keyword<br/> =head2 The CODE: Keyword<br/> =head2 The PPCODE: Keyword<br/> =head2 The POSTCALL: Keyword<br/> =head2 The OUTPUT: Keyword<br/> =head2 The CLEANUP: Keyword<br/> =head2 The PROTOTYPE: Keyword<br/> =head2 The OVERLOAD: Keyword<br/> =head2 The ALIAS: Keyword<br/> =head2 The INTERFACE: Keyword<br/> =head2 The INTERFACE_MACRO: Keyword<br/> =head2 The CASE: Keyword<br/> =head2 Using XS With C++<br/> =head2 Safely Storing Static Data in XS<br/> =head3 MY_CXT REFERENCE<br/> =head1 EXAMPLES<br/> =head1 CAVEATS<br/> =head2 Use of standard C library functions<br/> =head2 Event loops and control flow<br/> =head1 XS VERSION<br/> =head1 AUTHOR DIAGNOSTICS<br/> =head1 AUTHOR<br/><br/><br/> Commit: 855df4221c8d8d5403cc74e1f213850723a6a0fa<br/> https://github.com/Perl/perl5/commit/855df4221c8d8d5403cc74e1f213850723a6a0fa<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: add group headers<br/><br/>Following the previous commit&#39;s reordering of the all the =head2<br/>sections, demote most of the =head2 headers to =head3, and add some new<br/>=head2 headers which group together related headers.<br/><br/>Also add some =head3&#39;s for a few missing keywords.<br/><br/>Subsequent commits will flesh out the new sections.<br/><br/><br/> Commit: c0cd43bca2c31a8e93c5e6ea9af7861864ed00f9<br/> https://github.com/Perl/perl5/commit/c0cd43bca2c31a8e93c5e6ea9af7861864ed00f9<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: add a new introductory part<br/><br/>Four commits ago, I removed most of the general text sections in<br/>perlxs (i.e. the ones not specifically about a particular keyword).<br/><br/>Now this commit adds a completely new introductory part to perlxs, about<br/>1200 lines long. It represents an attempt to write a background to what<br/>XS and XSUBs, SVs, typemaps etc are, in a complete and modern way.<br/>The existing reference section for each keyword follows it.<br/><br/>I tried to avoid getting too tutorial-like (that&#39;s what perlxstut is<br/>for), but I may have crossed the line in various places. In particular<br/>it has a new section which could have been titled &quot;all the bits of<br/>perlguts you need to know in order to write non-trivial XSUBs without<br/>having to actually read perlguts&quot;.<br/><br/><br/> Commit: 7088754f0657847522ab4e483736b667d4576e06<br/> https://github.com/Perl/perl5/commit/7088754f0657847522ab4e483736b667d4576e06<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: add BNF definition section<br/><br/>Add a section which semi-formally tries to define the syntax and<br/>structue of an XS file, using a BNF-like format.<br/><br/>See http://nntp.perl.org/group/perl.perl5.porters/268701 for the<br/>discussion of this part.<br/><br/><br/> Commit: d07e065215e984be915d4b6dfaa4f0b20e66d76d<br/> https://github.com/Perl/perl5/commit/d07e065215e984be915d4b6dfaa4f0b20e66d76d<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update MODULE/PACKAGE/PREFIX<br/><br/>Rewrite the POD for these three keywords, and in particular, treat<br/>them as one declaration, rather than three unrelated keywords.<br/><br/><br/> Commit: b934cb14a43ea759b4129784c7a110af89ab423c<br/> https://github.com/Perl/perl5/commit/b934cb14a43ea759b4129784c7a110af89ab423c<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update file-scoped directive text<br/><br/>Populate the new<br/><br/> =head2 File-scoped XS Keywords and Directives<br/><br/>section, partially by cannibalising (and then deleting) the old<br/><br/> =head3 Inserting POD, Comments and C Preprocessor Directives<br/><br/>subsection. This commit only adds text about directives; subsequent<br/>commits will update the various file-scoped keywords.<br/><br/><br/> Commit: 68b7aca119ecd2cd566f25d640f239fda59a338b<br/> https://github.com/Perl/perl5/commit/68b7aca119ecd2cd566f25d640f239fda59a338b<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update REQUIRE, VERSIONCHECK keywords<br/><br/><br/> Commit: 261412c92ea524c2a5326166006790cd292b5c39<br/> https://github.com/Perl/perl5/commit/261412c92ea524c2a5326166006790cd292b5c39<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update PROTOTYPES: keyword<br/><br/><br/> Commit: 5bfc7766c1a430033c8be34bbd412279050c8100<br/> https://github.com/Perl/perl5/commit/5bfc7766c1a430033c8be34bbd412279050c8100<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update EXPORT_XSUB_SYMBOLS, INCLUDE(_COMMAND)<br/><br/><br/> Commit: 2d3d34823f2ce229b7f6bd99051a5fd4ef00ed3f<br/> https://github.com/Perl/perl5/commit/2d3d34823f2ce229b7f6bd99051a5fd4ef00ed3f<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update TYPEMAP: keyword<br/><br/><br/> Commit: b518bc737a5e3290f32489d7dd8767aee1cdb11c<br/> https://github.com/Perl/perl5/commit/b518bc737a5e3290f32489d7dd8767aee1cdb11c<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update BOOT: keyword<br/><br/><br/> Commit: 73049754fa3516b64ec1ab4831c735020bcc679f<br/> https://github.com/Perl/perl5/commit/73049754fa3516b64ec1ab4831c735020bcc679f<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update FALLBACK: keyword<br/><br/><br/> Commit: 64cb00d0abfce627d2134e318e5c23dcf2a740bf<br/> https://github.com/Perl/perl5/commit/64cb00d0abfce627d2134e318e5c23dcf2a740bf<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update XSUB Structure + Declaration<br/><br/>Populate the new<br/><br/> =head2 The Structure of an XSUB<br/> =head2 An XSUB Declaration<br/><br/>sections<br/><br/><br/> Commit: e3ea242f73af0be2c0f9579f85f79a63fb42c1c5<br/> https://github.com/Perl/perl5/commit/e3ea242f73af0be2c0f9579f85f79a63fb42c1c5<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update section &#39;An XSUB Parameter&#39;<br/><br/>Add some initial text for this new section, and also add a new<br/>subsection &quot;XSUB Parameter Placeholders&quot;.<br/><br/><br/> Commit: 66c57eb0a573e753b9352948902ebe72cc4bc66b<br/> https://github.com/Perl/perl5/commit/66c57eb0a573e753b9352948902ebe72cc4bc66b<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update IN_OUT etc section<br/><br/><br/> Commit: 286e90fc6e3a071353940dc7596c46fbd51273c9<br/> https://github.com/Perl/perl5/commit/286e90fc6e3a071353940dc7596c46fbd51273c9<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M XSUB.h<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update default, length, ellipis params<br/><br/>Rewrite (and retitle) these three subsections:<br/><br/> =head3 Default Parameter Values<br/> =head3 The C&lt;length(NAME)&gt; Keyword<br/> =head3 Variable-length Parameter Lists<br/><br/><br/> Commit: 86f59bdda7fb7381d783f50aa522402626996be5<br/> https://github.com/Perl/perl5/commit/86f59bdda7fb7381d783f50aa522402626996be5<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: Input part, PREINIT sections<br/><br/>Add text for the new &#39;=head2 The XSUB Input Part&#39; section, and rewrite<br/>the existing entry for the PREINIT keyword.<br/><br/><br/> Commit: 2ab94532396ddf8a5ebd7798d0f5297f6554c2af<br/> https://github.com/Perl/perl5/commit/2ab94532396ddf8a5ebd7798d0f5297f6554c2af<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update &#39;The INPUT: Keyword&#39; section<br/><br/>This commit completely rewrites this section and subsections:<br/><br/> =head3 The INPUT: Keyword<br/> =head4 The NO_INIT Keyword<br/> =head4 Initializing Function Parameters<br/> =head4 The &amp; Unary Operator<br/><br/>It de-emphasises the INPUT keyword and suggests using ANSI XS signatures<br/>etc instead.<br/><br/><br/> Commit: ef9e62342c6961bf2f39a4614f30d5c620243a0c<br/> https://github.com/Perl/perl5/commit/ef9e62342c6961bf2f39a4614f30d5c620243a0c<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update &#39;SCOPE: Keyword&#39; section<br/><br/><br/> Commit: 342d0e87c4337f236399c662689809aa5e9a15da<br/> https://github.com/Perl/perl5/commit/342d0e87c4337f236399c662689809aa5e9a15da<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: init part, INIT sections<br/><br/>Add text for the new &#39;=head2 The XSUB Init Part&#39; section, and rewrite<br/>the existing entry for the INIT keyword.<br/><br/><br/> Commit: bd046ce1ad0c43731de527df86a55600910ef353<br/> https://github.com/Perl/perl5/commit/bd046ce1ad0c43731de527df86a55600910ef353<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: code part, autocall, C_ARGS<br/><br/>Add text to the new<br/><br/> =head2 The XSUB Code Part<br/> =head3 Auto-calling a C function<br/><br/>sections, and rewrite the existing<br/><br/> =head4 The C_ARGS: Keyword<br/><br/>section<br/><br/><br/> Commit: 257e27e13ed86d3912c73da850abc323c72c07a2<br/> https://github.com/Perl/perl5/commit/257e27e13ed86d3912c73da850abc323c72c07a2<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: CODE, PPCODE<br/><br/>Rewrite these sections:<br/><br/> =head3 The CODE: Keyword<br/> =head3 The PPCODE: Keyword<br/><br/><br/> Commit: 44b0c500e99fae923935d3d82478e27c1518931c<br/> https://github.com/Perl/perl5/commit/44b0c500e99fae923935d3d82478e27c1518931c<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update NOT_IMPLEMENTED_YET: keyword<br/><br/>This keyword formerly wasn&#39;t documented. The docs now say &quot;this is what<br/>it is, but don&#39;t use it&quot;.<br/><br/><br/> Commit: c0065254f7b0aef8a149d8bf98b3f5210a0098cc<br/> https://github.com/Perl/perl5/commit/c0065254f7b0aef8a149d8bf98b3f5210a0098cc<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: output part<br/><br/>Add text to the new<br/><br/> =head2 The XSUB Output Part<br/><br/>section, and rewrite the text in these existing sections:<br/><br/> =head3 The POSTCALL: Keyword<br/> =head3 The OUTPUT: Keyword<br/><br/><br/> Commit: 027c0006e5a25cfefa3127879a42927b1ed81e16<br/> https://github.com/Perl/perl5/commit/027c0006e5a25cfefa3127879a42927b1ed81e16<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: cleanup part<br/><br/>Add text to the new<br/><br/> =head2 The XSUB Cleanup Part<br/><br/>section, and rewrite the text in this existing section:<br/><br/> =head3 The CLEANUP: Keyword<br/><br/><br/> Commit: c9ef9317973afb3bdbae9dad3bbad17bda1b9f83<br/> https://github.com/Perl/perl5/commit/c9ef9317973afb3bdbae9dad3bbad17bda1b9f83<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update generic intro, PROTOTYPE<br/><br/>Add text to the new<br/><br/> =head2 XSUB Generic Keywords<br/><br/>section, and rewrite the text in this existing section:<br/><br/> =head3 The PROTOTYPE: Keyword<br/><br/><br/> Commit: 815fd708c551410ac81766e80b27940ebb799221<br/> https://github.com/Perl/perl5/commit/815fd708c551410ac81766e80b27940ebb799221<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: mention package name types<br/><br/>Explain that a &#39;C&#39; parameter type in an XSUB declaration can actually<br/>be a Perl package name or similar, e.g.<br/><br/> Foo::Bar<br/> f(Foo::Bar obj, char *s)<br/><br/><br/> Commit: c9498f597725a2820cb7f32113a0b44a7ae7c780<br/> https://github.com/Perl/perl5/commit/c9498f597725a2820cb7f32113a0b44a7ae7c780<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update OVERLOAD, add T_PTROBJ<br/><br/>First, add a new subsection<br/><br/> =head3 T_PTROBJ and opaque handles<br/><br/>to the TYPEMAPs section explaining how this typemap can be used to<br/>map between Perl objects and C library handles. It provides a<br/>fully-worked example of wrapping a simple arithmetic library.<br/><br/>Then completely rewrite the<br/><br/> =head3 The OVERLOAD: Keyword<br/><br/>section. In particular, it now refers to the new T_PTROBJ example and<br/>shows how it can be extended to use overloading.<br/><br/><br/> Commit: f81709256c762f91c27298e62c90dd996b904bd5<br/> https://github.com/Perl/perl5/commit/f81709256c762f91c27298e62c90dd996b904bd5<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: document ATTRS<br/><br/>This keyword was undocumented, even though it had been added 25 years<br/>ago.<br/><br/><br/> Commit: d716b2e269eed58285f4f64efcb21375aeaf6825<br/> https://github.com/Perl/perl5/commit/d716b2e269eed58285f4f64efcb21375aeaf6825<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: add &quot;Sharing XSUB bodies&quot; section<br/><br/>Populate the introduction to this new section.<br/><br/><br/> Commit: 19d1401d728d1124af8b21612a840fa397846401<br/> https://github.com/Perl/perl5/commit/19d1401d728d1124af8b21612a840fa397846401<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: ALIAS<br/><br/>Rewrite this section:<br/><br/> =head3 The ALIAS: Keyword<br/><br/><br/> Commit: 7f027d039364e50dc3dc7451d4a3980bcf69571d<br/> https://github.com/Perl/perl5/commit/7f027d039364e50dc3dc7451d4a3980bcf69571d<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update INTERFACE, INTERFACE_MACRO<br/><br/>Rewrite these sections:<br/><br/> =head3 The INTERFACE: Keyword<br/> =head3 The INTERFACE_MACRO: Keyword<br/><br/>also demote the second to be a head4 child of the first. Then expand<br/>the T_PTROBJ example to use INTERFACE as an alternative to ALIAS.<br/><br/><br/> Commit: df225cdecba56e8ae15a2b49fecf663c5a51cfbe<br/> https://github.com/Perl/perl5/commit/df225cdecba56e8ae15a2b49fecf663c5a51cfbe<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: CASE<br/><br/>Rewrite this section:<br/><br/> =head3 The CASE: Keyword<br/><br/><br/> Commit: 494b7e45afd7639656e77483dcb327c74a295ff7<br/> https://github.com/Perl/perl5/commit/494b7e45afd7639656e77483dcb327c74a295ff7<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: add &quot;Using Typemaps&quot; section<br/><br/>Populate this new section (except for the T_PTROBJ subsection, which had<br/>already been added by an earlier commit within this branch).<br/><br/>Note that the &quot;Common typemaps&quot; subsection could probably benefit<br/>from some further expansion by someone familiar with which built-in<br/>T_FOO entries are useful.<br/><br/><br/> Commit: b0ed1804cf9d343c5ae6c478226b13d17ceab248<br/> https://github.com/Perl/perl5/commit/b0ed1804cf9d343c5ae6c478226b13d17ceab248<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/> M t/porting/known_pod_issues.dat<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update &quot;Using XS With C++&quot; section<br/><br/>Rewrite this section:<br/><br/> =head2 Using XS With C++<br/><br/>Disclaimer: I&#39;ve never written a proper C++ program. I had to<br/>(literally) dust off my 34-year old copy of Stroustrup(*) and also do<br/>some Googling. Hopefully what I&#39;ve written is sane.<br/><br/>(*) This was bought back in the days when people used to to learn things<br/>by buying books, and when I thought that I ought to know something about<br/>this newfangled C++ thing. I never got round to reading all of it: I<br/>discovered Perl around the same time, which looked to be a lot more fun.<br/><br/><br/> Commit: 9a6dfffd6036adbf71be567d4acb8d11a006dec6<br/> https://github.com/Perl/perl5/commit/9a6dfffd6036adbf71be567d4acb8d11a006dec6<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update MY_CXT section<br/><br/>Revise the text in this section:<br/><br/> =head2 Safely Storing Static Data in XS<br/><br/><br/> Commit: dcc8456229ac9489f905153d983a13712b37b442<br/> https://github.com/Perl/perl5/commit/dcc8456229ac9489f905153d983a13712b37b442<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update EXAMPLES section<br/><br/>Rewrite this section:<br/><br/> =head1 EXAMPLES<br/><br/>Basically, delete the one big example in this section and instead<br/>provide links to various other examples already present in this document<br/>instead.<br/><br/><br/> Commit: dedc44bbe5632ff056dcbef73dcab00dcd3a3dca<br/> https://github.com/Perl/perl5/commit/dedc44bbe5632ff056dcbef73dcab00dcd3a3dca<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update CAVEATS, AUTHOR, A DIAGNOSTICS<br/><br/>Tweak the final few sections of perlxs.pod.<br/><br/><br/> Commit: 63ac12a28e5522c694d52a22d2a7b0fe5c8df591<br/> https://github.com/Perl/perl5/commit/63ac12a28e5522c694d52a22d2a7b0fe5c8df591<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/> M dist/ExtUtils-ParseXS/t/001-basic.t<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: standardise version numbers in the doc<br/><br/>After the big rewrite, various bits of text which describe when a<br/>particular feature was introduced or changed have ended up using a<br/>random mixture of Perl, ParseXS and xsubpp version numbers.<br/><br/>This commit standardises on xsubpp version numbers. These are mostly<br/>the same as ParseXS, but this handles the cases before ParseXS was<br/>split off from xsubpp. Perl versions suffer from not exactly matching<br/>when an xsubpp version number was incremented, and not matching what is<br/>used by the &quot;REQUIRE:&quot; keyword.<br/><br/>This commit also adds a short new section which tries to explain how the<br/>three sets of version numbers are related.<br/><br/><br/> Commit: 6abfedb04644697b18271a2c702dde305749f57a<br/> https://github.com/Perl/perl5/commit/6abfedb04644697b18271a2c702dde305749f57a<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs: tweaks following code review<br/><br/>The many commits in this branch have completely rewritten perlxs.pod.<br/>This commit applies all the minor tweaks suggested by reviewers.<br/><br/>(It was far too much like hard work to try and update each individual<br/>commit with the various changes.)<br/><br/><br/> Commit: 45673ef5d75d1e58f576cb8206b96f8e98000710<br/> https://github.com/Perl/perl5/commit/45673ef5d75d1e58f576cb8206b96f8e98000710<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-12 (Fri, 12 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs: more tweaks following code review<br/><br/>The many commits in this branch have completely rewritten perlxs.pod.<br/>This commit applies a second set of minor tweaks suggested by reviewers.<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/4f3cd1361655...45673ef5d75d<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65358.html Fri, 12 Dec 2025 14:57:54 +0000 [Perl/perl5] 55c5b5: RMG - No more update of perlweb for BLEAD-POINT by Thibault Duponchelle via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 55c5b505cb6ecaf868f1326432801de3a67c9943<br/> https://github.com/Perl/perl5/commit/55c5b505cb6ecaf868f1326432801de3a67c9943<br/> Author: Thibault DUPONCHELLE &lt;[email protected]&gt;<br/> Date: 2025-12-11 (Thu, 11 Dec 2025)<br/><br/> Changed paths:<br/> M Porting/release_managers_guide.pod<br/><br/> Log Message:<br/> -----------<br/> RMG - No more update of perlweb for BLEAD-POINT<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65357.html Thu, 11 Dec 2025 09:57:42 +0000 [Perl/perl5] 34bbff: RMG - Link reference commit in section Bump theve... by Thibault Duponchelle via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 34bbffc475fff2abb4bf857b8975281ae6dfe5c1<br/> https://github.com/Perl/perl5/commit/34bbffc475fff2abb4bf857b8975281ae6dfe5c1<br/> Author: Thibault DUPONCHELLE &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M Porting/release_managers_guide.pod<br/><br/> Log Message:<br/> -----------<br/> RMG - Link reference commit in section Bump the version number<br/><br/>Co-authored-by: Eric Herman &lt;[email protected]&gt;<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65356.html Wed, 10 Dec 2025 16:49:14 +0000 [Perl/perl5] 509e33: mathoms.c: Add a few coments by Karl Williamson via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 509e33b8716f2eef4f4b4d8334de4317531c0bdf<br/> https://github.com/Perl/perl5/commit/509e33b8716f2eef4f4b4d8334de4317531c0bdf<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M mathoms.c<br/><br/> Log Message:<br/> -----------<br/> mathoms.c: Add a few coments<br/><br/><br/> Commit: 9d8dbcc0beda9176883aa1bd6b751def7f7d17e3<br/> https://github.com/Perl/perl5/commit/9d8dbcc0beda9176883aa1bd6b751def7f7d17e3<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M proto.h<br/> M regen/embed.pl<br/><br/> Log Message:<br/> -----------<br/> regen/embed.pl: Don&#39;t create prototype for private macros<br/><br/>Prior to this commit, a commented-out prototype was created for all<br/>macros that we have argument and return type information for. This<br/>might be useful information for a reader of proto.h.<br/><br/>This commits stops doing this for private macros. It makes a future<br/>commit slightly easier, and I&#39;m unsure of the usefulness of this anyway.<br/>But I could be persuaded otherwise.<br/><br/><br/> Commit: eac6222943a92d0fe32cd359bc6eb12cba140784<br/> https://github.com/Perl/perl5/commit/eac6222943a92d0fe32cd359bc6eb12cba140784<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M proto.h<br/> M regen/embed.pl<br/><br/> Log Message:<br/> -----------<br/> regen/embed.pl: Don&#39;t create prototype for weird macros<br/><br/>Where &#39;weird&#39; is defined as meaning something where the normal rules<br/>don&#39;t apply, so something we generate is unlikely to be correct.<br/><br/>This only affects one element, and it uses aTHX in a way that is<br/>incompatible with it being automated.<br/><br/><br/> Commit: 2444829c88e91c6e4d1f5b1283233a026dea347e<br/> https://github.com/Perl/perl5/commit/2444829c88e91c6e4d1f5b1283233a026dea347e<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M proto.h<br/> M regen/embed.pl<br/><br/> Log Message:<br/> -----------<br/> embed.pl: enum and union are like struct in parameters<br/><br/>These keywords all need another word to indicate the parameter type.<br/>Previously only &#39;struct&#39; was considered to have.<br/><br/>This changed showed an error in one entry embed.fnc, which is also<br/>corrected in this commit.<br/><br/><br/> Commit: 32aaa22eec0a2a4e403b010518b39801679776d4<br/> https://github.com/Perl/perl5/commit/32aaa22eec0a2a4e403b010518b39801679776d4<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/><br/> Log Message:<br/> -----------<br/> embed.fnc: Drop Perl_ on do_aexec my_stat my_lstat<br/><br/>These macros are not for external use, so don&#39;t need a Perl_ prefix<br/><br/><br/> Commit: 838b774823624d57f1b2a1369aa0d423e440eb57<br/> https://github.com/Perl/perl5/commit/838b774823624d57f1b2a1369aa0d423e440eb57<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M hv.h<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> Move hv_stores() declaration from embed.fnc to hv.h<br/><br/>This is required for the next few commits that start automatically<br/>creating long Perl_name functions for the elements in embed.fnc that are<br/>macros and don&#39;t already have them in the source.<br/><br/>Only macros can take a parameter that has to be a literal string, so<br/>don&#39;t fit with the next few commits. This is the only case in embed.fnc<br/>like that, so I&#39;m deferring dealing with it for now.<br/><br/><br/> Commit: 3abbf2e1b897a9339dffed87699a0752ef9b629d<br/> https://github.com/Perl/perl5/commit/3abbf2e1b897a9339dffed87699a0752ef9b629d<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/><br/> Log Message:<br/> -----------<br/> embed.fnc: free_c_backtrace is only Perl_free_c_backtrace<br/><br/><br/> Commit: 9df1c067a997d2510c7e898ff968d2c55f939caa<br/> https://github.com/Perl/perl5/commit/9df1c067a997d2510c7e898ff968d2c55f939caa<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> Remove const char * const return value<br/><br/>A function can&#39;t return something of that type, but this has always been<br/>a macro, so this hasn&#39;t been caught.<br/><br/><br/> Commit: 1c0e0dceeb1cc405db3e1d50925e413c27771ac3<br/> https://github.com/Perl/perl5/commit/1c0e0dceeb1cc405db3e1d50925e413c27771ac3<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M handy.h<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> Three macros are used in perl extensions<br/><br/>They were marked as core-only.<br/><br/><br/> Commit: 2635eab6d1ef7dcd3d7e4ce408f8a30c108f71b4<br/> https://github.com/Perl/perl5/commit/2635eab6d1ef7dcd3d7e4ce408f8a30c108f71b4<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M regen/embed.pl<br/><br/> Log Message:<br/> -----------<br/> regen/embed.pl: Move declaration<br/><br/>Future commits make the new location a better choice<br/><br/><br/> Commit: 3783dac29fd28b8fb3695bbb3b2483833e211737<br/> https://github.com/Perl/perl5/commit/3783dac29fd28b8fb3695bbb3b2483833e211737<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M regen/embed.pl<br/><br/> Log Message:<br/> -----------<br/> regen/embed.pl: Move declaration to first use<br/><br/><br/> Commit: 92dcf59a90bfbb545599098d7043c96abb783ee5<br/> https://github.com/Perl/perl5/commit/92dcf59a90bfbb545599098d7043c96abb783ee5<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M embed.h<br/> M perl.h<br/> M regen/embed.pl<br/><br/> Log Message:<br/> -----------<br/> Gain control of macro namespace visibility<br/><br/>This commit adds the capability to undefine macros that are visible to<br/>XS code but shouldn&#39;t be. This can be used to stop macro namespace<br/>pollution by perl.<br/><br/>It works by changing embed.h to have two modes, controlled by a #ifdef<br/>that is set by perl.h. perl.h now #includes embed.h twice. The first<br/>time works as it always has. The second sets the #ifdef, and causes<br/>embed.h to #undef the macros that shouldn&#39;t be visible. This call is<br/>just before perl.h returns to its includer, so that these macros have<br/>come and gone before the file that #included perl.h is affected by them.<br/>It comes after the inline headers get included, so they have access to<br/>all the symbols that are defined.<br/><br/>The list of macros is determined by the visibility given by the apidoc<br/>lines documenting them, plus several exception lists that allow a symbol<br/>to be visible even though it is not documented as such.<br/><br/>In this commit, the main exception list contains everything that is<br/>currently visible outside the Perl core, so this should not break any<br/>code. But it means that the visibility control is established for<br/>future changes to our code base. New macros will not be visible except<br/>when documented as needing to be such. We can no longer inadvertently<br/>add new names to pollute the user&#39;s.<br/><br/>I expect that over time, the exception list will become smaller, as we<br/>go through it and remove the items that really shouldn&#39;t be visible. We<br/>can then see via smoking if someone is actually using them, and either<br/>decide that these should be visible, or work with the module author for<br/>another way to accomplish their needs. (I would hope this would lead to<br/>proper documentation of the ones that need to be visible.)<br/><br/>There are currently four lists of symbols.<br/><br/>One list is for symbols that are used by libc functions, and that Perl<br/>may redefine (usually so that code doesn&#39;t have to know if it is running<br/>on a platform that is lacking the given feature.) The algorithm added<br/>here catches most of these and keeps them visible, but there are a few<br/>items that currently must be manually listed.<br/><br/>A second list is of symbols that the re extension to Perl requires, but<br/>no one else needs to. This list is currently empty, as everything<br/>initially is in the main exception list.<br/><br/>A third list is for items that other Perl extensions require, but no one<br/>else needs to. This list is currently empty, as everything initially is<br/>in the main exception list.<br/><br/>The final list is for items that currently are visible to the whole<br/>world. It contains thousands of items. This list should be examined<br/>for:<br/><br/> 1) Names that shouldn&#39;t be so visible; and<br/> 2) Names that need to remain visible but should be changed so they<br/> are less likely to clash with anything the user might come up<br/> with.<br/><br/>I have wanted this ability to happen for a long time; and now things<br/>have come together to enable it.<br/><br/>This allows us to have a clear-cut boundary with CPAN.<br/><br/>It means you can add macros that have internal-only use without having<br/>to worry about making them likely not to clash with user names.<br/><br/>It shows precisely in one place what our names are that are visible to<br/>CPAN.<br/><br/><br/> Commit: b847495def21301a78c7aad050b8d47d51482258<br/> https://github.com/Perl/perl5/commit/b847495def21301a78c7aad050b8d47d51482258<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M regen/HeaderParser.pm<br/> M regen/embed.pl<br/><br/> Log Message:<br/> -----------<br/> Macros guarded by some #ifdef&#39;s aren&#39;t globally visible<br/><br/>The previous commit undefines macros that aren&#39;t supposed to be visible<br/>to XS code. But, to avoid any possible breakage, it creates an<br/>exception list of symbols that may have been visible, and leaves them<br/>so. The goal is to stop the list from growing as new code is developed,<br/>and to shorten the list by various means.<br/><br/>This is the first commit to do that, by looking to see if any symbols<br/>aren&#39;t actually externally visible because they are guarded by #ifdef&#39;s<br/>that evaluate to false. For example a symbol that is #defined only if<br/>PERL_CORE is defined won&#39;t be visible, and need not be on the exception<br/>list.<br/><br/>This cuts almost 30% off the initial list.<br/><br/><br/> Commit: ebbe6ac0f7628af109f6d3fdcc0bc859c8236ce8<br/> https://github.com/Perl/perl5/commit/ebbe6ac0f7628af109f6d3fdcc0bc859c8236ce8<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M embed.h<br/> M regen/embed.pl<br/><br/> Log Message:<br/> -----------<br/> Remove a few more macros from being visible to XS code<br/><br/>These are a few macros dealing with inversion lists that were never<br/>intended to be visible to general XS code, and they actually can&#39;t be in<br/>use in cpan because the mechanisms to create inversion lists are private<br/>to perl.<br/><br/><br/> Commit: 7e1ae0c850febc62d152ad00d44c48954a6b66cc<br/> https://github.com/Perl/perl5/commit/7e1ae0c850febc62d152ad00d44c48954a6b66cc<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-10 (Wed, 10 Dec 2025)<br/><br/> Changed paths:<br/> M embed.h<br/> M regen/embed.pl<br/><br/> Log Message:<br/> -----------<br/> Remove SBOX case statements from external visibility<br/><br/>I&#39;m pretty sure there is no use case for these, and very unlikely to<br/>have any actual uses.<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/c0b8ab1ec691...7e1ae0c850fe<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65355.html Wed, 10 Dec 2025 15:50:45 +0000 [Perl/perl5] 6ae61b: 4 by Karl Williamson via perl5-changes Branch: refs/heads/smoke-me/khw-scan_num<br/> Home: https://github.com/Perl/perl5<br/> Commit: 6ae61b4213a3f2c5ceeb72178414ab55f60e124c<br/> https://github.com/Perl/perl5/commit/6ae61b4213a3f2c5ceeb72178414ab55f60e124c<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> 4<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65354.html Mon, 08 Dec 2025 22:20:49 +0000 [Perl/perl5] 4e0f1e: embed.fnc: Use correct name for formalparameter by Karl Williamson via perl5-changes Branch: refs/heads/smoke-me/khw-scan_num<br/> Home: https://github.com/Perl/perl5<br/> Commit: 4e0f1ed4b7fb85e604e01e54e0694b17df1fec14<br/> https://github.com/Perl/perl5/commit/4e0f1ed4b7fb85e604e01e54e0694b17df1fec14<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> embed.fnc: Use correct name for formal parameter<br/><br/>The prototype here did not match the actual function<br/><br/><br/> Commit: 02eea7664a2b28c93c1240e1892bf5ce4b41038e<br/> https://github.com/Perl/perl5/commit/02eea7664a2b28c93c1240e1892bf5ce4b41038e<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M inline.h<br/> M numeric.c<br/> M perl.h<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> Inline Perl_grok_(bin|oct|hex)<br/><br/><br/> Commit: 149403bb583e627a351b3dadb1e8fe117434d546<br/> https://github.com/Perl/perl5/commit/149403bb583e627a351b3dadb1e8fe117434d546<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M inline.h<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> XXX Add grok_bin_hex()<br/><br/>grok_bin() and grok_hex() differ from grok_oct() in that they optionally<br/>accept a leading 0x or 0b, based on a flag. Then they all share common<br/>code. This commit splits out the check for the leading 0[bx] into a<br/>separate function.<br/><br/><br/> Commit: 7b31255c4a6d06e287fa34a643f3f76b9c532615<br/> https://github.com/Perl/perl5/commit/7b31255c4a6d06e287fa34a643f3f76b9c532615<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Add two UNLIKELY()s<br/><br/>Underscores in numbers are much less common than digits, and its<br/>unlikely that a number will begin with all zero&#39;s and underscores<br/><br/><br/> Commit: db452f0554f4d1f308770ddf2973eaf05b3d22e2<br/> https://github.com/Perl/perl5/commit/db452f0554f4d1f308770ddf2973eaf05b3d22e2<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Add/revise some comments<br/><br/>And reflow. This is in preparation for the next commit.<br/><br/><br/> Commit: 09ceb17bedc6b84877190689a74ef904f3b110b6<br/> https://github.com/Perl/perl5/commit/09ceb17bedc6b84877190689a74ef904f3b110b6<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Speed up overflow detection<br/><br/>We can compute outside the loop the exact value at which the next<br/>iteration wil overflow, saving some operations<br/><br/><br/> Commit: fa84f11a0b0ce9fb6c9627fc25e2b2e651ba2434<br/> https://github.com/Perl/perl5/commit/fa84f11a0b0ce9fb6c9627fc25e2b2e651ba2434<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Improve speed, precision<br/><br/>This replaces a floating multiply each loop iteration with an integer<br/>increment, plus after the loop completes, a call to ldexp() or pow().<br/><br/>Most of the floating multiplies are done on integral values, so<br/>not much precision is lost, but this gets it down to just one<br/>precision-losing operation.<br/><br/><br/> Commit: 7def20c12216eb778aa589f03035db3811ef8568<br/> https://github.com/Perl/perl5/commit/7def20c12216eb778aa589f03035db3811ef8568<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Macroize duplicated code<br/><br/>This is now complicated enough to benefit being placed in a macro<br/>instead of duplicating it.<br/><br/><br/> Commit: 611a8db0aa65cbd916250666d5b6cb61cb6ca30c<br/> https://github.com/Perl/perl5/commit/611a8db0aa65cbd916250666d5b6cb61cb6ca30c<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M perl.h<br/> M pp.c<br/><br/> Log Message:<br/> -----------<br/> Add definitions for [IU}V_BITS to perl.h<br/><br/>replacing the pp.c definition of IV_BITS<br/><br/><br/> Commit: 7fef94ae1af51155c7f40b9d211b2a0fc6adf7ca<br/> https://github.com/Perl/perl5/commit/7fef94ae1af51155c7f40b9d211b2a0fc6adf7ca<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Eke more precision when overflows<br/><br/>The algorithm for dealing with input that overflows a UV is to parse in<br/>batches that don&#39;t overflow. This means when we would otherwise<br/>overflow the UV, we store the unoverflowed value in an NV, and start<br/>over with the next batch, combining that with the first batch at the end<br/>or when it too overflows. This minimizes the number of floating point<br/>operations.<br/><br/>But on platforms where a UV contains more bits than an NV significand,<br/>that first batch when stored loses precision. This is typical on a<br/>64-bit machine using IEEE 754 double precision NVs, which have 53 bits<br/>of precision.<br/><br/>This precision loss can be avoided by stopping accumulating the first<br/>batch just before it would overflow the significand. That effectively<br/>is what this commit does.<br/><br/>Actually it is a bit more complicated. Instead of stopping there, it<br/>adds a checkpoint and goes on. If the final result doesn&#39;t overflow the<br/>UV, the checkpoint is simply ignored. But if it does overflow, the code<br/>returns to the checkpoint and creates a first batch from the data as of<br/>there, and reparses those typically few bytes of input (11 bits is 2-3<br/>hex digits) as the first bytes of the second batch.<br/><br/><br/> Commit: 3db8d12edb73e5286b43b4ea89b2d5dbfab2754a<br/> https://github.com/Perl/perl5/commit/3db8d12edb73e5286b43b4ea89b2d5dbfab2754a<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Move error handling to outside loop<br/><br/>This makes the loop occupy less memory, but it&#39;s mainly for the next<br/>commit which will remove a conditional each time through the loop, and<br/>the tests want the error messages displayed in a particular order.<br/><br/><br/> Commit: dd5e2a76b1b61c1370a7b5c739ddad62269a1ee6<br/> https://github.com/Perl/perl5/commit/dd5e2a76b1b61c1370a7b5c739ddad62269a1ee6<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> debug<br/><br/><br/> Commit: a27b879dc1697f9fdd0a89f6dde858a973856a8c<br/> https://github.com/Perl/perl5/commit/a27b879dc1697f9fdd0a89f6dde858a973856a8c<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> rm debug<br/><br/><br/> Commit: fdc0e2641ed70e6a018eb35bb4c635f1e4361fb4<br/> https://github.com/Perl/perl5/commit/fdc0e2641ed70e6a018eb35bb4c635f1e4361fb4<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Move overflow notification outside loop<br/><br/>There are several code section that deal with overflow; this allows some<br/>of them to be combined, in future commits<br/><br/><br/> Commit: be2c7f40d2c55f0a2b678c11fe2da997d7a5d932<br/> https://github.com/Perl/perl5/commit/be2c7f40d2c55f0a2b678c11fe2da997d7a5d932<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Combine two overflow handling sections<br/><br/><br/> Commit: 576ce40db2462def08e82070b612d2d5b2f5105f<br/> https://github.com/Perl/perl5/commit/576ce40db2462def08e82070b612d2d5b2f5105f<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Cleanup the function end code<br/><br/>This rationalizes a bit more the code at the end of the function to make<br/>it a bit more readable.<br/><br/><br/> Commit: 5a9d382210fab2ce5a5668647865d5a085e8a80a<br/> https://github.com/Perl/perl5/commit/5a9d382210fab2ce5a5668647865d5a085e8a80a<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Some more function termination cleanup<br/><br/>This moves some code into an else, and replaces it with an UNLIKELY.<br/><br/>That could be eliminated if we didn&#39;t care about the order the warning<br/>messages are raised, but the test suite does test for a particular<br/>order, so I&#39;m leaving it as-is.<br/><br/><br/> Commit: f944ab905fc119159af965002522dc3e6b04cfce<br/> https://github.com/Perl/perl5/commit/f944ab905fc119159af965002522dc3e6b04cfce<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M inline.h<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Add ability to discard not overflow<br/><br/>This will be used in a future commit<br/><br/><br/> Commit: 264257aa033ebfba1c3a8028d1fe41d1718ec506<br/> https://github.com/Perl/perl5/commit/264257aa033ebfba1c3a8028d1fe41d1718ec506<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Macroize common expression<br/><br/>This is in preparation for a future commit where the expression will<br/>change, and this way, we can explain it in one place<br/><br/><br/> Commit: 2aa3b02ba49745eb63531557bdd15d2a61ea7b2f<br/> https://github.com/Perl/perl5/commit/2aa3b02ba49745eb63531557bdd15d2a61ea7b2f<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_oct_bin_hex: Change OR to addition<br/><br/>Currently an OR is all that is needed as a shift is used to make space<br/>for the next digit. But a future commit will change that so that we<br/>will need to add the new digit, not just OR it<br/><br/><br/> Commit: f69a4a158a4eadf6b9e7fa24e87fcd7b2c5a36a1<br/> https://github.com/Perl/perl5/commit/f69a4a158a4eadf6b9e7fa24e87fcd7b2c5a36a1<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M inline.h<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> shift1,2<br/><br/><br/> Commit: d4a1145ba31b99d59c99b2354cb29fcdb091981b<br/> https://github.com/Perl/perl5/commit/d4a1145ba31b99d59c99b2354cb29fcdb091981b<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Move declaration<br/><br/>A future commit will want it earlier<br/><br/><br/> Commit: f1c312542abede9beb028d6c8c438758bc558045<br/> https://github.com/Perl/perl5/commit/f1c312542abede9beb028d6c8c438758bc558045<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Save expression in a variable<br/><br/>The next commit will reference this in multiple places<br/><br/><br/> Commit: b107a3fe8360ecf5c2380af8dc03abd9ed7151d6<br/> https://github.com/Perl/perl5/commit/b107a3fe8360ecf5c2380af8dc03abd9ed7151d6<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Also accept decimal<br/><br/><br/> Commit: 2a78847ca112ddf63bda18aaa0615ca4ef4300c1<br/> https://github.com/Perl/perl5/commit/2a78847ca112ddf63bda18aaa0615ca4ef4300c1<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> use-decimal<br/><br/><br/> Commit: a9728e86876d13e889e0a21e9a530f74053c46cb<br/> https://github.com/Perl/perl5/commit/a9728e86876d13e889e0a21e9a530f74053c46cb<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M inline.h<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> Rename grok_bin_oct_hex()<br/><br/>It now also accepts decimal, so that name no longer is appropriate.<br/>grok_uint_by_base() is what I chose.<br/><br/><br/> Commit: ea27df71a180fab982de6d472418ab5da834ef50<br/> https://github.com/Perl/perl5/commit/ea27df71a180fab982de6d472418ab5da834ef50<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> XXX fnc changed earlier grok_uint_by_base: Change name of formal parameter<br/><br/>The new name is clearer that this is passed to a function to look<br/>something up.<br/><br/><br/> Commit: 17f8a602d0c057992d95d7ef3463beb9438153f4<br/> https://github.com/Perl/perl5/commit/17f8a602d0c057992d95d7ef3463beb9438153f4<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Combine an if with its else<br/><br/>By changing the conditional, the two branches can be combined to avoid<br/>some duplication.<br/><br/><br/> Commit: 0996159d1e6a4827d3911db45b75170618729008<br/> https://github.com/Perl/perl5/commit/0996159d1e6a4827d3911db45b75170618729008<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Clean up loop some<br/><br/>As the comments say, this loop is &quot;wonky&quot;. But it doesn&#39;t have to be as<br/>wonky as it is. This commit reverses the meaning of some conditionals<br/>so that when true they exit the loop. And this allows the removal of a<br/>&#39;break&#39; just at the end of the loop scope, making the loop much more<br/>conventional.<br/><br/>In reversing the meaning, I split some off into more conditionals. This<br/>makes it easier to understand, and prepares for a future commit.<br/><br/><br/> Commit: 25be079205ecdf63b662a8fd0f9fd327f85f64ab<br/> https://github.com/Perl/perl5/commit/25be079205ecdf63b662a8fd0f9fd327f85f64ab<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Move declaration until needed<br/><br/>This code may not need to get executed; so move it until it is needed.<br/><br/><br/> Commit: c182b3d6260c9a009330dbeba0a7100f0d5eb3c1<br/> https://github.com/Perl/perl5/commit/c182b3d6260c9a009330dbeba0a7100f0d5eb3c1<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Optimize for more likely case<br/><br/>This changes the code to prefer the case where the input is a string<br/>without underscores that contains 8 or fewer digits in the given base.<br/>Doing so eliminates two conditionals from what I think is what the vast<br/>majority of calls to this function look like.<br/><br/>This is accomplished in this commit by making the default: case for at<br/>least 9 digits and adds a case: for 8. There is no need for anything<br/>then but to return for any string 8 or fewer digit characters long.<br/><br/>The default does try to handle leading zeros efficiently by having a<br/>tight loop to strip them off.<br/><br/><br/> Commit: 3263805341152b3464e8b354e19f247a41699f7c<br/> https://github.com/Perl/perl5/commit/3263805341152b3464e8b354e19f247a41699f7c<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Round discarded digits<br/><br/>When remaining digits are discarded instead of overflowing, this commit<br/>causes the returned non-overflowed value to be rounded (towards even)<br/>instead of truncated.<br/><br/>This will be useful when future commits cause this function to be called<br/>to convert a string of numbers following a decimal point. Instead of<br/>truncating the final significant value, it will be rounded.<br/><br/><br/> Commit: b1180f1606d35ebd487ea5e88dd90f47975a6e4e<br/> https://github.com/Perl/perl5/commit/b1180f1606d35ebd487ea5e88dd90f47975a6e4e<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> XXX grok_uint_by_base: Outdent lines<br/><br/><br/> Commit: 518058522419c6a1f0949f017135d51dea56d893<br/> https://github.com/Perl/perl5/commit/518058522419c6a1f0949f017135d51dea56d893<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M inline.h<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Allow sequential underscores<br/><br/>For one future use of this function, multiple consecutive underscores<br/>are tolerated. This prepares this function for this use.<br/><br/><br/> Commit: 78c9bbb5ffc5137b917f768fd9bccbaa63cf1f59<br/> https://github.com/Perl/perl5/commit/78c9bbb5ffc5137b917f768fd9bccbaa63cf1f59<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M inline.h<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Allow caller to specify overflow bits<br/><br/>Usually this will be UV_BITS to allow something up to UV_MAX, but a<br/>future use will want this to be able to be smaller<br/><br/><br/> Commit: eee67839e43327c6d8c69124d1960f35bbe7e9bb<br/> https://github.com/Perl/perl5/commit/eee67839e43327c6d8c69124d1960f35bbe7e9bb<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> pod<br/><br/><br/> Commit: ca3cfc43023bf20c2f68cbd66a1e0215beec0919<br/> https://github.com/Perl/perl5/commit/ca3cfc43023bf20c2f68cbd66a1e0215beec0919<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M inline.h<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> digit-count<br/><br/><br/> Commit: 977690d67679b0d4ac1bf867c14982766ed9024c<br/> https://github.com/Perl/perl5/commit/977690d67679b0d4ac1bf867c14982766ed9024c<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> XXX unsure LIKELY<br/><br/><br/> Commit: b6f2c7f86e75837b38c7bfb89e6def5e94577697<br/> https://github.com/Perl/perl5/commit/b6f2c7f86e75837b38c7bfb89e6def5e94577697<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/> M perl.h<br/><br/> Log Message:<br/> -----------<br/> notes<br/><br/><br/> Commit: bb19d7e9b0729700eca39745c3ba30fc8504482a<br/> https://github.com/Perl/perl5/commit/bb19d7e9b0729700eca39745c3ba30fc8504482a<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> uintmax_t<br/><br/><br/> Commit: 134774c9b5c017f70580f3da31a01530acc85169<br/> https://github.com/Perl/perl5/commit/134774c9b5c017f70580f3da31a01530acc85169<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> toke.c: scan_num: %c format to print a non digit byte<br/><br/>This panic croak was wrong, should it ever get executed. Any byte that<br/>reaches it isn&#39;t a digit, so %d would give wrong results.<br/><br/><br/> Commit: 97e08e073eedd4b5effbb1bc6d381ced8e5cbc60<br/> https://github.com/Perl/perl5/commit/97e08e073eedd4b5effbb1bc6d381ced8e5cbc60<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Reformat/fix comments<br/><br/>These comments that gave complicated regex patterns that show the syntax<br/>of the various types of numerical constants recognized by this function<br/>had some oversights in them, and were hard to read.<br/><br/><br/> Commit: f6c0b5e190ed4b8a9a8e0d09aa6dc1ff0563acd9<br/> https://github.com/Perl/perl5/commit/f6c0b5e190ed4b8a9a8e0d09aa6dc1ff0563acd9<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Reorder case: statements in switch()<br/><br/>Move the default to the end, and the shortest to the beginning. This is<br/>in preparation for future commits.<br/><br/><br/> Commit: e98ba497ea1df71ba605c09a133aa28c19b7a519<br/> https://github.com/Perl/perl5/commit/e98ba497ea1df71ba605c09a133aa28c19b7a519<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Convert switch() to elsif series<br/><br/>By using isDIGIT(), the cases for individual digits 1-9 collapse into a<br/>single one, leaving just three possibilities, which are more clearly<br/>handled by an if and two &#39;else if&#39;s<br/><br/><br/> Commit: 2ccb12760275c990b4a5bb638598d42e078dbcfa<br/> https://github.com/Perl/perl5/commit/2ccb12760275c990b4a5bb638598d42e078dbcfa<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: indentation, reorder-comments only<br/><br/>Some blocks have been removed, so can outdent; others will be added in<br/>future commits, so indent.<br/><br/><br/> Commit: 9a1a19b66b5dafd9f1c6d1af108148376b6b51ee<br/> https://github.com/Perl/perl5/commit/9a1a19b66b5dafd9f1c6d1af108148376b6b51ee<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> toke.c: Convert do/while to modern STMT_START/END<br/><br/><br/> Commit: 7a3e8493bc776081a0c9f74c2555a35c01ce0acd<br/> https://github.com/Perl/perl5/commit/7a3e8493bc776081a0c9f74c2555a35c01ce0acd<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> numeric.c: Make output_nonportable() callable from core<br/><br/>Instead of being internal to this file.<br/><br/><br/> Commit: ac08fae4726ac8dbc6468e3dbd98ad1e7f5e8a8c<br/> https://github.com/Perl/perl5/commit/ac08fae4726ac8dbc6468e3dbd98ad1e7f5e8a8c<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Replace code by equivalent function call<br/><br/>The previous commit has made this function, long in numeric.c,<br/>available to the rest of core. The code here removed duplicated what it<br/>does. Two variables are now unused, and are removed.<br/><br/><br/> Commit: 1554f421529bf41feca8d71ffaac613854ec7742<br/> https://github.com/Perl/perl5/commit/1554f421529bf41feca8d71ffaac613854ec7742<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Macroize common code<br/><br/>This avoids repeating code snippets<br/><br/><br/> Commit: c2678c87006881b63600e9a9e628e6caf95786b4<br/> https://github.com/Perl/perl5/commit/c2678c87006881b63600e9a9e628e6caf95786b4<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Remove now irrelevant code<br/><br/>The previous commit created macros to handle underscores in a numeric<br/>constant. They changed things so adjacent underscores are all absorbed<br/>at once (and warned about). That means we no longer have to keep track<br/>of if the previous character was an underscore.<br/><br/><br/> Commit: 32ca2f8ae8631fdd0f127ef9fb426d3021cb168a<br/> https://github.com/Perl/perl5/commit/32ca2f8ae8631fdd0f127ef9fb426d3021cb168a<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Remove duplicated logic<br/><br/>The previous commit enhanced grok_bin_oct_hex to handle multiple<br/>consecutive underscores, which is all that was missing for this code to<br/>be able to call it instead of doing the same task itself.<br/><br/>This saves quite a bit of code<br/><br/><br/> Commit: 2a7485c510947bbcae6e3ef43c9bfcb1ef7837e7<br/> https://github.com/Perl/perl5/commit/2a7485c510947bbcae6e3ef43c9bfcb1ef7837e7<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Extract common code to a single place<br/><br/><br/> Commit: d6fba6b39a57203870bab8028f4865ceb359cc2e<br/> https://github.com/Perl/perl5/commit/d6fba6b39a57203870bab8028f4865ceb359cc2e<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> DEBUG<br/><br/><br/> Commit: b9de8bd8ed25c4d3c9978c90624e534b0865bad0<br/> https://github.com/Perl/perl5/commit/b9de8bd8ed25c4d3c9978c90624e534b0865bad0<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> XXX Make nonportable a switch<br/><br/><br/> Commit: edda673029c2801e8ad62bc452ff6017ebe0a5ef<br/> https://github.com/Perl/perl5/commit/edda673029c2801e8ad62bc452ff6017ebe0a5ef<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> white after grok_num<br/><br/><br/> Commit: d679e668240305a6014f4e98593531690c2099a6<br/> https://github.com/Perl/perl5/commit/d679e668240305a6014f4e98593531690c2099a6<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> frac<br/><br/><br/> Commit: 36ab005f1a7ca51c484aa9a6db1239c71cbefa9b<br/> https://github.com/Perl/perl5/commit/36ab005f1a7ca51c484aa9a6db1239c71cbefa9b<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M handy.h<br/> M inline.h<br/> M numeric.c<br/> M pod/perldiag.pod<br/> M proto.h<br/> M t/op/hexfp.t<br/> M t/op/oct.t<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> trial<br/><br/><br/> Commit: 46d9961515cabd29b3accf9a6b3a6ab01ca4c5f9<br/> https://github.com/Perl/perl5/commit/46d9961515cabd29b3accf9a6b3a6ab01ca4c5f9<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M pod/perldata.pod<br/><br/> Log Message:<br/> -----------<br/> perldata: Add details to hex, etc floats<br/><br/><br/> Commit: 63ce45dce9ea747235bb355387f02c39ef96f71e<br/> https://github.com/Perl/perl5/commit/63ce45dce9ea747235bb355387f02c39ef96f71e<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> f<br/><br/><br/> Commit: 5bd2008b9a7effcc5247f52577e3565c1192f11f<br/> https://github.com/Perl/perl5/commit/5bd2008b9a7effcc5247f52577e3565c1192f11f<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M Configure<br/> M config_h.SH<br/> M metaconfig.h<br/><br/> Log Message:<br/> -----------<br/> Configure<br/><br/><br/> Commit: 76b758e070597e12ed20112459276e19c1b7099e<br/> https://github.com/Perl/perl5/commit/76b758e070597e12ed20112459276e19c1b7099e<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M handy.h<br/> M perl.h<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> 2<br/><br/><br/> Commit: 784cf63b12f35f3118f3beac8d695b5b64eece6b<br/> https://github.com/Perl/perl5/commit/784cf63b12f35f3118f3beac8d695b5b64eece6b<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M Configure<br/><br/> Log Message:<br/> -----------<br/> f<br/><br/><br/> Commit: aba63fe5ffa1721f4c85648fa044b84289f957b2<br/> https://github.com/Perl/perl5/commit/aba63fe5ffa1721f4c85648fa044b84289f957b2<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-08 (Mon, 08 Dec 2025)<br/><br/> Changed paths:<br/> M Configure<br/> M Cross/config.sh-arm-linux<br/> M Cross/config.sh-arm-linux-n770<br/> M Porting/config.sh<br/> M configure.com<br/> M plan9/config_sh.sample<br/> M win32/config.gc<br/> M win32/config.vc<br/><br/> Log Message:<br/> -----------<br/> 3<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/c9a5117dbd72...aba63fe5ffa1<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65353.html Mon, 08 Dec 2025 20:25:20 +0000 [Perl/perl5] c0b8ab: Grammatical corrections by James E Keenan via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: c0b8ab1ec6910f423d6cf550207f108b32af8beb<br/> https://github.com/Perl/perl5/commit/c0b8ab1ec6910f423d6cf550207f108b32af8beb<br/> Author: James E Keenan &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M README.openbsd<br/><br/> Log Message:<br/> -----------<br/> Grammatical corrections<br/><br/>As reported by hmartink.<br/><br/>Fixes: GH #23933<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65352.html Mon, 08 Dec 2025 02:30:05 +0000 [Perl/perl5] 72f140: embed.fnc: Use correct name for formalparameter by Karl Williamson via perl5-changes Branch: refs/heads/smoke-me/khw-scan_num<br/> Home: https://github.com/Perl/perl5<br/> Commit: 72f140eed6b84de675a3e221cb055bfaabe07e27<br/> https://github.com/Perl/perl5/commit/72f140eed6b84de675a3e221cb055bfaabe07e27<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-04 (Thu, 04 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> embed.fnc: Use correct name for formal parameter<br/><br/>The prototype here did not match the actual function<br/><br/><br/> Commit: 5a881ccb91c3cefa724301ce0607b9c8c4889f43<br/> https://github.com/Perl/perl5/commit/5a881ccb91c3cefa724301ce0607b9c8c4889f43<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-04 (Thu, 04 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M inline.h<br/> M numeric.c<br/> M perl.h<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> Inline Perl_grok_(bin|oct|hex)<br/><br/><br/> Commit: 56255e4219d9f3083b4f708b9230572e6e0ff9a9<br/> https://github.com/Perl/perl5/commit/56255e4219d9f3083b4f708b9230572e6e0ff9a9<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-06 (Sat, 06 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M inline.h<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> XXX Add grok_bin_hex()<br/><br/>grok_bin() and grok_hex() differ from grok_oct() in that they optionally<br/>accept a leading 0x or 0b, based on a flag. Then they all share common<br/>code. This commit splits out the check for the leading 0[bx] into a<br/>separate function.<br/><br/><br/> Commit: 305de213cb4e88ca282c6e224091f0b63673d4d3<br/> https://github.com/Perl/perl5/commit/305de213cb4e88ca282c6e224091f0b63673d4d3<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-06 (Sat, 06 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Add two UNLIKELY()s<br/><br/>Underscores in numbers are much less common than digits, and its<br/>unlikely that a number will begin with all zero&#39;s and underscores<br/><br/><br/> Commit: 05a85b46974ded881cedaa86b1272ccc1d3c14e9<br/> https://github.com/Perl/perl5/commit/05a85b46974ded881cedaa86b1272ccc1d3c14e9<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Add/revise some comments<br/><br/>And reflow. This is in preparation for the next commit.<br/><br/><br/> Commit: 77cb443a431b909a186ead557672cb98b8974601<br/> https://github.com/Perl/perl5/commit/77cb443a431b909a186ead557672cb98b8974601<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Speed up overflow detection<br/><br/>We can compute outside the loop the exact value at which the next<br/>iteration wil overflow, saving some operations<br/><br/><br/> Commit: 4814771d47ef99e54b5fd1480fd06307e7a6757b<br/> https://github.com/Perl/perl5/commit/4814771d47ef99e54b5fd1480fd06307e7a6757b<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Improve speed, precision<br/><br/>This replaces a floating multiply each loop iteration with an integer<br/>increment, plus after the loop completes, a call to ldexp() or pow().<br/><br/>Most of the floating multiplies are done on integral values, so<br/>not much precision is lost, but this gets it down to just one<br/>precision-losing operation.<br/><br/><br/> Commit: 3c5324b605b12798c870cb1a587ca470a37c0780<br/> https://github.com/Perl/perl5/commit/3c5324b605b12798c870cb1a587ca470a37c0780<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Macroize duplicated code<br/><br/>This is now complicated enough to benefit being placed in a macro<br/>instead of duplicating it.<br/><br/><br/> Commit: 32be410fb67785f7e54043c02f41271c3f37f826<br/> https://github.com/Perl/perl5/commit/32be410fb67785f7e54043c02f41271c3f37f826<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M perl.h<br/> M pp.c<br/><br/> Log Message:<br/> -----------<br/> Add definitions for [IU}V_BITS to perl.h<br/><br/>replacing the pp.c definition of IV_BITS<br/><br/><br/> Commit: 3d56e5df5d195773a22394ddf1e122b6ec14a461<br/> https://github.com/Perl/perl5/commit/3d56e5df5d195773a22394ddf1e122b6ec14a461<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Eke more precision when overflows<br/><br/>The algorithm for dealing with input that overflows a UV is to parse in<br/>batches that don&#39;t overflow. This means when we would otherwise<br/>overflow the UV, we store the unoverflowed value in an NV, and start<br/>over with the next batch, combining that with the first batch at the end<br/>or when it too overflows. This minimizes the number of floating point<br/>operations.<br/><br/>But on platforms where a UV contains more bits than an NV significand,<br/>that first batch when stored loses precision. This is typical on a<br/>64-bit machine using IEEE 754 double precision NVs, which have 53 bits<br/>of precision.<br/><br/>This precision loss can be avoided by stopping accumulating the first<br/>batch just before it would overflow the significand. That effectively<br/>is what this commit does.<br/><br/>Actually it is a bit more complicated. Instead of stopping there, it<br/>adds a checkpoint and goes on. If the final result doesn&#39;t overflow the<br/>UV, the checkpoint is simply ignored. But if it does overflow, the code<br/>returns to the checkpoint and creates a first batch from the data as of<br/>there, and reparses those typically few bytes of input (11 bits is 2-3<br/>hex digits) as the first bytes of the second batch.<br/><br/><br/> Commit: 709f38456972b69506ec179c29c8a841b22fdcdb<br/> https://github.com/Perl/perl5/commit/709f38456972b69506ec179c29c8a841b22fdcdb<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Move error handling to outside loop<br/><br/>This makes the loop occupy less memory, but it&#39;s mainly for the next<br/>commit which will remove a conditional each time through the loop, and<br/>the tests want the error messages displayed in a particular order.<br/><br/><br/> Commit: 30cf2e57b835e8a903c9f9cd59d0c6049b3cf9cd<br/> https://github.com/Perl/perl5/commit/30cf2e57b835e8a903c9f9cd59d0c6049b3cf9cd<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> debug<br/><br/><br/> Commit: 61bbd5b0399b6a5e9fc9d430bef7315f45b9c663<br/> https://github.com/Perl/perl5/commit/61bbd5b0399b6a5e9fc9d430bef7315f45b9c663<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> rm debug<br/><br/><br/> Commit: f593c80ab7e5f70a233401c3b96cf03edfcfcd4f<br/> https://github.com/Perl/perl5/commit/f593c80ab7e5f70a233401c3b96cf03edfcfcd4f<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Move overflow notification outside loop<br/><br/>There are several code section that deal with overflow; this allows some<br/>of them to be combined, in future commits<br/><br/><br/> Commit: c43ff3cbd4bacb39d92c078b0fab1f7be9403461<br/> https://github.com/Perl/perl5/commit/c43ff3cbd4bacb39d92c078b0fab1f7be9403461<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Combine two overflow handling sections<br/><br/><br/> Commit: ac20a27bc48083be60349c44a67d0ea9f4933613<br/> https://github.com/Perl/perl5/commit/ac20a27bc48083be60349c44a67d0ea9f4933613<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Cleanup the function end code<br/><br/>This rationalizes a bit more the code at the end of the function to make<br/>it a bit more readable.<br/><br/><br/> Commit: 13263e18956650b9e6d0b8d9d9c89b5eb707e303<br/> https://github.com/Perl/perl5/commit/13263e18956650b9e6d0b8d9d9c89b5eb707e303<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Some more function termination cleanup<br/><br/>This moves some code into an else, and replaces it with an UNLIKELY.<br/><br/>That could be eliminated if we didn&#39;t care about the order the warning<br/>messages are raised, but the test suite does test for a particular<br/>order, so I&#39;m leaving it as-is.<br/><br/><br/> Commit: 9ad2906170fdfa53de4240f006023188841d45cd<br/> https://github.com/Perl/perl5/commit/9ad2906170fdfa53de4240f006023188841d45cd<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M inline.h<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Add ability to discard not overflow<br/><br/>This will be used in a future commit<br/><br/><br/> Commit: 63f6281f137042ea04dfa37e65f619785fdb46a1<br/> https://github.com/Perl/perl5/commit/63f6281f137042ea04dfa37e65f619785fdb46a1<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Macroize common expression<br/><br/>This is in preparation for a future commit where the expression will<br/>change, and this way, we can explain it in one place<br/><br/><br/> Commit: a1d81ab2f64cd94c0b3217397cffb86d60833c89<br/> https://github.com/Perl/perl5/commit/a1d81ab2f64cd94c0b3217397cffb86d60833c89<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_oct_bin_hex: Change OR to addition<br/><br/>Currently an OR is all that is needed as a shift is used to make space<br/>for the next digit. But a future commit will change that so that we<br/>will need to add the new digit, not just OR it<br/><br/><br/> Commit: c625d4402d93dc883784d8369c291d1a47d678a8<br/> https://github.com/Perl/perl5/commit/c625d4402d93dc883784d8369c291d1a47d678a8<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M inline.h<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> shift1,2<br/><br/><br/> Commit: 7f93a9a38109ee2cdf42ca9229960fc0b832f985<br/> https://github.com/Perl/perl5/commit/7f93a9a38109ee2cdf42ca9229960fc0b832f985<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Move declaration<br/><br/>A future commit will want it earlier<br/><br/><br/> Commit: 26a69b88c21e9437d51f34af0ea3b558eac0dc3a<br/> https://github.com/Perl/perl5/commit/26a69b88c21e9437d51f34af0ea3b558eac0dc3a<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Save expression in a variable<br/><br/>The next commit will reference this in multiple places<br/><br/><br/> Commit: 6a177879f1e181ce3c93c55fdcc588194e515c83<br/> https://github.com/Perl/perl5/commit/6a177879f1e181ce3c93c55fdcc588194e515c83<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_bin_oct_hex: Also accept decimal<br/><br/><br/> Commit: ac3c225c53dc76122e24a43821ed503809ff931c<br/> https://github.com/Perl/perl5/commit/ac3c225c53dc76122e24a43821ed503809ff931c<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> use-decimal<br/><br/><br/> Commit: d76a59e1ef7199d8c2c87a92597b6d2dcd4bdf04<br/> https://github.com/Perl/perl5/commit/d76a59e1ef7199d8c2c87a92597b6d2dcd4bdf04<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M inline.h<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> Rename grok_bin_oct_hex()<br/><br/>It now also accepts decimal, so that name no longer is appropriate.<br/>grok_uint_by_base() is what I chose.<br/><br/><br/> Commit: d6d07bc0c3495fd6d27afffddc4606bcc02d4d6c<br/> https://github.com/Perl/perl5/commit/d6d07bc0c3495fd6d27afffddc4606bcc02d4d6c<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> XXX fnc changed earlier grok_uint_by_base: Change name of formal parameter<br/><br/>The new name is clearer that this is passed to a function to look<br/>something up.<br/><br/><br/> Commit: 794d17d4da1adc34f54ee3e6e0c49234dbc6909d<br/> https://github.com/Perl/perl5/commit/794d17d4da1adc34f54ee3e6e0c49234dbc6909d<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Combine an if with its else<br/><br/>By changing the conditional, the two branches can be combined to avoid<br/>some duplication.<br/><br/><br/> Commit: fd0431973f389d56a59bf2657dd3aded79d0da96<br/> https://github.com/Perl/perl5/commit/fd0431973f389d56a59bf2657dd3aded79d0da96<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Clean up loop some<br/><br/>As the comments say, this loop is &quot;wonky&quot;. But it doesn&#39;t have to be as<br/>wonky as it is. This commit reverses the meaning of some conditionals<br/>so that when true they exit the loop. And this allows the removal of a<br/>&#39;break&#39; just at the end of the loop scope, making the loop much more<br/>conventional.<br/><br/>In reversing the meaning, I split some off into more conditionals. This<br/>makes it easier to understand, and prepares for a future commit.<br/><br/><br/> Commit: 2c298d9bbd4eff08a761f0c9d744b5691df082f5<br/> https://github.com/Perl/perl5/commit/2c298d9bbd4eff08a761f0c9d744b5691df082f5<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Move declaration until needed<br/><br/>This code may not need to get executed; so move it until it is needed.<br/><br/><br/> Commit: 8600e9cf5c33ce038b8721ea3ef82981842407a2<br/> https://github.com/Perl/perl5/commit/8600e9cf5c33ce038b8721ea3ef82981842407a2<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Optimize for more likely case<br/><br/>This changes the code to prefer the case where the input is a string<br/>without underscores that contains 8 or fewer digits in the given base.<br/>Doing so eliminates two conditionals from what I think is what the vast<br/>majority of calls to this function look like.<br/><br/>This is accomplished in this commit by making the default: case for at<br/>least 9 digits and adds a case: for 8. There is no need for anything<br/>then but to return for any string 8 or fewer digit characters long.<br/><br/>The default does try to handle leading zeros efficiently by having a<br/>tight loop to strip them off.<br/><br/><br/> Commit: a4c63ff56030a5d97865efd014e61e216ae281aa<br/> https://github.com/Perl/perl5/commit/a4c63ff56030a5d97865efd014e61e216ae281aa<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Round discarded digits<br/><br/>When remaining digits are discarded instead of overflowing, this commit<br/>causes the returned non-overflowed value to be rounded (towards even)<br/>instead of truncated.<br/><br/>This will be useful when future commits cause this function to be called<br/>to convert a string of numbers following a decimal point. Instead of<br/>truncating the final significant value, it will be rounded.<br/><br/><br/> Commit: 0870a9f212fbbcda56ddcb173ccce671ba030ce5<br/> https://github.com/Perl/perl5/commit/0870a9f212fbbcda56ddcb173ccce671ba030ce5<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> XXX grok_uint_by_base: Outdent lines<br/><br/><br/> Commit: 97cf71e197ccc027d4add3d749a10ce2218e5478<br/> https://github.com/Perl/perl5/commit/97cf71e197ccc027d4add3d749a10ce2218e5478<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M inline.h<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Allow sequential underscores<br/><br/>For one future use of this function, multiple consecutive underscores<br/>are tolerated. This prepares this function for this use.<br/><br/><br/> Commit: 9c37b7083b6a0694f4e72e28173113489824e2a3<br/> https://github.com/Perl/perl5/commit/9c37b7083b6a0694f4e72e28173113489824e2a3<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M inline.h<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> grok_uint_by_base: Allow caller to specify overflow bits<br/><br/>Usually this will be UV_BITS to allow something up to UV_MAX, but a<br/>future use will want this to be able to be smaller<br/><br/><br/> Commit: 2f0a21dcb50ed3a708fbbcf3ae4e67dfa84dc68f<br/> https://github.com/Perl/perl5/commit/2f0a21dcb50ed3a708fbbcf3ae4e67dfa84dc68f<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> pod<br/><br/><br/> Commit: ee788aa702dec627374585fe693264f49ac711d2<br/> https://github.com/Perl/perl5/commit/ee788aa702dec627374585fe693264f49ac711d2<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M inline.h<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> digit-count<br/><br/><br/> Commit: 3c25553c071e52236752c215129f0906b3658504<br/> https://github.com/Perl/perl5/commit/3c25553c071e52236752c215129f0906b3658504<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> XXX unsure LIKELY<br/><br/><br/> Commit: 4cf2f814af461900f37a801a53a66c1a77ac36b2<br/> https://github.com/Perl/perl5/commit/4cf2f814af461900f37a801a53a66c1a77ac36b2<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/> M perl.h<br/><br/> Log Message:<br/> -----------<br/> notes<br/><br/><br/> Commit: e10c82ae9208780331f7c0c00485fd7f54e8dd4a<br/> https://github.com/Perl/perl5/commit/e10c82ae9208780331f7c0c00485fd7f54e8dd4a<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> uintmax_t<br/><br/><br/> Commit: aee7b559bc5cb0749b7a157a8091bc0c2a7d7ef1<br/> https://github.com/Perl/perl5/commit/aee7b559bc5cb0749b7a157a8091bc0c2a7d7ef1<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> toke.c: scan_num: %c format to print a non digit byte<br/><br/>This panic croak was wrong, should it ever get executed. Any byte that<br/>reaches it isn&#39;t a digit, so %d would give wrong results.<br/><br/><br/> Commit: 6c7767e26faa9e89a49049775b20ff117be2db95<br/> https://github.com/Perl/perl5/commit/6c7767e26faa9e89a49049775b20ff117be2db95<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Reformat/fix comments<br/><br/>These comments that gave complicated regex patterns that show the syntax<br/>of the various types of numerical constants recognized by this function<br/>had some oversights in them, and were hard to read.<br/><br/><br/> Commit: 0e377d98b2c03a48dbd7ba60d5ba4ce68b63ec6b<br/> https://github.com/Perl/perl5/commit/0e377d98b2c03a48dbd7ba60d5ba4ce68b63ec6b<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Reorder case: statements in switch()<br/><br/>Move the default to the end, and the shortest to the beginning. This is<br/>in preparation for future commits.<br/><br/><br/> Commit: 95668c87e9c5bdebd9ecd11362fced4439e2df12<br/> https://github.com/Perl/perl5/commit/95668c87e9c5bdebd9ecd11362fced4439e2df12<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Convert switch() to elsif series<br/><br/>By using isDIGIT(), the cases for individual digits 1-9 collapse into a<br/>single one, leaving just three possibilities, which are more clearly<br/>handled by an if and two &#39;else if&#39;s<br/><br/><br/> Commit: 02f446f25ef4c08852020268439d951b5690103a<br/> https://github.com/Perl/perl5/commit/02f446f25ef4c08852020268439d951b5690103a<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: indentation, reorder-comments only<br/><br/>Some blocks have been removed, so can outdent; others will be added in<br/>future commits, so indent.<br/><br/><br/> Commit: d376d2e4e87f57b05de5573613f9a9cb037e2346<br/> https://github.com/Perl/perl5/commit/d376d2e4e87f57b05de5573613f9a9cb037e2346<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> toke.c: Convert do/while to modern STMT_START/END<br/><br/><br/> Commit: e3bff16824dd5dbcc1bd464dd859d76300142705<br/> https://github.com/Perl/perl5/commit/e3bff16824dd5dbcc1bd464dd859d76300142705<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M embed.h<br/> M numeric.c<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> numeric.c: Make output_nonportable() callable from core<br/><br/>Instead of being internal to this file.<br/><br/><br/> Commit: c79459e9eb5c72b2ed17c8f9be461bcc4a917212<br/> https://github.com/Perl/perl5/commit/c79459e9eb5c72b2ed17c8f9be461bcc4a917212<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Replace code by equivalent function call<br/><br/>The previous commit has made this function, long in numeric.c,<br/>available to the rest of core. The code here removed duplicated what it<br/>does. Two variables are now unused, and are removed.<br/><br/><br/> Commit: eb8e56b9d855060356963e82089844afb5e65b87<br/> https://github.com/Perl/perl5/commit/eb8e56b9d855060356963e82089844afb5e65b87<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Macroize common code<br/><br/>This avoids repeating code snippets<br/><br/><br/> Commit: 0b547afb5e35c1880abc1b3cea4aff1516fd741d<br/> https://github.com/Perl/perl5/commit/0b547afb5e35c1880abc1b3cea4aff1516fd741d<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Remove now irrelevant code<br/><br/>The previous commit created macros to handle underscores in a numeric<br/>constant. They changed things so adjacent underscores are all absorbed<br/>at once (and warned about). That means we no longer have to keep track<br/>of if the previous character was an underscore.<br/><br/><br/> Commit: 8a1d85eab2e555e4ed5699b0e177a67523f58620<br/> https://github.com/Perl/perl5/commit/8a1d85eab2e555e4ed5699b0e177a67523f58620<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Remove duplicated logic<br/><br/>The previous commit enhanced grok_bin_oct_hex to handle multiple<br/>consecutive underscores, which is all that was missing for this code to<br/>be able to call it instead of doing the same task itself.<br/><br/>This saves quite a bit of code<br/><br/><br/> Commit: 50836729e4e6d070ba0729d16d4cb48d41d1ad87<br/> https://github.com/Perl/perl5/commit/50836729e4e6d070ba0729d16d4cb48d41d1ad87<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> scan_num: Extract common code to a single place<br/><br/><br/> Commit: 2fe9323b032fbc28e3f03ee6dc4c926dd6fc99ca<br/> https://github.com/Perl/perl5/commit/2fe9323b032fbc28e3f03ee6dc4c926dd6fc99ca<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> DEBUG<br/><br/><br/> Commit: 0a4fc0b11e375565fae8d07605b5be5124dc8958<br/> https://github.com/Perl/perl5/commit/0a4fc0b11e375565fae8d07605b5be5124dc8958<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> XXX Make nonportable a switch<br/><br/><br/> Commit: 7b4f2c8c0daab6ada1dca83f1c6db3a8b9be794d<br/> https://github.com/Perl/perl5/commit/7b4f2c8c0daab6ada1dca83f1c6db3a8b9be794d<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> white after grok_num<br/><br/><br/> Commit: 492fc7dfcd28d74f7a878ace83ef3c89479b332d<br/> https://github.com/Perl/perl5/commit/492fc7dfcd28d74f7a878ace83ef3c89479b332d<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> frac<br/><br/><br/> Commit: c9a5117dbd7206555005f7a9907a0e9341409c3f<br/> https://github.com/Perl/perl5/commit/c9a5117dbd7206555005f7a9907a0e9341409c3f<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M handy.h<br/> M inline.h<br/> M numeric.c<br/> M pod/perldiag.pod<br/> M proto.h<br/> M t/op/hexfp.t<br/> M t/op/oct.t<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> trial<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/72f140eed6b8%5E...c9a5117dbd72<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65351.html Sun, 07 Dec 2025 19:19:50 +0000 [Perl/perl5] d5c986: Correct misspelling in inline comment by James E Keenan via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: d5c986535bafb40a8586761bd554986e1be88b1c<br/> https://github.com/Perl/perl5/commit/d5c986535bafb40a8586761bd554986e1be88b1c<br/> Author: James E Keenan &lt;[email protected]&gt;<br/> Date: 2025-12-07 (Sun, 07 Dec 2025)<br/><br/> Changed paths:<br/> M regen/warnings.pl<br/><br/> Log Message:<br/> -----------<br/> Correct misspelling in inline comment<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65350.html Sun, 07 Dec 2025 12:03:41 +0000 [Perl/perl5] by James E Keenan via perl5-changes Branch: refs/heads/goto-label-fatal<br/> Home: https://github.com/Perl/perl5<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65349.html Sat, 06 Dec 2025 23:25:07 +0000 [Perl/perl5] by James E Keenan via perl5-changes Branch: refs/heads/goto-label-jump-fatalization-20250823<br/> Home: https://github.com/Perl/perl5<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65348.html Sat, 06 Dec 2025 23:17:52 +0000 [Perl/perl5] 5863d2: Revert "handy.h: Add void * casts to memEQ,memNE" by Karl Williamson via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 5863d273902a6f74becb7a8fac8e3c8874bbcef9<br/> https://github.com/Perl/perl5/commit/5863d273902a6f74becb7a8fac8e3c8874bbcef9<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-04 (Thu, 04 Dec 2025)<br/><br/> Changed paths:<br/> M handy.h<br/><br/> Log Message:<br/> -----------<br/> Revert &quot;handy.h: Add void * casts to memEQ, memNE&quot;<br/><br/>This reverts commit 9d3980bc229750e6c07726fe529f02bf4dc6a5a5.<br/><br/>It can create problems to add casts to macros; potentially hiding real<br/>issues. These casts caused Tony Cook some lost time recently; whatever<br/>the cause for this commit isn&#39;t showing up on my box; so I&#39;ll try<br/>reverting it to see if something shows up on some other platform.<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65347.html Thu, 04 Dec 2025 20:22:49 +0000 [Perl/perl5] by David Mitchell via perl5-changes Branch: refs/heads/davem/gh23903<br/> Home: https://github.com/Perl/perl5<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65346.html Thu, 04 Dec 2025 18:43:00 +0000 [Perl/perl5] 343b97: make pregexec() handle zero-length stringsagain by David Mitchell via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 343b977ef3c2b03da4546280d57e3ce3d40a40d4<br/> https://github.com/Perl/perl5/commit/343b977ef3c2b03da4546280d57e3ce3d40a40d4<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-04 (Thu, 04 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M ext/XS-APItest/APItest.pm<br/> M ext/XS-APItest/APItest.xs<br/> M ext/XS-APItest/t/callregexec.t<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> make pregexec() handle zero-length strings again<br/><br/>GH #23903<br/><br/>In embed.fnc, commit v5.43.3-167-g45ea12db26 added SPTR, EPTR parameter<br/>modifiers to (amongst other API functions), Perl_pregexec().<br/><br/>These cause assert constraints to be added to the effect that SPTR &lt;<br/>EPTR (since the latter is supposed to be a pointer to the byte after the<br/>last character in the string).<br/><br/>This falls down for an empty string since in this case pregexec() is<br/>called with strbeg == strend.<br/><br/>This was causing an assert failure in the test suite for<br/>Package-Stash-XS.<br/><br/>The reason it wasn&#39;t noticed before is because:<br/><br/>1) pregexec() is a thin wrapper over regexec_flags();<br/><br/>2) The perl core (e.g. pp_match()) calls regexec_flags() rather than<br/> pregexec();<br/><br/>3) Package::Stash::XS has XS code which calls pregexec() directly rather<br/> than using CALLREGEXEC() (which would call regexec_flags());<br/><br/>4) In embed.fnc, regexec_flags()&#39;s strend parameter is declared as<br/> NN rather than EPTR, so it doesn&#39;t get the assert added.<br/><br/>So very little code was actually using pregexec().<br/><br/>This commit, for now, changes pregexec()&#39;s strend parameter from EPTR to<br/>EPTRQ, which has the net effect of allowing zero-length strings to be<br/>passed, and thus fixes the CPAN issue.<br/><br/>But longer term, we need to decide: is the general logic for EPTR wrong?<br/>Should the assert be SPTR &lt;= EPTR? And should EPTR be applied to<br/>regexec_flags()&#39;s strend parameter too?<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65345.html Thu, 04 Dec 2025 18:41:16 +0000 [Perl/perl5] 8e698e: perlapi: Combine grok_(bin|hex|oct) into singleentry by Karl Williamson via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 8e698ee4907b52797e37e7cf9ab70591d9af90c1<br/> https://github.com/Perl/perl5/commit/8e698ee4907b52797e37e7cf9ab70591d9af90c1<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-04 (Thu, 04 Dec 2025)<br/><br/> Changed paths:<br/> M numeric.c<br/><br/> Log Message:<br/> -----------<br/> perlapi: Combine grok_(bin|hex|oct) into single entry<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65344.html Thu, 04 Dec 2025 17:08:45 +0000 [Perl/perl5] 209bfe: handy.h: Avoid UB in nBIT_MASK() by Karl Williamson via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 209bfe369d94aa6e6d0ab65c27920b649c61cdd6<br/> https://github.com/Perl/perl5/commit/209bfe369d94aa6e6d0ab65c27920b649c61cdd6<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-04 (Thu, 04 Dec 2025)<br/><br/> Changed paths:<br/> M handy.h<br/><br/> Log Message:<br/> -----------<br/> handy.h: Avoid UB in nBIT_MASK()<br/><br/>I discovered the hard way that this is undefined behavior when operating<br/>on the widest unsigned integer type available on the platform.<br/><br/>I couldn&#39;t think of a way to write this without a branch that worked<br/>both for that condition and a zero length mask<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65343.html Thu, 04 Dec 2025 17:08:13 +0000 [Perl/perl5] 8ac8d0: Reformat XDIGIT_VALUE() by Karl Williamson via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 8ac8d0564ad9f91017d8d2bf93db71daa718817b<br/> https://github.com/Perl/perl5/commit/8ac8d0564ad9f91017d8d2bf93db71daa718817b<br/> Author: Karl Williamson &lt;[email protected]&gt;<br/> Date: 2025-12-04 (Thu, 04 Dec 2025)<br/><br/> Changed paths:<br/> M handy.h<br/><br/> Log Message:<br/> -----------<br/> Reformat XDIGIT_VALUE()<br/><br/>This makes it clearer what is going on, and may encourage compiler<br/>optimization<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65342.html Thu, 04 Dec 2025 17:07:43 +0000 [Perl/perl5] 980fad: Rename THING token when used for attributes by Paul Evans via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 980fade0ba45c1fcccc26a93f4aee086b80b357a<br/> https://github.com/Perl/perl5/commit/980fade0ba45c1fcccc26a93f4aee086b80b357a<br/> Author: Paul &quot;LeoNerd&quot; Evans &lt;[email protected]&gt;<br/> Date: 2025-12-04 (Thu, 04 Dec 2025)<br/><br/> Changed paths:<br/> M perly.act<br/> M perly.h<br/> M perly.tab<br/> M perly.y<br/> M toke.c<br/><br/> Log Message:<br/> -----------<br/> Rename THING token when used for attributes<br/><br/>Prior to this, toke.c and perly.y used the token name `THING` for a<br/>number of apparently totally unrelated reasons. While I haven&#39;t<br/>attempted to fix most of them, I did find that the one used for<br/>attribute lists is unrelated to the others, so I have renamed that to<br/>something more sensible and meaningful.<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65341.html Thu, 04 Dec 2025 10:23:20 +0000 [Perl/perl5] e5694b: embed.fnc/group_end: correct the patend pointerde... by Tony Cook via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: e5694b9e05a3e5427ca966f0a7d0dc60b5519e62<br/> https://github.com/Perl/perl5/commit/e5694b9e05a3e5427ca966f0a7d0dc60b5519e62<br/> Author: Tony Cook &lt;[email protected]&gt;<br/> Date: 2025-12-04 (Thu, 04 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M proto.h<br/> M t/op/pack.t<br/><br/> Log Message:<br/> -----------<br/> embed.fnc/group_end: correct the patend pointer decorator<br/><br/>This was incorrectly asserting the supplied string had at least one<br/>character, which could produce an assertion instead of a useful error<br/>message for the user of pack().<br/><br/>Related to #23980<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65340.html Thu, 04 Dec 2025 04:48:39 +0000 [Perl/perl5] d79d16: pp_ctl.c: Comment on 2 exceptions in pp_goto() by James E Keenan via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: d79d16960362c0639aa2ab6586aa35176975d9af<br/> https://github.com/Perl/perl5/commit/d79d16960362c0639aa2ab6586aa35176975d9af<br/> Author: James E Keenan &lt;[email protected]&gt;<br/> Date: 2025-12-03 (Wed, 03 Dec 2025)<br/><br/> Changed paths:<br/> M pp_ctl.c<br/><br/> Log Message:<br/> -----------<br/> pp_ctl.c: Comment on 2 exceptions in pp_goto()<br/><br/>Per discussion in GH #23969, neither of these two exceptions can be<br/>reached from our test suite. The exceptions address the possibility of a<br/>subroutine without a name, which is unlikely except possibly from XS<br/>code.<br/><br/>The exceptions immediately preceding each of the two upon which we are<br/>commenting have messages composed to include a subroutine&#39;s name. These<br/>exceptions can be reached from our test suite and are covered as of the<br/>time of this commit.<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65339.html Wed, 03 Dec 2025 18:23:58 +0000 [Perl/perl5] 6ff96b: Remove period from end of abstract (subject) by James E Keenan via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 6ff96b930bf8b81b1c8c8d3434f52814e307c8ff<br/> https://github.com/Perl/perl5/commit/6ff96b930bf8b81b1c8c8d3434f52814e307c8ff<br/> Author: James E Keenan &lt;[email protected]&gt;<br/> Date: 2025-12-03 (Wed, 03 Dec 2025)<br/><br/> Changed paths:<br/> M utils/pl2pm.PL<br/><br/> Log Message:<br/> -----------<br/> Remove period from end of abstract (subject)<br/><br/>This should satisfy concerns raised in GH #23939.<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65338.html Wed, 03 Dec 2025 18:23:30 +0000 [Perl/perl5] 8993af: make pregexec() handle zero-length stringsagain by David Mitchell via perl5-changes Branch: refs/heads/davem/gh23903<br/> Home: https://github.com/Perl/perl5<br/> Commit: 8993af9d1f44c04b8feaea56f46fbb33703e67a5<br/> https://github.com/Perl/perl5/commit/8993af9d1f44c04b8feaea56f46fbb33703e67a5<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-03 (Wed, 03 Dec 2025)<br/><br/> Changed paths:<br/> M embed.fnc<br/> M ext/XS-APItest/APItest.pm<br/> M ext/XS-APItest/APItest.xs<br/> M ext/XS-APItest/t/callregexec.t<br/> M proto.h<br/><br/> Log Message:<br/> -----------<br/> make pregexec() handle zero-length strings again<br/><br/>GH #23903<br/><br/>In embed.fnc, commit v5.43.3-167-g45ea12db26 added SPTR, EPTR parameter<br/>modifiers to (amongst other API functions), Perl_pregexec().<br/><br/>These cause assert constraints to be added to the effect that SPTR &lt;<br/>EPTR (since the latter is supposed to be a pointer to the byte after the<br/>last character in the string).<br/><br/>This falls down for an empty string since in this case pregexec() is<br/>called with strbeg == strend.<br/><br/>This was causing an assert failure in the test suite for<br/>Package-Stash-XS.<br/><br/>The reason it wasn&#39;t noticed before is because:<br/><br/>1) pregexec() is a thin wrapper over regexec_flags();<br/><br/>2) The perl core (e.g. pp_match()) calls regexec_flags() rather than<br/> pregexec();<br/><br/>3) Package::Stash::XS has XS code which calls pregexec() directly rather<br/> than using CALLREGEXEC() (which would call regexec_flags());<br/><br/>4) In embed.fnc, regexec_flags()&#39;s strend parameter is declared as<br/> NN rather than EPTR, so it doesn&#39;t get the assert added.<br/><br/>So very little code was actually using pregexec().<br/><br/>This commit, for now, changes pregexec()&#39;s strend parameter from EPTR to<br/>EPTRQ, which has the net effect of allowing zero-length strings to be<br/>passed, and thus fixes the CPAN issue.<br/><br/>But longer term, we need to decide: is the general logic for EPTR wrong?<br/>Should the assert be SPTR &lt;= EPTR? And should EPTR be applied to<br/>regexec_flags()&#39;s strend parameter too?<br/><br/><br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65337.html Wed, 03 Dec 2025 12:01:53 +0000 [Perl/perl5] e3b0f7: Perl_sv_backoff - only copy the buffer contentsif... by Richard Leach via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: e3b0f74b8368e302993dcab22ba6d42613dd8ef5<br/> https://github.com/Perl/perl5/commit/e3b0f74b8368e302993dcab22ba6d42613dd8ef5<br/> Author: Richard Leach &lt;[email protected]&gt;<br/> Date: 2025-12-03 (Wed, 03 Dec 2025)<br/><br/> Changed paths:<br/> M sv.c<br/><br/> Log Message:<br/> -----------<br/> Perl_sv_backoff - only copy the buffer contents if SvOK(sv)<br/><br/>When undoing an OOK, `Perl_sv_backoff` will always copy the shifted buffer<br/>contents down to the start of the buffer. That&#39;s required when the contents<br/>are live, unfortunate when the contents are defunct but tiny, and can have a<br/>noticeably bad effect on performance when the contents are defunct but large.<br/><br/>See https://github.com/Perl/perl5/issues/23967 for an example of the latter.<br/><br/>With this commit the copy will only occur if `SvOK(sv)`. This test is expected<br/>to indicate whether the buffer contents are active or defunct.<br/><br/><br/> Commit: 4342210875c1fea7efb91105b1d600cbea2cc012<br/> https://github.com/Perl/perl5/commit/4342210875c1fea7efb91105b1d600cbea2cc012<br/> Author: Richard Leach &lt;[email protected]&gt;<br/> Date: 2025-12-03 (Wed, 03 Dec 2025)<br/><br/> Changed paths:<br/> M scope.c<br/><br/> Log Message:<br/> -----------<br/> Perl_leave_scope - sv_backoff shouldn&#39;t do an unnecessay string copy<br/><br/>When a `my` SV goes out of scope, any OOK hack on its string buffer is<br/>undone by `Perl_sv_backoff`. If the SV is `SvOK`, a copy of the buffer<br/>contents will occur, but since the contents are defunct at this point,<br/>the copy is unnecessary.<br/><br/>See https://github.com/Perl/perl5/issues/23967 as an example of where<br/>this unnecessary copy had a noticeable effect on performance.<br/><br/>This commit essentially inlines the necessary parts of `sv_backoff` to<br/>avoid the copy, without excessive messing around with `sv`&#39;s flags at<br/>the call site in `Perl_leave_scope`.<br/><br/><br/> Commit: c8c2426c21c92620ec98c0e3309b732188960e5a<br/> https://github.com/Perl/perl5/commit/c8c2426c21c92620ec98c0e3309b732188960e5a<br/> Author: Richard Leach &lt;[email protected]&gt;<br/> Date: 2025-12-03 (Wed, 03 Dec 2025)<br/><br/> Changed paths:<br/> M pod/perldelta.pod<br/><br/> Log Message:<br/> -----------<br/> Perldelta for GH#23968: OOK buffer copy only when SvOK(sv)<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/dd8309d23d71...c8c2426c21c9<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65336.html Wed, 03 Dec 2025 00:28:49 +0000 [Perl/perl5] 4e9d64: pp_reverse - chunk-at-a-time string reversal by Richard Leach via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 4e9d64bf17d377e8e2f1412ef936b804fb0ee215<br/> https://github.com/Perl/perl5/commit/4e9d64bf17d377e8e2f1412ef936b804fb0ee215<br/> Author: Richard Leach &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M pp.c<br/><br/> Log Message:<br/> -----------<br/> pp_reverse - chunk-at-a-time string reversal<br/><br/>The performance characteristics of string reversal in blead is very<br/>variable depending upon the capabilities of the C compiler. Some<br/>compilers are able to vectorize some cases for better performance.<br/><br/>This commit introduces explicit reversal and swapping of whole<br/>registers at a time, which all builds seem to be able to<br/>benefit from.<br/><br/>The `_swab_xx_` macros for doing this already exist in perl.h,<br/>using them for this purpose was inspired by<br/>https://dev.to/wunk/fast-array-reversal-with-simd-j3p<br/>The bit shifting done by these macros should be portable and reasonably<br/>performant if not optimised further, but it is likely that they will<br/>be optimised to bswap, rev, movbe instructions.<br/><br/>Some performance comparisons:<br/><br/>1. Large string reversal, with different source &amp; destination buffers<br/> my $x = &quot;X&quot;x(1024*1000*10); my $y; for (0..1_000) { $y = reverse $x }<br/><br/>gcc blead:<br/> 2,388.30 msec task-clock # 0.993 CPUs utilized<br/> 10,574,195,388 cycles # 4.427 GHz<br/> 61,520,672,268 instructions # 5.82 insn per cycle<br/> 10,255,049,869 branches # 4.294 G/sec<br/><br/>clang blead:<br/> 688.37 msec task-clock # 0.946 CPUs utilized<br/> 3,161,754,439 cycles # 4.593 GHz<br/> 8,986,420,860 instructions # 2.84 insn per cycle<br/> 324,734,391 branches # 471.745 M/sec<br/><br/>gcc patched:<br/> 408.39 msec task-clock # 0.936 CPUs utilized<br/> 1,617,273,653 cycles # 3.960 GHz<br/> 6,422,991,675 instructions # 3.97 insn per cycle<br/> 644,856,283 branches # 1.579 G/sec<br/><br/>clang patched:<br/> 397.61 msec task-clock # 0.924 CPUs utilized<br/> 1,655,838,316 cycles # 4.165 GHz<br/> 5,782,487,237 instructions # 3.49 insn per cycle<br/> 324,586,437 branches # 816.350 M/sec<br/><br/>2. Large string reversal, but reversing the buffer in-place<br/> my $x = &quot;X&quot;x(1024*1000*10); my $y; for (0..1_000) { $y = reverse &quot;foo&quot;,$x }<br/><br/>gcc blead:<br/> 6,038.06 msec task-clock # 0.996 CPUs utilized<br/> 27,109,273,840 cycles # 4.490 GHz<br/> 41,987,097,139 instructions # 1.55 insn per cycle<br/> 5,211,350,347 branches # 863.083 M/sec<br/><br/>clang blead:<br/> 5,815.86 msec task-clock # 0.995 CPUs utilized<br/> 26,962,768,616 cycles # 4.636 GHz<br/> 47,111,208,664 instructions # 1.75 insn per cycle<br/> 5,211,117,921 branches # 896.018 M/sec<br/><br/>gcc patched:<br/> 1,003.49 msec task-clock # 0.999 CPUs utilized<br/> 4,298,242,624 cycles # 4.283 GHz<br/> 7,387,822,303 instructions # 1.72 insn per cycle<br/> 725,892,855 branches # 723.367 M/sec<br/><br/>clang patched:<br/> 970.78 msec task-clock # 0.973 CPUs utilized<br/> 4,436,489,695 cycles # 4.570 GHz<br/> 8,028,374,567 instructions # 1.81 insn per cycle<br/> 725,867,979 branches # 747.713 M/sec<br/><br/>3. Short string reversal, different source &amp; destination (checking performance on<br/>smaller string reversals - note: this one&#39;s vary variable due to noise)<br/> my $x = &quot;1234567&quot;; my $y; for (0..10_000_000) { $y = reverse $x }<br/><br/>gcc blead:<br/> 401.20 msec task-clock # 0.916 CPUs utilized<br/> 1,672,263,966 cycles # 4.168 GHz<br/> 5,564,078,603 instructions # 3.33 insn per cycle<br/> 1,250,983,219 branches # 3.118 G/sec<br/><br/>clang blead:<br/> 380.58 msec task-clock # 0.998 CPUs utilized<br/> 1,615,634,265 cycles # 4.245 GHz<br/> 5,583,854,366 instructions # 3.46 insn per cycle<br/> 1,300,935,443 branches # 3.418 G/sec<br/><br/>gcc patched:<br/> 381.62 msec task-clock # 0.999 CPUs utilized<br/> 1,566,807,988 cycles # 4.106 GHz<br/> 5,474,069,670 instructions # 3.49 insn per cycle<br/> 1,240,983,221 branches # 3.252 G/sec<br/><br/>clang patched:<br/> 346.21 msec task-clock # 0.999 CPUs utilized<br/> 1,600,780,787 cycles # 4.624 GHz<br/> 5,493,773,623 instructions # 3.43 insn per cycle<br/> 1,270,915,076 branches # 3.671 G/sec<br/><br/><br/> Commit: dd8309d23d7193f614a9c35def5da5bc2fed9300<br/> https://github.com/Perl/perl5/commit/dd8309d23d7193f614a9c35def5da5bc2fed9300<br/> Author: Richard Leach &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M pp.c<br/><br/> Log Message:<br/> -----------<br/> Add MSVC support for chunk-at-a-time string reversal<br/><br/>The heavy lifting for this commit was done by bulk88 in GH#23374.<br/><br/>Any deficiencies in transcription are down to richardleach. ;)<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/407267be97c8...dd8309d23d71<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65335.html Tue, 02 Dec 2025 22:44:27 +0000 [Perl/perl5] by David Mitchell via perl5-changes Branch: refs/heads/davem/re_debug<br/> Home: https://github.com/Perl/perl5<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65334.html Tue, 02 Dec 2025 21:02:23 +0000 [Perl/perl5] 407267: regex engine: split EVAL_postponed_AB state by David Mitchell via perl5-changes Branch: refs/heads/davem/re_debug<br/> Home: https://github.com/Perl/perl5<br/> Commit: 407267be97c83fd72b334a0953ab6142a27de01f<br/> https://github.com/Perl/perl5/commit/407267be97c83fd72b334a0953ab6142a27de01f<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M regcomp.sym<br/> M regexec.c<br/> M regnodes.h<br/><br/> Log Message:<br/> -----------<br/> regex engine: split EVAL_postponed_AB state<br/><br/>(This commit makes no practical changes in behaviour except for<br/>debugging output.)<br/><br/>Currently, one of the regex engine stack states is EVAL_postponed_AB.<br/><br/>When executing something like /(??{&#39;A&#39;})B/ where A and B represent<br/>general subpatterns, the engine executes the eval code, which returns<br/>the string &#39;A&#39;, which is compiled into a subpattern. Then the engine<br/>pushes an EVAL_postponed_AB state and runs the subpattern until it<br/>reaches an END op. Then it pushes *another* EVAL_postponed_AB state and<br/>runs the B part of the pattern until the final END. Then before<br/>returning success, it pops EVAL_postponed_AB off the stack (twice),<br/>executing any cleanup required. Similarly during failure, the<br/>EVAL_postponed_AB_fail action will be executed once or twice (depending<br/>on whether it failed during A or B).<br/><br/>This commit splits that state into two,<br/><br/> EVAL_postponed_A<br/> EVAL_postponed_B<br/><br/>The first is pushed before running A, the second before running B.<br/>The actions currently remain the same and share the same code; i.e. this<br/>commit just does the equivalent of:<br/><br/>- case EVAL_postponed_AB:<br/>+ case EVAL_postponed_A:<br/>+ case EVAL_postponed_B:<br/> ... cleanup code ....<br/><br/>But it makes the code easier to understand, makes debugging output<br/>clearer, and will allow in future for the cleanup behaviours to differ<br/>between A and B.<br/><br/>This commit also fixes up a few debugging messages and code comments<br/>which were still referring to &#39;EVAL_AB&#39;, which was renamed to<br/>EVAL_postponed_AB some years ago.<br/><br/><br/> Commit: 5e0ff3da62d49aca7f4ad15653d602630d049c87<br/> https://github.com/Perl/perl5/commit/5e0ff3da62d49aca7f4ad15653d602630d049c87<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/><br/> Log Message:<br/> -----------<br/> Merge branch &#39;blead&#39; into davem/re_debug<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/6dee5e6b86cb...5e0ff3da62d4<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65333.html Tue, 02 Dec 2025 21:00:50 +0000 [Perl/perl5] 676faf: regmatch(): improve savestack ix debuggingoutput by David Mitchell via perl5-changes Branch: refs/heads/blead<br/> Home: https://github.com/Perl/perl5<br/> Commit: 676faf69f7f048f041c0569cb843f62e6e605762<br/> https://github.com/Perl/perl5/commit/676faf69f7f048f041c0569cb843f62e6e605762<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-01 (Mon, 01 Dec 2025)<br/><br/> Changed paths:<br/> M regexec.c<br/><br/> Log Message:<br/> -----------<br/> regmatch(): improve savestack ix debugging output<br/><br/>Under<br/><br/> use re Debug =&gt; &#39;STATE&#39;;<br/><br/>S_regmatch() produces various bits of debugging output regarding<br/>savestack manipulation; e.g. when the current index is saved; or when<br/>the savestack is popped back to that index on success or failure etc.<br/><br/>Unfortunately that output is patchy and inconsistent. For example it<br/>often talks confusingly about &quot;Setting an EVAL scope&quot; even when an EVAL<br/>hasn&#39;t been executed. And it doesn&#39;t log all savestack manipulation.<br/><br/>After this commit there is a standard set of debugging messages, such<br/>as:<br/><br/> savestack: snapping ix=14<br/> savestack: regcppush filled in range [14..18)<br/> savestack: regcppop freed in range [14..18)<br/> savestack: freeing in range [10..14)<br/><br/>which are consistently applied.<br/><br/>There should be no change in functionality unless that specific<br/>debugging is enabled.<br/><br/><br/> Commit: 407267be97c83fd72b334a0953ab6142a27de01f<br/> https://github.com/Perl/perl5/commit/407267be97c83fd72b334a0953ab6142a27de01f<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M regcomp.sym<br/> M regexec.c<br/> M regnodes.h<br/><br/> Log Message:<br/> -----------<br/> regex engine: split EVAL_postponed_AB state<br/><br/>(This commit makes no practical changes in behaviour except for<br/>debugging output.)<br/><br/>Currently, one of the regex engine stack states is EVAL_postponed_AB.<br/><br/>When executing something like /(??{&#39;A&#39;})B/ where A and B represent<br/>general subpatterns, the engine executes the eval code, which returns<br/>the string &#39;A&#39;, which is compiled into a subpattern. Then the engine<br/>pushes an EVAL_postponed_AB state and runs the subpattern until it<br/>reaches an END op. Then it pushes *another* EVAL_postponed_AB state and<br/>runs the B part of the pattern until the final END. Then before<br/>returning success, it pops EVAL_postponed_AB off the stack (twice),<br/>executing any cleanup required. Similarly during failure, the<br/>EVAL_postponed_AB_fail action will be executed once or twice (depending<br/>on whether it failed during A or B).<br/><br/>This commit splits that state into two,<br/><br/> EVAL_postponed_A<br/> EVAL_postponed_B<br/><br/>The first is pushed before running A, the second before running B.<br/>The actions currently remain the same and share the same code; i.e. this<br/>commit just does the equivalent of:<br/><br/>- case EVAL_postponed_AB:<br/>+ case EVAL_postponed_A:<br/>+ case EVAL_postponed_B:<br/> ... cleanup code ....<br/><br/>But it makes the code easier to understand, makes debugging output<br/>clearer, and will allow in future for the cleanup behaviours to differ<br/>between A and B.<br/><br/>This commit also fixes up a few debugging messages and code comments<br/>which were still referring to &#39;EVAL_AB&#39;, which was renamed to<br/>EVAL_postponed_AB some years ago.<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/0e943cea3fce...407267be97c8<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65332.html Tue, 02 Dec 2025 20:58:51 +0000 [Perl/perl5] 694c5f: Bump ExtUtils::ParseXS to 3.61 by David Mitchell via perl5-changes Branch: refs/heads/davem/xs_ast<br/> Home: https://github.com/Perl/perl5<br/> Commit: 694c5fe954b335a2977fbe94b7bb2d695db2ed68<br/> https://github.com/Perl/perl5/commit/694c5fe954b335a2977fbe94b7bb2d695db2ed68<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Constants.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/CountLines.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Eval.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/Cmd.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/InputMap.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/Type.pm<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> Bump ExtUtils::ParseXS to 3.61<br/><br/><br/> Commit: d268acde34767d535cb67120e98ba670332fdd28<br/> https://github.com/Perl/perl5/commit/d268acde34767d535cb67120e98ba670332fdd28<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add stub top-level node<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Add ExtUtils::ParseXS::Node::XS_file class.<br/>It doesn&#39;t do a lot yet.<br/><br/><br/> Commit: ae631d9a69f7cb20a7032be23c0d1bd296eee619<br/> https://github.com/Perl/perl5/commit/ae631d9a69f7cb20a7032be23c0d1bd296eee619<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::preamble<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Add a stub Node subclass which is responsible for emitting the preamble<br/>at the start of the generated C file.<br/><br/><br/> Commit: addb8b2b48dad2bf772e0213b04249cd62863d2d<br/> https://github.com/Perl/perl5/commit/addb8b2b48dad2bf772e0213b04249cd62863d2d<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::C_part<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Add these new AST node types:<br/><br/> ExtUtils::ParseXS::Node::C_part;<br/> ExtUtils::ParseXS::Node::C_part_POD;<br/> ExtUtils::ParseXS::Node::C_part_code;<br/><br/>and add this method:<br/><br/> ExtUtils::ParseXS::Node::is_xs_module_line()<br/><br/>These are collectively used to parse and hold the &quot;C&quot; part of the XS<br/>file - i.e. everything that comes before the first MODULE line.<br/><br/>A C_part node has children consisting of C_part_POD and C_part_code<br/>nodes.<br/><br/><br/> Commit: ec74c45de0ca26f0f9df64595ba9e384287727f2<br/> https://github.com/Perl/perl5/commit/ec74c45de0ca26f0f9df64595ba9e384287727f2<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::postamble<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Add a stub Node subclass which is responsible for emitting the postamble<br/>to the C file following any C code which has been copied as-is from the<br/>C part of the XS file<br/><br/><br/> Commit: 25044e131a1d15d1da8883447c74d2a8cefd0472<br/> https://github.com/Perl/perl5/commit/25044e131a1d15d1da8883447c74d2a8cefd0472<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::global_cpp_line<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>This node stores a single &quot;#foo BAR&quot; C preprocessor line which appears<br/>within the XS part of an XS file, and which is in global (file) scope<br/>(as opposed to being within code in an XSUB or BOOT).<br/><br/><br/> Commit: 47dc181c2f0d8de8eb3bf837ffe3a8e27d995127<br/> https://github.com/Perl/perl5/commit/47dc181c2f0d8de8eb3bf837ffe3a8e27d995127<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: simplify double-negative regex<br/><br/>This condition:<br/><br/> match a line which doesn&#39;t start with anything other than &#39;#&#39;<br/><br/>can be more simply expressed as:<br/><br/> match a line which starts with &#39;#&#39;<br/><br/>They&#39;re equivalent. Or at least I think they are. This was doing my head<br/>in.<br/><br/><br/> Commit: ee9516a65953c93e7d595b7ab4e933ab7f45a2ca<br/> https://github.com/Perl/perl5/commit/ee9516a65953c93e7d595b7ab4e933ab7f45a2ca<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::BOOT<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Remove the old BOOT_handler() and replace it with a new Node type.<br/><br/><br/> Commit: 5fde9ee944d23cf436741be148f1f636a7f1bfea<br/> https://github.com/Perl/perl5/commit/5fde9ee944d23cf436741be148f1f636a7f1bfea<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: regularise BOOT processing<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>For some reason most of the file-scoped keywords (PROTOTYPES etc) are<br/>handled together in a single &#39;while /REQUIRE|PROTOTYPES|.../&#39; loop, but<br/>then BOOT is checked for separately after that loop has completed.<br/><br/>This commit just moves checking for and handling BOOT into that same<br/>loop. The only significant difference between BOOT and the other<br/>keywords is that BOOT consumes all line until the end of the paragraph,<br/>rather than stopping at the next keyword. But this shouldn&#39;t make any<br/>difference to the top-level parsing loop.<br/><br/><br/> Commit: 4c5d768c20c71fc51abd8635f0cd034c990522ec<br/> https://github.com/Perl/perl5/commit/4c5d768c20c71fc51abd8635f0cd034c990522ec<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::FALLBACK<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Remove the old FALLBACK_handler() and replace it with a new Node type.<br/>Also, change $pxs-&gt;{map_package_to_fallback_string} so that it<br/>now holds logical values (&#39;TRUE&#39; etc) rather than the actual strings<br/>to later emit into the code (&#39;&amp;PL_sv_yes&#39; etc). Then do the translation<br/>at the point the code is emitted.<br/><br/><br/> Commit: 54e27538b1f745b03f59bf1d5976be9de4f40665<br/> https://github.com/Perl/perl5/commit/54e27538b1f745b03f59bf1d5976be9de4f40665<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::REQUIRE<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Remove the old REQUIRE_handler() and replace it with a new Node type.<br/><br/><br/> Commit: 2790c5773be9de9fc7d1a28c1accdae0d7abf0f9<br/> https://github.com/Perl/perl5/commit/2790c5773be9de9fc7d1a28c1accdae0d7abf0f9<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Eval.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/> M dist/ExtUtils-ParseXS/t/001-basic.t<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: store current pkg in Node::xsub<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>In preparation for code generation to be done only after the whole file<br/>has been parsed (rather than after each XSUB is parsed, as at present),<br/>store the current package name in each Node::xsub object.<br/><br/>Then use that value, rather than $pxs-&gt;{PACKAGE_name}, to specify the<br/>package name in various bits of boot code and in the $Package variable<br/>in typemaps. This is because by the end of parsing, $pxs-&gt;{PACKAGE_name}<br/>will have the value which was extracted from the *last* seen MODULE line<br/>in the file, and not the value at the point where an XSUB was parsed.<br/><br/>Add several tests to confirm things work, and will continue to work in a<br/>few commits&#39; time, when we switch to code generation coming after *all*<br/>parsing.<br/><br/><br/> Commit: 321ee8f8a7ebe9ca35d69f72d317c0f30fde8416<br/> https://github.com/Perl/perl5/commit/321ee8f8a7ebe9ca35d69f72d317c0f30fde8416<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::include etc<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>This commit adds these new Node types:<br/><br/> ExtUtils::ParseXS::Node::include<br/> ExtUtils::ParseXS::Node::INCLUDE<br/> ExtUtils::ParseXS::Node::INCLUDE_COMMAND<br/><br/>and removes these two (now obsolete) methods:<br/><br/> INCLUDE_handler<br/> INCLUDE_COMMAND_handler<br/><br/>INCLUDE_COMMAND_handler() looks to have been a cut+paste of<br/>INCLUDE_handler() with the relevant bits changed to handle a piped<br/>command rather than a filename. I&#39;ve combined their functionality back<br/>into a single parse() method within the Node::include base class, then<br/>made Node::INCLUDE and Node::INCLUDE_COMMAND trivial subclasses which<br/>just set (or not) $self-&gt;{is_cmd} and then let the base class do all the<br/>heavy lifting.<br/><br/><br/> Commit: 9c64c8e15e0215709f092e357a34ee67923c4f4e<br/> https://github.com/Perl/perl5/commit/9c64c8e15e0215709f092e357a34ee67923c4f4e<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: remove residual FOO_handler<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Remove a branch which says &quot;if present, call new-style<br/>Node::FOO::parse(), else call old-style call FOO_handler()&quot;, since there<br/>are now AST nodes for all keywords.<br/><br/>Also update some of the code comments to remove mention of FOO_handler<br/>and that way of working.<br/><br/><br/> Commit: 620fa16460d9b359ed97455ee057895624e2d3d1<br/> https://github.com/Perl/perl5/commit/620fa16460d9b359ed97455ee057895624e2d3d1<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: remove check_keyword() method<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>This method used to be used for scanning for keywords and then invoking<br/>old-style FOO_handler()s. Replace its last usage with the new<br/>parse_keywords() method (which looks for keywords and creates<br/>Node::FOO&#39;s instead), and remove the method itself.<br/><br/>For now, create a temporary node to accumulate all the file-scoped<br/>keywords in a continuous run, and then call as_code() once at the end.<br/><br/>I.e for the input:<br/><br/> PROTOTYPES: X<br/> REQUIRE: Y<br/> ..<br/><br/>formerly a temporary Node::PROTOTYPES node was created, parsed, and then<br/>as_code() immediately called on it, then freed. Then similarly for<br/>REQUIRE etc.<br/><br/>After this commit, a temporary parent node is created, child nodes are<br/>added to it for each of PROTOTYPES, REQUIRE, etc, and finally as_code()<br/>is called once which calls as_code() for each child.<br/><br/>This is a small step in the process of moving towards deferring calling<br/>as_code() until the whole file has been read in and parsed.<br/><br/>The next commit will make the temporary parent node into something<br/>better.<br/><br/><br/> Commit: 0081492bcb4b756aa0ed8b18dbb7c49fa85b322b<br/> https://github.com/Perl/perl5/commit/0081492bcb4b756aa0ed8b18dbb7c49fa85b322b<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: add Node::as_concise method<br/><br/>For debugging: displays the node and its children in a compact style<br/>similar to perl -MO=Concise<br/><br/><br/> Commit: a16d2b475a63bd7f5a14c327f3f537c962b9aab5<br/> https://github.com/Perl/perl5/commit/a16d2b475a63bd7f5a14c327f3f537c962b9aab5<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::cpp_scope<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Add a new node type,<br/><br/> ExtUtils::ParseXS::Node::cpp_scope.<br/><br/>This node takes on responsibility for the handling the main file-scoped<br/>parsing loop, which looks for file-scoped keywords, CPP directives,<br/>the start of XSUB declarations etc. It is the main child of the top-most<br/>Node::XS_file node type.<br/><br/>The bulk of this commit consists of cutting and pasting the main parsing<br/>loop (including fetch_para()) out from ExtUtils::ParseXS::process_file()<br/>and into ExtUtils::ParseXS::Node::cpp_scope::parse().<br/><br/>For now this as a bit hacky - all tests pass, but mainly by ensuring<br/>(temporarily) that various bits of code are emitted during the parsing<br/>phase, rather than via a call to as_code(), in order to preserve the<br/>correct ordering. The next few commits will gradually clean things up.<br/><br/>This commit also converts the lexical variable $cpp_next_tmp_define<br/>into a field of the ExtUtils::ParseXS object, as it now needs accessing<br/>outside of process_file().<br/><br/>The intent for this node type is that it represents anywhere within a<br/>single C preprocessor #if / #else / #endif branch / scope. For this<br/>commit, there&#39;s only a single cpp_scope node, representing the whole XS<br/>part of the main file. Over the next few commits, further nodes will be<br/>added: during INCLUDE, which is a whole separate scope, and between CPP<br/>conditional directives. When all is complete, it will allow for simpler<br/>handling of handling &quot;duplicate&quot; XSUB declarations in different #if<br/>branches, and the XS_parse_stack mechanism can be eliminated.<br/><br/><br/> Commit: 9016336891184076fd8d591a6a0ecd57f85ccfb3<br/> https://github.com/Perl/perl5/commit/9016336891184076fd8d591a6a0ecd57f85ccfb3<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: use Node::cpp_scope for INCLUDE<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>This commit makes the INCLUDE keyword&#39;s parse() method use a new<br/>Node::cpp_scope node as a child to hold the nodes generated by parsing<br/>the included file. So whereas before those nodes were flattened into the<br/>parent list of nodes, they now form a distinct subtree.<br/><br/>This involves recursively calling Node::cpp_scope::parse() and<br/>fetch_para(), rather than the included file being processed in the main<br/>loop.<br/><br/>For example, given a main file which contains two declared XSUBs, main1<br/>and main2, and an included file with XSUBs inc1 and inc2; then<br/>previously, the parse tree would have had this nesting:<br/><br/> XS_file<br/> cpp_scope[type=main]<br/> xsub main1<br/> include<br/> xsub inc1<br/> xsub inc2<br/> xsub main2<br/><br/>whereas it now looks like:<br/><br/> XS_file<br/> cpp_scope[type=main]<br/> xsub main1<br/> include<br/> cpp_scope[type=include]<br/> xsub inc1<br/> xsub inc2<br/> xsub main2<br/><br/>This commit introduces a slight bug in terms of the order in which BOOT<br/>blocks in main and included files get emitted; this will be fixed in a<br/>few commits&#39; time.<br/><br/><br/> Commit: 9e686aa48a8ea3b5978f5fb797be96a14a6d8147<br/> https://github.com/Perl/perl5/commit/9e686aa48a8ea3b5978f5fb797be96a14a6d8147<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: rm push_parse_stack, PopFile<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Delete the ExtUtils::ParseXS methods push_parse_stack() and PopFile(),<br/>and inline their single use each in<br/>ExtUtils::ParseXS::Node::include::parse().<br/><br/>This is commit is just a crude cut+paste and s/$self/$pxs/g.<br/>Subsequent commits will clean the code up.<br/><br/><br/> Commit: b641429f637978db5aec52c0646d32719ae8627e<br/> https://github.com/Perl/perl5/commit/b641429f637978db5aec52c0646d32719ae8627e<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: INCLUDE: save state locally<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Previously whenever INCLUDE or INCLUDE_COMMAND parsed a new file, the<br/>old state (filename, old lines etc) were saved in a new entry pushed<br/>onto the XS_parse_stack.<br/><br/>The previous commit inlined this push and pull into<br/>Node::include::parse(), which now looked a bit like:<br/><br/> sub parse() {<br/> ...<br/> push @{$pxs-&gt;{XS_parse_stack}}, {<br/> type =&gt;&#39; file&#39;,<br/> Filename =&gt; $pxs-&gt;{in_filename},<br/> ...<br/> }<br/><br/> ... open new file and parse ...<br/><br/> my $data = pop @{$pxs-&gt;{XS_parse_stack}};<br/> $pxs-&gt;{in_pathname} = $data-&gt;{Filepathname};<br/> ...<br/> }<br/><br/>The intention over the next few commits is to eliminate XS_parse_stack<br/>completely: the functionality of the stack will be replaced by a nested<br/>series of Node::cpp_scope nodes within the AST. For now, this commit<br/>still pushes/pops an entry (so that #if / #endif scope analysing<br/>continues to work), but saves all the values in a local var. So after<br/>this commit, Node::include::parse() looks like:<br/><br/> sub parse() {<br/> ...<br/> push @{$pxs-&gt;{XS_parse_stack}}, { type =&gt;&#39; file&#39; };<br/> my @saved = ($pxs-&gt;{in_filename}, ...);<br/><br/> ... open new file and parse ...<br/><br/> pop @{$pxs-&gt;{XS_parse_stack}};<br/> ($pxs-&gt;{in_filename}, ...) = @saved;<br/> }<br/><br/>The rest of this commit is just general tidying up and reordering of<br/>some of the code within parse() without change in functionality. Except<br/>I also added<br/><br/> $pxs-&gt;{line_no} = [];<br/><br/>in addition to the already present<br/><br/> $pxs-&gt;{line} = [];<br/><br/><br/> Commit: 19c1a90a59891f072054f89a0cdc82247348ea2a<br/> https://github.com/Perl/perl5/commit/19c1a90a59891f072054f89a0cdc82247348ea2a<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: global_cpp_line: parse CPP line<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Make the recently-added Node::global_cpp_line::parse() method<br/>split a C preprocessor line into its components and set some flags<br/>indicating whether its part of a conditional and if so, an if or variant.<br/><br/>Save these values as new fields in the node. They will come in useful<br/>shortly.<br/><br/><br/> Commit: a0b5f3109c531173bd7eaa12cc6822d420d43d16<br/> https://github.com/Perl/perl5/commit/a0b5f3109c531173bd7eaa12cc6822d420d43d16<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/> M dist/ExtUtils-ParseXS/t/001-basic.t<br/><br/> Log Message:<br/> -----------<br/> ParseXS: fix #elif processing<br/><br/>The XS parser is supposed to be able to do basic processing of<br/>file-scoped C preprocessor directives: in particular, to handle<br/>alternative XSUB declarations; e.g.:<br/><br/> #if X<br/> void foo(short i)<br/> #elif Y<br/> void foo(long i)<br/> #else<br/> void foo(int i)<br/> #endif<br/><br/>But due to a bug present since this feature was added in perl5.003<br/>(and which no one has complained about for 29 years), the XS parser<br/>was incorrectly looking for the string &#39;#elsif&#39; rather than &#39;#elif&#39;.<br/><br/>So the above would fail, but something using only &#39;else&#39; would compile<br/>okay:<br/><br/> #if X<br/> void foo(short i)<br/> #else<br/> void foo(int i)<br/> #endif<br/><br/>This commit fixes the bug and adds some tests.<br/><br/><br/> Commit: ae5354281892081f70da55c64b277d3f5847528e<br/> https://github.com/Perl/perl5/commit/ae5354281892081f70da55c64b277d3f5847528e<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/t/001-basic.t<br/><br/> Log Message:<br/> -----------<br/> ParseXS: add more #if/#endif tests<br/><br/>Add more tests for how the XS parser processes conditional C<br/>preprocessor directives in file scope.<br/><br/>Note that some of these tests will start to fail after the next commit,<br/>which re-implements the processing. The fixups to these tests will<br/>indicate what has changed.<br/><br/><br/> Commit: 89452f0a04208bd9d90c346b2ee8f97c3a50ac9d<br/> https://github.com/Perl/perl5/commit/89452f0a04208bd9d90c346b2ee8f97c3a50ac9d<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/> M dist/ExtUtils-ParseXS/t/001-basic.t<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: reimplement #if processing<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>This commit includes a few significant changes to ParseXS which are not<br/>separable into individual commits. Some of these also involve minor<br/>changes in behaviour. Hence a rather long commit message, using<br/>pseudo-POD headers to break things up a bit and give a bit of structure.<br/><br/>=head1 Background<br/><br/>The XS parser does some basic analysis of file-scoped C preprocessor<br/>conditional directives such as #if, #elif, #endif. This is mainly for<br/>the purpose of handling otherwise duplicate XSUBs, e.g.<br/><br/> #ifdef USE_2ARG<br/><br/> int foo(int i, int j)<br/><br/> #else<br/><br/> int foo(int i)<br/><br/> #endif<br/><br/>For the above, the parser suppresses any &#39;duplicate&#39; warning, and adds a<br/>&#39;guard&#39; define at the start of each branch, such as the following in the<br/>emitted C code:<br/><br/> #ifdef USE_2ARG<br/> #define XSubPPtmpAAAA 1<br/><br/> XS_EUPXS(XS_Foo__Bar_foo) { ... }<br/><br/> #else<br/> #define XSubPPtmpAAAB 1<br/><br/> XS_EUPXS(XS_Foo__Bar_foo) { ... }<br/><br/> #endif<br/><br/>It then uses those guards in the boot code to ensure that only the<br/>correct XSUB(s) (and aliases etc) are registered:<br/><br/> #if XSubPPtmpAAAA<br/> newXS_deffile(&quot;Foo::Bar::foo&quot;, XS_Foo__Bar_foo);<br/> #endif<br/><br/> #if XSubPPtmpAAAB<br/> newXS_deffile(&quot;Foo::Bar::foo&quot;, XS_Foo__Bar_foo);<br/> #endif<br/><br/>=head1 The changes in this commit<br/><br/>=head2 Add a Node::cpp_scope node between branches<br/><br/>The XS code above was, before this commit, compiled into an AST<br/>which looked something like:<br/><br/> XS_file<br/> preamble<br/> C_part<br/> postamble<br/> cpp_scope[type=main]<br/> global_cpp_line [if]<br/> xsub<br/> global_cpp_line [else]<br/> xsub<br/> global_cpp_line [endif]<br/><br/>After this commit, all nodes between each conditional CPP line are<br/>now hung off a new cpp_scope node:<br/><br/> XS_file<br/> preamble<br/> C_part<br/> postamble<br/> cpp_scope[type=main]<br/> global_cpp_line [if]<br/> cpp_scope[type=if]<br/> xsub<br/> global_cpp_line [else]<br/> cpp_scope[type=if]<br/> xsub<br/> global_cpp_line [endif]<br/><br/>=head2 The logic to do the #if/#endif processing is completely<br/>reimplemented from scratch.<br/><br/>Formerly, @{pxs-&gt;{XS_parse_stack}} was a stack that was pushed or popped<br/>for every INCLUDE and #if/#endif, and the state about conditionals was<br/>contained in that stack.<br/><br/>After this commit, the state is instead implied by the structure of the<br/>AST; in particular, in the currently active cpp_scope node.<br/>The cpp_scope::parse() method has the fetch_para() loop, and each time<br/>it encounters an #if etc it, it creates a child cpp_scope node and<br/>recursively calls its parse() method. That method returns when it sees<br/>the end of a scope, such as encountering an #elif, #else or #endif or<br/>EOF.<br/><br/>Now, virtually all of the logic involved in maintaining &#39;#if&#39; state is<br/>in cpp_scope::parse(), and all the logic to emit &#39;#define XSubPPtmpAAAB<br/>1&#39; etc code is in cpp_scope::as_code(). This is in contrast to<br/>previously, where the logic and code generation were liberally spread<br/>around in ParseXS.pm and Node.pm<br/><br/>To facilitate this change, two fields have been added to the cpp_scope<br/>node type:<br/><br/> guard_name - the &#39;XSubPPtmpAAAB&#39; or whatever to use for this branch;<br/> seen_xsubs - hash of XSUB names seen in this branch.<br/><br/>After this commit, the data in @{pxs-&gt;{XS_parse_stack}} isn&#39;t used;<br/>the next commit will remove it completely.<br/><br/>=head2 Almost all code is now generated after parsing is finished.<br/><br/>At the start of this git branch, code was emitted after each XSUB was<br/>parsed. Now (with a few residual exceptions to be addressed shortly) the<br/>whole file is first parsed into a single AST, and *then* the top-level<br/>as_code() method is called to generate the entire C file from the AST.<br/><br/>Some of the changes in this commit represent the removal of temporary<br/>shims that preserved the old parse/emit ordering, and which are now no<br/>longer required.<br/><br/>=head1 Visible changes in behaviour<br/><br/>Although this commit is mostly intended to be just a refactoring, some<br/>changes in behaviour (in terms of what C code is generated and what<br/>warnings are issued) has occurred.<br/><br/>These are made visible in the changes this commit makes to<br/>t/001-basic.t, which deliberately contains tests for the behaviours<br/>which were about to change.<br/><br/>The changes are:<br/><br/>=head2 fewer warnings<br/><br/>The &quot;Warning: duplicate function definition&quot; warning is now emitted<br/>less often, to avoid false positives. In particular, this fixes GH<br/>19661. That ticket concerned code like<br/><br/> #if C1<br/> void foo()<br/> #endif<br/><br/> #if C2<br/> void foo()<br/> #endif<br/><br/>The logic was such that only one of C1 and C2 could ever be true<br/>(basically DBD:MariaDB was adding a missing DBI function if the<br/>installed DBI was an old one). But the XS parser can&#39;t know that.<br/>So it used to warn.<br/><br/>The big change in this commit is to now warn only for two identically<br/>named XSUBs which appear in the *same* cpp_scope. This removes false<br/>positives. It may add false negatives, but that is fairly harmless,<br/>as it just means that bad C code will be generated, and the C compiler<br/>will eventually complain anyway.<br/><br/>The guard definitions are still generated as before.<br/><br/>This change in behaviour was intentional, but was also the easiest: it<br/>meant just checking the seen_xsubs hash for the current cpp_scope node.<br/>For more complex behaviour (if you are considering implementing it), it<br/>may require having the concept of a &#39;current&#39; cpp_scope, e.g.<br/>$pxs-&gt;{cur_cpp_scope}, plus a chain of pointers from the current scope<br/>back to outer ones. (This is slightly problematic, as weak refs aren&#39;t<br/>available, as Scalar::Util may not be built yet - so it might require<br/>higher level node(s) to have a destructor which searches for those links<br/>and deletes them first) Once the chain is in place, then it&#39;s possible<br/>for a newly-added XSUB to update the parent seen_xsubs hashes too, etc.<br/><br/>=head2 The sequencing of XSubPPtmpAAA, XSubPPtmpAAB etc may change<br/><br/>Previously, the sequence of the guard defines was strictly in the order<br/>they appear in the C file. Now, ones in a nested scope come before outer<br/>ones, e.g.<br/><br/> #ifdef C1<br/> #define XSubPPtmpAAB 1<br/> # ifdef C2<br/> # define XSubPPtmpAAA 1<br/> ...<br/><br/>This should be harmless.<br/><br/>=head2 XSubPPtmpAAA etc may be placed slightly differently<br/><br/>Previously in something like<br/><br/> #ifdef C1<br/> #define X 1<br/> #define Y 2<br/><br/>the guard would be added after any other CPP lines; the above would<br/>cause this C code to be emitted:<br/><br/> #ifdef C1<br/> #define X 1<br/> #define Y 2<br/> #define XSubPPtmpAAA 1<br/><br/>but is now:<br/><br/> #ifdef C1<br/> #define XSubPPtmpAAA 1<br/> #define X 1<br/> #define Y 2<br/><br/>i.e.the guard now always comes *immediately* after the conditional at<br/>the start of the branch it will guard.<br/><br/>This should be harmless.<br/><br/><br/> Commit: 1ab2dcc845131f648cbacc80d9f745b7ea55a7ef<br/> https://github.com/Perl/perl5/commit/1ab2dcc845131f648cbacc80d9f745b7ea55a7ef<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M MANIFEST<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm<br/> R dist/ExtUtils-ParseXS/t/111-analyze_preprocessor_statements.t<br/> M dist/ExtUtils-ParseXS/t/113-check_cond_preproc_statements.t<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: remove parser stack<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>The previous commits have changed how the parser tracks file-scoped<br/> #if / #endif sections - this is now simply part of the structure<br/>of the AST.<br/><br/>So this commit removes the old parser stack, @{$pxs-&gt;{XS_parse_stack}},<br/>which used to be used to track this info. The stack was still present,<br/>but was no longer used to deduce #if state. It also removes the<br/>analyze_preprocessor_statements() method and the test file which used to<br/>test it, t/111-analyze_preprocessor_statements.t.<br/><br/>One minor regression in this commit is that a warning about about<br/>unbalanced #if/#endif within an XSUB or BOOT block used to sometimes<br/>emit an extra hint about what the problem might be:<br/><br/> print STDERR &quot; (precede it with a blank line if the matching #if is outside the function)\n&quot;<br/> if $self-&gt;{XS_parse_stack}-&gt;[-1]{type} eq &#39;if&#39;;<br/><br/>Since it&#39;s no longer trivial to check whether we&#39;re currently within a<br/>global #if/endif section, I&#39;ve kept the &#39;unbalanced&#39; warning, but<br/>deleted the additional hint.<br/><br/>If anybody wants to add it back, you&#39;ll need to add a field to the<br/>EU::PXS class such as<br/><br/> $pxs-&gt;{current_cpp_scope}<br/><br/>which keeps track of which is the current (innermost) Node::cpp_scope<br/>node being parsed. Then check_conditional_preprocessor_statements() can<br/>use it in place of the &quot;$self-&gt;{XS_parse_stack}-&gt;[-1]{type} eq &#39;if&#39;;&quot;<br/>test.<br/><br/><br/> Commit: 165e25d1d53a9fd1426987e9fbd5249c9df1db9a<br/> https://github.com/Perl/perl5/commit/165e25d1d53a9fd1426987e9fbd5249c9df1db9a<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: move main parsing into XS_file<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Move the parsing of the XS part of the main file from process_file()<br/>into cpp_scope::parse().<br/><br/>No functional change.<br/><br/><br/> Commit: 457af2777d90f9ea3260a1a432af73f02feba05e<br/> https://github.com/Perl/perl5/commit/457af2777d90f9ea3260a1a432af73f02feba05e<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::pre_boot<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Add a stub Node subclass which is responsible for emitting any C code<br/>which comes after the XS file has been parsed (and any user XSUBs<br/>emitted), but before the boot XSUB is emitted.<br/><br/>Currently this code is just concerned with adding overload methods.<br/><br/>The code has just been moved from process_file() to the node&#39;s<br/>as_code method() and is otherwise unchanged.<br/><br/><br/> Commit: 504148c22659a3320c7fc5e272d3478729e5d760<br/> https://github.com/Perl/perl5/commit/504148c22659a3320c7fc5e272d3478729e5d760<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::boot_xsub<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Add a stub Node subclass which is responsible for emitting the C code<br/>for the boot XSUB.<br/><br/>The code has just been moved from process_file() to the node&#39;s<br/>as_code method() and is otherwise unchanged.<br/><br/><br/> Commit: 864b568d2620b5d6a3f4039933b7c36c8557d2d7<br/> https://github.com/Perl/perl5/commit/864b568d2620b5d6a3f4039933b7c36c8557d2d7<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: tidy Node::boot_xsub::parse()<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>The previous commit moved code from process_file() into it&#39;s own<br/>method, with minimal changes. Now clean the code up a bit:<br/><br/>- use $open_brace, $close_brace instead of the magic [[ ]];<br/>- clean up comments, white space etc;<br/>- use Q to make some code strings more readable.<br/><br/><br/> Commit: e28a97b96fe1a6bfbf36a46f7fc54ea9a1779fef<br/> https://github.com/Perl/perl5/commit/e28a97b96fe1a6bfbf36a46f7fc54ea9a1779fef<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: move some code<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Move some code from process_file() to XS_file::parse()<br/><br/>No change in functionality.<br/><br/><br/> Commit: 06775815876913f1e32a41fe479f01f32385cba0<br/> https://github.com/Perl/perl5/commit/06775815876913f1e32a41fe479f01f32385cba0<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: emit package overload registrations later<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>In the boot XSUB, a bunch of newXS() calls are added, to register all<br/>the XSUBs in the perl namespace, plus all aliases, overload methods etc.<br/><br/>In addition, for every package which contains at least one overload<br/>method, a special stub sub called Foo::Bar::() is registered. This is<br/>used at run-time to determine whether overloading is present for a<br/>particular class.<br/><br/>This commit changes the order, by changing an unshift to a push.<br/>Previously the stub package subs were registered first, then the XSUBs;<br/>now its the other way round. e.g.<br/><br/> /* mark these two packages as having overload methods */<br/> newXS_deffile(&quot;X::Y::()&quot;, XS_X__Y_nil);<br/> newXS_deffile(&quot;P::Q::()&quot;, XS_P__Q_nil);<br/><br/> /* foo XSUB used as an overload method for &lt;=&gt; etc */<br/> newXS_deffile(&quot;P::Q::foo&quot;, XS_P__Q_foo);<br/> newXS_deffile(&quot;P::Q::(&lt;=&gt;&quot;, XS_P__Q_foo);<br/> ...<br/> /* bar XSUB used as an overload method for &lt;=&gt; etc */<br/> newXS_deffile(&quot;X::Y::bar&quot;, XS_X__Y_bar);<br/> newXS_deffile(&quot;X::Y::(&lt;=&gt;&quot;, XS_X__Y_bar);<br/> ...<br/><br/>becomes<br/><br/> /* foo XSUB used as an overload method for &lt;=&gt; etc */<br/> newXS_deffile(&quot;P::Q::foo&quot;, XS_P__Q_foo);<br/> newXS_deffile(&quot;P::Q::(&lt;=&gt;&quot;, XS_P__Q_foo);<br/> ...<br/> /* bar XSUB used as an overload method for &lt;=&gt; etc */<br/> newXS_deffile(&quot;X::Y::bar&quot;, XS_X__Y_bar);<br/> newXS_deffile(&quot;X::Y::(&lt;=&gt;&quot;, XS_X__Y_bar);<br/> ...<br/><br/> /* mark these two packages as having overload methods */<br/> newXS_deffile(&quot;P::Q::()&quot;, XS_P__Q_nil);<br/> newXS_deffile(&quot;X::Y::()&quot;, XS_X__Y_nil);<br/><br/>This should make no difference to the functionality, but will make<br/>a further refactoring of boot code generation easier.<br/><br/>AFAIKT, using unshift rather than push in the original 2002 commit<br/>didn&#39;t have any particular intent.<br/><br/><br/> Commit: e8fdab34e5780c03f4e82c53f1fa8a6f5883f11a<br/> https://github.com/Perl/perl5/commit/e8fdab34e5780c03f4e82c53f1fa8a6f5883f11a<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add as_boot_code() methods<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Before this commit, as_code() methods were responsible for generating<br/>both the general code that goes in the C file, and also code that<br/>specifically goes in the boot SUB. They achieved this by pushing<br/>lines into the arrays $pxs-&gt;{bootcode_early} and $pxs-&gt;{bootcode_later}.<br/><br/>This commit adds as_boot_code() methods to the relevant node types and<br/>removes the bootcode_early and bootcode_later arrays.<br/><br/>Now, the C code file is generated by walking the AST, calling as_code()<br/>methods. When it gets to the boot_xsub::as_code() method, which is<br/>responsible for emitting the XS(boot_Foo__Bar) {} boot XSUB, that sub<br/>itself then does a second treewalk, calling as_boot_code() methods, which<br/>accumulates lines to be added early and later on in the boot SUB.<br/><br/><br/> Commit: 0e56af3707404162e8391e55b6c1f4d629353e05<br/> https://github.com/Perl/perl5/commit/0e56af3707404162e8391e55b6c1f4d629353e05<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M MANIFEST<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm<br/> R dist/ExtUtils-ParseXS/t/109-standard_XS_defs.t<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: inline and rm standard_XS_defs<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>The ExtUtils::ParseXS::Utilities::standard_XS_defs() function<br/>just returns a big string containing all the standard boilerplate code<br/>that gets added to the C file. Delete this function, and instead<br/>include the text directly within C_part_postamble::as_code().<br/><br/><br/> Commit: 0bed57b7c7a26a0be0bdf5979967a39894826df3<br/> https://github.com/Perl/perl5/commit/0bed57b7c7a26a0be0bdf5979967a39894826df3<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: don&#39;t use $_ for C part of file<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>When parsing the C part of the XS file (mainly looking for POD and C<br/>code), don&#39;t use $_ and $. to hold the state of the next line. This was<br/>ok when it was a simple loop, but now that the logic is spread over<br/>multiple parse() methods, store the next line to process in<br/>$pxs-&gt;{lastline} and $pxs-&gt;{lastline_no}.<br/><br/>(The XS half of the file already uses those variables, along with<br/>@{$pxs-&gt;{line}} etc.)<br/><br/><br/> Commit: 9e4ed57fe55c2c3090df9c1b92a90055b59a5053<br/> https://github.com/Perl/perl5/commit/9e4ed57fe55c2c3090df9c1b92a90055b59a5053<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: remove $ExtUtils::ParseXS::END<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>The parser, when parsing an XSUB (but not any other parts of an XS file),<br/>pushes a special token onto the end of the list of lines in<br/>@{$pxs-&gt;{line}} which make up the current paragraph. This token,<br/><br/> $ExtUtils::ParseXS::END = &quot;!End!\n\n&quot;;<br/><br/>(along with a trailing &#39;:&#39;) is designed to look like an impossible<br/>keyword which can&#39;t actually appear in the source code (due to the<br/>multiple newlines).<br/><br/>It looks like it was originally added in perl5.002 to make the parsing<br/>code easier, but I don&#39;t really understand why. It just makes the<br/>parser harder to understand.<br/><br/>So this commit removes it, and just relies on @{$pxs-&gt;{line}} being zero<br/>to detect the end of the paragraph. This change doesn&#39;t alter the C code<br/>generated from any of the XS files bundled with perl.<br/><br/><br/> Commit: 0e526ab02ed31f1a2769789598b261e697f01972<br/> https://github.com/Perl/perl5/commit/0e526ab02ed31f1a2769789598b261e697f01972<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: remove stray $_<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Remove this line:<br/><br/> $_ = &#39;&#39;;<br/><br/>which is a leftover from when $_ used to maintain the current line<br/>between calls to various parsing subs. It&#39;s redundant now.<br/><br/><br/> Commit: 01a94f36db995af0aa4d305a0bbeae6610a3e900<br/> https://github.com/Perl/perl5/commit/01a94f36db995af0aa4d305a0bbeae6610a3e900<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm<br/> M dist/ExtUtils-ParseXS/t/001-basic.t<br/><br/> Log Message:<br/> -----------<br/> ParseXS: spot MODULE line syntax errors<br/><br/>Previously, a line which was not a completely syntactically correct<br/>MODULE line was not treated as a module line; instead it got passed on<br/>uninterpreted until likely causing an error further along in parsing.<br/><br/>This commit changes things so that anything that looks like the *start*<br/>of a module line is treated as a module line, and is *only then*<br/>examined for full syntactic correctness, giving an error if not ok.<br/><br/>For example: previously, this line:<br/><br/> MODULE = Foo XXXPACKAGE = Foo::Bar<br/><br/>gave the weird error message:<br/><br/> Error: Function definition too short &#39;MODULE = Foo XXXPACKAGE ...<br/><br/>but now gives the error message:<br/><br/> Error: unparseable MODULE line: &#39;MODULE = Foo XXXPACKAGE ...<br/><br/>In particular, any line starting with<br/><br/> /^MODULE\s*[=:]/<br/><br/>is now treated as an attempt to declare a module, including the<br/>syntactically incorrect &#39;MODULE:&#39; form.<br/><br/>This is in the same spirit that other keywords are already processed;<br/>for example<br/><br/> PROTOTYPES: XXXENABLE<br/><br/>is treated as as a badly-formed PROTOTYPES line rather than an otherwise<br/>unrecognised and unprocessed line.<br/><br/><br/> Commit: 969eb6c21c29267a137c4808a7fdd99a52ffd6fd<br/> https://github.com/Perl/perl5/commit/969eb6c21c29267a137c4808a7fdd99a52ffd6fd<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::MODULE<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Add a new node type,<br/><br/> ExtUtils::ParseXS::Node::MODULE.<br/><br/>this (mostly) regularises the treatment of a MODULE line, now handled in<br/>the usual way by parse_keywords(), rather than being a special magical<br/>snowflake that got its own handling in fetch_para().<br/><br/>This commit also changes one parameter of parse_keywords() from being a<br/>boolean to being a bit flag, now that there are now *two* slightly<br/>special cases to flag up: MODULE, in addition to NOT_IMPLEMENTED_YET.<br/><br/>This commit is supposed to have no changes in behaviour, but there<br/>*might* be some edge cases that I haven&#39;t thought of.<br/><br/><br/> Commit: 264963f5e34f971e1af8231e8b5a721e177e5055<br/> https://github.com/Perl/perl5/commit/264963f5e34f971e1af8231e8b5a721e177e5055<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/t/001-basic.t<br/><br/> Log Message:<br/> -----------<br/> ParseXS: spot TYPEMAP: line syntax errors<br/><br/>Previously, a line which was not a completely syntactically correct<br/>TYPEMAP: line was not treated as a TYPEMAP line; instead it got passed on<br/>uninterpreted until likely causing an error further along in parsing.<br/><br/>This commit changes things so that anything starting with<br/>/^TYPEMAP\s*:/ is treated as a TYPEMAP line, and is *only then*<br/>examined for full syntactic correctness, giving an error if not ok.<br/><br/>This is similar to two commits ago which did the same for the MODULE<br/>keyword.<br/><br/><br/> Commit: d86a388f680484feed13be22bc3ff7649f13bf31<br/> https://github.com/Perl/perl5/commit/d86a388f680484feed13be22bc3ff7649f13bf31<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::TYPEMAP<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Add a new node type,<br/><br/> ExtUtils::ParseXS::Node::TYPEMAP.<br/><br/>this (mostly) regularises the treatment of a TYPEMAP line, now handled in<br/>the usual way by parse_keywords(), rather than being processed solely<br/>within fetch_para(). fetch_para() does still need to do *some*<br/>processing: it has to read the TYPEMAP line, extract out the &lt;&lt;EOF bit,<br/>and use that to read lines up until the matchhing &#39;EOF&#39;. It then returns<br/>these lines (including the initial TYPEMAP line) as a paragraph which is<br/>then handled as a normal file-scoped keyword.<br/><br/>With this commit, fetch_para() becomes closer to its official job of<br/>just returning the next useful chunk of lines, rather than having hidden<br/>side effects too.<br/><br/>This commit is supposed to have no changes in behaviour, but there<br/>*might* be some edge cases that I haven&#39;t thought of.<br/><br/><br/> Commit: 8ace24a19195a83d1c07025aaaa8a71c9e755f8d<br/> https://github.com/Perl/perl5/commit/8ace24a19195a83d1c07025aaaa8a71c9e755f8d<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: inline _maybe_skip_pod()<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Inline the one use of _maybe_skip_pod() into fetch_para().<br/><br/><br/> Commit: a83466f52d576694188e5ad1708a7de93b76a911<br/> https://github.com/Perl/perl5/commit/a83466f52d576694188e5ad1708a7de93b76a911<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: move a chomp()<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>Change where $pxs-&gt;{lastline} gets chomped at the start of the XS half<br/>of the file, where the fetch_para() loop is first entered - do it just<br/>the once when transitioning rather than polluting the main fetch_para()<br/>loop with it.<br/><br/>No functional changes.<br/><br/><br/> Commit: fc392dbc1128de22b7b90c84473b12a79ffdaae1<br/> https://github.com/Perl/perl5/commit/fc392dbc1128de22b7b90c84473b12a79ffdaae1<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: chomp TYPEMAP lines<br/><br/>(This commit is part of a series which will extend the AST parse tree<br/>from just representing individual XSUBs to representing the whole XS<br/>file.)<br/><br/>For consistency with everything else in fetch_para(), chomp any lines<br/>extracted from a TYPEMAP section before stuffing them in<br/>@{$pxs-&gt;{line}}. Later, make Node::TYPEMAP::parse() stick a newline<br/>back on each line before passing them to the typemap parser.<br/><br/><br/> Commit: 7c7e63d517e6646b3ae5d6bddc18a79e2237a7a7<br/> https://github.com/Perl/perl5/commit/7c7e63d517e6646b3ae5d6bddc18a79e2237a7a7<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/t/001-basic.t<br/><br/> Log Message:<br/> -----------<br/> ParseXS: fix POD on last line<br/><br/>If POD continued to the last line of the XS file, a bunch of<br/>&quot;Use of uninitialized value&quot; warnings would be generated.<br/><br/>The fix is trivial, but it also required a slight tweak to the test<br/>framework in t/001-basic.t, which was unconditionally adding a \n to the<br/>end of each test string, thus making the &#39;=cut&#39; appear not to be at EOF.<br/><br/><br/> Commit: 21e6471be3c9ecf6050995b09ecfe2b70994c2f6<br/> https://github.com/Perl/perl5/commit/21e6471be3c9ecf6050995b09ecfe2b70994c2f6<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: fetch_para(): remove POD loop<br/><br/>Remove the loop which says &#39;foreach contiguous section of pod, delete<br/>it&#39;. Replace it with with something which removes just *one* section of<br/>POD, then relies on the main loop to process the next line, which may<br/>well be the start of another POD section.<br/><br/>Fewer nested loops is less cognitive load.<br/><br/>Should be no functional changes.<br/><br/><br/> Commit: caa8c16f744eac5bc8987dc66976fa1c3b8282fb<br/> https://github.com/Perl/perl5/commit/caa8c16f744eac5bc8987dc66976fa1c3b8282fb<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: fetch_para(): invert if<br/><br/>change<br/><br/> if (cond) {<br/> ... lots lines ...<br/> }<br/><br/>to<br/><br/> if (!cond) {<br/> goto read_next_line;<br/> }<br/> ... lots lines ...<br/><br/> read_next_line:<br/><br/>which might be considered a bit regressive in a &#39;goto considered<br/>harmful&#39; sort of way, but will will help with further refactoring,<br/>and emphasises that the current input line is discarded if the condition<br/>isn&#39;t met (i.e. it strips out code comments, which wasn&#39;t obvious).<br/><br/><br/> Commit: 35b69a9252e55177c62490999f9bcc112e6414c4<br/> https://github.com/Perl/perl5/commit/35b69a9252e55177c62490999f9bcc112e6414c4<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: fetch_para(): reindent<br/><br/>Reindent a block of code after the previous commit removed a scope.<br/>Whitespace-only.<br/><br/><br/> Commit: 27eb48219099f2a56b966686d93f70cecc5a2d92<br/> https://github.com/Perl/perl5/commit/27eb48219099f2a56b966686d93f70cecc5a2d92<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/t/001-basic.t<br/><br/> Log Message:<br/> -----------<br/> ParseXS: process line continuations after POD<br/><br/>Within fetch_para(), the at-end-of-POD code and the main loop both had<br/>separate (but similar) chunks of code to read in the next line, with the<br/>latter one being more complete. In particular, the latter had logic to<br/>process &#39;\&#39; continuation lines, while the POD one didn&#39;t. This meant<br/>that this gave a parse error:<br/><br/> =pod<br/> =cut<br/> void foo(int i, \<br/> int j)<br/><br/>The fix is to make them both use the same code to read the next line.<br/><br/><br/> Commit: fbfd5fbdcb3403019e4d2cb1dcaab66a1e490e11<br/> https://github.com/Perl/perl5/commit/fbfd5fbdcb3403019e4d2cb1dcaab66a1e490e11<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/t/001-basic.t<br/><br/> Log Message:<br/> -----------<br/> ParseXS: process line continuations after TYPEMAP<br/><br/>(This is similar to the previous commit, which fixed the same bug for<br/>POD)<br/><br/>Within fetch_para(), the at-end-of-TYPEMAP code and the main loop both<br/>had separate (but similar) chunks of code to read in the next line, with<br/>the latter one being more complete. In particular, the latter had logic<br/>to process &#39;\&#39; continuation lines, while the TYPEMAP one didn&#39;t. This<br/>meant that this gave a parse error:<br/><br/> TYPEMAP: &lt;&lt;EOF<br/> ...<br/> EOF<br/> void foo(int i, \<br/> int j)<br/><br/>The fix is to make them both use the same code to read the next line.<br/>This bug was probably actually introduced by me during the refactoring<br/>in this branch.<br/><br/>By using the same read-next-line code, it also means that an immediately<br/>following blank line is now stripped of whitespace. I&#39;m not sure whether<br/>that actually affects anything in the real word. Also, any trailing<br/>lines in typemap are now stripped. Again, this shouldn&#39;t affect<br/>anything.<br/><br/><br/> Commit: 0028ecc6f630e6e90ffe6e00493378953c45d568<br/> https://github.com/Perl/perl5/commit/0028ecc6f630e6e90ffe6e00493378953c45d568<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: fetch_para(): add more comments<br/><br/>Add more code comments to fetch_para(), especially explaining how<br/>the &quot;XSUB cuddled by #if/#endif without blank lines&quot; mechanism works<br/><br/><br/> Commit: f38a029e6612ebcb66ffecab371f74aa3f9ca7a3<br/> https://github.com/Perl/perl5/commit/f38a029e6612ebcb66ffecab371f74aa3f9ca7a3<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: fetch_para(): simplify logic<br/><br/>Simplify the logic of the code which handles C-preprocessor directives<br/>where there&#39;s not the (usually required) blank line directly before and<br/>after an XSUB; e.g.<br/><br/> #if X<br/> int foo(...)<br/> ...<br/> #endif<br/><br/>This commit splits the logic into two halves: the first is responsible<br/>for handling conditionals directly *before* the XSUB, and the other half<br/>for ones during and directly after the XSUB. Then the second half is<br/>further simplified.<br/><br/>I think this makes the code easier to understand.<br/><br/>I *think* the new code is logically equivalent.<br/><br/><br/> Commit: a21bd3ae4e21cf2e1ec2e9f492963c9b563c9ce7<br/> https://github.com/Perl/perl5/commit/a21bd3ae4e21cf2e1ec2e9f492963c9b563c9ce7<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: fetch_para: update description<br/><br/>Update the code comments above this function.<br/><br/>This is both to reflect the changes made in this branch (e.g.<br/>no longer processing MODULE lines in this function), and to reflect<br/>my better understanding of this function since I wrote the original<br/>text.<br/><br/><br/> Commit: c7ee219e7c9be497a8532043699e65fd94e54cf1<br/> https://github.com/Perl/perl5/commit/c7ee219e7c9be497a8532043699e65fd94e54cf1<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: fix comments re die if indented<br/><br/>Rewrite some code comments explaining why the XS parser sometimes dies<br/>if the next line is indented. It&#39;s a bit complicated and the initial<br/>comments I added a year ago weren&#39;t entirely accurate.<br/><br/><br/> Commit: 5a14bdfd780cdf7850b68db06c9f8ade8dfe5f60<br/> https://github.com/Perl/perl5/commit/5a14bdfd780cdf7850b68db06c9f8ade8dfe5f60<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: simplify main loop<br/><br/>Simplify the code in Node::cpp_scope::parse(), which contains the<br/>main file-scoped parsing loop, and update / add code comments.<br/><br/>The code in this loop has gone through some rough times with all the<br/>refactoring that has taken place in the last year, chiefly converting<br/>the parser into being AST-based. This commit is kind of a final tidy up<br/>to restore sanity. Apart from fixing lots of comments, the main thing<br/>this commit does is flatten nested while loops. Before this commit, the<br/>overall structure of the parse() function was like;<br/><br/> PARAGRAPH:<br/> while (lines to process) {<br/> while (blank line) { skip }<br/> while (C-preprocessor line) { process }<br/> ... and similar loops ...<br/> }<br/><br/>and is now:<br/><br/> while (lines to process) {<br/> if (blank line) { skip; next }<br/> if (C-preprocessor line) { process; next }<br/><br/> ... and similar loops ...<br/> }<br/><br/>i.e. rather than there being nested loops, just have one main loop<br/>and go back to the start of that to do the next thing. This should<br/>be functionally equivalent, but less complicated.<br/><br/>This new paradigm can&#39;t be applied yet to the last few items in the main<br/>loop due to a backwards compatibility issue with the SCOPE keyword.<br/>I&#39;ll fix that at some future date.<br/><br/><br/> Commit: 98301ea422f5644f81d6bac24b85601d2183dbaa<br/> https://github.com/Perl/perl5/commit/98301ea422f5644f81d6bac24b85601d2183dbaa<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: rationalise parse-fail action<br/><br/>Now that the XS parser builds a parse tree (AST), it spends most of its<br/>time doing recursive-descent $some_node_object-&gt;parse() calls.<br/><br/>There is a common idiom within the current code along the lines of<br/><br/> $some_node_object-&gt;parse()<br/> or return;<br/><br/>This makes a parse failure in a node propagate its way back up the call<br/>chain. Note that many parse failures don&#39;t immediately croak; they<br/>call blurt() which only warns, but also increments the error count;<br/>parsing can continue.<br/><br/>During my big refactoring I haven&#39;t been entirely consistent here; this<br/>commit adds a bunch of &#39;or return&#39;s that I missed. It also does a few<br/>&#39;or next&#39;s at higher levels, to get behaviour along the lines of:<br/>&quot;this XSUB had a syntax error, but continue trying to parse other XSUBs,<br/>and only error out at the end.&quot;<br/><br/>This is all a bit going on gut feelings; in the final analysis it<br/>doesn&#39;t matter too much how much more parsing gets done before xsubpp<br/>finally croaks out.<br/><br/><br/> Commit: e098f86a6623e49b5a27c4c5a1016fa136b860a2<br/> https://github.com/Perl/perl5/commit/e098f86a6623e49b5a27c4c5a1016fa136b860a2<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: update POD and comments<br/><br/>Update the POD at the top of Node.pm and the code comments at the top<br/>of ParseXS.pm to reflect the changes in this branch which have extended<br/>the AST from representing just an XSUB to representing the whole XS<br/>file.<br/><br/><br/> Commit: 7c119be465d5c250a2545d6f663bddfc9b8a4ed6<br/> https://github.com/Perl/perl5/commit/7c119be465d5c250a2545d6f663bddfc9b8a4ed6<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: add Node::Q method<br/><br/>Add a method which is a simple wrapper around ExtUtils::ParseXS::Q.<br/>This means throughout Node.pm, you can write<br/><br/> $self-&gt;Q(&lt;&lt;&quot;EOF&quot;)<br/><br/>rather than the more long-winded<br/><br/> ExtUtils::ParseXS::Q(&lt;&lt;&quot;EOF&quot;);<br/><br/><br/> Commit: 7888dacc7017f682ca811d4fd7fd377cc4ed5d93<br/> https://github.com/Perl/perl5/commit/7888dacc7017f682ca811d4fd7fd377cc4ed5d93<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/t/001-basic.t<br/><br/> Log Message:<br/> -----------<br/> ParseXS: refactor: re-add tests for C preamble<br/><br/>This earlier commit in the branch:<br/><br/> ParseXS: refactor: inline and rm standard_XS_defs<br/><br/>removed a test file which checked that the standard C preamble text<br/>was present. This commit re-adds those tests in a different way.<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/d88ca93a8b61...7888dacc7017<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65331.html Tue, 02 Dec 2025 13:13:00 +0000 [Perl/perl5] d04442: perlxs.pod: remove section on %v by David Mitchell via perl5-changes Branch: refs/heads/davem/xspod<br/> Home: https://github.com/Perl/perl5<br/> Commit: d044425cd0e30d2ae29d54a485d545df1b7716eb<br/> https://github.com/Perl/perl5/commit/d044425cd0e30d2ae29d54a485d545df1b7716eb<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: remove section on %v<br/><br/>The XS parser supported an extremely obscure bit of functionality which<br/>made use of the %v package variable to maintain state between different<br/>bits of typemap processing. This was accidentally broken in 5.10.0:<br/>refactoring removed the &#39;use vars &quot;%v&quot;&#39; line, and no one seemed to<br/>notice or care.<br/><br/>Also, the sole example of its use in the docs seemed to be obscure,<br/>confusing and probably wrong.<br/><br/>There was a consensus in the discussion at<br/><br/> http://nntp.perl.org/group/perl.perl5.porters/267667<br/><br/>that we should stop documenting this feature rather than trying to fix<br/>it.<br/><br/><br/> Commit: c2d26f6785e44f1a4925f0de56ce947613844a8e<br/> https://github.com/Perl/perl5/commit/c2d26f6785e44f1a4925f0de56ce947613844a8e<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: reindent and reformat code examples<br/><br/>The various XS code examples had odd and inconsistent indentation (often<br/>with 5 leading spaces) and inconsistent formatting, e.g. foo(a,b) vs<br/>foo( a, b ) vs foo(a, b). Fix that, and also remove any tab chars.<br/><br/>Whitespace-only change.<br/><br/><br/> Commit: bafe93f7df38cbc46918a9507ddf53c55d8361d1<br/> https://github.com/Perl/perl5/commit/bafe93f7df38cbc46918a9507ddf53c55d8361d1<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: delete most non-ref sections<br/><br/>This commit is a simple cut which deletes several &#39;=head2&#39; sections from<br/>perlxs.pod. The next commit will tidy up and fix any broken links etc.<br/><br/>These sections are more tutorial-like, and aren&#39;t in line with the goal<br/>of this branch that perlxs.pod becomes purely a reference manual for XS.<br/>Any relevant information from these sections may be incorporated later<br/>into new sections in perlxs.pod and/or be included in a future rewrite<br/>of perlxstut.pod.<br/><br/>The sections deleted are:<br/><br/> =head2 Introduction<br/> =head2 On The Road<br/> =head2 The Anatomy of an XSUB<br/> =head2 The Argument Stack<br/> =head2 The RETVAL Variable<br/> =head2 Returning SVs, AVs and HVs through RETVAL<br/> =head2 Returning Undef And Empty Lists<br/> =head2 Interface Strategy<br/> =head2 Perl Objects And C Structures<br/><br/><br/> Commit: 942ab5a5afb123ac8ffb7afaad86719882f2e7d3<br/> https://github.com/Perl/perl5/commit/942ab5a5afb123ac8ffb7afaad86719882f2e7d3<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M XSUB.h<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: fix up links after deleting sections<br/><br/>The previous commit deleted several sections from perlxs.pod. This<br/>commit fixes things up; done as a separate commit so that the changes<br/>aren&#39;t drowned out in the diff listing.<br/><br/><br/> Commit: e7ddc3c9b6802f96d3791773e22f2e7c7823e5b6<br/> https://github.com/Perl/perl5/commit/e7ddc3c9b6802f96d3791773e22f2e7c7823e5b6<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: reorder sections<br/><br/>This big commit does a series of plain cut+pastes to reorder all the<br/>=head2 sections within the file.<br/><br/>This changes the order from semi-random into roughly the order the<br/>various XS keywords would appear within an XS file, and then within an<br/>XSUB declaration/definition.<br/><br/>No changes have been made to the text: simply that all lines from a<br/>particular &#39;^=head2&#39; up until the next head2 have been cut+paste as<br/>a single unit.<br/><br/>No attempt has been made yet to make the text consistent with the new<br/>ordering; that will be done by the subsequent commits of this branch.<br/><br/>The previous ordering in this file was:<br/><br/> =head1 NAME<br/> =head1 DESCRIPTION<br/> =head2 The MODULE Keyword<br/> =head2 The PACKAGE Keyword<br/> =head2 The PREFIX Keyword<br/> =head2 The OUTPUT: Keyword<br/> =head2 The NO_OUTPUT Keyword<br/> =head2 The CODE: Keyword<br/> =head2 The INIT: Keyword<br/> =head2 The NO_INIT Keyword<br/> =head2 The TYPEMAP: Keyword<br/> =head2 Initializing Function Parameters<br/> =head2 Default Parameter Values<br/> =head2 The PREINIT: Keyword<br/> =head2 The SCOPE: Keyword<br/> =head2 The INPUT: Keyword<br/> =head2 The IN/OUTLIST/IN_OUTLIST/OUT/IN_OUT Keywords<br/> =head2 The C&lt;length(NAME)&gt; Keyword<br/> =head2 Variable-length Parameter Lists<br/> =head2 The C_ARGS: Keyword<br/> =head2 The PPCODE: Keyword<br/> =head2 The REQUIRE: Keyword<br/> =head2 The CLEANUP: Keyword<br/> =head2 The POSTCALL: Keyword<br/> =head2 The BOOT: Keyword<br/> =head2 The VERSIONCHECK: Keyword<br/> =head2 The PROTOTYPES: Keyword<br/> =head2 The PROTOTYPE: Keyword<br/> =head2 The ALIAS: Keyword<br/> =head2 The OVERLOAD: Keyword<br/> =head2 The FALLBACK: Keyword<br/> =head2 The INTERFACE: Keyword<br/> =head2 The INTERFACE_MACRO: Keyword<br/> =head2 The INCLUDE: Keyword<br/> =head2 The INCLUDE_COMMAND: Keyword<br/> =head2 The CASE: Keyword<br/> =head2 The EXPORT_XSUB_SYMBOLS: Keyword<br/> =head2 The &amp; Unary Operator<br/> =head2 Inserting POD, Comments and C Preprocessor Directives<br/> =head2 Using XS With C++<br/> =head2 Safely Storing Static Data in XS<br/> =head3 MY_CXT REFERENCE<br/> =head1 EXAMPLES<br/> =head1 CAVEATS<br/> =head2 Use of standard C library functions<br/> =head2 Event loops and control flow<br/> =head1 XS VERSION<br/> =head1 AUTHOR DIAGNOSTICS<br/> =head1 AUTHOR<br/><br/>and is now:<br/><br/> =head1 NAME<br/> =head1 DESCRIPTION<br/> =head2 The MODULE Keyword<br/> =head2 The PACKAGE Keyword<br/> =head2 The PREFIX Keyword<br/> =head2 Inserting POD, Comments and C Preprocessor Directives<br/> =head2 The REQUIRE: Keyword<br/> =head2 The VERSIONCHECK: Keyword<br/> =head2 The PROTOTYPES: Keyword<br/> =head2 The EXPORT_XSUB_SYMBOLS: Keyword<br/> =head2 The INCLUDE: Keyword<br/> =head2 The INCLUDE_COMMAND: Keyword<br/> =head2 The TYPEMAP: Keyword<br/> =head2 The BOOT: Keyword<br/> =head2 The FALLBACK: Keyword<br/> =head2 The NO_OUTPUT Keyword<br/> =head2 The IN/OUTLIST/IN_OUTLIST/OUT/IN_OUT Keywords<br/> =head2 Default Parameter Values<br/> =head2 The C&lt;length(NAME)&gt; Keyword<br/> =head2 Variable-length Parameter Lists<br/> =head2 The PREINIT: Keyword<br/> =head2 The INPUT: Keyword<br/> =head2 The NO_INIT Keyword<br/> =head2 Initializing Function Parameters<br/> =head2 The &amp; Unary Operator<br/> =head2 The SCOPE: Keyword<br/> =head2 The INIT: Keyword<br/> =head2 The C_ARGS: Keyword<br/> =head2 The CODE: Keyword<br/> =head2 The PPCODE: Keyword<br/> =head2 The POSTCALL: Keyword<br/> =head2 The OUTPUT: Keyword<br/> =head2 The CLEANUP: Keyword<br/> =head2 The PROTOTYPE: Keyword<br/> =head2 The OVERLOAD: Keyword<br/> =head2 The ALIAS: Keyword<br/> =head2 The INTERFACE: Keyword<br/> =head2 The INTERFACE_MACRO: Keyword<br/> =head2 The CASE: Keyword<br/> =head2 Using XS With C++<br/> =head2 Safely Storing Static Data in XS<br/> =head3 MY_CXT REFERENCE<br/> =head1 EXAMPLES<br/> =head1 CAVEATS<br/> =head2 Use of standard C library functions<br/> =head2 Event loops and control flow<br/> =head1 XS VERSION<br/> =head1 AUTHOR DIAGNOSTICS<br/> =head1 AUTHOR<br/><br/><br/> Commit: 1d00b081479c5377bae150e4570f36a9aeca7898<br/> https://github.com/Perl/perl5/commit/1d00b081479c5377bae150e4570f36a9aeca7898<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: add group headers<br/><br/>Following the previous commit&#39;s reordering of the all the =head2<br/>sections, demote most of the =head2 headers to =head3, and add some new<br/>=head2 headers which group together related headers.<br/><br/>Also add some =head3&#39;s for a few missing keywords.<br/><br/>Subsequent commits will flesh out the new sections.<br/><br/><br/> Commit: a43c5fe3a961e5783be5a82c7d15939a8f1fdb60<br/> https://github.com/Perl/perl5/commit/a43c5fe3a961e5783be5a82c7d15939a8f1fdb60<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: add a new introductory part<br/><br/>Four commits ago, I removed most of the general text sections in<br/>perlxs (i.e. the ones not specifically about a particular keyword).<br/><br/>Now this commit adds a completely new introductory part to perlxs, about<br/>1200 lines long. It represents an attempt to write a background to what<br/>XS and XSUBs, SVs, typemaps etc are, in a complete and modern way.<br/>The existing reference section for each keyword follows it.<br/><br/>I tried to avoid getting too tutorial-like (that&#39;s what perlxstut is<br/>for), but I may have crossed the line in various places. In particular<br/>it has a new section which could have been titled &quot;all the bits of<br/>perlguts you need to know in order to write non-trivial XSUBs without<br/>having to actually read perlguts&quot;.<br/><br/><br/> Commit: c8d62e378edc4989826c2d1bb5c8c96cbf842fe9<br/> https://github.com/Perl/perl5/commit/c8d62e378edc4989826c2d1bb5c8c96cbf842fe9<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: add BNF definition section<br/><br/>Add a section which semi-formally tries to define the syntax and<br/>structue of an XS file, using a BNF-like format.<br/><br/>See http://nntp.perl.org/group/perl.perl5.porters/268701 for the<br/>discussion of this part.<br/><br/><br/> Commit: 56fcc2c4a457daf37608ba364885e5c87d058ae4<br/> https://github.com/Perl/perl5/commit/56fcc2c4a457daf37608ba364885e5c87d058ae4<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update MODULE/PACKAGE/PREFIX<br/><br/>Rewrite the POD for these three keywords, and in particular, treat<br/>them as one declaration, rather than three unrelated keywords.<br/><br/><br/> Commit: 24cf9e414dec614367a1e562def4483f6e152f19<br/> https://github.com/Perl/perl5/commit/24cf9e414dec614367a1e562def4483f6e152f19<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update file-scoped directive text<br/><br/>Populate the new<br/><br/> =head2 File-scoped XS Keywords and Directives<br/><br/>section, partially by cannibalising (and then deleting) the old<br/><br/> =head3 Inserting POD, Comments and C Preprocessor Directives<br/><br/>subsection. This commit only adds text about directives; subsequent<br/>commits will update the various file-scoped keywords.<br/><br/><br/> Commit: b58fedb6792d8cbe2aa2a8f42c627a61a725ac12<br/> https://github.com/Perl/perl5/commit/b58fedb6792d8cbe2aa2a8f42c627a61a725ac12<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update REQUIRE, VERSIONCHECK keywords<br/><br/><br/> Commit: bb0c675c6078654398d1508e80f10d3df72a0330<br/> https://github.com/Perl/perl5/commit/bb0c675c6078654398d1508e80f10d3df72a0330<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update PROTOTYPES: keyword<br/><br/><br/> Commit: 24511a807c8f3783b1ead99a0a79a8fbe0a92324<br/> https://github.com/Perl/perl5/commit/24511a807c8f3783b1ead99a0a79a8fbe0a92324<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update EXPORT_XSUB_SYMBOLS, INCLUDE(_COMMAND)<br/><br/><br/> Commit: 9a7fd52d7dc4f7392249bf25433bc6b039c67ef1<br/> https://github.com/Perl/perl5/commit/9a7fd52d7dc4f7392249bf25433bc6b039c67ef1<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update TYPEMAP: keyword<br/><br/><br/> Commit: ed7511118cab32427e83885c8d3c13f9284ad49e<br/> https://github.com/Perl/perl5/commit/ed7511118cab32427e83885c8d3c13f9284ad49e<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update BOOT: keyword<br/><br/><br/> Commit: 31a0f7600502f8cbf1a2c743bf28c9679c4356bc<br/> https://github.com/Perl/perl5/commit/31a0f7600502f8cbf1a2c743bf28c9679c4356bc<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update FALLBACK: keyword<br/><br/><br/> Commit: d206967dc8d4d925d4ea4ba248905b035de70999<br/> https://github.com/Perl/perl5/commit/d206967dc8d4d925d4ea4ba248905b035de70999<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update XSUB Structure + Declaration<br/><br/>Populate the new<br/><br/> =head2 The Structure of an XSUB<br/> =head2 An XSUB Declaration<br/><br/>sections<br/><br/><br/> Commit: 67c737d941d8119ef05b6b10c324a58c306bb565<br/> https://github.com/Perl/perl5/commit/67c737d941d8119ef05b6b10c324a58c306bb565<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update section &#39;An XSUB Parameter&#39;<br/><br/>Add some initial text for this new section, and also add a new<br/>subsection &quot;XSUB Parameter Placeholders&quot;.<br/><br/><br/> Commit: 0d99ab087a7394e1c41e94cd185bb769d323b7b2<br/> https://github.com/Perl/perl5/commit/0d99ab087a7394e1c41e94cd185bb769d323b7b2<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update IN_OUT etc section<br/><br/><br/> Commit: 3d9d4154df3daab932864ffea5e71cd283685cd4<br/> https://github.com/Perl/perl5/commit/3d9d4154df3daab932864ffea5e71cd283685cd4<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M XSUB.h<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update default, length, ellipis params<br/><br/>Rewrite (and retitle) these three subsections:<br/><br/> =head3 Default Parameter Values<br/> =head3 The C&lt;length(NAME)&gt; Keyword<br/> =head3 Variable-length Parameter Lists<br/><br/><br/> Commit: d3d53839d730c57a7af193acf1b77c41a9ca86d0<br/> https://github.com/Perl/perl5/commit/d3d53839d730c57a7af193acf1b77c41a9ca86d0<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: Input part, PREINIT sections<br/><br/>Add text for the new &#39;=head2 The XSUB Input Part&#39; section, and rewrite<br/>the existing entry for the PREINIT keyword.<br/><br/><br/> Commit: ffc1d0c18a58589634b4e9419ddcc583fdd8bcc9<br/> https://github.com/Perl/perl5/commit/ffc1d0c18a58589634b4e9419ddcc583fdd8bcc9<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update &#39;The INPUT: Keyword&#39; section<br/><br/>This commit completely rewrites this section and subsections:<br/><br/> =head3 The INPUT: Keyword<br/> =head4 The NO_INIT Keyword<br/> =head4 Initializing Function Parameters<br/> =head4 The &amp; Unary Operator<br/><br/>It de-emphasises the INPUT keyword and suggests using ANSI XS signatures<br/>etc instead.<br/><br/><br/> Commit: 08f74af3ad78ecbe183faf6d6347c0f249322c0d<br/> https://github.com/Perl/perl5/commit/08f74af3ad78ecbe183faf6d6347c0f249322c0d<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update &#39;SCOPE: Keyword&#39; section<br/><br/><br/> Commit: c83fa60d2d997af27fbb493f4751c062e128593a<br/> https://github.com/Perl/perl5/commit/c83fa60d2d997af27fbb493f4751c062e128593a<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: init part, INIT sections<br/><br/>Add text for the new &#39;=head2 The XSUB Init Part&#39; section, and rewrite<br/>the existing entry for the INIT keyword.<br/><br/><br/> Commit: 6a9feedd1e708f175aafd1966bc08c4e8721f975<br/> https://github.com/Perl/perl5/commit/6a9feedd1e708f175aafd1966bc08c4e8721f975<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: code part, autocall, C_ARGS<br/><br/>Add text to the new<br/><br/> =head2 The XSUB Code Part<br/> =head3 Auto-calling a C function<br/><br/>sections, and rewrite the existing<br/><br/> =head4 The C_ARGS: Keyword<br/><br/>section<br/><br/><br/> Commit: bd34cf6dd5b3ba3445380d28b69729828c8d536b<br/> https://github.com/Perl/perl5/commit/bd34cf6dd5b3ba3445380d28b69729828c8d536b<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: CODE, PPCODE<br/><br/>Rewrite these sections:<br/><br/> =head3 The CODE: Keyword<br/> =head3 The PPCODE: Keyword<br/><br/><br/> Commit: 55c519eed4d8530cc2cea0a4c88141914e923070<br/> https://github.com/Perl/perl5/commit/55c519eed4d8530cc2cea0a4c88141914e923070<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update NOT_IMPLEMENTED_YET: keyword<br/><br/>This keyword formerly wasn&#39;t documented. The docs now say &quot;this is what<br/>it is, but don&#39;t use it&quot;.<br/><br/><br/> Commit: efa2b9691a69dcae95dae8dc2cd924d1ddad9e9d<br/> https://github.com/Perl/perl5/commit/efa2b9691a69dcae95dae8dc2cd924d1ddad9e9d<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: output part<br/><br/>Add text to the new<br/><br/> =head2 The XSUB Output Part<br/><br/>section, and rewrite the text in these existing sections:<br/><br/> =head3 The POSTCALL: Keyword<br/> =head3 The OUTPUT: Keyword<br/><br/><br/> Commit: ccc212fea05064bd36b3f62abc68eb765d513e07<br/> https://github.com/Perl/perl5/commit/ccc212fea05064bd36b3f62abc68eb765d513e07<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: cleanup part<br/><br/>Add text to the new<br/><br/> =head2 The XSUB Cleanup Part<br/><br/>section, and rewrite the text in this existing section:<br/><br/> =head3 The CLEANUP: Keyword<br/><br/><br/> Commit: 7105474d75807c06bf5cde0ee2dd3ca89978bc1f<br/> https://github.com/Perl/perl5/commit/7105474d75807c06bf5cde0ee2dd3ca89978bc1f<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update generic intro, PROTOTYPE<br/><br/>Add text to the new<br/><br/> =head2 XSUB Generic Keywords<br/><br/>section, and rewrite the text in this existing section:<br/><br/> =head3 The PROTOTYPE: Keyword<br/><br/><br/> Commit: 4ac6fde262bdedbcb17994d43338ab33ae5b90b3<br/> https://github.com/Perl/perl5/commit/4ac6fde262bdedbcb17994d43338ab33ae5b90b3<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: mention package name types<br/><br/>Explain that a &#39;C&#39; parameter type in an XSUB declaration can actually<br/>be a Perl package name or similar, e.g.<br/><br/> Foo::Bar<br/> f(Foo::Bar obj, char *s)<br/><br/><br/> Commit: 54c5a85a6a73a59585106f3492eaf40c57a8c010<br/> https://github.com/Perl/perl5/commit/54c5a85a6a73a59585106f3492eaf40c57a8c010<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update OVERLOAD, add T_PTROBJ<br/><br/>First, add a new subsection<br/><br/> =head3 T_PTROBJ and opaque handles<br/><br/>to the TYPEMAPs section explaining how this typemap can be used to<br/>map between Perl objects and C library handles. It provides a<br/>fully-worked example of wrapping a simple arithmetic library.<br/><br/>Then completely rewrite the<br/><br/> =head3 The OVERLOAD: Keyword<br/><br/>section. In particular, it now refers to the new T_PTROBJ example and<br/>shows how it can be extended to use overloading.<br/><br/><br/> Commit: 73bc0cb2e21ac9b4369b6a297768a1f4b78aa319<br/> https://github.com/Perl/perl5/commit/73bc0cb2e21ac9b4369b6a297768a1f4b78aa319<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: document ATTRS<br/><br/>This keyword was undocumented, even though it had been added 25 years<br/>ago.<br/><br/><br/> Commit: 1014eeebf463e85a1a09362ee6816a75190385f1<br/> https://github.com/Perl/perl5/commit/1014eeebf463e85a1a09362ee6816a75190385f1<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: add &quot;Sharing XSUB bodies&quot; section<br/><br/>Populate the introduction to this new section.<br/><br/><br/> Commit: 7f37717be76e4739f3ebe2ecdc1c4ebb25801adb<br/> https://github.com/Perl/perl5/commit/7f37717be76e4739f3ebe2ecdc1c4ebb25801adb<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: ALIAS<br/><br/>Rewrite this section:<br/><br/> =head3 The ALIAS: Keyword<br/><br/><br/> Commit: b7be9ba32169f342d031a877d3de4ed936dd7ae3<br/> https://github.com/Perl/perl5/commit/b7be9ba32169f342d031a877d3de4ed936dd7ae3<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update INTERFACE, INTERFACE_MACRO<br/><br/>Rewrite these sections:<br/><br/> =head3 The INTERFACE: Keyword<br/> =head3 The INTERFACE_MACRO: Keyword<br/><br/>also demote the second to be a head4 child of the first. Then expand<br/>the T_PTROBJ example to use INTERFACE as an alternative to ALIAS.<br/><br/><br/> Commit: aabcc04c244e36b3b4841fa903fde89a64720388<br/> https://github.com/Perl/perl5/commit/aabcc04c244e36b3b4841fa903fde89a64720388<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update: CASE<br/><br/>Rewrite this section:<br/><br/> =head3 The CASE: Keyword<br/><br/><br/> Commit: f0c901c4b4783aac3facb1af3147936cf3ad157f<br/> https://github.com/Perl/perl5/commit/f0c901c4b4783aac3facb1af3147936cf3ad157f<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: add &quot;Using Typemaps&quot; section<br/><br/>Populate this new section (except for the T_PTROBJ subsection, which had<br/>already been added by an earlier commit within this branch).<br/><br/>Note that the &quot;Common typemaps&quot; subsection could probably benefit<br/>from some further expansion by someone familiar with which built-in<br/>T_FOO entries are useful.<br/><br/><br/> Commit: 4e5f4d27b56552cfc52fc2ae1d7cf4283a683646<br/> https://github.com/Perl/perl5/commit/4e5f4d27b56552cfc52fc2ae1d7cf4283a683646<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/> M t/porting/known_pod_issues.dat<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update &quot;Using XS With C++&quot; section<br/><br/>Rewrite this section:<br/><br/> =head2 Using XS With C++<br/><br/>Disclaimer: I&#39;ve never written a proper C++ program. I had to<br/>(literally) dust off my 34-year old copy of Stroustrup(*) and also do<br/>some Googling. Hopefully what I&#39;ve written is sane.<br/><br/>(*) This was bought back in the days when people used to to learn things<br/>by buying books, and when I thought that I ought to know something about<br/>this newfangled C++ thing. I never got round to reading all of it: I<br/>discovered Perl around the same time, which looked to be a lot more fun.<br/><br/><br/> Commit: 9710ed344e3785c2a627aae3447ab566c2b51eb4<br/> https://github.com/Perl/perl5/commit/9710ed344e3785c2a627aae3447ab566c2b51eb4<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update MY_CXT section<br/><br/>Revise the text in this section:<br/><br/> =head2 Safely Storing Static Data in XS<br/><br/><br/> Commit: 8dd67ae9c1c919fd057753ddfc5c75ab96e43f5c<br/> https://github.com/Perl/perl5/commit/8dd67ae9c1c919fd057753ddfc5c75ab96e43f5c<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update EXAMPLES section<br/><br/>Rewrite this section:<br/><br/> =head1 EXAMPLES<br/><br/>Basically, delete the one big example in this section and instead<br/>provide links to various other examples already present in this document<br/>instead.<br/><br/><br/> Commit: fcf22295819a95a523e4fa2513ba8e3d8dc45200<br/> https://github.com/Perl/perl5/commit/fcf22295819a95a523e4fa2513ba8e3d8dc45200<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: update CAVEATS, AUTHOR, A DIAGNOSTICS<br/><br/>Tweak the final few sections of perlxs.pod.<br/><br/><br/> Commit: d08740e8b89a42c1dbcd19b20cfa463fe9f66bde<br/> https://github.com/Perl/perl5/commit/d08740e8b89a42c1dbcd19b20cfa463fe9f66bde<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/> M dist/ExtUtils-ParseXS/t/001-basic.t<br/><br/> Log Message:<br/> -----------<br/> perlxs.pod: standardise version numbers in the doc<br/><br/>After the big rewrite, various bits of text which describe when a<br/>particular feature was introduced or changed have ended up using a<br/>random mixture of Perl, ParseXS and xsubpp version numbers.<br/><br/>This commit standardises on xsubpp version numbers. These are mostly<br/>the same as ParseXS, but this handles the cases before ParseXS was<br/>split off from xsubpp. Perl versions suffer from not exactly matching<br/>when an xsubpp version number was incremented, and not matching what is<br/>used by the &quot;REQUIRE:&quot; keyword.<br/><br/>This commit also adds a short new section which tries to explain how the<br/>three sets of version numbers are related.<br/><br/><br/> Commit: 4f3cd13616550ed1e2d63d00b99fe960960657db<br/> https://github.com/Perl/perl5/commit/4f3cd13616550ed1e2d63d00b99fe960960657db<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-02 (Tue, 02 Dec 2025)<br/><br/> Changed paths:<br/> M dist/ExtUtils-ParseXS/lib/perlxs.pod<br/><br/> Log Message:<br/> -----------<br/> perlxs: tweaks following code review<br/><br/>The many commits in this branch have completely rewritten perlxs.pod.<br/>This commit applies all the minor tweaks suggested by reviewers.<br/><br/>(It was far too much like hard work to try and update each individual<br/>commit with the various changes.)<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/b16fbe94419f...4f3cd1361655<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65330.html Tue, 02 Dec 2025 12:06:52 +0000 [Perl/perl5] 676faf: regmatch(): improve savestack ix debuggingoutput by David Mitchell via perl5-changes Branch: refs/heads/davem/re_debug<br/> Home: https://github.com/Perl/perl5<br/> Commit: 676faf69f7f048f041c0569cb843f62e6e605762<br/> https://github.com/Perl/perl5/commit/676faf69f7f048f041c0569cb843f62e6e605762<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-01 (Mon, 01 Dec 2025)<br/><br/> Changed paths:<br/> M regexec.c<br/><br/> Log Message:<br/> -----------<br/> regmatch(): improve savestack ix debugging output<br/><br/>Under<br/><br/> use re Debug =&gt; &#39;STATE&#39;;<br/><br/>S_regmatch() produces various bits of debugging output regarding<br/>savestack manipulation; e.g. when the current index is saved; or when<br/>the savestack is popped back to that index on success or failure etc.<br/><br/>Unfortunately that output is patchy and inconsistent. For example it<br/>often talks confusingly about &quot;Setting an EVAL scope&quot; even when an EVAL<br/>hasn&#39;t been executed. And it doesn&#39;t log all savestack manipulation.<br/><br/>After this commit there is a standard set of debugging messages, such<br/>as:<br/><br/> savestack: snapping ix=14<br/> savestack: regcppush filled in range [14..18)<br/> savestack: regcppop freed in range [14..18)<br/> savestack: freeing in range [10..14)<br/><br/>which are consistently applied.<br/><br/>There should be no change in functionality unless that specific<br/>debugging is enabled.<br/><br/><br/> Commit: 6dee5e6b86cbdbd86719636ad33a5aced48764fe<br/> https://github.com/Perl/perl5/commit/6dee5e6b86cbdbd86719636ad33a5aced48764fe<br/> Author: David Mitchell &lt;[email protected]&gt;<br/> Date: 2025-12-01 (Mon, 01 Dec 2025)<br/><br/> Changed paths:<br/> M regcomp.sym<br/> M regexec.c<br/> M regnodes.h<br/><br/> Log Message:<br/> -----------<br/> regex engine: split EVAL_postponed_AB state<br/><br/>(This commit makes no practical changes in behaviour except for<br/>debugging output.)<br/><br/>Currently, one of the regex engine stack states is EVAL_postponed_AB.<br/><br/>When executing something like /(??{&#39;A&#39;})B/ where A and represent<br/>general subpatterns, the engine executes the eval code, which returns<br/>the string &#39;A&#39;, which is compiled into a subpattern. Then the engine<br/>pushes an EVAL_postponed_AB state and runs the subpattern until it<br/>reaches an END op. Then it pushes *another* EVAL_postponed_AB state and<br/>runs the B part of the pattern until the final END. Then before<br/>returning success, it pops EVAL_postponed_AB off the stack (twice),<br/>executing any cleanup required. Similarly during failure, the<br/>EVAL_postponed_AB_fail action will be executed once or twice (depending<br/>on whether it failed during A or B).<br/><br/>This commit splits that state into two,<br/><br/> EVAL_postponed_A<br/> EVAL_postponed_B<br/><br/>The first is pushed before running A, the second before running B.<br/>The actions currently remain the same and share the same code; i.e. this<br/>commit just does the equivalent of:<br/><br/>- case EVAL_postponed_AB:<br/>+ case EVAL_postponed_A:<br/>+ case EVAL_postponed_B:<br/> ... cleanup code ....<br/><br/>But it makes the code easier to understand, makes debugging output<br/>clearer, and will allow in future for the cleanup behaviours to differ<br/>between A and B.<br/><br/>This commit also fixes up a few debugging messages and code comments<br/>which were still referring to &#39;EVAL_AB&#39;, which was renamed to<br/>EVAL_postponed_AB some years ago.<br/><br/><br/>Compare: https://github.com/Perl/perl5/compare/676faf69f7f0%5E...6dee5e6b86cb<br/><br/>To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications<br/> https://www.nntp.perl.org/group/perl.perl5.changes/2025/12/msg65329.html Tue, 02 Dec 2025 11:05:40 +0000