Branch: refs/heads/davem/xs_fields Home: https://github.com/Perl/perl5 Commit: 6cc5b6e9cd10cde677862ce5cb31162accb9ee52 https://github.com/Perl/perl5/commit/6cc5b6e9cd10cde677862ce5cb31162accb9ee52 Author: David Mitchell <da...@iabyn.com> Date: 2024-08-15 (Thu, 15 Aug 2024)
Changed paths: M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm Log Message: ----------- ExtUtils::ParseXS: min perl 5.6.1 => 5.8.3 Increase the minimum required perl release for ExtUtils::ParseXS from perl-5.6.1 to perl-5.8.3. The next commit will add 'use fields', which requires at least 5.8.0. But also, since 2013 the ExtUtils::ParseXS module has had this line: use Exporter 'import'; which is only supported in 5.8.3 onwards. Nobody has complained about this in the last 11 years, so it doesn't look like we need to support an older perl than that. Commit: d47d01bd002148077a18907c8af5da52b3faadb6 https://github.com/Perl/perl5/commit/d47d01bd002148077a18907c8af5da52b3faadb6 Author: David Mitchell <da...@iabyn.com> Date: 2024-08-15 (Thu, 15 Aug 2024) Changed paths: M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm Log Message: ----------- ExtUtils::ParseXS: use fields.pm and doc fields Add 'use fields' to make the fields of a ExtUtils::ParseXS object be fixed and enforced. Background: ExtUtils::ParseXS is the guts of what used to be a standalone script, xsubpp, which used to use many package variables. When this code was split out into ExtUtils::ParseXS, some of those package variables became lexical variables, while others became members of the ExtUtils::ParseXS object (i.e. keys within the object hash). Due to Perl's liassez-faire attitude towards what can go inside an object hash, and the general lack of organisation within this sprawling mess of code, the object eventually accumulated 77 field members, many undocumented, and certainly with no central point of documentation. This commit adds 'use fields' and 'my ExtUtils::ParseXS $self' to this module and its children. These together make use of an underappreciated perl feature which allows you to create hashes with a fixed set of keys (via 'use fields') and where the use of incorrect keys can often be detected at compile-time (via 'my Type $self; $self->{bad_literal_key}'). Adding 'use fields' then allowed me to chase down all the keys used by the object hash. I then documented them all. This allowed me to detect a bug (to be fixed shortly): XsubAlias is a typo intending to be XsubAliases; and to spot things like the fact that there are three fields called: interface interfaces Interfaces Which could probably be better named. The next few commits will do a bunch of renaming and rationalisation of these object fields. Note that due to a build-time circularity, this commit actually does a conditional 'require fields; fields->import(...)' rather than 'use fields', as fields depends on Hash::Util which is an XS module, which depends on us. So while perl is being freshly built, the object fields are not initially enforced, but are later on. In terms of user-visible changes, if code which uses this module naughtily tries to add extra keys to the object hash, they'll now get an error, and they'll have to properly subclass the object instead. Commit: d28e95afbe16c0587a92c015f0e84ee3b5d7b8d1 https://github.com/Perl/perl5/commit/d28e95afbe16c0587a92c015f0e84ee3b5d7b8d1 Author: David Mitchell <da...@iabyn.com> Date: 2024-08-15 (Thu, 15 Aug 2024) Changed paths: M dist/ExtUtils-ParseXS/t/001-basic.t M dist/ExtUtils-ParseXS/t/XSAlias.xs Log Message: ----------- ExtUtils::ParseXS: extend alias test This test checks that the correct warnings are issued when an XSUB tries to define multiple aliases with the same value. This commit extends the test slightly to have multiple aliases (including an alias matching the function name) all mapped to in index 0. The main point of generating these extra warnings is that the warnings accidentally list the XSUB function's name ('do') multiple times in the warning message. The next commit will fix that. Commit: 507f5f34c11251a1163e3302c92368870bfb7aac https://github.com/Perl/perl5/commit/507f5f34c11251a1163e3302c92368870bfb7aac Author: David Mitchell <da...@iabyn.com> Date: 2024-08-15 (Thu, 15 Aug 2024) Changed paths: M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm M dist/ExtUtils-ParseXS/t/001-basic.t Log Message: ----------- ExtUtils::ParseXS: remove XsubAlias field This was a typo: the code should have been checking if the XsubAlias*es* field was defined, in order to remove a duplicate copy of the XSUB function name from an alias warning message. Commit: 5dacf59615837101b76ce906745b43bbd30e931c https://github.com/Perl/perl5/commit/5dacf59615837101b76ce906745b43bbd30e931c Author: David Mitchell <da...@iabyn.com> Date: 2024-08-15 (Thu, 15 Aug 2024) Changed paths: M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm Log Message: ----------- ExtUtils::ParseXS: delete newXS/file/proto fields Remove these three fields: $self->{newXS} $self->{file} $self->{proto} from the ParseXS object. They don't really store any proper parsing state; they're just three temporary values better served by three restricted-scope lexical vars. The next commit will re-indent the new scope this commit adds. Commit: 457cc6c58ccfd488b0cb29d98312b7c3df908745 https://github.com/Perl/perl5/commit/457cc6c58ccfd488b0cb29d98312b7c3df908745 Author: David Mitchell <da...@iabyn.com> Date: 2024-08-15 (Thu, 15 Aug 2024) Changed paths: M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm Log Message: ----------- ExtUtils::ParseXS: reindent block Indent a block of code which was wrapped in new braces by the previous commit. White space only. Commit: 9b8254ff8ce79a0638fd3a6e92925df817fae943 https://github.com/Perl/perl5/commit/9b8254ff8ce79a0638fd3a6e92925df817fae943 Author: David Mitchell <da...@iabyn.com> Date: 2024-08-15 (Thu, 15 Aug 2024) Changed paths: M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm Log Message: ----------- ExtUtils::ParseXS: partially eliminate cond field This object field was being used for two purposes: once to maintain state about CASE conditions, and once as a short-lived temporary value. Use a lexical var instead for the latter use. The new scope will be re-indented in the next commit. Commit: 300e93c3f2b43707fab4592e781f4352b571420a https://github.com/Perl/perl5/commit/300e93c3f2b43707fab4592e781f4352b571420a Author: David Mitchell <da...@iabyn.com> Date: 2024-08-15 (Thu, 15 Aug 2024) Changed paths: M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm Log Message: ----------- ExtUtils::ParseXS: reindent block Indent a block of code which was wrapped in new braces by the previous commit. White space only. Commit: 1406aa8ed670748f5080dd0bd53e49c3654526e6 https://github.com/Perl/perl5/commit/1406aa8ed670748f5080dd0bd53e49c3654526e6 Author: David Mitchell <da...@iabyn.com> Date: 2024-08-15 (Thu, 15 Aug 2024) Changed paths: M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Eval.pm M dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm M dist/ExtUtils-ParseXS/t/110-assign_func_args.t M dist/ExtUtils-ParseXS/t/113-check_cond_preproc_statements.t M dist/ExtUtils-ParseXS/t/114-blurt_death_Warn.t Log Message: ----------- ExtUtils::ParseXS: rename most object fields This big commit renames around 60 of the 75-or-so fields within an ExtUtils::ParseXS hash object. This is because many of the current names are confusing and follow no particular pattern. I've used the following rules of thumb: - Generally make the names longer. For example there are three fields which indicate whether the RETVAL value has been seen within a particular XSUB section, and it's not at all obvious that (for example) gotRETVAL specifically indicates having seen that var in the *OUTPUT* section. - Prefix most things with a category, e.g. xsub_ for per-XSUB values, config_ for config values etc. I've generally left miscellaneous global state un-prefixed. - Hashes (and the occasional array) are generally named as map_X_to_Y where X and Y describe the keys and values. - Booleans indicating that something in particular has been detected in the XS source file are prefixed with seen_. - Fields directly related to an XS keyword use that keyword in upper-case, e.g. xsub_seen_ALIAS. A few fields were left as-is because it would be too much effort to rename them, e.g. line and line_no should really have become in_lines and in_line_nums. A couple of fields were left as-is because they are going to be removed soon. This commit includes some minor changes to code comments and a bunch of white-space changes, e.g. wrapping code lines which have become too long. But there are no other functional changes. It could in theory break code which access the object's fields directly. WAS NOW InitFileCode bootcode_early errors error_count Overloaded map_overloaded_package_to_C_package Fallback map_package_to_fallback_string Module_cname MODULE_cname Packprefix PACKAGE_class Packid PACKAGE_C_name Package PACKAGE_name Prefix PREFIX_pattern ProtoUsed proto_behaviour_specified WantPrototypes PROTOTYPES_value interfaces seen_INTERFACE_or_MACRO typemap typemaps_object WantVersionChk VERSIONCHECK_value XSStack XS_parse_stack argtypes config_allow_argtypes except config_allow_exceptions inout config_allow_inout author_warnings config_author_warnings optimize config_optimize RetainCplusplusHierarchicalTypes config_RetainCplusplusHierarchicalTypes strip_c_func_prefix config_strip_c_func_prefix WantLineNumbers config_WantLineNumbers FH in_fh filename in_filename filepathname in_pathname XsubAliasValueClashHinted xsub_alias_clash_hinted Attributes xsub_attributes cond xsub_CASE_condition condnum xsub_CASE_condition_count func_args xsub_C_auto_function_signature deferred xsub_deferred_code_lines Full_func_name xsub_func_full_C_name pname xsub_func_full_perl_name func_name xsub_func_name XsubAliases xsub_map_alias_name_to_value XsubAliasValues xsub_map_alias_value_to_name_seen_hash proto_arg xsub_map_arg_idx_to_proto defaults xsub_map_argname_to_default args_match xsub_map_argname_to_idx in_out xsub_map_argname_to_in_out lengthof xsub_map_argname_to_islength argtype_seen xsub_map_argname_to_seen_type var_types xsub_map_argname_to_type Interfaces xsub_map_interface_name_short_to_original OverloadsThisXSUB xsub_map_overload_name_to_seen arg_list xsub_map_varname_to_seen_in_INPUT outargs xsub_map_varname_to_seen_in_OUTPUT ProtoThisXSUB xsub_prototype ret_type xsub_return_type RETVAL_code xsub_RETVAL_typemap_code ScopeThisXSUB xsub_SCOPE_enabled ALIAS xsub_seen_ALIAS interface xsub_seen_INTERFACE_or_MACRO have_OUTPUT xsub_seen_OUTPUT proto_in_this_xsub xsub_seen_PROTOTYPE have_CODE_with_RETVAL xsub_seen_RETVAL_in_CODE retvaldone xsub_seen_RETVAL_in_INPUT gotRETVAL xsub_seen_RETVAL_in_OUTPUT scope_in_this_xsub xsub_seen_SCOPE thisdone xsub_seen_THIS_in_INPUT DoSetMagic xsub_SETMAGIC_state Compare: https://github.com/Perl/perl5/compare/14d4b955cb59...1406aa8ed670 To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications