X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=embed.pl;h=28c2e384fbfdfebd54229bba80ac2da553b7bd19;hb=e8ee3774ea4d90a4cf69272b6a6a59385df25262;hp=661a1aca8630e830a94fa584d2bf99a9ae9da777;hpb=82ba1be6639bfd31cc63b76f90d26dc1dafd9221;p=p5sagit%2Fp5-mst-13.2.git diff --git a/embed.pl b/embed.pl index 661a1ac..28c2e38 100755 --- a/embed.pl +++ b/embed.pl @@ -257,16 +257,11 @@ sub objxsub_var ($$) { undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr($arg))"); } -sub embedvar ($) { - my ($sym) = @_; -# hide($sym, "Perl_$sym"); - return ''; -} - sub multon ($$$) { my ($sym,$pre,$ptr) = @_; hide("PL_$sym", "($ptr$pre$sym)"); } + sub multoff ($$) { my ($sym,$pre) = @_; return hide("PL_$pre$sym", "PL_$sym"); @@ -308,7 +303,9 @@ print EM <<'END'; # define Perl_set_numeric_local perl_set_numeric_local # define Perl_set_numeric_standard perl_set_numeric_standard # define PERL_POLLUTE -# define PERL_POLLUTE_MALLOC +# ifndef EMBEDMYMALLOC +# define PERL_POLLUTE_MALLOC +# endif #endif /* Hide global symbols */ @@ -531,42 +528,45 @@ 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','PERL_GET_INTERP->'); + 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 @@ -576,66 +576,56 @@ for $sym (sort keys %intrp) { 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 multon($sym,'I','vTHX->'); } print EM <<'END'; -#ifndef USE_THREADS - -END +# endif /* USE_THREADS */ -for $sym (sort keys %thread) { - print EM multoff($sym,'T'); -} - -print EM <<'END'; - -#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 @@ -655,20 +645,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 @@ -682,7 +660,6 @@ print EM <<'END'; #endif /* PERL_POLLUTE */ END - close(EM); unlink 'objXSUB.h'; @@ -1049,7 +1026,7 @@ 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 |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 @@ -1141,6 +1118,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 @@ -1220,7 +1198,7 @@ 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 @@ -1494,7 +1472,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 @@ -1572,10 +1550,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 @@ -1700,7 +1678,7 @@ 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|... @@ -1907,7 +1885,7 @@ s |SV* |method_common |SV* meth|U32* hashp #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 @@ -1918,7 +1896,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