Branch: refs/heads/davem/xs_fixups
Home: https://github.com/Perl/perl5
Commit: c5b0c7888402833638a3402cd15da766e5d89d23
https://github.com/Perl/perl5/commit/c5b0c7888402833638a3402cd15da766e5d89d23
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: improve else with no matching if err msg
Add '#': change
Error: 'else' with no matching 'if' in foo.xs, line 14
to be:
Error: '#else' with no matching '#if' in foo.xs, line 14
etc.
Commit: e8906a543b61351359838c4a642e43cc33d96292
https://github.com/Perl/perl5/commit/e8906a543b61351359838c4a642e43cc33d96292
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: improve err msg: Unterminated '#if/...
Make this generic error message be more specific:
Error: Unterminated '#if/#ifdef/#ifndef' in foo.xs, line 15
State what particular variety of #if wasn't terminated, and what line it
started on:
Error: Unterminated '#ifndef' from line 12 in foo.xs, line 15
Commit: 47228b3155d78c0d6a4acb1072df4cd25ff74174
https://github.com/Perl/perl5/commit/47228b3155d78c0d6a4acb1072df4cd25ff74174
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add Utilities::deathHint() method
There is already a WarnHint() method which prints a warning message
(adding file/lineno) and then appends a hint message in parentheses.
This commit adds a corresponding deathHint() method.
This method will be used in the next commit.
This commit also changes it so that the hint message is wrapped in a
single set of parentheses, rather than each line being individually
wrapped.
So for example, before:
Warning: no foo at foo.xs, line 7
(did you forget to add)
(a foo at the end of the line)
(or maybe at the start of the next line?)
after:
Warning: no foo at foo.xs, line 7
(did you forget to add
a foo at the end of the line
or maybe at the start of the next line?)
Commit: dbb2ddb1a44a61b2ff813a11bfdb2d8ec839d904
https://github.com/Perl/perl5/commit/dbb2ddb1a44a61b2ff813a11bfdb2d8ec839d904
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: improve 'not indented' err message
Sometimes the XS parser expects the next line *not* to be indented
(usually while parsing file-scoped items).
If it finds an indented line, it used to die with this error message:
Code is not inside a function (maybe last function was ended by a
blank line followed by a statement on column one?) in foo.xs, line 17
That error message was supposed to be a helpful hint for a common XS
programmer error; however, since it also obscures the *actual* error, it
can be just as confusing.
This commit changes it so that the error message makes clear that the
fault is that the current line is indented when an indented line wasn't
expected, but also gives two different hints depending on whether the
indented thing looks like a file-scoped keyword or not. So for example
this XS code:
#define FOO 1
PROTOTYPES: DISABLE
now gives this error message
Error: file-scoped keywords should not be indented in foo.xs, line 13
This is because before dying, the parser now checks whether the bad line
looks a bit like an indented file-scoped keyword. If it doesn't look
like a keyword, such as:
#define FOO 1
blah
then it now gives this error message:
Error: file-scoped directives must not be indented in foo.xs, line 13
(If this line is supposed to be part of an XSUB rather than being
file-scoped, then it is possible that your XSUB has a blank line
followed by a line starting at column 1 which is being misinterpreted
as the end of the current XSUB.)
which is an alternative wording of the original hint.
Commit: b7f17fd5999ec8872a79cb36cb0459b8090577bc
https://github.com/Perl/perl5/commit/b7f17fd5999ec8872a79cb36cb0459b8090577bc
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: improve err msg: Didn't find a MODULE ...
Change this warning message from/to:
Didn't find a 'MODULE ... PACKAGE ... PREFIX' line
Warning: no MODULE line found in XS file foo.xs
- As it's only a warning, include the 'Warning:' text.
- Include the name of the file.
- It is the lack of a MODULE keyword which is important; whether it
needs a PACKAGE and PREFIX as well isn't important at this point.
Commit: 4e2eba330f4fcc86300fdddc0d5c5d6de5c3d17e
https://github.com/Perl/perl5/commit/4e2eba330f4fcc86300fdddc0d5c5d6de5c3d17e
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
parseXS: fix warning on unparseable params
When the parameters in an XSUB's signature are unparseable using the
fancy regex which handles (x = ",", y) etc, it's supposed to print a
warning.
However, the code which emits the warning was calling an unknown Warn()
method and dying instead.
Fix and add a test.
(Ideally the signature in the new test aught actually to be parseable,
but that's an issue for another day.)
Commit: f3fa4ee0bb10fda5d38f29a21d6097e5943895df
https://github.com/Perl/perl5/commit/f3fa4ee0bb10fda5d38f29a21d6097e5943895df
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: avoid spurious CASE error msgs
Since the recent ParseXS refactoring, an XSUB where the first CASE
keyword wasn't at the start of the XSUB was, in addition to the
expected error, generating spurious additional errors. For example:
int abc(int x, int y)
INIT:
myinit
CASE: x > 0
CODE:
code1;
CASE:
CODE:
code2;
just before this commit was outputting all of:
Error: 'CASE:' after unconditional 'CASE:' in foo.xs, line 16
Error: no 'CASE:' at top of function in foo.xs, line 16
Error: no 'CASE:' at top of function in foo.xs, line 19
and after this commit (and also before refactoring) just:
Error: no 'CASE:' at top of function in foo.xs, line 16
Commit: 873f03845b469f9f7787a61a257f9eda1ec1c222
https://github.com/Perl/perl5/commit/873f03845b469f9f7787a61a257f9eda1ec1c222
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: improve 'definition too short' err msg
When the XS parser finds a line starting on column 1 which isn't a
recognised keyword or CPP directive or similar, it assumes that it must
be the start of a new XSUB. If that line is immediately followed by a
blank line, a fairly cryptic error message is emitted. For example,
these two lines:
int
BOO:
cause these two errors to be emitted:
Error: function definition too short 'int' in foo.xs, line 13
Error: function definition too short 'BOO:' in foo.xs, line 15
After this commit, the first error message is changed to:
Error: unrecognised line: 'int' in foo.xs, line 13
(possible start of a truncated XSUB definition?)
and the second to:
Error: unrecognised keyword 'BOO' in foo.xs, line 15.
This change acknowledges that an unrecognised line followed by a blank
line may not always be a bad XSUB start. In particular, if it looks like
it might be keyword, albeit an unrecognised one, say so. Otherwise,
emphasise that the line can't be parsed rather than just assuming its a
bad XSUB declaration.
In addition, the reporting method has been changed from blurt() to
death(), so that no more parsing takes place. blurt() is best for
semantic errors, where the basic syntax structure is still ok and
parsing can continue. An unrecognised line means something may have gone
badly wrong, so stop.
Commit: d19351bfb35995633830224123ab7bd11a6c6125
https://github.com/Perl/perl5/commit/d19351bfb35995633830224123ab7bd11a6c6125
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add error check for ALIAS and INTERFACE
Only one of ALIAS and INTERFACE should be used per XSUB. Otherwise the
CV's payload is sometimes an integer and sometimes a pointer. So any
generated C code is nonsense. So ban mixing them.
Commit: 3d843dc69d1d4eab209990d926f9a92b6ddb6fbe
https://github.com/Perl/perl5/commit/3d843dc69d1d4eab209990d926f9a92b6ddb6fbe
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: detect duplicate INTERFACE names
Previously, something like this silently passed:
INTERFACE: f1 f1
Make it an error.
Also, remove the unused %map variable from Node::INTERFACE::parse().
Commit: 6a369e121705da29dded45f9d92b7bfa94bb8ed2
https://github.com/Perl/perl5/commit/6a369e121705da29dded45f9d92b7bfa94bb8ed2
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: test and reword 'length with default' err
There are two types of disallowing of default values with a length(foo)
parameter:
foo(char *s, int length(s) = 0)
foo(int length(s), char *s = "")
There are are tests only for the first form. This commit adds a test
for the second, rewords it to make it clearer, and does a proper blurt()
rather than a bare die, so proper file and line numbers are shown.
Before:
default value not supported with length(NAME) supplied at
/.../perl-5.43.3.out/lib/5.43.3/ExtUtils/ParseXS/Node.pm line 1416,
<__ANONIO__> line 15.
After:
Error: default value for s not allowed when length(s) also present in
foo.xs, line 14
Commit: 30dca37c3dcb49dd88a35889ffd9527dcb2a1c35
https://github.com/Perl/perl5/commit/30dca37c3dcb49dd88a35889ffd9527dcb2a1c35
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add basic tests for param default values
For some reason I managed not to add any during earlier work expanding
the test suite.
Commit: 81a58a502cd1f5a4d2707a1576e35ed3bd49ac8f
https://github.com/Perl/perl5/commit/81a58a502cd1f5a4d2707a1576e35ed3bd49ac8f
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: detect missing param default expression
In something like
void
foo(int i = )
the XS parser previously silently accepted it and generated broken C
code. Now it dies.
Commit: 47bb1675879dd2293145e38b3238d1b015dc6522
https://github.com/Perl/perl5/commit/47bb1675879dd2293145e38b3238d1b015dc6522
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS:t/001-basic.t : add support for TODO tests
In the standard framework for this test file, allow an optional
extra field in the [ ...] array for each test which, if defined,
marks the test as TODO and becomes the TODO message.
This will be used in the next commit.
Commit: b235484000caede1ff93801b236294b41f66df66
https://github.com/Perl/perl5/commit/b235484000caede1ff93801b236294b41f66df66
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: 001-basic.t: consolidate INPUT tests
Move the various tests for INPUT: section syntax into a common place.
Also modernise many of those tests: many were added before the
test_many() framework was added to simplify XS syntax tests.
Commit: 38d51bcca802d5c9714fbf27a1b684867d9fe3c5
https://github.com/Perl/perl5/commit/38d51bcca802d5c9714fbf27a1b684867d9fe3c5
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add 'missing initialiser value' error
INPUT lines can have an optional initialiser, e.g.
foo(i)
int i = SvIV(ST($arg));
However if the initialiser was missing, such as:
foo(i)
int i = ;
then the XS parser silently succeeded, generating invalid C code.
Add a check and tests for this.
One existing test had to be modified slightly as it was now triggering
this new check; it now passes the new check, but continues to fail on
the later 'invalid parameter declaration' check, which is what it was
supposed to be testing.
Commit: 5cd089eb0b16af9bb225f3254e47d15443f5abf2
https://github.com/Perl/perl5/commit/5cd089eb0b16af9bb225f3254e47d15443f5abf2
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add tests for 'misplaced FOO:' error
Check that any file-scoped keywords appearing in XSUB scope raise an
error.
Commit: f77935167b9584eca6de45d145527fc3e572a797
https://github.com/Perl/perl5/commit/f77935167b9584eca6de45d145527fc3e572a797
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: warn on junk following a CODEish keyword
Keywords like CODE and INIT silently ignore anything on the keyword
line. For example this:
CODE: aaa
bbb
ccc
will add the two lines bbb and ccc to the output C file, and quietly
ignore the aaa text. This commit instead makes it warn (but still
discard).
The new tests both test for the new warning and confirm that the junk is
being ignored.
Commit: 08c0f65576ce3848e526ed956989de0b7ec7b691
https://github.com/Perl/perl5/commit/08c0f65576ce3848e526ed956989de0b7ec7b691
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
Log Message:
-----------
ParseXS: OVERLOAD: simplify regex
Clean up the regex which processes OVERLOAD keyword lines. Use //x;
and since most punctuation characters within a [] character class lose
their special regex meaning, remove lots of unnecessary '\'s
Should be no change in functionality.
Commit: 86139bbbfa3dbbba6fabcd43180a0526f0480a60
https://github.com/Perl/perl5/commit/86139bbbfa3dbbba6fabcd43180a0526f0480a60
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: warn on duplicate OVERLOAD entries
Previously this was silent; now it warns:
OVERLOAD: cmp cmp
Commit: 41abb7d3e2b7131a4c0bb8ce3227f7079ebed0d4
https://github.com/Perl/perl5/commit/41abb7d3e2b7131a4c0bb8ce3227f7079ebed0d4
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
Log Message:
-----------
ParseXS: refactor: split OVERLOAD args
use split, rather that while (s///), to process the arguments to an
OVERLOAD keyword line. This makes the code a little more comprehensible,
without changing functionality.
Commit: 11cd6717ce05d199ba258226cc957ce7c561fc45
https://github.com/Perl/perl5/commit/11cd6717ce05d199ba258226cc957ce7c561fc45
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: ban ALIAS: 0
Code like this is an error:
int
foo()
ALIAS: 1
but this was being silently allowed:
ALIAS: 0
due to code along the lines of 'die ... if $line', which was supposed to
be checking for residual unrecognised content.
Commit: ca97f48b4e312c81025a1c507da845ef8185123e
https://github.com/Perl/perl5/commit/ca97f48b4e312c81025a1c507da845ef8185123e
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: detect OUTPUT: SETMAGIC: bad arg values
Previously a bad OUTPUT line like this:
OUTPUT:
SETMAGIC: 1
emitted a generic and confusing warning message:
Error: OUTPUT SETMAGIC: not a parameter
because a SETMAGIC line which wasn't syntactically correct was parsed
as a general OUTPUT: line.
This commit instead treats it as a SETMAGIC line, but with an invalid
argument, and adds a suitable new error message:
Error: SETMAGIC: invalid value '1' (should be ENABLE/DISABLE)
Commit: 9e60b43dac553ac0355173a8a3d41459ef653849
https://github.com/Perl/perl5/commit/9e60b43dac553ac0355173a8a3d41459ef653849
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: 001-basic.t: fix comment typos
Commit: 8bac18d1f6947f5897fbf67514712897b0845d43
https://github.com/Perl/perl5/commit/8bac18d1f6947f5897fbf67514712897b0845d43
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add more function pointer type tests
Add more tests for where the specified type is a function point type,
such as 'int (*)(char *, long)'. This needs special processing by the XS
parser to stick the variable name into the '(*)'
There was an existing test for where an arg type was specified in an
INPUT line. Modernise this test to use the new test_many() XS-testing
framework, and add tests for where the type is specified in the XSUB's
signature, and where the return type is a function pointer.
Commit: 22a36eee323472a8e8a61170956c590b27f6ad45
https://github.com/Perl/perl5/commit/22a36eee323472a8e8a61170956c590b27f6ad45
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add FALLBACK tests and fix error call
Add some basic tests for this keyword, including a test for the
'invalid value' error.
Also, fix that error handling: it was calling $self->death() rather
than $pxs->death() and so was croaking with 'no such method'. Also, improve
the text of the error message.
Commit: 418861f5e09d87128fad65fe41b88595e48483db
https://github.com/Perl/perl5/commit/418861f5e09d87128fad65fe41b88595e48483db
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add tests for REQUIRE and improve err msg
Add some tests for this keyword (especially testing all the possible
errors that can be raised).
Also, improve the text of one of the error messages to indicate what a
valid REQUIRE value can be.
Commit: 5f31befbb895321e2b99bfd076ffc15b22eca38d
https://github.com/Perl/perl5/commit/5f31befbb895321e2b99bfd076ffc15b22eca38d
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: reword bad EN/DISABLE err msg
For file-scoped keywords which have only ENABLE or DISABLE as valid
values, change the error message for a bad value from/to:
Error: $keyword: ENABLE/DISABLE
Error: $keyword: invalid value '$s' (should be ENABLE/DISABLE)
to better indicate what the problem is.
Also fix the code comments at the top of a couple of test file code
blocks - some earlier cut+paste laziness by me left some blocks
incorrectly described.
Commit: a1a553490b4a07b04e758cc1b262454c8464d7dd
https://github.com/Perl/perl5/commit/a1a553490b4a07b04e758cc1b262454c8464d7dd
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: tidy up INCLUDE error messages
Unlike the rest of ParseXS, the error messages generated by INCLUDE and
INCLUDE_COMMAND didn't have an 'Error:' prefix. Add this, and do other
minor fixups.
Note that most of these errors aren't tested for. That will be fixed
shortly.
Commit: 68f61ee9abcffc1aeea69d297447cfd80b2c68d7
https://github.com/Perl/perl5/commit/68f61ee9abcffc1aeea69d297447cfd80b2c68d7
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
A dist/ExtUtils-ParseXS/t/XSloop.xsh
Log Message:
-----------
ParseXS: add basic tests for INCLUDE(_COMMAND)
There is currently a single test each for these two keywords in
002-more.t, which try to actually compile and run the generated C code.
This commit:
- adds two similar tests to 001-basic.t, which use the same test include
files, but which only generate the C file and test the contents, not
compile and run it.
- Adds a test for nearly every INCLUDE/INCLUDE_COMMAND error message,
none of which were tested before. Only two errors remain untested.
1) "Note: the INCLUDE directive with a command is discouraged"
which warns about non-portable usage, and which thus is difficult to
test portably.
2) "Error: INCLUDE_COMMAND: cannot run command"
which is for when the command fails. Perl does complicated things,
including a possible warning on STDERR in the forked child if it fails
to exec, plus dying in the parent with the same error. So I don't see an
easy way to portably test this.
This commit adds a new file, t/XSloop.xsh, which has an INCLUDE line
which refers to itself.
Commit: f3a4c43bb31c0f1b6f1aac72cc241a584b38e6e6
https://github.com/Perl/perl5/commit/f3a4c43bb31c0f1b6f1aac72cc241a584b38e6e6
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
Log Message:
-----------
ParseXS: no stderr noise on empty INCLUDE
Recent refactoring of mine introduced a minor bug whereby INCLUDEed
content would trigger a warning if it only contained whitespace or empty
lines:
Use of uninitialized value in scalar chomp at ...
The fix is trivial. I ought to have added a test, but that either
involves adding a new empty test file, or messing with
File::Spec->devnull(), or something; and life's too short.
Commit: c0034d125eb35eaa36fc2d085132b54911a4d35f
https://github.com/Perl/perl5/commit/c0034d125eb35eaa36fc2d085132b54911a4d35f
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: regularise INCLUDE pipe error handling
If INCLUDE or INCLUDE_COMMAND runs a pipe, there is code in the handler
to check for the return status of the sub-process being non-zero (e.g.
non-zero exit, died with signal etc).
That handling was a bit odd. Instead of using $pxs->death(...), it was
manually doing 'print STDERR ...; exit(1)'. Also, the error message was
displaying $!, which is unconnected with the return code of the child.
This commit:
- makes it use the death() method. As a side-effect, this makes it
display the correct line where the bad INCLUDE is located;
previously it displayed the end of the current paragraph + 1.
- Includes the value of $? rather than $! in the error message. It just
displays it as a 4-digit hex number rather than trying to decode the
its various parts.
- Uses the standard error message prefix form "Error: KEYWORD: ...".
- Adds a test.
Commit: 6091cb8b7c09aac80615f4c6f1946c29fa3ecf5f
https://github.com/Perl/perl5/commit/6091cb8b7c09aac80615f4c6f1946c29fa3ecf5f
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add tests for BOOT and TYPEMAP keywords
There were already a couple of TYPEMAP tests; this commit moves them to
be with other file-scoped keywords and adds more tests. There were
no basic tests of the BOOT keyword.
With this commit, all file-scoped keywords now have at least basic
tests.
Commit: 2d5b9590380775b9a44b541dd2829657878abc98
https://github.com/Perl/perl5/commit/2d5b9590380775b9a44b541dd2829657878abc98
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add basic tests for PREINIT keyword
Commit: 59c8f891b2a9772a21e484a544efad98ac7cf185
https://github.com/Perl/perl5/commit/59c8f891b2a9772a21e484a544efad98ac7cf185
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add some basic tests for INTERFACE_MACRO
Commit: 5a67d43d06458b7bff57b54615c321381394245e
https://github.com/Perl/perl5/commit/5a67d43d06458b7bff57b54615c321381394245e
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: test INTERFACE name mangling
perxs documents how the perl and C function names are derived from the
interface name depending on prefix and class names. Add tests to confirm
that the documentation is correct.
Commit: b280d3fc897f2e4d7e57da61cba7f4acefa040a3
https://github.com/Perl/perl5/commit/b280d3fc897f2e4d7e57da61cba7f4acefa040a3
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/114-blurt_death_Warn.t
Log Message:
-----------
ParseXS: don't skip death() test
t/114-blurt_death_Warn.t used to skip testing the death() method
as as it used to exit. These days the config_die_on_error flag can
be set to tell it to die instead, which can be trapped with eval.
So enable this test now.
Commit: b4537c139da22389c445f4c0149eba5984b30ae0
https://github.com/Perl/perl5/commit/b4537c139da22389c445f4c0149eba5984b30ae0
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
PaeseXS: warn on duplicate FALLBACK
The FALLBACK: value should only be specified at most once per package.
So add a new warning.
Commit: ae1e7b11db138298f7209aaf4192580a4a9465df
https://github.com/Perl/perl5/commit/ae1e7b11db138298f7209aaf4192580a4a9465df
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/perlxs.pod
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: doc test for TYPEMAP after XSUB
Add a test for a recently fixed bug.
>From the code comments for that new test:
Prior to v5.43.5-157-gae3ec82909, xsubpp 3.61, a TYPEMAP appearing
*directly* after an XSUB affected that preceding XSUB.
This was due to TYPEMAPs being processed on the fly by fetch_para():
while looking for the end of the XSUB, it would process the
following typemap, *then* return the XSUB lines to be processed by
the main loop. Thankfully TYPEMAP is now handled as a normal
keyword.
And document that the quirk is now only in older versions.
Commit: e741f8773221a9c1954f219c9307c246677aa855
https://github.com/Perl/perl5/commit/e741f8773221a9c1954f219c9307c246677aa855
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: be stricter on REQUIRE arg
The argument to the REQUIRE: keyword is supposed to be a number:
NNN or MMM.NNN. The validating regex didn't do a closing $, so any junk
following the value was allowed through, e.g. 3.0.0 or 3.0XYZ. This
commit makes such variants an error.
This seems unlikely to cause any backcompat issues.
Also, the invalid version number immediately has a numeric comparison
applied to it, which since 5.42.0 has been generating a Perl warning
like:
Argument "3.0.0" isn't numeric in numeric ge (>=) at ...
Also a quick grep of CPAN shows no obvious distros which would break
(the REQUIRE keyword isn't common).
Commit: 4fd6c6f2e758152d666c80263252075266ebec8a
https://github.com/Perl/perl5/commit/4fd6c6f2e758152d666c80263252075266ebec8a
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
Log Message:
-----------
ParseXS: refactor: don't set $_ in Param::parse()
This method had residual code from the old way of doing things, along the
lines of:
$_ = $param_text;
...
if (/.../) {...}
Instead just use the $param_text var explicitly when matching etc, as
relying on $_ being valid across a 150 line sub isn't best practice.
Commit: 1eebbe4ceebc6ff7f5bed97557a9bf338467b66c
https://github.com/Perl/perl5/commit/1eebbe4ceebc6ff7f5bed97557a9bf338467b66c
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: ban length(s) without a type
This is legal:
void
foo(char *s, int length(s))
but so was this; make it illegal:
void
foo(char *s, length(s))
Previously if the type of length() wasn't specified, it would (depending
on the xsubpp version) either generate broken C code and/or emit
lots of 'Use of uninitialized value' type noise.
Commit: 06f41ac601e9e04ff34b3f108a3d60c05a2cf66f
https://github.com/Perl/perl5/commit/06f41ac601e9e04ff34b3f108a3d60c05a2cf66f
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
Log Message:
-----------
ParseXS: tweak param-parsing code
In a couple of places there are checks on whether certain constructs
such as IN_OUT are disallowed due to a switch like -noinout.
Because these use blurt() to report the error, parsing will continue.
So this commit makes the parsing code still process the IN_OUT modifier
(or whatever) as normal, to reduce the risk of a cascade of weird
errors.
Commit: 3ae167dc3f77f60ba254b016a3effb40c0057ac8
https://github.com/Perl/perl5/commit/3ae167dc3f77f60ba254b016a3effb40c0057ac8
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
Log Message:
-----------
ParseXS: reindent block following previous commit
whitespace-only change
Commit: c900fb411cef82f6d6933b2fff10ef68633352ca
https://github.com/Perl/perl5/commit/c900fb411cef82f6d6933b2fff10ef68633352ca
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
PasrseXS: ban IN_OUT etc modifiers with length(s)
Disallow signatures like
int
foo(char *s, IN_OUT int length(s))
Most of the I/O modifiers make no sense with length(), and either
produced bad C code, or in recent Perls, generated an internal error.
There seems little benefit in getting a couple of cases to work for some
sort of obscure semantics. So this commit goes for a blanket ban.
Commit: d9502313571c00f2e4072d0d32b4233f9cebcb0c
https://github.com/Perl/perl5/commit/d9502313571c00f2e4072d0d32b4233f9cebcb0c
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: length() tests: add type
Several tests which were expected to raise an error didn't include a type
for the length() pseudo-parameter. This was harmless, as the error that
was being tested for occurred before any check for a missing type.
But best for a test case to only include the one syntax error which is
actually being checked for.
Commit: c8378cf6bb5baeca23f55ceb6e864917b88efe5e
https://github.com/Perl/perl5/commit/c8378cf6bb5baeca23f55ceb6e864917b88efe5e
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: test for length(s) = NO_INIT
This is already banned under the 'no default value for length' rule, but
add a test for the specific NO_INIT variant. This is in case
special-case parsing code for NO_INIT ever inadvertently bypasses the
length() error-detecting code.
Commit: 0b0f7749422c0355ecee60b68ac2114f6c82194a
https://github.com/Perl/perl5/commit/0b0f7749422c0355ecee60b68ac2114f6c82194a
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: ban length() on placeholder param
Make this an error:
int
foo(placeholder, int length(placeholder))
A parameter without a type is a placeholder: it's not a real variable,
so its length can't be retrieved. Prior to this commit, autocall would
pass an uninitialised variable to the C library function.
Also add a code comment explaining where checks like these are done
Commit: b2b45bd86d7c03d39ad964c966d782203c385578
https://github.com/Perl/perl5/commit/b2b45bd86d7c03d39ad964c966d782203c385578
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: move length() default var check earlier
There is a check which disallows the parameter associated with length()
to have a default value; e.g.:
foo(char *s = "", int length(s))
However the check for this was done later than all the other length
param consistency checks; in fact it was being done during typemap
lookup for that parameter, and was only done if the param mapped to type
T_PV.
This commit moves the check earlier, to be with all the other
basic parsing consistency checks, and makes it so that even non T_PV
types trigger the error.
A new test has been added for the non-T_PV case, and an existing test
has been fixed that was unnecessarily (it was not part of the test)
using length() on a non-T_PV param.
Commit: 85f90567f220c54dd342aead7c9c11d07d120c01
https://github.com/Perl/perl5/commit/85f90567f220c54dd342aead7c9c11d07d120c01
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: ban OUT* params with length()
A few commits ago, 'foo(char *s, IN_OUT length(s))' etc was banned.
This commit adds a similar but less harsh restriction on the parameter
itself; e.g. this is banned now:
foo(OUT char *s, int length(s))
Any modifier on s which doesn't have an IN component is now banned, as
without IN, the generated C code will skip doing:
s = SvPV(ST(0), STRLEN_length_of_s);
and so the length-setting doesn't get done.
Commit: 10fc5c3b0c0b30a9b757ce13ff1fe22214ee9a63
https://github.com/Perl/perl5/commit/10fc5c3b0c0b30a9b757ce13ff1fe22214ee9a63
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
Log Message:
-----------
ParseXS: refactor: simplify {is_ansi} field
Now that length(s) pseudo-parameters raise an error if they don't have a
type, the is_ansi flag can simply indicate that a parameter had its
type included in the signature, and thus doesn't need an INPUT entry.
This allows some code to be simplified: no more
if ($self->{is_ansi} || $self->{is_length})
style code.
Commit: f4801328c3d44645aab817517fcfb2e5b12c9fd2
https://github.com/Perl/perl5/commit/f4801328c3d44645aab817517fcfb2e5b12c9fd2
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
Log Message:
-----------
ParseXS: rename has_length field to length_param
In something like
int
foo(char *s, int length(s))
the node object for the first parameter has a $self->{has_length}
boolean flag set, to indicate that it is associated with a length()
pseudo-parameter (and the pseudo-parameter has its $self->{is_length}
field set).
This commit renames the has_length field to length_param, and changes it
from being a boolean to being a ref to the pseudo-parameter's node object.
The effect is the same (it can still be used as a boolean), but the ref
will be useful in the next commit.
Commit: 0553510f6e37c4a788843c84cae96bddc5354691
https://github.com/Perl/perl5/commit/0553510f6e37c4a788843c84cae96bddc5354691
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
Log Message:
-----------
ParseXS: reorganise length param code generation
In something like
int
foo(char *s, int length(s))
the presence of the length pseudo-parameter causes the
declaration/initialisation code for the 's' parameter to change from a
simple:
char *s = (char *)SvPV_nolen(ST(0));
to the more complex:
STRLEN STRLEN_length_of_s;
int XSauto_length_of_s;
char * s = (char *)SvPV(ST(0), STRLEN_length_of_s);
XSauto_length_of_s = STRLEN_length_of_s;
The responsibility for generating that extra code is spread around
multiple places; this commit attempts to more centralise it.
This commit has a side effect: previously the declarations of the
STRLEN/XSauto variables for *all* length-ish parameters came first,
before the declarations of any ANSI parameters; now they come just
before the declaration of each associated variable (such as the
'char *s = ...' above). This is unlikely to have any practical downside.
The actual change is that previously, when as_input_code() was called
twice, once for 's' and once for 'length(s)', the first call emitted the
'char *s' line, while the second call emitted the other three lines.
After this commit, the first call generates all four lines, and the
second, nothing.
Commit: 892d49a70d5d31aaddfa9b5d281de57428c8fde9
https://github.com/Perl/perl5/commit/892d49a70d5d31aaddfa9b5d281de57428c8fde9
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
Log Message:
-----------
ParseXS: simplify XSauto length() param handling
Change the $param->{var} value of a length pseudo-parameter from
'length(s)' to 'XSauto_length_of_s'.
This one simple trick allows a bunch of special-casing code in various
places to be removed. After this commit, the string 'XSauto_length_of_'
only appears once in Node.pm, apart from code comments.
No changes to the generated C code.
Commit: 0b72342ffbf8dfdacc94cd86ad8118433fd494ab
https://github.com/Perl/perl5/commit/0b72342ffbf8dfdacc94cd86ad8118433fd494ab
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add test for alien length type
This is legal:
int
foo(char *s, blah length(s))
where the 'blah' type doesn't have to be found in a typemap.
Add a test for this.
Commit: ea3ca64fabab4da5ecf51f016d4629a54e89213e
https://github.com/Perl/perl5/commit/ea3ca64fabab4da5ecf51f016d4629a54e89213e
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Node.pm
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: better handle non-T_PV length(s) params
In something like
int
foo(char *s, int length(s))
the XS parser has been sort of assuming that the type of s, e.g.
'char *', always maps to T_PV.
If this is the case, then the typemap entry which would normally be
used, i.e.
$var = ($type)SvPV_nolen($arg)
is discarded, and a hard-coded entry is used instead:
($type)SvPV($arg, STRLEN_length_of_$var);
(with the fields being populated directly rather than via the standard
typemap template expansion route).
This goes horribly wrong if the type of s doesn't map to T_PV. Before
this commit, the parser just silently used the standard template. This
meant that STRLEN_length_of_s didn't get initialised, and SEGVs ensued.
It also didn't work well if the XS code tried to override the standard
T_PV INPUT template.
Following this commit, the parser doesn't care what T_FOO the string
variable's type maps to; instead it just tries to modify the current
typemap template to be suitable for setting the string length too. The
new rules are:
* If the template already contains 'STRLEN_length_of_$var', use it
unmodified; the assumption is that some XS author has been playing fast
and loose with the implementation and knows what they are doing.
* If the template looks like
... SvPV..._nolen...($arg) ...
then modify it to the following (i.e. strip out the _nolen and add an
arg):
... SvPV......($arg, STRLEN_length_of_$var) ...
and allow the normal template processing and expansion to proceed.
I.e. modify anything which looks like an SvPV_nolen() variant,
including SvPVutf8_nolen(), SvPV_nolen_const() etc.
* Otherwise die, with a long hint message explaining why the template
couldn't be modified.
The original issue, with a rejected fix and a discussion which
ultimately led to this commit, can be found in PR #23479.
Commit: 059ff1aaf9140739a82ee73c8177f1985a70ff37
https://github.com/Perl/perl5/commit/059ff1aaf9140739a82ee73c8177f1985a70ff37
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: refactor: 001-basic.t: add flags
Currently most individual tests in this file are specified within its
test_many() framework by using an array ref such as
[ 0, 0, qr{...}, "description", "optional TODO text" ]
where the first two values are 0 or 1, and indicate that the test
should be inverted and/or that the regex should be matched against
STDRRR rather than STDOUT.
This commit converts those two boolean fields into a single flags
integer, with NOT and ERR bit constants available. For example,
[ 0, 0, qr{...}, "description 1"]
[ 0, 1, qr{...}, "description 2"]
[ 1, 1, qr{...}, "description 3"]
becomes
[ 0 , qr{...}, "description 1"]
[NOT , qr{...}, "description 2"]
[ERR|NOT , qr{...}, "description 3"]
This commit is huge because it is changing 1000 tests; but the change is
simple.
The next commit will add a TODO flag.
Commit: fc6a7f05e67a3cf75024d9671d4101b8eda4e26f
https://github.com/Perl/perl5/commit/fc6a7f05e67a3cf75024d9671d4101b8eda4e26f
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: refactor: 001-basic.t: add TODO flag
Following on from the previous commit which added a flags field to each
test in its test_many() framework, add a TODO flag. A test is now
indicated to be TODO by the presence of this flag rather than by an
optional extra text field in the test array ref. This extra field can
still be present, and still acts as the text to use for 'local $TODO =
"..."', but now its an error for that field to be present without the
TODO flag also.
Commit: 2523c5fea82c2371ce7cd092d2c0c049458ad34e
https://github.com/Perl/perl5/commit/2523c5fea82c2371ce7cd092d2c0c049458ad34e
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: 001-basic.t: add 'use warnings'
This test script already had 'use strict' at the top, but not warnings
for some reason.
This commit adds 'use warnings'. Nothing broke.
Commit: 31b6a9ffa8f9bdeb03a3497f18449abd65fa1f20
https://github.com/Perl/perl5/commit/31b6a9ffa8f9bdeb03a3497f18449abd65fa1f20
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: 001-basic.t: simplify test API
The test_many() framework local to 001-basic.t was originally designed
for the lines each test XS code fragment to be passed as an array ref,
e.g.
[
...,
[
'int',
'foo(int aaa)',
],
...,
],
I soon started using the heredoc / Q mechanism to instead pass the text
as a single multi-line string within the arrayref, e.g.
[
...,
[ Q(<<'EOF') ],
|int
|foo(int aaa)
EOF
...,
],
and the bulk of the tests in this test file now use that second format.
This commit make it stop expecting that argument to be an arrayref and
makes it just be a single multiline string instead. This commit converts
all the tests of either of the two formats above into the simpler:
[
...,
Q(<<'EOF'),
|int
|foo(int aaa)
EOF
...,
],
This is a big commit, but its basically doing the same trivial change a
thousand times.
Commit: d803445d0333d1655adad61903ec0ebfbfe83bcd
https://github.com/Perl/perl5/commit/d803445d0333d1655adad61903ec0ebfbfe83bcd
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: 001-basic.t: modernise default test
Remove a test using the old-style hand-rolled test mechanism
and add a similar test using the newer test framework.
Commit: f3d26a5cfa8ea27a56016386f08e8e7e676f1d00
https://github.com/Perl/perl5/commit/f3d26a5cfa8ea27a56016386f08e8e7e676f1d00
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: 001-basic.t: add basic type tests
Early in the file, add a set of basic type lookup tests. Similar lookups
are done all over this test file, but there wasn't a coordinated set
of tests to check all the basic permutations.
Also, remove one old-style hand-rolled test and incorporate its intent in
one of the new tests.
Commit: 122c268d69aa9ccc296fe85bfdc650518d4ec0cd
https://github.com/Perl/perl5/commit/122c268d69aa9ccc296fe85bfdc650518d4ec0cd
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: 001-basic.t: add tests for OUT with INPUT
There are already a set of tests for the various OUT modifiers
where the parameter types are specified in the signature. Add a duplicate
set of tests where the types are specified on INPUT lines instead.
Also remove an old-style hand-rolled test which tested this but just for
the single 'OUT' modifier.
Commit: 92e42d464bcf02433068cefc01e8c40bb3c49e4d
https://github.com/Perl/perl5/commit/92e42d464bcf02433068cefc01e8c40bb3c49e4d
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: 001-basic.t: modernise usage test
Remove a test using the old-style hand-rolled test mechanism
and add a similar test using the newer test framework.
Commit: 4d99f29f887bb5779b7bf7122f140d74b0c01dd7
https://github.com/Perl/perl5/commit/4d99f29f887bb5779b7bf7122f140d74b0c01dd7
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: 001-basic.t: add more ellipsis tests
Add more tests for foo(int i, ...) style signatures, especially when
mixed with default values.
Modernise the couple of existing ellipsis tests which still used the
old-style hand-rolled test mechanism.
Commit: d8d0f5fccbe2ec62209d2ba9518368bc72a4769d
https://github.com/Perl/perl5/commit/d8d0f5fccbe2ec62209d2ba9518368bc72a4769d
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: t/001-basic.t: modernise C++ test
There are already a good set of modern tests for C++/class support.
Remove the one C++ test still using the old-style hand-rolled test
mechanism and add a similar test to the new-style tests.
Commit: 70a73b4603493f04e4fe2ded301fccf7e3dad4c3
https://github.com/Perl/perl5/commit/70a73b4603493f04e4fe2ded301fccf7e3dad4c3
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
M dist/ExtUtils-ParseXS/t/114-blurt_death_Warn.t
R dist/ExtUtils-ParseXS/t/XSNoMap.xs
Log Message:
-----------
ParseXS: delete t/XSNoMap.xs
This is a short test file whose sole purpose is to contain a syntax
error which will trigger a call to $self->death(). A test in
t/001-basic.t then checks that the error is caught by eval and doesn't
appear on STDERR.
However, there is already a test framework in t/114-blurt_death_Warn.t
to test the death() etc API calls. So extend one of those tests to
confirm that STDERR is empty, and remove XSNoMap.xs and its associated
test in 001-basic.t.
Commit: 424adb5d4d74901602e6a35331882dd7576ad586
https://github.com/Perl/perl5/commit/424adb5d4d74901602e6a35331882dd7576ad586
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: 001-basic.t: improve test_many()
Improve the main test framework function used in the file.
Add an optional extra parameter which contains options to pass to the
process_file() method, and rerwrite the function's description
Commit: 5ba7107f6bf2c404384fc15b5ec77dc0826e6858
https://github.com/Perl/perl5/commit/5ba7107f6bf2c404384fc15b5ec77dc0826e6858
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: t/001-basic.t: modernise -nofoo tests
Modernise the tests which check for errors under the -noargtypes,
-noinout flags.
Commit: 9a9dfe6f107d65b2dd6b35e6826340bcefa138c6
https://github.com/Perl/perl5/commit/9a9dfe6f107d65b2dd6b35e6826340bcefa138c6
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: t/001-basic.t: modernise input ref test
Modernise the very basic test which checks that using a string
reference as the XS input file gives sane results.
Commit: 1bb2ed97fe6f5715913215dc12f05b230a996eba
https://github.com/Perl/perl5/commit/1bb2ed97fe6f5715913215dc12f05b230a996eba
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
R dist/ExtUtils-ParseXS/t/XSAlias.xs
Log Message:
-----------
ParseXS: delete t/XSAlias.xs
In t/001-basic.t there are a bunch of old-style tests for the ALIAS
keyword which read from t/XSAlias.xs. There are also a bunch of
new-style tests which don't need an external test file.
This commit deletes the old-style tests and XSAlias.xs, and augments the
new-style tests with anything that was only covered in the old tests.
Commit: d9edf7d9b788e9a7e67489382325f6e5ee089113
https://github.com/Perl/perl5/commit/d9edf7d9b788e9a7e67489382325f6e5ee089113
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
R dist/ExtUtils-ParseXS/t/XSTightDirectives.xs
Log Message:
-----------
ParseXS: delete t/XSTightDirectives.xs
In t/001-basic.t there is an old-style test for an XSUB being
'tightly cuddled' by #if/#else/#endif, i.e. where there isn't a blank
line after each CPP directive. This test reads from t/XSTightDirectives.xs.
There are also some new-style tests for CPP directives.
This commit deletes the old-style test and XSTightDirectives.xs, and
augments the new-style tests with a cuddle test.
Commit: f4b9a48a54d59bfa57f49b9386dadfdd8668179e
https://github.com/Perl/perl5/commit/f4b9a48a54d59bfa57f49b9386dadfdd8668179e
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
R dist/ExtUtils-ParseXS/t/XSFalsePositive.xs
R dist/ExtUtils-ParseXS/t/XSFalsePositive2.xs
Log Message:
-----------
ParseXS: delete t/XSFalsePositive*.xs
In t/001-basic.t there are a couple of old-style tests which check that
the 'duplicate XSUB' warning isn't emitted when one of the two XSUBs
with the same name is protected by an '#if/#endif' guard.
There are better tests for this elsewhere in 001-basic.t now, so
this commit deletes the old tests and their associated test files:
t/XSFalsePositive.xs
t/XSFalsePositive2.xs
Commit: 806ae18f150f7b5fb2a2ea4d56752c65e3937745
https://github.com/Perl/perl5/commit/806ae18f150f7b5fb2a2ea4d56752c65e3937745
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
R dist/ExtUtils-ParseXS/t/XSBroken.xs
Log Message:
-----------
ParseXS: delete t/XSBroken.xs
In t/001-basic.t there is an old-style test for the 'no INPUT
definition' error message, which reads from t/XSBroken.xs. There is also
a similar new-style test which doesn't need an external test file.
This commit deletes the old-style test and XSBroken.xs.
It also improves the new-style slightly - it checks for more of the
error message than before.
Commit: 84f83b38df7add3ee3e8cf3fe027b813980fc2e3
https://github.com/Perl/perl5/commit/84f83b38df7add3ee3e8cf3fe027b813980fc2e3
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
R dist/ExtUtils-ParseXS/t/115-avoid-noise.t
R dist/ExtUtils-ParseXS/t/XSWarn.xs
Log Message:
-----------
ParseXS: delete t/115-avoid-noise.t, t/XSWarn.xs
This test file and associated data file was added to check that there
are no "uninit var" warnings when an 'alien' variable is declared - i.e.
one which appears in an INPUT line but not in the XSUB's signature.
There are better tests for this now in 001-basic.t, so this commit
deletes those two files. It also adds the exact test from them to the
new-style 'alien' test section, even though its not strictly necessary.
Commit: b0e36635f8436569a372f8b01eb73f7f20eb1364
https://github.com/Perl/perl5/commit/b0e36635f8436569a372f8b01eb73f7f20eb1364
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
M dist/ExtUtils-ParseXS/t/002-more.t
M dist/ExtUtils-ParseXS/t/003-usage.t
A dist/ExtUtils-ParseXS/t/301-run-basic.t
Log Message:
-----------
ParseXS: add 301-run-basic.t
In summary: move the execution tests from 001-basic.t into their
own file, in a new number range 3xx.
In detail: originally, 001-basic.t parsed XSTest.xs into XSTest.c,
then ran a C compiler on it and tried to load the object file and
call some of the XSUBs within it.
Over time, 001-basic.t accumulated lots of tests which only run the XS
Parser and use regexes to check for the correct snippets of C code (i.e.
no C compiler is used).
My goal is that 0xx-foo.t files will eventually only run the XS parser
and test with regexes; while the heavy-duty tests which actually use a C
compiler will come under 3xx-run-foo.t.
So this commit moves the code which messes with XSTest.xs and XSTest.c
into 301-run-basic.t.
The next two commits will rename 002-more.t and 003-usage.t (which compile
XSMore.xs and XSUsage.xs) to 30x-run-foo.t
Commit: 195e097f4395c5332a1401201872881cacf7dec8
https://github.com/Perl/perl5/commit/195e097f4395c5332a1401201872881cacf7dec8
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
R dist/ExtUtils-ParseXS/t/002-more.t
A dist/ExtUtils-ParseXS/t/302-run-more.t
Log Message:
-----------
ParseXS: rename t/002-more.t to t/302-run-more.t
See the previous commit for the rationale.
Commit: ef9938c6515391c29bb2b3242a7af066fcaf9f9f
https://github.com/Perl/perl5/commit/ef9938c6515391c29bb2b3242a7af066fcaf9f9f
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
R dist/ExtUtils-ParseXS/t/003-usage.t
A dist/ExtUtils-ParseXS/t/303-run-usage.t
Log Message:
-----------
ParseXS: rename t/003-usage.t to t/303-run-usage.t
See the previous commit but one for the rationale.
Commit: c35a6ecb27914ebb88591837d737138b7ea1d6d0
https://github.com/Perl/perl5/commit/c35a6ecb27914ebb88591837d737138b7ea1d6d0
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/301-run-basic.t
M dist/ExtUtils-ParseXS/t/302-run-more.t
M dist/ExtUtils-ParseXS/t/303-run-usage.t
Log Message:
-----------
ParseXS: add top comments to new 3xx-run-foo files
Add some comments at the top of these three new test files to explain
their purpose.
Commit: 45c3b19990a96290ee38ca668818532fbecac2e7
https://github.com/Perl/perl5/commit/45c3b19990a96290ee38ca668818532fbecac2e7
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
A dist/ExtUtils-ParseXS/t/000-version.t
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add t/000-version.t
This commit moves a test out of 001-basic.t into its own test file which
checks that ExtUtils::ParseXS can be loaded and that its version matches
that in lib/perxs.pod.
As of this commit, 001-basic.t now contains only parse tests of XS
snippets using the test_many() framework. Previous commits have removed
anything else out of it.
The next series of commits will split 001-basic.t into several
smaller files, as its currently about 7000 lines long.
Commit: f94260667c2d025d0fccf0423169081703d0adb2
https://github.com/Perl/perl5/commit/f94260667c2d025d0fccf0423169081703d0adb2
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
A dist/ExtUtils-ParseXS/t/lib/TestMany.pm
Log Message:
-----------
ParseXS: add t/lib/TestMany.pm
Move the test_many() sub and associated stuff out of t/001-basic.t
and into its own module so that it can be shared across multiple test
files. This is a prelude to splitting t/001-basic.t.
Commit: fa03db4db703733e874910b96ade301fec5a5726
https://github.com/Perl/perl5/commit/fa03db4db703733e874910b96ade301fec5a5726
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
A dist/ExtUtils-ParseXS/t/002-parse-file-scope.t
Log Message:
-----------
ParseXS: add t/002-parse-file-scope.t
Move out of 001-basic.t and into their own test file, the tests which
are concerned with things which can appear at file-scope in an XS file
(i.e. outside an XSUB), apart from file-scoped keywords.
This is just several simple cut and pastes of blocks of tests; no
changes have been made to the tests themselves.
This commit is part of splitting 001-basic.t into several smaller files,
with a more coherent grouping.
Commit: e2a567b83f47453564ce596c8e2f0c945883a908
https://github.com/Perl/perl5/commit/e2a567b83f47453564ce596c8e2f0c945883a908
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
A dist/ExtUtils-ParseXS/t/003-parse-file-scope-keywords.t
Log Message:
-----------
ParseXS: add t/003-parse-file-scope-keywords.t
Move out of 001-basic.t and into their own test file, the tests which
are concerned with keywords which can appear at file-scope in an XS file
(i.e. outside an XSUB).
This is just several simple cut and pastes of blocks of tests; no
changes have been made to the tests themselves.
This commit is part of splitting 001-basic.t into several smaller files,
with a more coherent grouping.
Commit: 74f6996bef6a9f16b18fbf978c40f64c481f5f52
https://github.com/Perl/perl5/commit/74f6996bef6a9f16b18fbf978c40f64c481f5f52
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
A dist/ExtUtils-ParseXS/t/004-parse-xsub-declaration.t
Log Message:
-----------
ParseXS: add t/004-parse-xsub-declaration.t
Move out of 001-basic.t and into their own test file, the tests which
are concerned with parsing the declaration of an XSUB (i.e. the first
two lines).
This is just several simple cut and pastes of blocks of tests; no
changes have been made to the tests themselves.
This commit is part of splitting 001-basic.t into several smaller files,
with a more coherent grouping.
Commit: 81a841cf28f4d38870a30144469344740a2651c3
https://github.com/Perl/perl5/commit/81a841cf28f4d38870a30144469344740a2651c3
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
A dist/ExtUtils-ParseXS/t/005-parse-parameters.t
Log Message:
-----------
ParseXS: add t/005-parse-parameters.t
Move out of 001-basic.t and into their own test file, the tests which
are concerned with parsing the individual parameters of an XSUB.
This is just several simple cut and pastes of blocks of tests; no
changes have been made to the tests themselves.
This commit is part of splitting 001-basic.t into several smaller files,
with a more coherent grouping.
Commit: 03c13d7f5c8725c59ac2c7b4d893e0845be81849
https://github.com/Perl/perl5/commit/03c13d7f5c8725c59ac2c7b4d893e0845be81849
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
A dist/ExtUtils-ParseXS/t/006-parse-return-type.t
Log Message:
-----------
ParseXS: add t/006-parse-return-type.t
Move out of 001-basic.t and into their own test file, the tests which
are concerned with parsing the return type of an XSUB.
This is just several simple cut and pastes of blocks of tests; no
changes have been made to the tests themselves.
This commit is part of splitting 001-basic.t into several smaller files,
with a more coherent grouping.
Commit: 380e7ef6c5b76647ac4281b89e14a30fa54eb24e
https://github.com/Perl/perl5/commit/380e7ef6c5b76647ac4281b89e14a30fa54eb24e
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
A dist/ExtUtils-ParseXS/t/007-parse-input-output.t
Log Message:
-----------
ParseXS: add t/007-parse-input-output.t
Move out of 001-basic.t and into their own test file, the tests which
are concerned with parsing the INPUT and OUTPUT keywords of an XSUB.
This is just several simple cut and pastes of blocks of tests; no
changes have been made to the tests themselves.
This commit is part of splitting 001-basic.t into several smaller files,
with a more coherent grouping.
Commit: 1348a3f16c19c16eaaf6fc1683b9ae5d1f72c8cd
https://github.com/Perl/perl5/commit/1348a3f16c19c16eaaf6fc1683b9ae5d1f72c8cd
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
A dist/ExtUtils-ParseXS/t/008-parse-xsub-keywords.t
Log Message:
-----------
ParseXS: add t/008-parse-xsub-keywords.t
Move out of 001-basic.t and into their own test file, the tests which
are concerned with parsing the keywords (except INPUT and OUTPUT) of an
XSUB.
This is just several simple cut and pastes of blocks of tests; no
changes have been made to the tests themselves.
This commit is part of splitting 001-basic.t into several smaller files,
with a more coherent grouping.
Commit: d66061698b8ac4490e5f68db940f394f61f3b372
https://github.com/Perl/perl5/commit/d66061698b8ac4490e5f68db940f394f61f3b372
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/001-basic.t
A dist/ExtUtils-ParseXS/t/009-parse-c-plusplus.t
Log Message:
-----------
ParseXS: add t/009-parse-c-plusplus.t
Move out of 001-basic.t and into their own test file, the tests which
are concerned with parsing the C++ support features for XSUBs.
This is just several simple cut and pastes of blocks of tests; no
changes have been made to the tests themselves.
This commit is part of splitting 001-basic.t into several smaller files,
with a more coherent grouping.
Commit: 5ca1f92b6d02eddd098ccf998bbc5bc55a4184cd
https://github.com/Perl/perl5/commit/5ca1f92b6d02eddd098ccf998bbc5bc55a4184cd
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
R dist/ExtUtils-ParseXS/t/001-basic.t
A dist/ExtUtils-ParseXS/t/001-parse-basic.t
Log Message:
-----------
ParseXS: rename t/001-basic.t t/001-parse-basic.t
In the previous commits, most of the body of t/001-basic.t has been
moved out into separate 0xx-parse-foo.t files. Rename this file now
so that it is also a 0xx-parse- file.
Commit: 56ff7543ef79bf5426604307596e64aba362c0a1
https://github.com/Perl/perl5/commit/56ff7543ef79bf5426604307596e64aba362c0a1
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-parse-basic.t
Log Message:
-----------
ParseXS: t/001-parse-basic.t: add std comments
Add the standard boilerplate to the top of the file.
Commit: b7563641fad6dff085efc1c9787a06ff0f0735b5
https://github.com/Perl/perl5/commit/b7563641fad6dff085efc1c9787a06ff0f0735b5
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
R dist/ExtUtils-ParseXS/t/pseudotypemap1
Log Message:
-----------
ParseXS: delete t/pseudotypemap1
This test data file has not been used since v5.15.0-477-g9b58169ac2,
but has been hanging around ever since.
Commit: a8192756c25d5b10719fb43cb1456fab1626cbce
https://github.com/Perl/perl5/commit/a8192756c25d5b10719fb43cb1456fab1626cbce
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
R dist/ExtUtils-ParseXS/t/108-map_type.t
Log Message:
-----------
ParseXS: delete t/108-map_type.t
This test file has apparently never actually tested anything, and
there's already another test file, t/104-map_type.t which actually tests
the map_type() method.
Commit: 1fa3f2143abed2db42605d6b142904cae1354dbd
https://github.com/Perl/perl5/commit/1fa3f2143abed2db42605d6b142904cae1354dbd
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
R dist/ExtUtils-ParseXS/t/112-set_cond.t
Log Message:
-----------
ParseXS: delete t/112-set_cond.t
This test file doesn't actually test anything.
The set_cond() method is fairly trivial; it just returns a short snippet
of C code like "items < 1" for use in an XSUB's number-of-args checking,
and there's plenty of tests in the 0xx-parse-foo.t test files for that
already.
Commit: f604c9380c58559255d97eb10674d5f2cee2a8b8
https://github.com/Perl/perl5/commit/f604c9380c58559255d97eb10674d5f2cee2a8b8
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
A dist/ExtUtils-ParseXS/t/101-api-standard_typemap_locations.t
R dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t
A dist/ExtUtils-ParseXS/t/102-api-trim_whitespace.t
R dist/ExtUtils-ParseXS/t/102-trim_whitespace.t
A dist/ExtUtils-ParseXS/t/103-api-tidy_type.t
R dist/ExtUtils-ParseXS/t/103-tidy_type.t
A dist/ExtUtils-ParseXS/t/104-api-map_type.t
R dist/ExtUtils-ParseXS/t/104-map_type.t
A dist/ExtUtils-ParseXS/t/105-api-valid_proto_string.t
R dist/ExtUtils-ParseXS/t/105-valid_proto_string.t
A dist/ExtUtils-ParseXS/t/106-api-process_typemaps.t
R dist/ExtUtils-ParseXS/t/106-process_typemaps.t
A dist/ExtUtils-ParseXS/t/113-api-check_cond_preproc_statements.t
R dist/ExtUtils-ParseXS/t/113-check_cond_preproc_statements.t
A dist/ExtUtils-ParseXS/t/114-api-blurt_death_Warn.t
R dist/ExtUtils-ParseXS/t/114-blurt_death_Warn.t
Log Message:
-----------
ParseXS: rename t/1xx-*.t to t/1xx-api-*.t
Each of the 1xx-*.t test files run tests on a particular API function.
So rename all these files to include a -api- prefix (in the same way
that the parsing files are all 0xx-parse-foo.t and the code running are
all 3xx-run-foo.t)
Commit: fb2a5ec022d563089abd60859d69e06226571073
https://github.com/Perl/perl5/commit/fb2a5ec022d563089abd60859d69e06226571073
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/101-api-standard_typemap_locations.t
M dist/ExtUtils-ParseXS/t/102-api-trim_whitespace.t
M dist/ExtUtils-ParseXS/t/103-api-tidy_type.t
M dist/ExtUtils-ParseXS/t/104-api-map_type.t
M dist/ExtUtils-ParseXS/t/105-api-valid_proto_string.t
M dist/ExtUtils-ParseXS/t/106-api-process_typemaps.t
M dist/ExtUtils-ParseXS/t/113-api-check_cond_preproc_statements.t
Log Message:
-----------
ParseXS: add comments at the top of all t/1xx*.t
Add a boilerplate comment line explaining the purpose of each file.
Commit: 1e5d973cf152c5e944d51132b6fa9ae7326c6c6b
https://github.com/Perl/perl5/commit/1e5d973cf152c5e944d51132b6fa9ae7326c6c6b
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
R dist/ExtUtils-ParseXS/t/501-t-compile.t
A dist/ExtUtils-ParseXS/t/501-typemaps-compile.t
R dist/ExtUtils-ParseXS/t/510-t-bare.t
A dist/ExtUtils-ParseXS/t/510-typemaps-bare.t
R dist/ExtUtils-ParseXS/t/511-t-whitespace.t
A dist/ExtUtils-ParseXS/t/511-typemaps-whitespace.t
R dist/ExtUtils-ParseXS/t/512-t-file.t
A dist/ExtUtils-ParseXS/t/512-typemaps-file.t
R dist/ExtUtils-ParseXS/t/513-t-merge.t
A dist/ExtUtils-ParseXS/t/513-typemaps-merge.t
R dist/ExtUtils-ParseXS/t/514-t-embed.t
A dist/ExtUtils-ParseXS/t/514-typemaps-embed.t
R dist/ExtUtils-ParseXS/t/515-t-cmd.t
A dist/ExtUtils-ParseXS/t/515-typemaps-cmd.t
R dist/ExtUtils-ParseXS/t/516-t-clone.t
A dist/ExtUtils-ParseXS/t/516-typemaps-clone.t
R dist/ExtUtils-ParseXS/t/517-t-targetable.t
A dist/ExtUtils-ParseXS/t/517-typemaps-targetable.t
A dist/ExtUtils-ParseXS/t/518-typemaps-compat.t
R dist/ExtUtils-ParseXS/t/600-t-compat.t
Log Message:
-----------
ParseXS: rename t/5xx-t-*.t to t/5xx-typemaps-*.t
The 5xx-t-foo.t files all test ExtUtils::Typemaps (as opposed to all the
other test files in the t/ directory which test ExtUtils::ParseXS).
Rename the filename prefix from -t- to -typemaps- to better signal this
fact.
600-t-compat.t is a bit of an odd one - it's also testing
ExtUtils::Typemaps and I'm not sure why its 600 rather than 5xx. It's
the only 6xx in the directory. I've renamed it to 518-typemaps-compat.t
for consistency.
Commit: 54fb6c176d00da6a5682f97d08eb6daf2be6a8a8
https://github.com/Perl/perl5/commit/54fb6c176d00da6a5682f97d08eb6daf2be6a8a8
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/501-typemaps-compile.t
M dist/ExtUtils-ParseXS/t/510-typemaps-bare.t
M dist/ExtUtils-ParseXS/t/511-typemaps-whitespace.t
M dist/ExtUtils-ParseXS/t/512-typemaps-file.t
M dist/ExtUtils-ParseXS/t/513-typemaps-merge.t
M dist/ExtUtils-ParseXS/t/514-typemaps-embed.t
M dist/ExtUtils-ParseXS/t/515-typemaps-cmd.t
M dist/ExtUtils-ParseXS/t/516-typemaps-clone.t
M dist/ExtUtils-ParseXS/t/517-typemaps-targetable.t
M dist/ExtUtils-ParseXS/t/518-typemaps-compat.t
Log Message:
-----------
ParseXS: add comment at the top of all t/5xx*.t
Add a boilerplate comment line or two explaining the purpose of each
file.
Commit: 00cace9105ff0329f44775b8955a5fcfb7f551e1
https://github.com/Perl/perl5/commit/00cace9105ff0329f44775b8955a5fcfb7f551e1
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M MANIFEST
M dist/ExtUtils-ParseXS/t/106-api-process_typemaps.t
M dist/ExtUtils-ParseXS/t/512-typemaps-file.t
M dist/ExtUtils-ParseXS/t/513-typemaps-merge.t
M dist/ExtUtils-ParseXS/t/515-typemaps-cmd.t
M dist/ExtUtils-ParseXS/t/518-typemaps-compat.t
R dist/ExtUtils-ParseXS/t/data/b.typemap
R dist/ExtUtils-ParseXS/t/data/combined.typemap
R dist/ExtUtils-ParseXS/t/data/confl_repl.typemap
R dist/ExtUtils-ParseXS/t/data/confl_skip.typemap
R dist/ExtUtils-ParseXS/t/data/conflicting.typemap
R dist/ExtUtils-ParseXS/t/data/other.typemap
R dist/ExtUtils-ParseXS/t/data/perl.typemap
R dist/ExtUtils-ParseXS/t/data/simple.typemap
A dist/ExtUtils-ParseXS/t/test_typemaps/b.typemap
A dist/ExtUtils-ParseXS/t/test_typemaps/combined.typemap
A dist/ExtUtils-ParseXS/t/test_typemaps/confl_repl.typemap
A dist/ExtUtils-ParseXS/t/test_typemaps/confl_skip.typemap
A dist/ExtUtils-ParseXS/t/test_typemaps/conflicting.typemap
A dist/ExtUtils-ParseXS/t/test_typemaps/other.typemap
A dist/ExtUtils-ParseXS/t/test_typemaps/perl.typemap
A dist/ExtUtils-ParseXS/t/test_typemaps/simple.typemap
Log Message:
-----------
ParseXS: rename t/data/ to t/test_typemaps
This directory just contains typemap files to be used by various
test files. Make the name give a clearer indication of its purpose.
Commit: 4df955c6c6217b3fbfae7948b7098048fe5f8e92
https://github.com/Perl/perl5/commit/4df955c6c6217b3fbfae7948b7098048fe5f8e92
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/004-parse-xsub-declaration.t
Log Message:
-----------
ParseXS: 004-parse-xsub-declaration.t: fix for 589
Fix up a test to work under perl 5.8.9.
This regex: qr/\Q...\".../ was meant to match the two literal
characters backslash and double-quote, but that only worked correctly
from 5.10.0 onwards.
Commit: 9379c12b40da882922f573fddb6e9674aa752950
https://github.com/Perl/perl5/commit/9379c12b40da882922f573fddb6e9674aa752950
Author: David Mitchell <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/CountLines.pm
Log Message:
-----------
ParseXS: enable + fix warnings in CountLines.pm
This private helper module had 'strict' enabled, but not warnings.
So enable them, and fix up a problem it reveals:
the destructor for the tied handle was trying to write the buffer
contents even if the buffer was empty. This is harmless, but was now
triggering a warning for some tests which tested for an error condition
that didn't produce any output, e.g.:
../dist/ExtUtils-ParseXS/t/002-parse-file-scope.t ................... 1/?
print() on unopened filehandle FH at .../CountLines.pm line 44 during
global destruction.
This is also a fix for running under 5.8.9, whose test harness rather
anti-socially invokes perl with -w. Which is how I got to know about the
warnings in the first place.
Compare: https://github.com/Perl/perl5/compare/c5b0c7888402%5E...9379c12b40da
To unsubscribe from these emails, change your notification settings at
https://github.com/Perl/perl5/settings/notifications