Branch: refs/heads/davem/xs_fixups
Home: https://github.com/Perl/perl5
Commit: a2d1b8a911f8f74b7065851f50034d9161d8d37b
https://github.com/Perl/perl5/commit/a2d1b8a911f8f74b7065851f50034d9161d8d37b
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 2791fde8a22d9eb8d98092daa1efe05fe4067ecf
https://github.com/Perl/perl5/commit/2791fde8a22d9eb8d98092daa1efe05fe4067ecf
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: a5531c07c207df6470d218acf6e8913e67076c08
https://github.com/Perl/perl5/commit/a5531c07c207df6470d218acf6e8913e67076c08
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 01cec25fea6c01bbc1faa2ce95b8e6b6c326f722
https://github.com/Perl/perl5/commit/01cec25fea6c01bbc1faa2ce95b8e6b6c326f722
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 3371907c84fe1e4f14be675e643949f4b21b5b4e
https://github.com/Perl/perl5/commit/3371907c84fe1e4f14be675e643949f4b21b5b4e
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 33eca387e7689bed1f4db4ed06355c55330c6cb7
https://github.com/Perl/perl5/commit/33eca387e7689bed1f4db4ed06355c55330c6cb7
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 86f9c5a9c21148c5729bd65ecffd431738e34025
https://github.com/Perl/perl5/commit/86f9c5a9c21148c5729bd65ecffd431738e34025
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: a149c51138ca0698fdbc3f03f5f6cbfffb590ce1
https://github.com/Perl/perl5/commit/a149c51138ca0698fdbc3f03f5f6cbfffb590ce1
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 291fb27870e71fd7bdd2c36d771159092616f1e9
https://github.com/Perl/perl5/commit/291fb27870e71fd7bdd2c36d771159092616f1e9
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 31f555d5b46104b85687029bad5d0fc0f43280f8
https://github.com/Perl/perl5/commit/31f555d5b46104b85687029bad5d0fc0f43280f8
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 7c0a07fdafb82625c11bb0400b0165d613cc55f3
https://github.com/Perl/perl5/commit/7c0a07fdafb82625c11bb0400b0165d613cc55f3
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: fa021fe7d48907bd280cff96169ba2451c0315a9
https://github.com/Perl/perl5/commit/fa021fe7d48907bd280cff96169ba2451c0315a9
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: ebf04ae97575855a0fd5f52bde8784a697f1af7a
https://github.com/Perl/perl5/commit/ebf04ae97575855a0fd5f52bde8784a697f1af7a
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 077d73b46d6e833719c7b7f19c98037984e9f490
https://github.com/Perl/perl5/commit/077d73b46d6e833719c7b7f19c98037984e9f490
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 60c7a1f4764bebcaa5127a4442db96e5f06ec4df
https://github.com/Perl/perl5/commit/60c7a1f4764bebcaa5127a4442db96e5f06ec4df
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 83fe144f43bdd62c72a275aa62f0d71b7c111875
https://github.com/Perl/perl5/commit/83fe144f43bdd62c72a275aa62f0d71b7c111875
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: eb8d1bae8dd311531e4843b4ce2b476e6a3cc635
https://github.com/Perl/perl5/commit/eb8d1bae8dd311531e4843b4ce2b476e6a3cc635
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: a9305127bebe25461d48c3eaca1f2e80c9b31ad9
https://github.com/Perl/perl5/commit/a9305127bebe25461d48c3eaca1f2e80c9b31ad9
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 411426e4a8636973cf0b8ff0b75efd5730156e52
https://github.com/Perl/perl5/commit/411426e4a8636973cf0b8ff0b75efd5730156e52
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: eb655b73fcda799a67a31ab1a9400aedd8ad0439
https://github.com/Perl/perl5/commit/eb655b73fcda799a67a31ab1a9400aedd8ad0439
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 5583cd86a8d0ef73eae011b7881a64036b526cd4
https://github.com/Perl/perl5/commit/5583cd86a8d0ef73eae011b7881a64036b526cd4
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: a0814bc2e9cd04ab1efa102cd064789973f06c03
https://github.com/Perl/perl5/commit/a0814bc2e9cd04ab1efa102cd064789973f06c03
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 63e459b6b695bd745bca1d0173bc877295749f5a
https://github.com/Perl/perl5/commit/63e459b6b695bd745bca1d0173bc877295749f5a
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: de3cd909c0007cd834577f441f9cf653446c715c
https://github.com/Perl/perl5/commit/de3cd909c0007cd834577f441f9cf653446c715c
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: 001-basic.t: fix comment typos
Commit: 2dff822f23173e9f3e7029d6e3eb227cbaa774c3
https://github.com/Perl/perl5/commit/2dff822f23173e9f3e7029d6e3eb227cbaa774c3
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: ed1d7bfb4015d850d3e32177914f94cdceb5b127
https://github.com/Perl/perl5/commit/ed1d7bfb4015d850d3e32177914f94cdceb5b127
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 28bc8f1e43d457dfb496646c00e4b34d9b5616d9
https://github.com/Perl/perl5/commit/28bc8f1e43d457dfb496646c00e4b34d9b5616d9
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 7a81e2df8ba6a1d8655bb4b6351758863a28dc0d
https://github.com/Perl/perl5/commit/7a81e2df8ba6a1d8655bb4b6351758863a28dc0d
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 3b21a9c29b0cf36baf78a1dff887f968743a2e64
https://github.com/Perl/perl5/commit/3b21a9c29b0cf36baf78a1dff887f968743a2e64
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 6a3236477ee0962e5d46841ef876c838d8e98b58
https://github.com/Perl/perl5/commit/6a3236477ee0962e5d46841ef876c838d8e98b58
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 59e34d503295c8b4701823013189c5c80bdae9e6
https://github.com/Perl/perl5/commit/59e34d503295c8b4701823013189c5c80bdae9e6
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 391b73de7207d9f408a9276e1913bb6bfc070359
https://github.com/Perl/perl5/commit/391b73de7207d9f408a9276e1913bb6bfc070359
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: ddad958a9c1f7fb419fc8f4d1ec532c22de6af69
https://github.com/Perl/perl5/commit/ddad958a9c1f7fb419fc8f4d1ec532c22de6af69
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: dd4ccead754a87d3af81ef6f92efd6e47412fd06
https://github.com/Perl/perl5/commit/dd4ccead754a87d3af81ef6f92efd6e47412fd06
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add basic tests for PREINIT keyword
Commit: 405c407e9ac84c5c404a201f30d46f50fd1f18c8
https://github.com/Perl/perl5/commit/405c407e9ac84c5c404a201f30d46f50fd1f18c8
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 Jan 2026)
Changed paths:
M dist/ExtUtils-ParseXS/t/001-basic.t
Log Message:
-----------
ParseXS: add some basic tests for INTERFACE_MACRO
Commit: 4b7accf56114ae79bf2d8f545231a6cda8af1a06
https://github.com/Perl/perl5/commit/4b7accf56114ae79bf2d8f545231a6cda8af1a06
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 22a8b4dd6df2cdaa415d69a64b6174f988713365
https://github.com/Perl/perl5/commit/22a8b4dd6df2cdaa415d69a64b6174f988713365
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: dd863ce94d475ad010978ecd6059cd6dfaacfc6d
https://github.com/Perl/perl5/commit/dd863ce94d475ad010978ecd6059cd6dfaacfc6d
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 63f9e8c02f8ea37a4b68023bd9bfa7efcc1e0320
https://github.com/Perl/perl5/commit/63f9e8c02f8ea37a4b68023bd9bfa7efcc1e0320
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 384b05dd1892ecac71c413279d12e901350cc8ce
https://github.com/Perl/perl5/commit/384b05dd1892ecac71c413279d12e901350cc8ce
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: be9910af801fdf73e52aeab4e7400bf83a3bbb53
https://github.com/Perl/perl5/commit/be9910af801fdf73e52aeab4e7400bf83a3bbb53
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: b77d6d2fc6cfec534d34c216b0e1d9c0d80d0241
https://github.com/Perl/perl5/commit/b77d6d2fc6cfec534d34c216b0e1d9c0d80d0241
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: ebc6051a4705df8c0f1b0252267a851547194cb9
https://github.com/Perl/perl5/commit/ebc6051a4705df8c0f1b0252267a851547194cb9
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: bf40d6388940ef7b6027349503bdbfb411a4d5f7
https://github.com/Perl/perl5/commit/bf40d6388940ef7b6027349503bdbfb411a4d5f7
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: e80a9c60b05b150eae882f09d379fe6e6d8e999e
https://github.com/Perl/perl5/commit/e80a9c60b05b150eae882f09d379fe6e6d8e999e
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 9f9278495ec259e431601906cf0fe3e895344c37
https://github.com/Perl/perl5/commit/9f9278495ec259e431601906cf0fe3e895344c37
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 0c7972ca029927d83da8bb9f538551234af279ba
https://github.com/Perl/perl5/commit/0c7972ca029927d83da8bb9f538551234af279ba
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: f3419c296b0b35184015666d1c1e3b0842f2db24
https://github.com/Perl/perl5/commit/f3419c296b0b35184015666d1c1e3b0842f2db24
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: de7b66db104a4962737c4d52345d69d712c17ac7
https://github.com/Perl/perl5/commit/de7b66db104a4962737c4d52345d69d712c17ac7
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 591da0b330f0781aae65a95623601b7accbfee36
https://github.com/Perl/perl5/commit/591da0b330f0781aae65a95623601b7accbfee36
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 8ac62b59870c2a619b72162703340f8e87a0d9f8
https://github.com/Perl/perl5/commit/8ac62b59870c2a619b72162703340f8e87a0d9f8
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 0c84c7845405a27333a8edfb80448c6452d4c16a
https://github.com/Perl/perl5/commit/0c84c7845405a27333a8edfb80448c6452d4c16a
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: fc3929ce5e9e66cb2164f8e13ca7ca35c28e8b98
https://github.com/Perl/perl5/commit/fc3929ce5e9e66cb2164f8e13ca7ca35c28e8b98
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 2689e76ff14aaf2537e6dae26588256286167973
https://github.com/Perl/perl5/commit/2689e76ff14aaf2537e6dae26588256286167973
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 7f103584a54d7fdb0c96ff12d942632990ea64c1
https://github.com/Perl/perl5/commit/7f103584a54d7fdb0c96ff12d942632990ea64c1
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 3da170f2c019e507727ce22f34efb0d0e3839f9f
https://github.com/Perl/perl5/commit/3da170f2c019e507727ce22f34efb0d0e3839f9f
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: a36890091bff2a17353d94a9eacd2de426463235
https://github.com/Perl/perl5/commit/a36890091bff2a17353d94a9eacd2de426463235
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: a3704435a52878e41f2935cb8f00f3e15a18ca26
https://github.com/Perl/perl5/commit/a3704435a52878e41f2935cb8f00f3e15a18ca26
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 16821461bf1c5e5f28ad72512c9d42631a8acad6
https://github.com/Perl/perl5/commit/16821461bf1c5e5f28ad72512c9d42631a8acad6
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 38b27871ce335be903d5a183ded3e1979d08f0ac
https://github.com/Perl/perl5/commit/38b27871ce335be903d5a183ded3e1979d08f0ac
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 180914e01241084adbd1d48eae2e3f33c1d5fcce
https://github.com/Perl/perl5/commit/180914e01241084adbd1d48eae2e3f33c1d5fcce
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 449356b975b2ce21a9044cc79f2f0f359d3ff73d
https://github.com/Perl/perl5/commit/449356b975b2ce21a9044cc79f2f0f359d3ff73d
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 53ec56f4f9a2a0325d4ec6d1821112f0c54763e7
https://github.com/Perl/perl5/commit/53ec56f4f9a2a0325d4ec6d1821112f0c54763e7
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 41cd30e5a91dfcc2db60e2b6be5d08eaa98b5569
https://github.com/Perl/perl5/commit/41cd30e5a91dfcc2db60e2b6be5d08eaa98b5569
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 68e4744a7339c8515dc4335aba59b5c9c2673087
https://github.com/Perl/perl5/commit/68e4744a7339c8515dc4335aba59b5c9c2673087
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 56463c15559ffe15723b4956eedaf95488adad81
https://github.com/Perl/perl5/commit/56463c15559ffe15723b4956eedaf95488adad81
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 05ca4d7a963fa25d2df8c24689ee3234f423b3db
https://github.com/Perl/perl5/commit/05ca4d7a963fa25d2df8c24689ee3234f423b3db
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: d14baaf94b6d3a17ee395304717dc1ad5c8f1f17
https://github.com/Perl/perl5/commit/d14baaf94b6d3a17ee395304717dc1ad5c8f1f17
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 15c7633f1b794f52b0aa0b66f2c881f7121e93d0
https://github.com/Perl/perl5/commit/15c7633f1b794f52b0aa0b66f2c881f7121e93d0
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 686c0a3a5c6a9052ac17b15799c4076826b06200
https://github.com/Perl/perl5/commit/686c0a3a5c6a9052ac17b15799c4076826b06200
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: ad0437102dfb5836e537f746651063fff085c2a0
https://github.com/Perl/perl5/commit/ad0437102dfb5836e537f746651063fff085c2a0
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: dd6ffe0c070ea2dda8a9215cddc3e65cc2320838
https://github.com/Perl/perl5/commit/dd6ffe0c070ea2dda8a9215cddc3e65cc2320838
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 5bd38595ddddbe374759ea049eee36377de564cb
https://github.com/Perl/perl5/commit/5bd38595ddddbe374759ea049eee36377de564cb
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: e08112af1776e33f8b2570774b8dc225ec3005f3
https://github.com/Perl/perl5/commit/e08112af1776e33f8b2570774b8dc225ec3005f3
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 46bc80dde1fdca12f4df43fa0b3865cd98172290
https://github.com/Perl/perl5/commit/46bc80dde1fdca12f4df43fa0b3865cd98172290
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 9d5739b1345334ba2f335b616ec0b5922bca47b8
https://github.com/Perl/perl5/commit/9d5739b1345334ba2f335b616ec0b5922bca47b8
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: dca1fc8103c024554d9e6934882bd62442f5ed87
https://github.com/Perl/perl5/commit/dca1fc8103c024554d9e6934882bd62442f5ed87
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 240bd65446a3c20997dce85d6aa73c03819092d7
https://github.com/Perl/perl5/commit/240bd65446a3c20997dce85d6aa73c03819092d7
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 3698d1626ed259221d74182603b3287902982721
https://github.com/Perl/perl5/commit/3698d1626ed259221d74182603b3287902982721
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 2e0826dd8c2403fb031e57c0fa0e180e59d0792f
https://github.com/Perl/perl5/commit/2e0826dd8c2403fb031e57c0fa0e180e59d0792f
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 9ae13a9f7245ef7f2b6c0027896ab39c7477c976
https://github.com/Perl/perl5/commit/9ae13a9f7245ef7f2b6c0027896ab39c7477c976
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: f0b2cbba37669ef4df82c13eb6777631da43a1af
https://github.com/Perl/perl5/commit/f0b2cbba37669ef4df82c13eb6777631da43a1af
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 901841cb617b9ab40cd480620ce18707a06c4e24
https://github.com/Perl/perl5/commit/901841cb617b9ab40cd480620ce18707a06c4e24
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 3cb0ac6c5bf49ec6572995fb6411c6bc23cd35f8
https://github.com/Perl/perl5/commit/3cb0ac6c5bf49ec6572995fb6411c6bc23cd35f8
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: b6e81de30f8b64796cc2d775a49fbc76a6c698cd
https://github.com/Perl/perl5/commit/b6e81de30f8b64796cc2d775a49fbc76a6c698cd
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 7beafe6c4ab6563049a305cca01d39a78518d756
https://github.com/Perl/perl5/commit/7beafe6c4ab6563049a305cca01d39a78518d756
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 2f0509ecbdaa2468097d4cda7b4fda2376072206
https://github.com/Perl/perl5/commit/2f0509ecbdaa2468097d4cda7b4fda2376072206
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 5bc8dcfd58fcc65028569cc4a1685e8e7aa37065
https://github.com/Perl/perl5/commit/5bc8dcfd58fcc65028569cc4a1685e8e7aa37065
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 248c7876accc627c5d09e768d15a4680f2fa4e54
https://github.com/Perl/perl5/commit/248c7876accc627c5d09e768d15a4680f2fa4e54
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 7da08558572285a1a33653f0bc69c1e5caeb6739
https://github.com/Perl/perl5/commit/7da08558572285a1a33653f0bc69c1e5caeb6739
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 0c07d1c17d012235fd0b45afe4620ae41e77c35b
https://github.com/Perl/perl5/commit/0c07d1c17d012235fd0b45afe4620ae41e77c35b
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 322aebb416547adccec057285e78798565e1cdef
https://github.com/Perl/perl5/commit/322aebb416547adccec057285e78798565e1cdef
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 08935f403e78421d1cb43547bc4981d1e5ded2f4
https://github.com/Perl/perl5/commit/08935f403e78421d1cb43547bc4981d1e5ded2f4
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 76a25b19dfdcbee99bf641d92edec4fdd9b4ed82
https://github.com/Perl/perl5/commit/76a25b19dfdcbee99bf641d92edec4fdd9b4ed82
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 4f736bc06818f023fc761db808a2bf332cd57880
https://github.com/Perl/perl5/commit/4f736bc06818f023fc761db808a2bf332cd57880
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 2d2304d978603fd7a656b03ad2a722caf4301e68
https://github.com/Perl/perl5/commit/2d2304d978603fd7a656b03ad2a722caf4301e68
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: bc6b8371c3d74f6f0d9e4a125bd9f6abad075ff7
https://github.com/Perl/perl5/commit/bc6b8371c3d74f6f0d9e4a125bd9f6abad075ff7
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: 5ad4fdb608e903898f15fed8d698fe025345a16f
https://github.com/Perl/perl5/commit/5ad4fdb608e903898f15fed8d698fe025345a16f
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: f430b42cd67acb5bf2a9fb90c274ab4c5b33ac90
https://github.com/Perl/perl5/commit/f430b42cd67acb5bf2a9fb90c274ab4c5b33ac90
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: f8084a0ec781c7ffe96563f0d241e619f972e7be
https://github.com/Perl/perl5/commit/f8084a0ec781c7ffe96563f0d241e619f972e7be
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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: db997109ac07f899a41028bbb2b8c351b4334e55
https://github.com/Perl/perl5/commit/db997109ac07f899a41028bbb2b8c351b4334e55
Author: David Mitchell <[email protected]>
Date: 2026-01-09 (Fri, 09 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/9379c12b40da...db997109ac07
To unsubscribe from these emails, change your notification settings at
https://github.com/Perl/perl5/settings/notifications