Skip to content

Commit 5127dfe

Browse files
perl5420delta: Re-add ExtUtils::ParseXS refactoring to 5.42.0 delta (in Internal Changes)
1 parent 8711297 commit 5127dfe

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

pod/perl5420delta.pod

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,6 +1171,38 @@ obtains the regular string buffer out of a regular SV.
11711171

11721172
See L<perlapi/C<SvVSTRING>>.
11731173

1174+
=item *
1175+
1176+
L<ExtUtils::ParseXS> has been extensively refactored internally and
1177+
extensive tests have been added. Most of these changes shouldn't be
1178+
visible externally with a few exceptions, the main ones being:
1179+
1180+
The generated C code, especially for returning values, may have changed
1181+
slightly, and in some cases be slightly more efficient (in particular,
1182+
using C<TARG> more often to return a value rather than creating a new
1183+
temporary).
1184+
1185+
The parser is more likely to give warnings now on XS errors which
1186+
previously would have just silently generated invalid C code.
1187+
1188+
One XS bug has been fixed in a way that may be highly visible. Previously
1189+
when parsing the parameters of an XS sub declaration, if a parameter
1190+
couldn't be parsed, it was quietly ignored. This meant that it would still
1191+
consume an argument, but wouldn't declare a C variable: a bit like the
1192+
Perl-level C<my ($a, undef, $c) = @_>. Now, it gives a compile error. This
1193+
will break XS code that does (for example):
1194+
1195+
void
1196+
foo(int a, /* skip arg */, int c)
1197+
1198+
because C-comments aren't part of XS syntax, and so the parameter was a
1199+
syntax error and was quietly skipped. This is better written as
1200+
1201+
void
1202+
foo(int a, b, int c)
1203+
1204+
since parameters which are not assigned a type act as placeholders.
1205+
11741206
=back
11751207

11761208
=head1 Selected Bug Fixes

0 commit comments

Comments
 (0)