Branch: refs/heads/davem/xs_fields Home: https://github.com/Perl/perl5 Commit: 364c0be196084c4e27bf5ab0d522d97d8f6bbbd2 https://github.com/Perl/perl5/commit/364c0be196084c4e27bf5ab0d522d97d8f6bbbd2 Author: David Mitchell <da...@iabyn.com> Date: 2024-08-10 (Sat, 10 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: cf40db63e3d6797e9666583e0c7601df39822f4a https://github.com/Perl/perl5/commit/cf40db63e3d6797e9666583e0c7601df39822f4a Author: David Mitchell <da...@iabyn.com> Date: 2024-08-10 (Sat, 10 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: 3ccc3f73839baed563581d0498be4693b1fb23a3 https://github.com/Perl/perl5/commit/3ccc3f73839baed563581d0498be4693b1fb23a3 Author: David Mitchell <da...@iabyn.com> Date: 2024-08-10 (Sat, 10 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: 3c912a6a0e3baa1231ac16fde3d3a8ce5f99d84b https://github.com/Perl/perl5/commit/3c912a6a0e3baa1231ac16fde3d3a8ce5f99d84b Author: David Mitchell <da...@iabyn.com> Date: 2024-08-10 (Sat, 10 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: 01da889203ad3d0a19471bea3bb8b386fbad4e1e https://github.com/Perl/perl5/commit/01da889203ad3d0a19471bea3bb8b386fbad4e1e Author: David Mitchell <da...@iabyn.com> Date: 2024-08-10 (Sat, 10 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: 3e781cfc9f4a34d9761d4c1b16f172ace8387945 https://github.com/Perl/perl5/commit/3e781cfc9f4a34d9761d4c1b16f172ace8387945 Author: David Mitchell <da...@iabyn.com> Date: 2024-08-10 (Sat, 10 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: bce450eb9521bc2c46a5e67d41882946d3e88417 https://github.com/Perl/perl5/commit/bce450eb9521bc2c46a5e67d41882946d3e88417 Author: David Mitchell <da...@iabyn.com> Date: 2024-08-10 (Sat, 10 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: 531b5a3ba6295605ba1c0459ef7d96baf0b8c541 https://github.com/Perl/perl5/commit/531b5a3ba6295605ba1c0459ef7d96baf0b8c541 Author: David Mitchell <da...@iabyn.com> Date: 2024-08-10 (Sat, 10 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: 14d4b955cb597a52c82c75b69522c9100ad03142 https://github.com/Perl/perl5/commit/14d4b955cb597a52c82c75b69522c9100ad03142 Author: David Mitchell <da...@iabyn.com> Date: 2024-08-10 (Sat, 10 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/364c0be19608%5E...14d4b955cb59 To unsubscribe from these emails, change your notification settings at https://github.com/Perl/perl5/settings/notifications