@@ -1171,6 +1171,38 @@ obtains the regular string buffer out of a regular SV.
1171
1171
1172
1172
See L<perlapi/C<SvVSTRING>>.
1173
1173
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
+
1174
1206
=back
1175
1207
1176
1208
=head1 Selected Bug Fixes
0 commit comments