Branch: refs/heads/davem/xs_fixups
  Home:   https://github.com/Perl/perl5
  Commit: 36afa9b95a898e723df7fddbdf07051cf536275d
      
https://github.com/Perl/perl5/commit/36afa9b95a898e723df7fddbdf07051cf536275d
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 3ee51a8242f317a77febfd071dd1a349b0afe1d7
      
https://github.com/Perl/perl5/commit/3ee51a8242f317a77febfd071dd1a349b0afe1d7
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: aca4d863a3d8315b2b26c0f6d3ead755d65b02ab
      
https://github.com/Perl/perl5/commit/aca4d863a3d8315b2b26c0f6d3ead755d65b02ab
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 4f008998fd4c1da543a8622cc9d8c31d12ad3321
      
https://github.com/Perl/perl5/commit/4f008998fd4c1da543a8622cc9d8c31d12ad3321
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: a64503dbb477bc13f56704be04c1674afa43e782
      
https://github.com/Perl/perl5/commit/a64503dbb477bc13f56704be04c1674afa43e782
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 2bb573712369cce24440a6579cfd2be6bf0932e6
      
https://github.com/Perl/perl5/commit/2bb573712369cce24440a6579cfd2be6bf0932e6
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: a6dc316810d91184855a362015e0a06e361aea32
      
https://github.com/Perl/perl5/commit/a6dc316810d91184855a362015e0a06e361aea32
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: e75895903f4fe2169f5535ffb36fd11c3cefd71d
      
https://github.com/Perl/perl5/commit/e75895903f4fe2169f5535ffb36fd11c3cefd71d
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: b1f8e7d86418075a18defaa60bf0ca3803c00b1d
      
https://github.com/Perl/perl5/commit/b1f8e7d86418075a18defaa60bf0ca3803c00b1d
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: bef667708d2ab9260a3952a3ea1136f24b441421
      
https://github.com/Perl/perl5/commit/bef667708d2ab9260a3952a3ea1136f24b441421
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: ec3eafe7597cfd3e33d435734f873275355e92f6
      
https://github.com/Perl/perl5/commit/ec3eafe7597cfd3e33d435734f873275355e92f6
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 86cc0c49cc5317bd672778e97e93fd6e55cd9393
      
https://github.com/Perl/perl5/commit/86cc0c49cc5317bd672778e97e93fd6e55cd9393
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 3ac552ab0edbe42ad3ee078ec7c74aa63fea288b
      
https://github.com/Perl/perl5/commit/3ac552ab0edbe42ad3ee078ec7c74aa63fea288b
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 169dca8e5ee891f05a6f1f93e504d357c50feae7
      
https://github.com/Perl/perl5/commit/169dca8e5ee891f05a6f1f93e504d357c50feae7
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 03e7fd9bd4cd2dd3ef18b25d906b5da30f64f63c
      
https://github.com/Perl/perl5/commit/03e7fd9bd4cd2dd3ef18b25d906b5da30f64f63c
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 7ff7e37b5737c4af89fcaec14433c680a1563dbb
      
https://github.com/Perl/perl5/commit/7ff7e37b5737c4af89fcaec14433c680a1563dbb
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 5fa5e9ba5999969bcc5babc4327a3c1919dda9fa
      
https://github.com/Perl/perl5/commit/5fa5e9ba5999969bcc5babc4327a3c1919dda9fa
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: f6a4a411976dfcc94a40e6fa53e89d80fd545950
      
https://github.com/Perl/perl5/commit/f6a4a411976dfcc94a40e6fa53e89d80fd545950
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: d2658137670645b3fccbd1dc4937cdd3c768aa73
      
https://github.com/Perl/perl5/commit/d2658137670645b3fccbd1dc4937cdd3c768aa73
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 0a281311655b60571b843cbbf52aae4ef38c467a
      
https://github.com/Perl/perl5/commit/0a281311655b60571b843cbbf52aae4ef38c467a
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: ef86e5f6a4eeb657d9789065885743e26b8cfb52
      
https://github.com/Perl/perl5/commit/ef86e5f6a4eeb657d9789065885743e26b8cfb52
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 8016e6499f2231d30442e1b18a1fe8a7fcc15c68
      
https://github.com/Perl/perl5/commit/8016e6499f2231d30442e1b18a1fe8a7fcc15c68
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 3c99a3636f3865cc408f1f8f9a19d17c2efc6c6a
      
https://github.com/Perl/perl5/commit/3c99a3636f3865cc408f1f8f9a19d17c2efc6c6a
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: aae22f8c5aa6a7b938517b04f9114efb8c1f606a
      
https://github.com/Perl/perl5/commit/aae22f8c5aa6a7b938517b04f9114efb8c1f606a
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 Jan 2026)

  Changed paths:
    M dist/ExtUtils-ParseXS/t/001-basic.t

  Log Message:
  -----------
  ParseXS: 001-basic.t: fix comment typos


  Commit: 67760471afbd72c6483e99141b3ced2643457274
      
https://github.com/Perl/perl5/commit/67760471afbd72c6483e99141b3ced2643457274
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: bf43f620c4ebd2fc7c3bdf768835039394db373e
      
https://github.com/Perl/perl5/commit/bf43f620c4ebd2fc7c3bdf768835039394db373e
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 5d5bcd1339f10d74d04aee302e9a5454b5d79360
      
https://github.com/Perl/perl5/commit/5d5bcd1339f10d74d04aee302e9a5454b5d79360
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 2a6ad66b72fb96c582b10caca78245fd2f58f019
      
https://github.com/Perl/perl5/commit/2a6ad66b72fb96c582b10caca78245fd2f58f019
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 52175a9ef13c7f647d771e95d709b3c2be2bbb32
      
https://github.com/Perl/perl5/commit/52175a9ef13c7f647d771e95d709b3c2be2bbb32
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 0d20c6c78a0db3ed8c251fa7d221b31e777a38b0
      
https://github.com/Perl/perl5/commit/0d20c6c78a0db3ed8c251fa7d221b31e777a38b0
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 6c3ed267f95efc759a79303410b184c815a4b927
      
https://github.com/Perl/perl5/commit/6c3ed267f95efc759a79303410b184c815a4b927
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: ebc7b67e4ec0d97ede68d7781ce4610ea0242a68
      
https://github.com/Perl/perl5/commit/ebc7b67e4ec0d97ede68d7781ce4610ea0242a68
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: e4d39ee22565700bdaffd7fad073a51c5ab1eca4
      
https://github.com/Perl/perl5/commit/e4d39ee22565700bdaffd7fad073a51c5ab1eca4
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 3cf01c7febdaa93a2bc6e40bc532048c5e827121
      
https://github.com/Perl/perl5/commit/3cf01c7febdaa93a2bc6e40bc532048c5e827121
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 Jan 2026)

  Changed paths:
    M dist/ExtUtils-ParseXS/t/001-basic.t

  Log Message:
  -----------
  ParseXS: add basic tests for PREINIT keyword


  Commit: 8fd4896697f2d4957d403bbc15d6e4ba96effcc9
      
https://github.com/Perl/perl5/commit/8fd4896697f2d4957d403bbc15d6e4ba96effcc9
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 Jan 2026)

  Changed paths:
    M dist/ExtUtils-ParseXS/t/001-basic.t

  Log Message:
  -----------
  ParseXS: add some basic tests for INTERFACE_MACRO


  Commit: cdb671f334140a953adfd01d92052d433764dba4
      
https://github.com/Perl/perl5/commit/cdb671f334140a953adfd01d92052d433764dba4
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 25d235da32b53aeb4df404737e09c2cf93bd34bc
      
https://github.com/Perl/perl5/commit/25d235da32b53aeb4df404737e09c2cf93bd34bc
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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 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: cf6d6bb78b4127473d5ae79f74fb948db0fe2cba
      
https://github.com/Perl/perl5/commit/cf6d6bb78b4127473d5ae79f74fb948db0fe2cba
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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 FALLBACK

The FALLBACK: value should only be specified at most once per package.
So add a new warning.


  Commit: db9efad043fb2af6be43e80a3b1c496d5be3fa3e
      
https://github.com/Perl/perl5/commit/db9efad043fb2af6be43e80a3b1c496d5be3fa3e
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: ea793ce219d1c394f3c9e0f377a2b2c39fdd629c
      
https://github.com/Perl/perl5/commit/ea793ce219d1c394f3c9e0f377a2b2c39fdd629c
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 9f559c10025f5fe8bcbe356fb21c719f09fafa48
      
https://github.com/Perl/perl5/commit/9f559c10025f5fe8bcbe356fb21c719f09fafa48
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 948f35e0b7dc8192dd17202076321a0dab189802
      
https://github.com/Perl/perl5/commit/948f35e0b7dc8192dd17202076321a0dab189802
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 930bf3368fac3b36b50f331c10e48db812eeb968
      
https://github.com/Perl/perl5/commit/930bf3368fac3b36b50f331c10e48db812eeb968
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 417d56d76abd88857aba379f01ca4d64ed0479a4
      
https://github.com/Perl/perl5/commit/417d56d76abd88857aba379f01ca4d64ed0479a4
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 09723e1b5f0017c10b3b36aa0dc0cba0a013a801
      
https://github.com/Perl/perl5/commit/09723e1b5f0017c10b3b36aa0dc0cba0a013a801
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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 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: f27bf0d0eb9b79fd1bc6e2da43b670522d8283c3
      
https://github.com/Perl/perl5/commit/f27bf0d0eb9b79fd1bc6e2da43b670522d8283c3
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: c71a9b3659d35324e263b592f8119b3760cd3e81
      
https://github.com/Perl/perl5/commit/c71a9b3659d35324e263b592f8119b3760cd3e81
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: dc13fff121e8c7e2457ce3ecb5d7b2ac95374e6d
      
https://github.com/Perl/perl5/commit/dc13fff121e8c7e2457ce3ecb5d7b2ac95374e6d
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 77ea33c2606b4e4f9589356ba3b27d55ec94e990
      
https://github.com/Perl/perl5/commit/77ea33c2606b4e4f9589356ba3b27d55ec94e990
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: a1a14dbfdf50597e82136fb72ff14e9cce8b3b9f
      
https://github.com/Perl/perl5/commit/a1a14dbfdf50597e82136fb72ff14e9cce8b3b9f
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: c5a5af38274b97a24ae9cfebd1a4ed883390ad8a
      
https://github.com/Perl/perl5/commit/c5a5af38274b97a24ae9cfebd1a4ed883390ad8a
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 8b20775fb0ac3ad0529a337d2c3a67ac854025bf
      
https://github.com/Perl/perl5/commit/8b20775fb0ac3ad0529a337d2c3a67ac854025bf
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 4c8fa1f319d4469ea728586c247f2dc223ed98ff
      
https://github.com/Perl/perl5/commit/4c8fa1f319d4469ea728586c247f2dc223ed98ff
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 734a72c236ca7cc4e231fc8d12f09df9190f2020
      
https://github.com/Perl/perl5/commit/734a72c236ca7cc4e231fc8d12f09df9190f2020
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 4fa82cb3ec604f0b257da4cdf2d1d7a08db60679
      
https://github.com/Perl/perl5/commit/4fa82cb3ec604f0b257da4cdf2d1d7a08db60679
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: c113f2ee285b164942a9ad78e92f8843f9966e5d
      
https://github.com/Perl/perl5/commit/c113f2ee285b164942a9ad78e92f8843f9966e5d
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: cf8e805c76bef0921d4d6eca70f93a52094f2915
      
https://github.com/Perl/perl5/commit/cf8e805c76bef0921d4d6eca70f93a52094f2915
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 0f19c546e91196a1df3a86293c64633fb58c42a6
      
https://github.com/Perl/perl5/commit/0f19c546e91196a1df3a86293c64633fb58c42a6
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 76091cd262e6ed3ebb019fe15529c9861cd00b9f
      
https://github.com/Perl/perl5/commit/76091cd262e6ed3ebb019fe15529c9861cd00b9f
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 8ecd8a698e7880e2d79be5efc363cfa38589c8e8
      
https://github.com/Perl/perl5/commit/8ecd8a698e7880e2d79be5efc363cfa38589c8e8
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: b3837b481fbc758f79e42020910b2f8b9e01427b
      
https://github.com/Perl/perl5/commit/b3837b481fbc758f79e42020910b2f8b9e01427b
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: fe27f69b82ea4685a9b571d23afd2acb35211940
      
https://github.com/Perl/perl5/commit/fe27f69b82ea4685a9b571d23afd2acb35211940
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 92aeaf944c4d01a13931e81dfdfab1ea1cf3ddad
      
https://github.com/Perl/perl5/commit/92aeaf944c4d01a13931e81dfdfab1ea1cf3ddad
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: b2ed566354c838f9f42a6c8d031927eca88e2315
      
https://github.com/Perl/perl5/commit/b2ed566354c838f9f42a6c8d031927eca88e2315
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 2a861553dd78592dcb56dca84eb18cb094e99a87
      
https://github.com/Perl/perl5/commit/2a861553dd78592dcb56dca84eb18cb094e99a87
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 4a243b1c0fc63e7a71910da9688096c690676615
      
https://github.com/Perl/perl5/commit/4a243b1c0fc63e7a71910da9688096c690676615
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: fec8e19d200d0b34573a150cfcc1ef380d88077c
      
https://github.com/Perl/perl5/commit/fec8e19d200d0b34573a150cfcc1ef380d88077c
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: a22e54f700db12e8d13d1691c7dd8754be1ad05f
      
https://github.com/Perl/perl5/commit/a22e54f700db12e8d13d1691c7dd8754be1ad05f
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 97b1c56dbf9bf4df49cf21568b792ceff2e50039
      
https://github.com/Perl/perl5/commit/97b1c56dbf9bf4df49cf21568b792ceff2e50039
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 691890338c4536c653f7f42330d037eb1b57086b
      
https://github.com/Perl/perl5/commit/691890338c4536c653f7f42330d037eb1b57086b
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 13e36930840fcb1ce3be419eeddb63cdbb96fc47
      
https://github.com/Perl/perl5/commit/13e36930840fcb1ce3be419eeddb63cdbb96fc47
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: e81e0dbe52bc8cb5d317b127b4fae8c2e24b2a93
      
https://github.com/Perl/perl5/commit/e81e0dbe52bc8cb5d317b127b4fae8c2e24b2a93
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 0e31cbf758f3de5c5e7d43c65ae6bb6e2a3e861b
      
https://github.com/Perl/perl5/commit/0e31cbf758f3de5c5e7d43c65ae6bb6e2a3e861b
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 32ac54422ab704c776b12cafce71522d3c008e94
      
https://github.com/Perl/perl5/commit/32ac54422ab704c776b12cafce71522d3c008e94
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 92de1fb1668561e0cd32aed0c162f14c585b7280
      
https://github.com/Perl/perl5/commit/92de1fb1668561e0cd32aed0c162f14c585b7280
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: d6ab67455f11f9dc5c99b4712a8eb853c8dbbb32
      
https://github.com/Perl/perl5/commit/d6ab67455f11f9dc5c99b4712a8eb853c8dbbb32
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 66b56e9c6cbafadc8c0579be3c5679481dc0f9d2
      
https://github.com/Perl/perl5/commit/66b56e9c6cbafadc8c0579be3c5679481dc0f9d2
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: bd1717c9d6a35b5ede8a29e6cf98e9a6c66be4bf
      
https://github.com/Perl/perl5/commit/bd1717c9d6a35b5ede8a29e6cf98e9a6c66be4bf
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 536b10645c7718476f248eea237a4dbf4e43f5d4
      
https://github.com/Perl/perl5/commit/536b10645c7718476f248eea237a4dbf4e43f5d4
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: c3a25ae98def819728a336e408972af4bdb5f70a
      
https://github.com/Perl/perl5/commit/c3a25ae98def819728a336e408972af4bdb5f70a
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 651275d01824ac68e95beaaefa77eb2643fdbcc4
      
https://github.com/Perl/perl5/commit/651275d01824ac68e95beaaefa77eb2643fdbcc4
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: e5171bc64c8fb002ac399462805628b263f3d72c
      
https://github.com/Perl/perl5/commit/e5171bc64c8fb002ac399462805628b263f3d72c
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 57dc0b96e8981411ef4aee11230d15e523a15f76
      
https://github.com/Perl/perl5/commit/57dc0b96e8981411ef4aee11230d15e523a15f76
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 992c7b424a5e761b1c9c25e868482ff1045680ed
      
https://github.com/Perl/perl5/commit/992c7b424a5e761b1c9c25e868482ff1045680ed
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 3e728df4439837a0b8e6e463beebd839d3c43c41
      
https://github.com/Perl/perl5/commit/3e728df4439837a0b8e6e463beebd839d3c43c41
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 3b857e5acfe1b5651e466e7b74d12d0f624586b3
      
https://github.com/Perl/perl5/commit/3b857e5acfe1b5651e466e7b74d12d0f624586b3
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: a51d831b5ca94e1fb965702b1c27adc84fdb367c
      
https://github.com/Perl/perl5/commit/a51d831b5ca94e1fb965702b1c27adc84fdb367c
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: ab4ff5fbdff46bb0fc7245f4df62762d16660bb1
      
https://github.com/Perl/perl5/commit/ab4ff5fbdff46bb0fc7245f4df62762d16660bb1
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 9009e6551bffc7930a059c922d41056d21a15dc0
      
https://github.com/Perl/perl5/commit/9009e6551bffc7930a059c922d41056d21a15dc0
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 405cdb90a33de007225d2c5eefe5c07b884f7662
      
https://github.com/Perl/perl5/commit/405cdb90a33de007225d2c5eefe5c07b884f7662
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 2b3862b14740ae0797f22f992626c7613892c504
      
https://github.com/Perl/perl5/commit/2b3862b14740ae0797f22f992626c7613892c504
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: e6c1cf820195c8862365b9fbbdd72ad5e86f2527
      
https://github.com/Perl/perl5/commit/e6c1cf820195c8862365b9fbbdd72ad5e86f2527
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: ccd18e29eb75524e79030ad662fc4b06d537aff1
      
https://github.com/Perl/perl5/commit/ccd18e29eb75524e79030ad662fc4b06d537aff1
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 6a86c33ddc626292b6a34a56a5c6c7e569b32316
      
https://github.com/Perl/perl5/commit/6a86c33ddc626292b6a34a56a5c6c7e569b32316
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 5d0428c7aef524d0f7484bd485f2a88f0a6b44c2
      
https://github.com/Perl/perl5/commit/5d0428c7aef524d0f7484bd485f2a88f0a6b44c2
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 5b74c5f434f174a1a4afa43b60d0cb9587acd125
      
https://github.com/Perl/perl5/commit/5b74c5f434f174a1a4afa43b60d0cb9587acd125
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 7475a731cf00ace7c7a3c4581dc9d02e338f98ec
      
https://github.com/Perl/perl5/commit/7475a731cf00ace7c7a3c4581dc9d02e338f98ec
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 63caf9e9e18c23dcd3f077f3717d08d09a07277d
      
https://github.com/Perl/perl5/commit/63caf9e9e18c23dcd3f077f3717d08d09a07277d
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 7332ef646f929587184914c113665a86826b40d0
      
https://github.com/Perl/perl5/commit/7332ef646f929587184914c113665a86826b40d0
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: bd5fe844a46db2503fbc31b34d81762c1a971e82
      
https://github.com/Perl/perl5/commit/bd5fe844a46db2503fbc31b34d81762c1a971e82
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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: 7a99bbb5b7f3eca972103d5d17580a88f0660d02
      
https://github.com/Perl/perl5/commit/7a99bbb5b7f3eca972103d5d17580a88f0660d02
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 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.


  Commit: bdaff898c92ef721f933392da4c835b05f6ce91a
      
https://github.com/Perl/perl5/commit/bdaff898c92ef721f933392da4c835b05f6ce91a
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 Jan 2026)

  Changed paths:
    M dist/ExtUtils-ParseXS/Changes

  Log Message:
  -----------
  ParseXS: update Changes


  Commit: 2a13585038ec21affc74d4c0d823d7ab8c0e7f75
      
https://github.com/Perl/perl5/commit/2a13585038ec21affc74d4c0d823d7ab8c0e7f75
  Author: David Mitchell <[email protected]>
  Date:   2026-01-16 (Fri, 16 Jan 2026)

  Changed paths:
    M dist/ExtUtils-ParseXS/t/007-parse-input-output.t

  Log Message:
  -----------
  ParseXS: fix up two TODO tests

A couple of TODO tests were sort of guessing what C code *should* be
generated, and were getting it wrong. For the first:

- spurious backtick;

- no space after if;

- 1 arg not 2.

For the second:

- no space after if;

Since that C code wasn't being generated yet (hence the TODO tests),
they were happily passing without it being obvious that it was wrong.
Spotted by Tony C.


Compare: https://github.com/Perl/perl5/compare/7af02c82fe52...2a13585038ec

To unsubscribe from these emails, change your notification settings at 
https://github.com/Perl/perl5/settings/notifications

Reply via email to