X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/636dfd4a89e23adad94a82ddc63188837eea8a48..3f093f9714c81e9442d5e04e641cfc9ade1c7a5c:/embed.fnc diff --git a/embed.fnc b/embed.fnc index 18e2757..a909f7d 100644 --- a/embed.fnc +++ b/embed.fnc @@ -27,10 +27,14 @@ : : proto.h: add __attribute__malloc__ : -: b Binary backward compatibility; function is a macro -: but has also Perl_ implementation (which is exported); often -: implemented in mathoms.c (whose compilation can be suppressed; see -: INSTALL): +: b Binary backward compatibility; has an exported Perl_ implementation +: but function is also normally a macro (i.e. has the "m" flag as well). +: Backcompat functions ("b") can be anywhere, but if they are also +: macros ("m") then they have no proto.h entries so must either be in +: mathoms.c to get marked EXTERN_C (and skipped for -DNO_MATHOMS builds) +: or else will require special attention to ensure they are marked +: EXTERN_C (and then won't be automatically skipped for -DNO_MATHOMS +: builds). : : add entry to the list of exported symbols; : don't define PERL_ARGS_ASSERT_FOO @@ -330,6 +334,7 @@ ApR |I32 |cxinc Afp |void |deb |NN const char* pat|... Ap |void |vdeb |NN const char* pat|NULLOK va_list* args Ap |void |debprofdump +EXp |SV* |multideref_stringify |NN const OP* o|NULLOK CV *cv Ap |I32 |debop |NN const OP* o Ap |I32 |debstack Ap |I32 |debstackptrs @@ -440,7 +445,7 @@ Ap |void |dump_all p |void |dump_all_perl |bool justperl Ap |void |dump_eval Ap |void |dump_form |NN const GV* gv -Ap |void |gv_dump |NN GV* gv +Ap |void |gv_dump |NULLOK GV* gv Ap |void |op_dump |NN const OP *o Ap |void |pmop_dump |NULLOK PMOP* pm Ap |void |dump_packsubs |NN const HV* stash @@ -546,8 +551,10 @@ p |void |gv_setref |NN SV *const dstr|NN SV *const sstr Apd |HV* |gv_stashpv |NN const char* name|I32 flags Apd |HV* |gv_stashpvn |NN const char* name|U32 namelen|I32 flags #if defined(PERL_IN_GV_C) -i |HV* |gv_stashpvn_internal|NN const char* name|U32 namelen|I32 flags -i |HV* |gv_stashsvpvn_cached|NULLOK SV *namesv|NULLOK const char* name|U32 namelen|I32 flags +i |HV* |gv_stashpvn_internal |NN const char* name|U32 namelen|I32 flags +i |HV* |gv_stashsvpvn_cached |NULLOK SV *namesv|NULLOK const char* name|U32 namelen|I32 flags +i |GV* |gv_fetchmeth_internal |NULLOK HV* stash|NULLOK SV* meth|NULLOK const char* name \ + |STRLEN len|I32 level|U32 flags #endif Apd |HV* |gv_stashsv |NN SV* sv|I32 flags Apd |void |hv_clear |NULLOK HV *hv @@ -698,7 +705,8 @@ ADMpPR |bool |is_uni_lower_lc|UV c ADMpPR |bool |is_uni_print_lc|UV c ADMpPR |bool |is_uni_punct_lc|UV c ADMpPR |bool |is_uni_xdigit_lc|UV c -AnpdR |bool |is_ascii_string|NN const U8 *s|STRLEN len +AnpdR |bool |is_invariant_string|NN const U8 *s|STRLEN len +AmpdR |bool |is_ascii_string|NN const U8 *s|STRLEN len AnpdD |STRLEN |is_utf8_char |NN const U8 *s Abmnpd |STRLEN |is_utf8_char_buf|NN const U8 *buf|NN const U8 *buf_end Anpd |bool |is_utf8_string |NN const U8 *s|STRLEN len @@ -805,12 +813,12 @@ EMsPR |char*|form_short_octal_warning|NN const char * const s \ |const STRLEN len #endif Apd |UV |grok_hex |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result -Apdn |int |grok_infnan |NN const char** sp|NN const char *send +Apd |int |grok_infnan |NN const char** sp|NN const char *send Apd |int |grok_number |NN const char *pv|STRLEN len|NULLOK UV *valuep Apd |int |grok_number_flags|NN const char *pv|STRLEN len|NULLOK UV *valuep|U32 flags ApdR |bool |grok_numeric_radix|NN const char **sp|NN const char *send Apd |UV |grok_oct |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result -Apdn |UV |grok_atou |NN const char* pv|NULLOK const char** endptr +EXpn |bool |grok_atoUV |NN const char* pv|NN UV* valptr|NULLOK const char** endptr : These are all indirectly referenced by globals.c. This is somewhat annoying. p |int |magic_clearenv |NN SV* sv|NN MAGIC* mg p |int |magic_clear_all_env|NN SV* sv|NN MAGIC* mg @@ -999,13 +1007,16 @@ AmdbR |HV* |newHV ApaR |HV* |newHVhv |NULLOK HV *hv Apabm |IO* |newIO Apda |OP* |newLISTOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last +AMpdan |PADNAME *|newPADNAMEouter|NN PADNAME *outer +AMpdan |PADNAME *|newPADNAMEpvn|NN const char *s|STRLEN len +AMpdan |PADNAMELIST *|newPADNAMELIST|size_t max #ifdef USE_ITHREADS Apda |OP* |newPADOP |I32 type|I32 flags|NN SV* sv #endif Apda |OP* |newPMOP |I32 type|I32 flags Apda |OP* |newPVOP |I32 type|I32 flags|NULLOK char* pv Apa |SV* |newRV |NN SV *const sv -Apda |SV* |newRV_noinc |NN SV *const sv +Apda |SV* |newRV_noinc |NN SV *const tmpRef Apda |SV* |newSV |const STRLEN len Apa |OP* |newSVREF |NN OP* o Apda |OP* |newSVOP |I32 type|I32 flags|NN SV* sv @@ -1026,6 +1037,8 @@ Apd |SV* |newSVrv |NN SV *const rv|NULLOK const char *const classname Apda |SV* |newSVsv |NULLOK SV *const old Apda |SV* |newSV_type |const svtype type Apda |OP* |newUNOP |I32 type|I32 flags|NULLOK OP* first +Apda |OP* |newUNOP_AUX |I32 type|I32 flags|NULLOK OP* first \ + |NULLOK UNOP_AUX_item *aux Apda |OP* |newWHENOP |NULLOK OP* cond|NN OP* block Apda |OP* |newWHILEOP |I32 flags|I32 debuggable|NULLOK LOOP* loop \ |NULLOK OP* expr|NULLOK OP* block|NULLOK OP* cont \ @@ -1121,6 +1134,7 @@ ApOM |int |init_i18nl14n |int printwarn ApM |char* |my_strerror |const int errnum ApOM |void |new_collate |NULLOK const char* newcoll ApOM |void |new_ctype |NN const char* newctype +EXpMn |void |_warn_problematic_locale ApOM |void |new_numeric |NULLOK const char* newcoll Ap |void |set_numeric_local Ap |void |set_numeric_radix @@ -1135,7 +1149,8 @@ Apd |void |packlist |NN SV *cat|NN const char *pat|NN const char *patend|NN SV s |void |pidgone |Pid_t pid|int status #endif : Used in perly.y -p |OP* |pmruntime |NN OP *o|NN OP *expr|bool isreg|I32 floor +p |OP* |pmruntime |NN OP *o|NN OP *expr|NULLOK OP *repl \ + |bool isreg|I32 floor #if defined(PERL_IN_OP_C) s |OP* |pmtrans |NN OP* o|NN OP* expr|NN OP* repl #endif @@ -1432,6 +1447,7 @@ Apd |void |sv_magic |NN SV *const sv|NULLOK SV *const obj|const int how \ Apd |MAGIC *|sv_magicext |NN SV *const sv|NULLOK SV *const obj|const int how \ |NULLOK const MGVTBL *const vtbl|NULLOK const char *const name \ |const I32 namlen +Ein |bool |sv_only_taint_gmagic|NN SV *sv : exported for re.pm EXp |MAGIC *|sv_magicext_mglob|NN SV *sv ApdbamR |SV* |sv_mortalcopy |NULLOK SV *const oldsv @@ -1502,21 +1518,24 @@ Ap |UV |swash_fetch |NN SV *swash|NN const U8 *ptr|bool do_utf8 EiMR |SV* |add_cp_to_invlist |NULLOK SV* invlist|const UV cp EsM |void |_append_range_to_invlist |NN SV* const invlist|const UV start|const UV end EiMRn |UV* |_invlist_array_init |NN SV* const invlist|const bool will_have_0 -EiMRn |UV* |invlist_array |NN SV* const invlist EsM |void |invlist_extend |NN SV* const invlist|const UV len EiMRn |UV |invlist_max |NN SV* const invlist EiM |void |invlist_set_len|NN SV* const invlist|const UV len|const bool offset +#ifndef PERL_EXT_RE_BUILD EiMRn |IV* |get_invlist_previous_index_addr|NN SV* invlist -EiMRn |IV |invlist_previous_index|NN SV* const invlist +EiMRn |bool |invlist_is_iterating|NN SV* const invlist EiMn |void |invlist_set_previous_index|NN SV* const invlist|const IV index +EiMRn |IV |invlist_previous_index|NN SV* const invlist EiMn |void |invlist_trim |NN SV* const invlist +#endif EiMR |SV* |invlist_clone |NN SV* const invlist -EiMRn |bool |invlist_is_iterating|NN SV* const invlist EiMRn |STRLEN*|get_invlist_iter_addr |NN SV* invlist EiMn |void |invlist_iterinit|NN SV* invlist EsMRn |bool |invlist_iternext|NN SV* invlist|NN UV* start|NN UV* end EiMn |void |invlist_iterfinish|NN SV* invlist EiMRn |UV |invlist_highest|NN SV* const invlist +EMRs |SV* |_make_exactf_invlist |NN RExC_state_t *pRExC_state \ + |NN regnode *node #endif #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C) EXmM |void |_invlist_intersection |NN SV* const a|NN SV* const b|NN SV** i @@ -1541,6 +1560,7 @@ EXp |SV* |_core_swash_init|NN const char* pkg|NN const char* name \ |NULLOK SV* invlist|NULLOK U8* const flags_p #endif #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C) +EiMRn |UV* |invlist_array |NN SV* const invlist EXMpR |SV* |_invlist_contents|NN SV* const invlist EiMRn |bool* |get_invlist_offset_addr|NN SV* invlist EiMRn |UV |_invlist_len |NN SV* const invlist @@ -1750,7 +1770,7 @@ Ap |void |do_gvgv_dump |I32 level|NN PerlIO *file|NN const char *name\ |NULLOK GV *sv Ap |void |do_hv_dump |I32 level|NN PerlIO *file|NN const char *name\ |NULLOK HV *sv -Ap |void |do_magic_dump |I32 level|NN PerlIO *file|NN const MAGIC *mg|I32 nest \ +Ap |void |do_magic_dump |I32 level|NN PerlIO *file|NULLOK const MAGIC *mg|I32 nest \ |I32 maxnest|bool dumpops|STRLEN pvlim Ap |void |do_op_dump |I32 level|NN PerlIO *file|NULLOK const OP *o Ap |void |do_pmop_dump |I32 level|NN PerlIO *file|NULLOK const PMOP *pm @@ -1773,6 +1793,7 @@ Apdmb |void |sv_force_normal|NN SV *sv Apd |void |sv_force_normal_flags|NN SV *const sv|const U32 flags pX |SSize_t|tmps_grow_p |SSize_t ix Apd |SV* |sv_rvweaken |NN SV *const sv +AnpPMd |SV* |sv_get_backrefs|NN SV *const sv : This is indirectly referenced by globals.c. This is somewhat annoying. p |int |magic_killbackrefs|NN SV *sv|NN MAGIC *mg Ap |OP* |newANONATTRSUB |I32 floor|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block @@ -1923,8 +1944,8 @@ s |OP * |my_kid |NULLOK OP *o|NULLOK OP *attrs|NN OP **imopsp s |OP * |dup_attrlist |NN OP *o s |void |apply_attrs |NN HV *stash|NN SV *target|NULLOK OP *attrs s |void |apply_attrs_my |NN HV *stash|NN OP *target|NULLOK OP *attrs|NN OP **imopsp -s |void |bad_type_pv |I32 n|NN const char *t|NN const char *name|U32 flags|NN const OP *kid -s |void |bad_type_gv |I32 n|NN const char *t|NN GV *gv|U32 flags|NN const OP *kid +s |void |bad_type_pv |I32 n|NN const char *t|NN const OP *o|NN const OP *kid +s |void |bad_type_gv |I32 n|NN GV *gv|NN const OP *kid|NN const char *t s |void |no_bareword_allowed|NN OP *o sR |OP* |no_fh_allowed|NN OP *o sR |OP* |too_few_arguments_pv|NN OP *o|NN const char* name|U32 flags @@ -2010,7 +2031,7 @@ sR |const char *|get_num |NN const char *patptr|NN I32 *lenptr ns |bool |need_utf8 |NN const char *pat|NN const char *patend ns |char |first_symbol |NN const char *pat|NN const char *patend sR |char * |sv_exp_grow |NN SV *sv|STRLEN needed -snR |char * |bytes_to_uni |NN const U8 *start|STRLEN len|NN char *dest \ +snR |char * |my_bytes_to_utf8|NN const U8 *start|STRLEN len|NN char *dest \ |const bool needs_swap #endif @@ -2046,7 +2067,7 @@ s |OP* |do_smartmatch |NULLOK HV* seen_this \ #if defined(PERL_IN_PP_HOT_C) s |void |do_oddball |NN SV **oddkey|NN SV **firstkey -sR |SV* |method_common |NN SV* meth|NULLOK U32* hashp +i |HV* |opmethod_stash |NN SV* meth #endif #if defined(PERL_IN_PP_SORT_C) @@ -2096,8 +2117,6 @@ Es |regnode*|regatom |NN RExC_state_t *pRExC_state \ |NN I32 *flagp|U32 depth Es |regnode*|regbranch |NN RExC_state_t *pRExC_state \ |NN I32 *flagp|I32 first|U32 depth -Ei |STRLEN |reguni |NN const RExC_state_t *pRExC_state \ - |UV uv|NN char *s Es |void |set_ANYOF_arg |NN RExC_state_t* const pRExC_state \ |NN regnode* const node \ |NULLOK SV* const cp_list \ @@ -2108,14 +2127,16 @@ Es |void |set_ANYOF_arg |NN RExC_state_t* const pRExC_state \ Es |AV* |add_multi_match|NULLOK AV* multi_char_matches \ |NN SV* multi_string \ |const STRLEN cp_count -Es |regnode*|regclass |NN RExC_state_t *pRExC_state \ +Es |regnode*|regclass |NN RExC_state_t *pRExC_state \ |NN I32 *flagp|U32 depth|const bool stop_at_1 \ |bool allow_multi_fold \ - |const bool silence_non_portable \ + |const bool silence_non_portable \ + |const bool strict \ |NULLOK SV** ret_invlist Es |void|add_above_Latin1_folds|NN RExC_state_t *pRExC_state|const U8 cp \ |NN SV** invlist Esn |bool|could_it_be_a_POSIX_class|NN RExC_state_t *pRExC_state +EsnP |unsigned int|regex_set_precedence|const U8 my_operator Es |regnode*|handle_regex_sets|NN RExC_state_t *pRExC_state \ |NULLOK SV ** return_invlist \ |NN I32 *flagp|U32 depth \ @@ -2125,10 +2146,12 @@ Es |regnode*|reg_node |NN RExC_state_t *pRExC_state|U8 op Es |UV |reg_recode |const char value|NN SV **encp Es |regnode*|regpiece |NN RExC_state_t *pRExC_state \ |NN I32 *flagp|U32 depth -Es |STRLEN |grok_bslash_N |NN RExC_state_t *pRExC_state \ - |NULLOK regnode** nodep|NULLOK UV *valuep \ - |NN I32 *flagp|U32 depth \ - |NULLOK SV** substitute_parse +Es |bool |grok_bslash_N |NN RExC_state_t *pRExC_state \ + |NULLOK regnode** nodep \ + |NULLOK UV *code_point_p \ + |NULLOK int* cp_count \ + |NN I32 *flagp \ + |const U32 depth Es |void |reginsert |NN RExC_state_t *pRExC_state \ |U8 op|NN regnode *opnd|U32 depth Es |void |regtail |NN RExC_state_t *pRExC_state \ @@ -2198,6 +2221,7 @@ Es |I32 |make_trie |NN RExC_state_t *pRExC_state \ |U32 word_count|U32 flags|U32 depth Es |regnode *|construct_ahocorasick_from_trie|NN RExC_state_t *pRExC_state \ |NN regnode *source|U32 depth +EnPs |const char *|cntrl_to_mnemonic|const U8 c # ifdef DEBUGGING Es |void |regdump_intflags|NULLOK const char *lead| const U32 flags Es |void |regdump_extflags|NULLOK const char *lead| const U32 flags @@ -2206,7 +2230,6 @@ Es |const regnode*|dumpuntil|NN const regexp *r|NN const regnode *start \ |NULLOK const regnode *last \ |NULLOK const regnode *plast \ |NN SV* sv|I32 indent|U32 depth -EnPs |const char *|cntrl_to_mnemonic|const U8 c Es |void |put_code_point |NN SV* sv|UV c Es |bool |put_charclass_bitmap_innards|NN SV* sv \ |NN char* bitmap \ @@ -2257,6 +2280,33 @@ Es |void |to_utf8_substr |NN regexp * prog Es |bool |to_byte_substr |NN regexp * prog ERsn |I32 |reg_check_named_buff_matched |NN const regexp *rex \ |NN const regnode *scan +EsnR |bool |isGCB |const GCB_enum before|const GCB_enum after +EsR |bool |isSB |SB_enum before \ + |SB_enum after \ + |NN const U8 * const strbeg \ + |NN const U8 * const curpos \ + |NN const U8 * const strend \ + |const bool utf8_target +EsR |SB_enum|advance_one_SB |NN U8 ** curpos \ + |NN const U8 * const strend \ + |const bool utf8_target +EsR |SB_enum|backup_one_SB |NN const U8 * const strbeg \ + |NN U8 ** curpos \ + |const bool utf8_target +EsR |bool |isWB |WB_enum previous \ + |WB_enum before \ + |WB_enum after \ + |NN const U8 * const strbeg \ + |NN const U8 * const curpos \ + |NN const U8 * const strend \ + |const bool utf8_target +EsR |WB_enum|advance_one_WB |NN U8 ** curpos \ + |NN const U8 * const strend \ + |const bool utf8_target +EsR |WB_enum|backup_one_WB |NN WB_enum * previous \ + |NN const U8 * const strbeg \ + |NN U8 ** curpos \ + |const bool utf8_target # ifdef DEBUGGING Es |void |dump_exec_pos |NN const char *locinput|NN const regnode *scan|NN const char *loc_regeol\ |NN const char *loc_bostr|NN const char *loc_reg_starttry|const bool do_utf8 @@ -2418,9 +2468,12 @@ s |bool |isa_lookup |NN HV *stash|NN const char * const name \ |STRLEN len|U32 flags #endif +#if defined(USE_LOCALE) && defined(PERL_IN_LOCALE_C) +s |char* |stdize_locale |NN char* locs +#endif + #if defined(USE_LOCALE) \ && (defined(PERL_IN_LOCALE_C) || defined (PERL_EXT_POSIX)) -s |char* |stdize_locale |NN char* locs ApM |bool |_is_cur_LC_category_utf8|int category #endif @@ -2445,7 +2498,6 @@ sn |NV|mulexp10 |NV value|I32 exponent #if defined(PERL_IN_UTF8_C) sRM |UV |check_locale_boundary_crossing \ - |NN const char * const func_name \ |NN const U8* const p \ |const UV result \ |NN U8* const ustrp \ @@ -2527,7 +2579,7 @@ Apda |PADLIST*|pad_new |int flags pnX |void|set_padlist| NN CV * cv | NULLOK PADLIST * padlist #endif #if defined(PERL_IN_PAD_C) -s |PADOFFSET|pad_alloc_name|NN SV *namesv|U32 flags \ +s |PADOFFSET|pad_alloc_name|NN PADNAME *name|U32 flags \ |NULLOK HV *typestash|NULLOK HV *ourstash #endif Apd |PADOFFSET|pad_add_name_pvn|NN const char *namepv|STRLEN namelen\ @@ -2541,8 +2593,10 @@ Apd |PADOFFSET|pad_add_name_sv|NN SV *name\ |NULLOK HV *ourstash AMpd |PADOFFSET|pad_alloc |I32 optype|U32 tmptype Apd |PADOFFSET|pad_add_anon |NN CV* func|I32 optype +p |void |pad_add_weakref|NN CV* func #if defined(PERL_IN_PAD_C) -sd |void |pad_check_dup |NN SV *name|U32 flags|NULLOK const HV *ourstash +sd |void |pad_check_dup |NN PADNAME *name|U32 flags \ + |NULLOK const HV *ourstash #endif Apd |PADOFFSET|pad_findmy_pvn|NN const char* namepv|STRLEN namelen|U32 flags Apd |PADOFFSET|pad_findmy_pv|NN const char* name|U32 flags @@ -2554,8 +2608,8 @@ p |SV* |find_rundefsv2 |NN CV *cv|U32 seq #if defined(PERL_IN_PAD_C) sd |PADOFFSET|pad_findlex |NN const char *namepv|STRLEN namelen|U32 flags \ |NN const CV* cv|U32 seq|int warn \ - |NULLOK SV** out_capture|NN SV** out_name_sv \ - |NN int *out_flags + |NULLOK SV** out_capture \ + |NN PADNAME** out_name|NN int *out_flags #endif #ifdef DEBUGGING Apd |SV* |pad_sv |PADOFFSET po @@ -2580,8 +2634,16 @@ Apd |CV* |cv_clone |NN CV* proto p |CV* |cv_clone_into |NN CV* proto|NN CV *target pd |void |pad_fixup_inner_anons|NN PADLIST *padlist|NN CV *old_cv|NN CV *new_cv pdX |void |pad_push |NN PADLIST *padlist|int depth -ApdR |HV* |pad_compname_type|const PADOFFSET po +ApbdR |HV* |pad_compname_type|const PADOFFSET po +AMpdRn |PADNAME *|padnamelist_fetch|NN PADNAMELIST *pnl|SSize_t key +Xop |void |padnamelist_free|NN PADNAMELIST *pnl +AMpd |PADNAME **|padnamelist_store|NN PADNAMELIST *pnl|SSize_t key \ + |NULLOK PADNAME *val +Xop |void |padname_free |NN PADNAME *pn #if defined(USE_ITHREADS) +pdR |PADNAME *|padname_dup |NN PADNAME *src|NN CLONE_PARAMS *param +pR |PADNAMELIST *|padnamelist_dup|NN PADNAMELIST *srcpad \ + |NN CLONE_PARAMS *param pdR |PADLIST *|padlist_dup |NN PADLIST *srcpad \ |NN CLONE_PARAMS *param #endif @@ -2632,7 +2694,8 @@ s |SV * |find_hash_subscript|NULLOK const HV *const hv \ s |I32 |find_array_subscript|NULLOK const AV *const av \ |NN const SV *const val sMd |SV* |find_uninit_var|NULLOK const OP *const obase \ - |NULLOK const SV *const uninit_sv|bool top + |NULLOK const SV *const uninit_sv|bool match \ + |NN const char **desc_p #endif Ap |GV* |gv_fetchpvn_flags|NN const char* name|STRLEN len|I32 flags|const svtype sv_type @@ -2677,11 +2740,10 @@ Apo |int |my_cxt_index |NN const char *my_cxt_key Apo |void* |my_cxt_init |NN int *index|size_t size #endif #endif - -: This function is an implementation detail. The public API for this is -: XS_VERSION_BOOTCHECK -Xpo |void |xs_version_bootcheck|U32 items|U32 ax|NN const char *xs_p \ +#if defined(PERL_IN_UTIL_C) +so |void |xs_version_bootcheck|U32 items|U32 ax|NN const char *xs_p \ |STRLEN xs_len +#endif Xpon |I32 |xs_handshake |const U32 key|NN void * v_my_perl\ |NN const char * file| ... Xp |void |xs_boot_epilog |const U32 ax