diff options
author | Aaron Crane <arc@cpan.org> | 2014-12-07 15:41:33 +0000 |
---|---|---|
committer | Aaron Crane <arc@cpan.org> | 2014-12-14 15:04:38 +0000 |
commit | 075eb5c9b6ef85efb89747446c485e936a61a207 (patch) | |
tree | 1f233b7c52c626423e7cfa5ed52a45cf363d8da4 /makedef.pl | |
parent | 3e8dbc7f06ff46f6041bf3820b4fc57a485a9418 (diff) | |
download | perl-075eb5c9b6ef85efb89747446c485e936a61a207.tar.gz |
makedef.pl: don't hard-code list of mathoms
It's easy enough to read the list out of mathoms.c directly, and this should
prevent almost all bugs of the sort that were fixed by
083750a56b7927292a4bf7b1bf64aa26dd2a6858. (Only names that don't begin with
"Perl_" will cause a problem.)
The list of names detected automatically may actually differ slightly from
the hard-coded list; for example, the definition of Perl_huge() is inside
"#if defined(HUGE_VAL) || (defined(USE_LONG_DOUBLE) && defined(HUGE_VALL))",
but the new code in makedef.pl ignores preprocessor conditions. However, the
list is used as names to *skip*, rather than to include, so it's not a
problem if makedef.pl is willing to skip names that it will never be asked
to include.
Diffstat (limited to 'makedef.pl')
-rw-r--r-- | makedef.pl | 163 |
1 files changed, 12 insertions, 151 deletions
diff --git a/makedef.pl b/makedef.pl index 38a17f53a4..0bc3862f67 100644 --- a/makedef.pl +++ b/makedef.pl @@ -422,157 +422,18 @@ unless ($define{'PERL_IMPLICIT_CONTEXT'}) { ); } if ($define{'NO_MATHOMS'}) { - ++$skip{$_} foreach qw( - ASCII_TO_NEED - NATIVE_TO_NEED - Perl_custom_op_desc - Perl_custom_op_name - Perl_do_aexec - Perl_do_binmode - Perl_do_open - Perl_do_open9 - Perl_fprintf_nocontext - Perl_gv_AVadd - Perl_gv_HVadd - Perl_gv_IOadd - Perl_gv_SVadd - Perl_gv_efullname - Perl_gv_efullname3 - Perl_gv_fetchmethod - Perl_gv_fullname - Perl_gv_fullname3 - Perl_hv_delete - Perl_hv_delete_ent - Perl_hv_exists - Perl_hv_exists_ent - Perl_hv_fetch - Perl_hv_fetch_ent - Perl_hv_iternext - Perl_hv_magic - Perl_hv_store - Perl_hv_store_ent - Perl_hv_store_flags - Perl_init_i18nl14n - Perl_isALNUM_lazy - Perl_isIDFIRST_lazy - Perl_is_uni_alnum - Perl_is_uni_alnum_lc - Perl_is_uni_alnumc - Perl_is_uni_alnumc_lc - Perl_is_uni_alpha - Perl_is_uni_alpha_lc - Perl_is_uni_ascii - Perl_is_uni_ascii_lc - Perl_is_uni_blank - Perl_is_uni_blank_lc - Perl_is_uni_cntrl - Perl_is_uni_cntrl_lc - Perl_is_uni_digit - Perl_is_uni_digit_lc - Perl_is_uni_graph - Perl_is_uni_graph_lc - Perl_is_uni_idfirst - Perl_is_uni_idfirst_lc - Perl_is_uni_lower - Perl_is_uni_lower_lc - Perl_is_uni_print - Perl_is_uni_print_lc - Perl_is_uni_punct - Perl_is_uni_punct_lc - Perl_is_uni_space - Perl_is_uni_space_lc - Perl_is_uni_upper - Perl_is_uni_upper_lc - Perl_is_uni_xdigit - Perl_is_uni_xdigit_lc - Perl_is_utf8_alnum - Perl_is_utf8_alnumc - Perl_is_utf8_alpha - Perl_is_utf8_ascii - Perl_is_utf8_blank - Perl_is_utf8_char - Perl_is_utf8_cntrl - Perl_is_utf8_digit - Perl_is_utf8_graph - Perl_is_utf8_idcont - Perl_is_utf8_idfirst - Perl_is_utf8_lower - Perl_is_utf8_mark - Perl_is_utf8_perl_space - Perl_is_utf8_perl_word - Perl_is_utf8_posix_digit - Perl_is_utf8_print - Perl_is_utf8_punct - Perl_is_utf8_space - Perl_is_utf8_string_loc - Perl_is_utf8_upper - Perl_is_utf8_xdigit - Perl_is_utf8_xidcont - Perl_is_utf8_xidfirst - Perl_my_lstat - Perl_my_stat - Perl_newAV - Perl_newHV - Perl_newIO - Perl_newSUB - Perl_pack_cat - Perl_pad_compname_type - Perl_printf_nocontext - Perl_ref - Perl_save_freeop - Perl_save_freepv - Perl_save_freesv - Perl_save_iv - Perl_save_list - Perl_save_long - Perl_save_mortalizesv - Perl_save_nogv - Perl_save_op - Perl_save_re_context - Perl_sv_2iv - Perl_sv_2pv - Perl_sv_2pv_nolen - Perl_sv_2pvbyte_nolen - Perl_sv_2pvutf8_nolen - Perl_sv_2uv - Perl_sv_catpvn - Perl_sv_catpvn_mg - Perl_sv_catsv - Perl_sv_catsv_mg - Perl_sv_force_normal - Perl_sv_insert - Perl_sv_iv - Perl_sv_mortalcopy - Perl_sv_nolocking - Perl_sv_nounlocking - Perl_sv_nv - Perl_sv_pv - Perl_sv_pvbyte - Perl_sv_pvbyten - Perl_sv_pvn - Perl_sv_pvn_force - Perl_sv_pvn_nomg - Perl_sv_pvutf8 - Perl_sv_pvutf8n - Perl_sv_setsv - Perl_sv_taint - Perl_sv_unref - Perl_sv_usepvn - Perl_sv_usepvn_mg - Perl_sv_utf8_upgrade - Perl_sv_uv - Perl_to_uni_lower_lc - Perl_to_uni_title_lc - Perl_to_uni_upper_lc - Perl_to_utf8_fold - Perl_to_utf8_lower - Perl_to_utf8_title - Perl_to_utf8_upper - Perl_unpack_str - Perl_utf8_to_uvchr - Perl_utf8_to_uvuni - Perl_valid_utf8_to_uvuni - ); + # win32 builds happen in the win32/ subdirectory, but vms builds happen + # at the top level, so we need to look in two candidate locations for + # the mathoms.c file. + my ($file) = grep { -f } qw( mathoms.c ../mathoms.c ) + or die "No mathoms.c file found in . or ..\n"; + open my $mathoms, '<', $file + or die "Cannot open $file: $!\n"; + while (<$mathoms>) { + ++$skip{$1} if /\A ( NATIVE_TO_NEED + | ASCII_TO_NEED + | Perl_\w+ ) \s* \( /axms; + } } unless ($define{'PERL_NEED_APPCTX'}) { |