X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=embed.pl;h=eaee6f72641d15d907b30142f106d8023d98a2b8;hb=88d7a19bf96d2396483f674c643f50b1079d8cda;hp=d96158ee065e37f501401b150a1edc3e4ffe7ce2;hpb=0cb9638729211ea71a75ae8756c03ba21553bd53;p=p5sagit%2Fp5-mst-13.2.git diff --git a/embed.pl b/embed.pl index d96158e..eaee6f7 100755 --- a/embed.pl +++ b/embed.pl @@ -218,12 +218,12 @@ sub readvars(\%$$@) { or die "embed.pl: Can't open $file: $!\n"; while () { s/[ \t]*#.*//; # Delete comments. - if (/PERLVARI?C?\($pre(\w+)/) { + if (/PERLVARA?I?C?\($pre(\w+)/) { my $sym = $1; $sym = $pre . $sym if $keep_pre; warn "duplicate symbol $sym while processing $file\n" if exists $$syms{$sym}; - $$syms{$sym} = 1; + $$syms{$sym} = $pre || 1; } } close(FILE); @@ -235,12 +235,10 @@ my %thread; readvars %intrp, 'intrpvar.h','I'; readvars %thread, 'thrdvar.h','T'; readvars %globvar, 'perlvars.h','G'; -readvars %objvar, 'intrpvar.h','pi', 1; -foreach my $sym (sort keys %thread) - { +foreach my $sym (sort keys %thread) { warn "$sym in intrpvar.h as well as thrdvar.h\n" if exists $intrp{$sym}; - } +} sub undefine ($) { my ($sym) = @_; @@ -253,21 +251,17 @@ sub hide ($$) { "#define $from" . "\t" x ($t < 3 ? 3 - $t : 1) . "$to\n"; } -sub objxsub_var ($) { - my ($sym) = @_; - undefine("PL_$sym") . hide("PL_$sym", "pPerl->PL_$sym"); -} - -sub embedvar ($) { - my ($sym) = @_; -# hide($sym, "Perl_$sym"); - return ''; +sub objxsub_var ($$) { + my ($pfx, $sym) = @_; + my $arg = ($pfx eq 'G' ? 'NULL' : 'aTHXo'); + undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr($arg))"); } sub multon ($$$) { my ($sym,$pre,$ptr) = @_; hide("PL_$sym", "($ptr$pre$sym)"); } + sub multoff ($$) { my ($sym,$pre) = @_; return hide("PL_$pre$sym", "PL_$sym"); @@ -286,6 +280,40 @@ print EM <<'END'; /* NO_EMBED is no longer supported. i.e. EMBED is always active. */ +/* provide binary compatible (but inconsistent) names */ +#if defined(PERL_BINCOMPAT_5005) +# define Perl_call_argv perl_call_argv +# define Perl_call_method perl_call_method +# define Perl_call_pv perl_call_pv +# define Perl_call_sv perl_call_sv +# define Perl_get_av perl_get_av +# define Perl_get_cv perl_get_cv +# define Perl_get_hv perl_get_hv +# define Perl_get_sv perl_get_sv +# define Perl_init_i18nl10n perl_init_i18nl10n +# define Perl_init_i18nl14n perl_init_i18nl14n +# define Perl_new_collate perl_new_collate +# define Perl_new_ctype perl_new_ctype +# define Perl_new_numeric perl_new_numeric +# define Perl_require_pv perl_require_pv +# define Perl_safesyscalloc Perl_safecalloc +# define Perl_safesysfree Perl_safefree +# define Perl_safesysmalloc Perl_safemalloc +# define Perl_safesysrealloc Perl_saferealloc +# define Perl_set_numeric_local perl_set_numeric_local +# define Perl_set_numeric_standard perl_set_numeric_standard +# define PERL_POLLUTE +/* malloc() pollution was the default in earlier versions, so enable + * it for bincompat; but not for systems that used to do prevent that, + * or when they ask for {HIDE,EMBED}MYMALLOC */ +# if !defined(EMBEDMYMALLOC) && !defined(HIDEMYMALLOC) +# if !defined(NeXT) && !defined(__NeXT) && !defined(__MACHTEN__) && \ + !defined(__QNX__) +# define PERL_POLLUTE_MALLOC +# endif +# endif +#endif + /* Hide global symbols */ #if !defined(PERL_OBJECT) @@ -423,11 +451,12 @@ print EM <<'END'; disable them. */ -#if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) - +#if !defined(PERL_CORE) # define sv_setptrobj(rv,ptr,name) sv_setref_iv(rv,name,(IV)ptr) # define sv_setptrref(rv,ptr) sv_setref_iv(rv,Nullch,(IV)ptr) +#endif +#if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) && !defined(PERL_BINCOMPAT_5005) /* Compatibility for various misnamed functions. All functions in the API that begin with "perl_" (not "Perl_") take an explicit @@ -458,14 +487,16 @@ print EM <<'END'; an extra argument but grab the context pointer using the macro dTHX. */ -#if defined(PERL_IMPLICIT_CONTEXT) +#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_OBJECT) # define croak Perl_croak_nocontext +# define deb Perl_deb_nocontext # define die Perl_die_nocontext # define form Perl_form_nocontext # define newSVpvf Perl_newSVpvf_nocontext # define sv_catpvf Perl_sv_catpvf_nocontext # define sv_setpvf Perl_sv_setpvf_nocontext # define warn Perl_warn_nocontext +# define warner Perl_warner_nocontext # define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext # define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext #endif @@ -476,11 +507,13 @@ print EM <<'END'; /* undefined symbols, point them back at the usual ones */ # define Perl_croak_nocontext Perl_croak # define Perl_die_nocontext Perl_die +# define Perl_deb_nocontext Perl_deb # define Perl_form_nocontext Perl_form -# define Perl_newSVpvf_nocontext Perl_newSVpvf -# define Perl_sv_catpvf_nocontext Perl_sv_catpvf -# define Perl_sv_setpvf_nocontext Perl_sv_setpvf +# define Perl_newSVpvf_nocontext Perl_newSVpvf +# define Perl_sv_catpvf_nocontext Perl_sv_catpvf +# define Perl_sv_setpvf_nocontext Perl_sv_setpvf # define Perl_warn_nocontext Perl_warn +# define Perl_warner_nocontext Perl_warner # define Perl_sv_catpvf_mg_nocontext Perl_sv_catpvf_mg # define Perl_sv_setpvf_mg_nocontext Perl_sv_setpvf_mg #endif @@ -501,111 +534,104 @@ print EM <<'END'; /* (Doing namespace management portably in C is really gross.) */ -/* Put interpreter-specific symbols into a struct? */ - -#ifdef MULTIPLICITY - -#ifndef USE_THREADS -/* If we do not have threads then per-thread vars are per-interpreter */ - -#ifdef PERL_IMPLICIT_CONTEXT - -/* everything has an implicit context pointer */ - -END - -for $sym (sort keys %thread) { - print EM multon($sym,'T','my_perl->'); -} - -print EM <<'END'; +/* + The following combinations of MULTIPLICITY, USE_THREADS, PERL_OBJECT + and PERL_IMPLICIT_CONTEXT are supported: + 1) none + 2) MULTIPLICITY # supported for compatibility + 3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT + 4) USE_THREADS && PERL_IMPLICIT_CONTEXT + 5) MULTIPLICITY && USE_THREADS && PERL_IMPLICIT_CONTEXT + 6) PERL_OBJECT && PERL_IMPLICIT_CONTEXT + + All other combinations of these flags are errors. + + #3, #4, #5, and #6 are supported directly, while #2 is a special + case of #3 (supported by redefining vTHX appropriately). +*/ -#else /* !PERL_IMPLICIT_CONTEXT */ +#if defined(MULTIPLICITY) +/* cases 2, 3 and 5 above */ -/* traditional MULTIPLICITY (intepreter is in a global) */ +# if defined(PERL_IMPLICIT_CONTEXT) +# define vTHX aTHX +# else +# define vTHX PERL_GET_INTERP +# endif END - for $sym (sort keys %thread) { - print EM multon($sym,'T','PL_curinterp->'); + print EM multon($sym,'T','vTHX->'); } print EM <<'END'; -#endif /* !PERL_IMPLICIT_CONTEXT */ -#endif /* !USE_THREADS */ +# if defined(PERL_OBJECT) +# include "error: PERL_OBJECT + MULTIPLICITY don't go together" +# endif -/* These are always per-interpreter if there is more than one */ +# if defined(USE_THREADS) +/* case 5 above */ END for $sym (sort keys %intrp) { - print EM multon($sym,'I','PL_curinterp->'); + print EM multon($sym,'I','PERL_GET_INTERP->'); } print EM <<'END'; -#else /* !MULTIPLICITY */ +# else /* !USE_THREADS */ +/* cases 2 and 3 above */ END for $sym (sort keys %intrp) { - print EM multoff($sym,'I'); -} - -print EM <<'END'; - -#ifndef USE_THREADS - -END - -for $sym (sort keys %thread) { - print EM multoff($sym,'T'); + print EM multon($sym,'I','vTHX->'); } print EM <<'END'; -#endif /* USE_THREADS */ +# endif /* USE_THREADS */ -/* Hide what would have been interpreter-specific symbols? */ +#else /* !MULTIPLICITY */ +/* cases 1, 4 and 6 above */ END for $sym (sort keys %intrp) { - print EM embedvar($sym); + print EM multoff($sym,'I'); } print EM <<'END'; -#ifndef USE_THREADS +# if defined(USE_THREADS) +/* case 4 above */ END for $sym (sort keys %thread) { - print EM embedvar($sym); + print EM multon($sym,'T','aTHX->'); } print EM <<'END'; -#endif /* USE_THREADS */ -#endif /* MULTIPLICITY */ - -/* Now same trickey for per-thread variables */ - -#ifdef USE_THREADS +# else /* !USE_THREADS */ +/* cases 1 and 6 above */ END for $sym (sort keys %thread) { - print EM multon($sym,'T','thr->'); + print EM multoff($sym,'T'); } print EM <<'END'; -#endif /* USE_THREADS */ +# endif /* USE_THREADS */ +#endif /* MULTIPLICITY */ -#ifdef PERL_GLOBAL_STRUCT +#if defined(PERL_GLOBAL_STRUCT) END @@ -625,20 +651,8 @@ for $sym (sort keys %globvar) { print EM <<'END'; -END - -for $sym (sort keys %globvar) { - print EM embedvar($sym); -} - -print EM <<'END'; - #endif /* PERL_GLOBAL_STRUCT */ -END - -print EM <<'END'; - #ifdef PERL_POLLUTE /* disabled by default in 5.006 */ END @@ -652,7 +666,6 @@ print EM <<'END'; #endif /* PERL_POLLUTE */ END - close(EM); unlink 'objXSUB.h'; @@ -672,18 +685,26 @@ print OBX <<'EOT'; EOT -foreach my $sym (sort(keys(%intrp), - keys(%thread), - keys(%globvar), - keys(%objvar))) -{ - print OBX objxsub_var($sym); +foreach my $sym (sort keys %intrp) { + print OBX objxsub_var('I',$sym); +} + +foreach my $sym (sort keys %thread) { + print OBX objxsub_var('T',$sym); +} + +foreach my $sym (sort keys %globvar) { + print OBX objxsub_var('G',$sym); } print OBX <<'EOT'; /* Functions */ +#if defined(PERL_OBJECT) + +/* XXX soon to be eliminated, only a few things in PERLCORE need these now */ + EOT walk_table { @@ -715,17 +736,247 @@ for $sym (sort keys %ppsym) { print OBX <<'EOT'; +#endif /* PERL_OBJECT */ #endif /* __objXSUB_h__ */ EOT close(OBX); +unlink 'perlapi.h'; +unlink 'perlapi.c'; +open(CAPI, '> perlapi.c') or die "Can't create perlapi.c: $!\n"; +open(CAPIH, '> perlapi.h') or die "Can't create perlapi.h: $!\n"; + +print CAPIH <<'EOT'; +/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!! + This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h, + perlvars.h and thrdvar.h. Any changes made here will be lost! +*/ + +/* declare accessor functions for Perl variables */ + +#if defined(PERL_OBJECT) || defined (PERL_CAPI) + +#if defined(PERL_OBJECT) +# undef aTHXo +# define aTHXo pPerl +# undef aTHXo_ +# define aTHXo_ aTHXo, +#endif /* PERL_OBJECT */ + +START_EXTERN_C + +#undef PERLVAR +#undef PERLVARA +#undef PERLVARI +#undef PERLVARIC +#define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHXo); +#define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \ + EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHXo); +#define PERLVARI(v,t,i) PERLVAR(v,t) +#define PERLVARIC(v,t,i) PERLVAR(v, const t) + +#include "thrdvar.h" +#include "intrpvar.h" +#include "perlvars.h" + +#undef PERLVAR +#undef PERLVARA +#undef PERLVARI +#undef PERLVARIC + +END_EXTERN_C + +#endif /* PERL_OBJECT || PERL_CAPI */ + +EOT + + +print CAPI <<'EOT'; +/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!! + This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h, + perlvars.h and thrdvar.h. Any changes made here will be lost! +*/ + +#include "EXTERN.h" +#include "perl.h" +#include "perlapi.h" + +#if defined(PERL_OBJECT) + +/* accessor functions for Perl variables (provides binary compatibility) */ +START_EXTERN_C + +#undef PERLVAR +#undef PERLVARA +#undef PERLVARI +#undef PERLVARIC +#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHXo) \ + { return &(aTHXo->PL_##v); } +#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHXo) \ + { return &(aTHXo->PL_##v); } +#define PERLVARI(v,t,i) PERLVAR(v,t) +#define PERLVARIC(v,t,i) PERLVAR(v, const t) + +#include "thrdvar.h" +#include "intrpvar.h" + +#undef PERLVAR +#undef PERLVARA +#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHXo) \ + { return &(PL_##v); } +#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHXo) \ + { return &(PL_##v); } +#include "perlvars.h" + +#undef PERLVAR +#undef PERLVARA +#undef PERLVARI +#undef PERLVARIC + +EOT + +# functions that take va_list* for implementing vararg functions +my %vfuncs = qw( + Perl_croak Perl_vcroak + Perl_warn Perl_vwarn + Perl_warner Perl_vwarner + Perl_die Perl_vdie + Perl_form Perl_vform + Perl_deb Perl_vdeb + Perl_newSVpvf Perl_vnewSVpvf + Perl_sv_setpvf Perl_sv_vsetpvf + Perl_sv_setpvf_mg Perl_sv_vsetpvf_mg + Perl_sv_catpvf Perl_sv_vcatpvf + Perl_sv_catpvf_mg Perl_sv_vcatpvf_mg + Perl_dump_indent Perl_dump_vindent + Perl_default_protect Perl_vdefault_protect +); + +sub emit_func { + my ($addcontext, $rettype,$func,@args) = @_; + my @aargs = @args; + for my $a (@aargs) { $a =~ s/^.*\b(\w+)$/$1/ } + my $ctxarg = ''; + if (not $addcontext) { + $ctxarg = 'pTHXo'; + $ctxarg .= '_ ' if @args; + } + my $decl = ''; + if ($addcontext) { + $decl .= " dTHXo;\n"; + } + local $" = ', '; + my $return = ($rettype =~ /^\s*(void|Free_t|Signal_t)\s*$/ + ? '' : 'return '); + my $emitval = ''; + if (@args and $args[$#args] =~ /\.\.\./) { + pop @args; + pop @aargs; + my $retarg = ''; + my $ctxfunc = $func; + $ctxfunc =~ s/_nocontext$//; + return $emitval unless exists $vfuncs{$ctxfunc}; + if (length $return) { + $decl .= " $rettype retval;\n"; + $retarg .= "retval = "; + $return = "\n ${return}retval;\n"; + } + $emitval .= <$vfuncs{$ctxfunc}(@aargs, &args); + va_end(args);$return +} +EOT + } + else { + $emitval .= <$func(@aargs); +} +EOT + } + $emitval; +} + +# XXXX temporary hack +for my $sym (qw( + perl_construct + perl_destruct + perl_free + perl_run + perl_parse + )) +{ + $skipapi_funcs{$sym}++; +} + +walk_table { + my $ret = ""; + if (@_ == 1) { + my $arg = shift; + $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifdef|else|endif)\b/; + } + else { + my ($flags,$retval,$func,@args) = @_; + return $ret if exists $skipapi_funcs{$func}; + unless ($flags =~ /s/) { + $ret .= "\n"; + my $addctx = 1 if $flags =~ /n/; + if ($flags =~ /p/) { + $ret .= undefine("Perl_$func"); + $ret .= emit_func($addctx,$retval,"Perl_$func",@args); + } + else { + $ret .= undefine($func); + $ret .= emit_func($addctx,$retval,$func,@args); + } + } + } + $ret; +} \*CAPI; + +for $sym (sort keys %ppsym) { + $sym =~ s/^Perl_//; + print CAPI "\n"; + print CAPI undefine("Perl_$sym"); + if ($sym =~ /^ck_/) { + print CAPI emit_func(0, 'OP *',"Perl_$sym",'OP *o'); + } + else { # pp_foo + print CAPI emit_func(0, 'OP *',"Perl_$sym"); + } +} + +print CAPI <<'EOT'; + +#undef Perl_fprintf_nocontext +int +Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...) +{ + dTHXo; + va_list(arglist); + va_start(arglist, format); + return (*pPerl->PL_StdIO->pVprintf)(pPerl->PL_StdIO, stream, format, arglist); +} + +END_EXTERN_C + +#endif /* PERL_OBJECT */ +EOT + __END__ # Lines are of the form: -# flags|return_type|function_name|return_type|arg1|arg2|...|argN +# flags|return_type|function_name|arg1|arg2|...|argN # -# They may continue on multiple lines when \w| begins the next line. +# A line may be continued on another by ending it with a backslash. # Leading and trailing whitespace will be ignored in each component. # # flags are single letters with following meanings: @@ -754,7 +1005,6 @@ p |bool |Gv_AMupdate |HV* stash p |OP* |append_elem |I32 optype|OP* head|OP* tail p |OP* |append_list |I32 optype|LISTOP* first|LISTOP* last p |I32 |apply |I32 type|SV** mark|SV** sp -p |void |assertref |OP* o p |bool |avhv_exists_ent|AV *ar|SV* keysv|U32 hash p |SV** |avhv_fetch_ent |AV *ar|SV* keysv|I32 lval|U32 hash p |HE* |avhv_iternext |AV *ar @@ -780,11 +1030,11 @@ p |I32 |block_gimme p |int |block_start |int full p |void |boot_core_UNIVERSAL p |void |call_list |I32 oldscope|AV* av_list -p |I32 |cando |I32 bit|I32 effective|Stat_t* statbufp -p |U32 |cast_ulong |double f -p |I32 |cast_i32 |double f -p |IV |cast_iv |double f -p |UV |cast_uv |double f +p |bool |cando |Mode_t mode|Uid_t effective|Stat_t* statbufp +p |U32 |cast_ulong |NV f +p |I32 |cast_i32 |NV f +p |IV |cast_iv |NV f +p |UV |cast_uv |NV f #if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP) p |I32 |my_chsize |int fd|Off_t length #endif @@ -793,16 +1043,20 @@ p |MAGIC* |condpair_magic |SV *sv #endif p |OP* |convert |I32 optype|I32 flags|OP* o pr |void |croak |const char* pat|... +pr |void |vcroak |const char* pat|va_list* args #if defined(PERL_IMPLICIT_CONTEXT) npr |void |croak_nocontext|const char* pat|... np |OP* |die_nocontext |const char* pat|... +np |void |deb_nocontext |const char* pat|... np |char* |form_nocontext |const char* pat|... np |void |warn_nocontext |const char* pat|... +np |void |warner_nocontext|U32 err|const char* pat|... np |SV* |newSVpvf_nocontext|const char* pat|... np |void |sv_catpvf_nocontext|SV* sv|const char* pat|... np |void |sv_setpvf_nocontext|SV* sv|const char* pat|... np |void |sv_catpvf_mg_nocontext|SV* sv|const char* pat|... np |void |sv_setpvf_mg_nocontext|SV* sv|const char* pat|... +np |int |fprintf_nocontext|PerlIO* stream|const char* fmt|... #endif p |void |cv_ckproto |CV* cv|GV* gv|char* p p |CV* |cv_clone |CV* proto @@ -820,6 +1074,7 @@ p |U32* |get_opargs p |PPADDR_t*|get_ppaddr p |I32 |cxinc p |void |deb |const char* pat|... +p |void |vdeb |const char* pat|va_list* args p |void |deb_growlevel p |void |debprofdump p |I32 |debop |OP* o @@ -829,9 +1084,11 @@ p |char* |delimcpy |char* to|char* toend|char* from \ |char* fromend|int delim|I32* retlen p |void |deprecate |char* s p |OP* |die |const char* pat|... +p |OP* |vdie |const char* pat|va_list* args p |OP* |die_where |char* message|STRLEN msglen p |void |dounwind |I32 cxix p |bool |do_aexec |SV* really|SV** mark|SV** sp +p |bool |do_aexec5 |SV* really|SV** mark|SV** sp|int fd|int flag p |int |do_binmode |PerlIO *fp|int iotype|int flag p |void |do_chop |SV* asv|SV* sv p |bool |do_close |GV* gv|bool not_implicit @@ -853,6 +1110,9 @@ p |void |do_join |SV* sv|SV* del|SV** mark|SV** sp p |OP* |do_kv p |bool |do_open |GV* gv|char* name|I32 len|int as_raw \ |int rawmode|int rawperm|PerlIO* supplied_fp +p |bool |do_open9 |GV *gv|char *name|I32 len|int as_raw \ + |int rawmode|int rawperm|PerlIO *supplied_fp \ + |SV *svs|I32 num p |void |do_pipe |SV* sv|GV* rgv|GV* wgv p |bool |do_print |SV* sv|PerlIO* fp p |OP* |do_readline @@ -862,6 +1122,7 @@ p |void |do_sprintf |SV* sv|I32 len|SV** sarg p |Off_t |do_sysseek |GV* gv|Off_t pos|int whence p |Off_t |do_tell |GV* gv p |I32 |do_trans |SV* sv +p |UV |do_vecget |SV* sv|I32 offset|I32 size p |void |do_vecset |SV* sv p |void |do_vop |I32 optype|SV* sv|SV* left|SV* right p |OP* |dofile |OP* term @@ -888,6 +1149,7 @@ p |PADOFFSET|find_threadsv|const char *name p |OP* |force_list |OP* arg p |OP* |fold_constants |OP* arg p |char* |form |const char* pat|... +p |char* |vform |const char* pat|va_list* args p |void |free_tmps p |OP* |gen_constant_list|OP* o #if !defined(HAS_GETENV_LEN) @@ -940,42 +1202,61 @@ p |HE* |hv_store_ent |HV* tb|SV* key|SV* val|U32 hash p |void |hv_undef |HV* tb p |I32 |ibcmp |const char* a|const char* b|I32 len p |I32 |ibcmp_locale |const char* a|const char* b|I32 len -p |I32 |ingroup |I32 testgid|I32 effective +p |bool |ingroup |Gid_t testgid|Uid_t effective +p |void |init_debugger p |void |init_stacks p |U32 |intro_my p |char* |instr |const char* big|const char* little -p |bool |io_close |IO* io +p |bool |io_close |IO* io|bool not_implicit p |OP* |invert |OP* cmd p |bool |is_uni_alnum |U32 c +p |bool |is_uni_alnumc |U32 c p |bool |is_uni_idfirst |U32 c p |bool |is_uni_alpha |U32 c +p |bool |is_uni_ascii |U32 c p |bool |is_uni_space |U32 c +p |bool |is_uni_cntrl |U32 c +p |bool |is_uni_graph |U32 c p |bool |is_uni_digit |U32 c p |bool |is_uni_upper |U32 c p |bool |is_uni_lower |U32 c p |bool |is_uni_print |U32 c +p |bool |is_uni_punct |U32 c +p |bool |is_uni_xdigit |U32 c p |U32 |to_uni_upper |U32 c p |U32 |to_uni_title |U32 c p |U32 |to_uni_lower |U32 c p |bool |is_uni_alnum_lc|U32 c +p |bool |is_uni_alnumc_lc|U32 c p |bool |is_uni_idfirst_lc|U32 c p |bool |is_uni_alpha_lc|U32 c +p |bool |is_uni_ascii_lc|U32 c p |bool |is_uni_space_lc|U32 c +p |bool |is_uni_cntrl_lc|U32 c +p |bool |is_uni_graph_lc|U32 c p |bool |is_uni_digit_lc|U32 c p |bool |is_uni_upper_lc|U32 c p |bool |is_uni_lower_lc|U32 c p |bool |is_uni_print_lc|U32 c +p |bool |is_uni_punct_lc|U32 c +p |bool |is_uni_xdigit_lc|U32 c p |U32 |to_uni_upper_lc|U32 c p |U32 |to_uni_title_lc|U32 c p |U32 |to_uni_lower_lc|U32 c p |bool |is_utf8_alnum |U8 *p +p |bool |is_utf8_alnumc |U8 *p p |bool |is_utf8_idfirst|U8 *p p |bool |is_utf8_alpha |U8 *p +p |bool |is_utf8_ascii |U8 *p p |bool |is_utf8_space |U8 *p +p |bool |is_utf8_cntrl |U8 *p p |bool |is_utf8_digit |U8 *p +p |bool |is_utf8_graph |U8 *p p |bool |is_utf8_upper |U8 *p p |bool |is_utf8_lower |U8 *p p |bool |is_utf8_print |U8 *p +p |bool |is_utf8_punct |U8 *p +p |bool |is_utf8_xdigit |U8 *p p |bool |is_utf8_mark |U8 *p p |OP* |jmaybe |OP* arg p |I32 |keyword |char* d|I32 len @@ -1058,9 +1339,7 @@ p |I32 |mg_size |SV* sv p |OP* |mod |OP* o|I32 type p |char* |moreswitches |char* s p |OP* |my |OP* o -#ifdef USE_LOCALE_NUMERIC -p |double |my_atof |const char *s -#endif +p |NV |my_atof |const char *s #if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY) p |char* |my_bcopy |const char* from|char* to|I32 len #endif @@ -1129,18 +1408,17 @@ p |SV* |newSV |STRLEN len p |OP* |newSVREF |OP* o p |OP* |newSVOP |I32 type|I32 flags|SV* sv p |SV* |newSViv |IV i -p |SV* |newSVnv |double n +p |SV* |newSVnv |NV n p |SV* |newSVpv |const char* s|STRLEN len p |SV* |newSVpvn |const char* s|STRLEN len p |SV* |newSVpvf |const char* pat|... +p |SV* |vnewSVpvf |const char* pat|va_list* args p |SV* |newSVrv |SV* rv|const char* classname p |SV* |newSVsv |SV* old p |OP* |newUNOP |I32 type|I32 flags|OP* first p |OP* |newWHILEOP |I32 flags|I32 debuggable|LOOP* loop \ |I32 whileline|OP* expr|OP* block|OP* cont -#if defined(USE_THREADS) -p |struct perl_thread*|new_struct_thread|struct perl_thread *t -#endif + p |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems p |PerlIO*|nextargv |GV* gv p |char* |ninstr |const char* big|const char* bigend \ @@ -1174,6 +1452,9 @@ no |void |perl_free |PerlInterpreter* sv_interp no |int |perl_run |PerlInterpreter* sv_interp no |int |perl_parse |PerlInterpreter* sv_interp|XSINIT_t xsinit \ |int argc|char** argv|char** env +#if defined(USE_THREADS) +p |struct perl_thread* |new_struct_thread|struct perl_thread *t +#endif #endif p |void |call_atexit |ATEXIT_t fn|void *ptr p |I32 |call_argv |const char* sub_name|I32 flags|char** argv @@ -1195,7 +1476,7 @@ p |void |set_numeric_local p |void |set_numeric_radix p |void |set_numeric_standard p |void |require_pv |const char* pv -p |void |pidgone |int pid|int status +p |void |pidgone |Pid_t pid|int status p |void |pmflag |U16* pmfl|int ch p |OP* |pmruntime |OP* pm|OP* expr|OP* repl p |OP* |pmtrans |OP* o|OP* expr|OP* repl @@ -1212,6 +1493,10 @@ p |I32 |pregexec |regexp* prog|char* stringarg \ |SV* screamer|U32 nosave p |void |pregfree |struct regexp* r p |regexp*|pregcomp |char* exp|char* xend|PMOP* pm +p |char* |re_intuit_start|regexp* prog|SV* sv|char* strpos \ + |char* strend|U32 flags \ + |struct re_scream_pos_data_s *data +p |SV* |re_intuit_string|regexp* prog p |I32 |regexec_flags |regexp* prog|char* stringarg \ |char* strend|char* strbeg|I32 minend \ |SV* screamer|void* data|U32 flags @@ -1269,10 +1554,10 @@ p |OP* |scalar |OP* o p |OP* |scalarkids |OP* o p |OP* |scalarseq |OP* o p |OP* |scalarvoid |OP* o -p |UV |scan_bin |char* start|I32 len|I32* retlen -p |UV |scan_hex |char* start|I32 len|I32* retlen +p |NV |scan_bin |char* start|I32 len|I32* retlen +p |NV |scan_hex |char* start|I32 len|I32* retlen p |char* |scan_num |char* s -p |UV |scan_oct |char* start|I32 len|I32* retlen +p |NV |scan_oct |char* start|I32 len|I32* retlen p |OP* |scope |OP* o p |char* |screaminstr |SV* bigsv|SV* littlesv|I32 start_shift \ |I32 end_shift|I32 *state|I32 last @@ -1291,18 +1576,19 @@ p |CV* |sv_2cv |SV* sv|HV** st|GV** gvp|I32 lref p |IO* |sv_2io |SV* sv p |IV |sv_2iv |SV* sv p |SV* |sv_2mortal |SV* sv -p |double |sv_2nv |SV* sv +p |NV |sv_2nv |SV* sv p |char* |sv_2pv |SV* sv|STRLEN* lp p |UV |sv_2uv |SV* sv p |IV |sv_iv |SV* sv p |UV |sv_uv |SV* sv -p |double |sv_nv |SV* sv +p |NV |sv_nv |SV* sv p |char* |sv_pvn |SV *sv|STRLEN *len p |I32 |sv_true |SV *sv p |void |sv_add_arena |char* ptr|U32 size|U32 flags p |int |sv_backoff |SV* sv p |SV* |sv_bless |SV* sv|HV* stash p |void |sv_catpvf |SV* sv|const char* pat|... +p |void |sv_vcatpvf |SV* sv|const char* pat|va_list* args p |void |sv_catpv |SV* sv|const char* ptr p |void |sv_catpvn |SV* sv|const char* ptr|STRLEN len p |void |sv_catsv |SV* dsv|SV* ssv @@ -1345,12 +1631,13 @@ p |void |sv_replace |SV* sv|SV* nsv p |void |sv_report_used p |void |sv_reset |char* s|HV* stash p |void |sv_setpvf |SV* sv|const char* pat|... +p |void |sv_vsetpvf |SV* sv|const char* pat|va_list* args p |void |sv_setiv |SV* sv|IV num p |void |sv_setpviv |SV* sv|IV num p |void |sv_setuv |SV* sv|UV num -p |void |sv_setnv |SV* sv|double num +p |void |sv_setnv |SV* sv|NV num p |SV* |sv_setref_iv |SV* rv|const char* classname|IV iv -p |SV* |sv_setref_nv |SV* rv|const char* classname|double nv +p |SV* |sv_setref_nv |SV* rv|const char* classname|NV nv p |SV* |sv_setref_pv |SV* rv|const char* classname|void* pv p |SV* |sv_setref_pvn |SV* rv|const char* classname|char* pv \ |STRLEN n @@ -1366,10 +1653,10 @@ p |bool |sv_upgrade |SV* sv|U32 mt p |void |sv_usepvn |SV* sv|char* ptr|STRLEN len p |void |sv_vcatpvfn |SV* sv|const char* pat|STRLEN patlen \ |va_list* args|SV** svargs|I32 svmax \ - |bool *used_locale + |bool *maybe_tainted p |void |sv_vsetpvfn |SV* sv|const char* pat|STRLEN patlen \ |va_list* args|SV** svargs|I32 svmax \ - |bool *used_locale + |bool *maybe_tainted p |SV* |swash_init |char* pkg|char* name|SV* listsv \ |I32 minbits|I32 none p |UV |swash_fetch |SV *sv|U8 *ptr @@ -1395,9 +1682,11 @@ p |UV |utf8_to_uv |U8 *s|I32* retlen p |U8* |uv_to_utf8 |U8 *d|UV uv p |void |vivify_defelem |SV* sv p |void |vivify_ref |SV* sv|U32 to_what -p |I32 |wait4pid |int pid|int* statusp|int flags +p |I32 |wait4pid |Pid_t pid|int* statusp|int flags p |void |warn |const char* pat|... +p |void |vwarn |const char* pat|va_list* args p |void |warner |U32 err|const char* pat|... +p |void |vwarner |U32 err|const char* pat|va_list* args p |void |watch |char** addr p |I32 |whichsig |char* sig p |int |yyerror |char* s @@ -1428,26 +1717,19 @@ pn |void |safexfree |Malloc_t where #if defined(PERL_GLOBAL_STRUCT) p |struct perl_vars *|GetVars #endif -p |void |yydestruct |void *ptr p |int |runops_standard p |int |runops_debug - -#if defined(WIN32) -#if defined(PERL_OBJECT) -p |int& |ErrorNo -#else -p |int* |ErrorNo -#endif -#endif p |void |sv_catpvf_mg |SV *sv|const char* pat|... +p |void |sv_vcatpvf_mg |SV* sv|const char* pat|va_list* args p |void |sv_catpv_mg |SV *sv|const char *ptr p |void |sv_catpvn_mg |SV *sv|const char *ptr|STRLEN len p |void |sv_catsv_mg |SV *dstr|SV *sstr p |void |sv_setpvf_mg |SV *sv|const char* pat|... +p |void |sv_vsetpvf_mg |SV* sv|const char* pat|va_list* args p |void |sv_setiv_mg |SV *sv|IV i p |void |sv_setpviv_mg |SV *sv|IV iv p |void |sv_setuv_mg |SV *sv|UV u -p |void |sv_setnv_mg |SV *sv|double num +p |void |sv_setnv_mg |SV *sv|NV num p |void |sv_setpv_mg |SV *sv|const char *ptr p |void |sv_setpvn_mg |SV *sv|const char *ptr|STRLEN len p |void |sv_setsv_mg |SV *dstr|SV *sstr @@ -1456,6 +1738,8 @@ p |MGVTBL*|get_vtbl |int vtbl_id p |char* |pv_display |SV *sv|char *pv|STRLEN cur|STRLEN len \ |STRLEN pvlim p |void |dump_indent |I32 level|PerlIO *file|const char* pat|... +p |void |dump_vindent |I32 level|PerlIO *file|const char* pat \ + |va_list *args p |void |do_gv_dump |I32 level|PerlIO *file|char *name|GV *sv p |void |do_gvgv_dump |I32 level|PerlIO *file|char *name|GV *sv p |void |do_hv_dump |I32 level|PerlIO *file|char *name|HV *sv @@ -1467,6 +1751,7 @@ p |void |do_sv_dump |I32 level|PerlIO *file|SV *sv|I32 nest \ |I32 maxnest|bool dumpops|STRLEN pvlim p |void |magic_dump |MAGIC *mg p |void* |default_protect|int *excpt|protect_body_t body|... +p |void* |vdefault_protect|int *excpt|protect_body_t body|va_list *args p |void |reginitcolors p |char* |sv_2pv_nolen |SV* sv p |char* |sv_pv |SV *sv @@ -1474,6 +1759,11 @@ p |void |sv_force_normal|SV *sv p |void |tmps_grow |I32 n p |SV* |sv_rvweaken |SV *sv p |int |magic_killbackrefs|SV *sv|MAGIC *mg +p |OP* |newANONATTRSUB |I32 floor|OP *proto|OP *attrs|OP *block +p |CV* |newATTRSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block +p |void |newMYSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block +p |OP * |my_attrs |OP *o|OP *attrs +p |void |boot_core_xsutils #if defined(PERL_OBJECT) protected: @@ -1514,19 +1804,19 @@ s |void |save_magic |I32 mgs_ix|SV *sv s |int |magic_methpack |SV *sv|MAGIC *mg|char *meth s |int |magic_methcall |SV *sv|MAGIC *mg|char *meth|I32 f \ |int n|SV *val -s |void |unwind_handler_stack |void *p -s |void |restore_magic |void *p #endif #if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT) s |I32 |list_assignment|OP *o s |void |bad_type |I32 n|char *t|char *name|OP *kid +s |void |cop_free |COP *cop s |OP* |modkids |OP *o|I32 type s |void |no_bareword_allowed|OP *o s |OP* |no_fh_allowed |OP *o s |OP* |scalarboolean |OP *o s |OP* |too_few_arguments|OP *o|char* name s |OP* |too_many_arguments|OP *o|char* name +s |void |op_clear |OP* o s |void |null |OP* o s |PADOFFSET|pad_findlex |char* name|PADOFFSET newoff|U32 seq \ |CV* startcv|I32 cx_ix|I32 saweval|U32 flags @@ -1537,6 +1827,9 @@ s |bool |is_handle_constructor |OP *o|I32 argnum s |char* |gv_ename |GV *gv s |CV* |cv_clone2 |CV *proto|CV *outside s |bool |scalar_mod_type|OP *o|I32 type +s |OP * |my_kid |OP *o|OP *attrs +s |OP * |dup_attrlist |OP *o +s |void |apply_attrs |HV *stash|SV *target|OP *attrs # if defined(PL_OP_SLAB_ALLOC) s |void* |Slab_Alloc |int m|size_t sz # endif @@ -1548,7 +1841,6 @@ s |void |forbid_setid |char * s |void |incpush |char *|int s |void |init_interp s |void |init_ids -s |void |init_debugger s |void |init_lexer s |void |init_main_stash s |void |init_perllib @@ -1596,25 +1888,16 @@ s |void |save_lines |AV *array|SV *sv s |OP* |doeval |int gimme|OP** startop s |PerlIO *|doopen_pmc |const char *name|const char *mode s |void |qsortsv |SV ** array|size_t num_elts|SVCOMPARE_t f -s |I32 |sortcv |SV *a|SV *b -s |I32 |sv_ncmp |SV *a|SV *b -s |I32 |sv_i_ncmp |SV *a|SV *b -s |I32 |amagic_ncmp |SV *a|SV *b -s |I32 |amagic_i_ncmp |SV *a|SV *b -s |I32 |amagic_cmp |SV *str1|SV *str2 -s |I32 |amagic_cmp_locale|SV *str1|SV *str2 #endif #if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT) s |CV* |get_db_sub |SV **svp|CV *cv -# if defined(USE_THREADS) -s |void |unset_cvowner |void *cvarg -# endif +s |SV* |method_common |SV* meth|U32* hashp #endif #if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT) s |OP* |doform |CV *cv|GV *gv|OP *retop -s |int |emulate_eaccess|const char* path|int mode +s |int |emulate_eaccess|const char* path|Mode_t mode # if !defined(HAS_MKDIR) || !defined(HAS_RMDIR) s |int |dooneliner |char *cmd|char *filename # endif @@ -1625,7 +1908,6 @@ s |regnode*|reg |I32|I32 * s |regnode*|reganode |U8|U32 s |regnode*|regatom |I32 * s |regnode*|regbranch |I32 *|I32 -s |void |regc |U8|char * s |void |reguni |UV|char *|I32* s |regnode*|regclass s |regnode*|regclassutf8 @@ -1639,13 +1921,14 @@ s |char*|regwhite |char *|char * s |char*|nextchar s |regnode*|dumpuntil |regnode *start|regnode *node \ |regnode *last|SV* sv|I32 l -s |void |scan_commit |scan_data_t *data +s |void |scan_commit |struct scan_data_t *data s |I32 |study_chunk |regnode **scanp|I32 *deltap \ - |regnode *last|scan_data_t *data|U32 flags + |regnode *last|struct scan_data_t *data \ + |U32 flags s |I32 |add_data |I32 n|char *s rs |void|re_croak2 |const char* pat1|const char* pat2|... -s |char*|regpposixcc |I32 value -s |void |clear_re |void *r +s |I32 |regpposixcc |I32 value +s |void |checkposixcc #endif #if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT) @@ -1659,7 +1942,6 @@ s |CHECKPOINT|regcppush |I32 parenfloor s |char*|regcppop s |char*|regcp_set_to |I32 ss s |void |cache_re |regexp *prog -s |void |restore_pos |void *arg s |U8* |reghop |U8 *pos|I32 off s |U8* |reghopmaybe |U8 *pos|I32 off #endif @@ -1689,10 +1971,6 @@ s |void |del_xnv |XPVNV* p s |void |del_xpv |XPV* p s |void |del_xrv |XRV* p s |void |sv_unglob |SV* sv -s |void |do_report_used |SV *sv -s |void |do_clean_objs |SV *sv -s |void |do_clean_named_objs|SV *sv -s |void |do_clean_all |SV *sv s |void |not_a_number |SV *sv s |void |visit |SVFUNC_t f # if defined(PURIFY) @@ -1722,7 +2000,7 @@ s |char* |scan_ident |char *s|char *send|char *dest \ |STRLEN destlen|I32 ck_uni s |char* |scan_inputsymbol|char *start s |char* |scan_pat |char *start|I32 type -s |char* |scan_str |char *start +s |char* |scan_str |char *start|int keep_quoted|int keep_delims s |char* |scan_subst |char *start s |char* |scan_trans |char *start s |char* |scan_word |char *s|char *dest|STRLEN destlen \ @@ -1748,9 +2026,6 @@ s |void |depcom s |char* |incl_perldb s |I32 |utf16_textfilter|int idx|SV *sv|int maxlen s |I32 |utf16rev_textfilter|int idx|SV *sv|int maxlen -s |void |restore_rsfp |void *f -s |void |restore_expect |void *e -s |void |restore_lex_expect |void *e # if defined(CRIPPLED_CC) s |int |uni |I32 f|char *s # endif @@ -1765,9 +2040,6 @@ s |SV*|isa_lookup |HV *stash|const char *name|int len|int level #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) s |SV* |mess_alloc -rs |void |do_croak |const char *pat|va_list *args -s |void |do_warn |const char *pat|va_list *args -s |OP* |do_die |const char *pat|va_list *args # if defined(LEAKTEST) s |void |xstat |int # endif