more cleanup: avoid unused knowledge of "file GV" notion in CV and GV
[p5sagit/p5-mst-13.2.git] / embed.pl
index cd3b578..06d6371 100755 (executable)
--- 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");
@@ -307,9 +302,14 @@ print EM <<'END';
 #  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
-#  ifndef EMBEDMYMALLOC
-#    define  PERL_POLLUTE_MALLOC
+/* 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
 
@@ -451,8 +451,8 @@ print EM <<'END';
  */
 
 #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)
+#  define sv_setptrobj(rv,ptr,name)    sv_setref_iv(rv,name,PTR2IV(ptr))
+#  define sv_setptrref(rv,ptr)         sv_setref_iv(rv,Nullch,PTR2IV(ptr))
 #endif
 
 #if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) && !defined(PERL_BINCOMPAT_5005)
@@ -463,23 +463,23 @@ print EM <<'END';
    The following are not like that, but since they had a "perl_"
    prefix in previous versions, we provide compatibility macros.
  */
-#  define perl_atexit                  call_atexit
-#  define perl_call_argv               call_argv
-#  define perl_call_pv                 call_pv
-#  define perl_call_method             call_method
-#  define perl_call_sv                 call_sv
-#  define perl_eval_sv                 eval_sv
-#  define perl_eval_pv                 eval_pv
-#  define perl_require_pv              require_pv
-#  define perl_get_sv                  get_sv
-#  define perl_get_av                  get_av
-#  define perl_get_hv                  get_hv
-#  define perl_get_cv                  get_cv
-#  define perl_init_i18nl10n           init_i18nl10n
-#  define perl_init_i18nl14n           init_i18nl14n
-#  define perl_new_ctype               new_ctype
-#  define perl_new_collate             new_collate
-#  define perl_new_numeric             new_numeric
+#  define perl_atexit(a,b)             call_atexit(a,b)
+#  define perl_call_argv(a,b,c)                call_argv(a,b,c)
+#  define perl_call_pv(a,b)            call_pv(a,b)
+#  define perl_call_method(a,b)                call_method(a,b)
+#  define perl_call_sv(a,b)            call_sv(a,b)
+#  define perl_eval_sv(a,b)            eval_sv(a,b)
+#  define perl_eval_pv(a,b)            eval_pv(a,b)
+#  define perl_require_pv(a)           require_pv(a)
+#  define perl_get_sv(a,b)             get_sv(a,b)
+#  define perl_get_av(a,b)             get_av(a,b)
+#  define perl_get_hv(a,b)             get_hv(a,b)
+#  define perl_get_cv(a,b)             get_cv(a,b)
+#  define perl_init_i18nl10n(a)                init_i18nl10n(a)
+#  define perl_init_i18nl14n(a)                init_i18nl14n(a)
+#  define perl_new_ctype(a)            new_ctype(a)
+#  define perl_new_collate(a)          new_collate(a)
+#  define perl_new_numeric(a)          new_numeric(a)
 
 /* varargs functions can't be handled with CPP macros. :-(
    This provides a set of compatibility functions that don't take
@@ -491,6 +491,7 @@ print EM <<'END';
 #  define deb                          Perl_deb_nocontext
 #  define die                          Perl_die_nocontext
 #  define form                         Perl_form_nocontext
+#  define mess                         Perl_mess_nocontext
 #  define newSVpvf                     Perl_newSVpvf_nocontext
 #  define sv_catpvf                    Perl_sv_catpvf_nocontext
 #  define sv_setpvf                    Perl_sv_setpvf_nocontext
@@ -508,6 +509,7 @@ print EM <<'END';
 #  define Perl_die_nocontext           Perl_die
 #  define Perl_deb_nocontext           Perl_deb
 #  define Perl_form_nocontext          Perl_form
+#  define Perl_mess_nocontext          Perl_mess
 #  define Perl_newSVpvf_nocontext      Perl_newSVpvf
 #  define Perl_sv_catpvf_nocontext     Perl_sv_catpvf
 #  define Perl_sv_setpvf_nocontext     Perl_sv_setpvf
@@ -533,42 +535,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
 
@@ -578,66 +583,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 <<'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
 
@@ -657,20 +652,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
@@ -684,7 +667,6 @@ print EM <<'END';
 #endif /* PERL_POLLUTE */
 END
 
-
 close(EM);
 
 unlink 'objXSUB.h';
@@ -781,8 +763,6 @@ print CAPIH <<'EOT';
 #  define aTHXo                        pPerl
 #  undef  aTHXo_
 #  define aTHXo_               aTHXo,
-#  undef  _aTHXo
-#  define _aTHXo               ,aTHXo
 #endif /* PERL_OBJECT */
 
 START_EXTERN_C
@@ -858,12 +838,14 @@ START_EXTERN_C
 EOT
 
 # functions that take va_list* for implementing vararg functions
+# NOTE: makedef.pl must be updated if you add symbols to %vfuncs
 my %vfuncs = qw(
     Perl_croak                 Perl_vcroak
     Perl_warn                  Perl_vwarn
     Perl_warner                        Perl_vwarner
     Perl_die                   Perl_vdie
     Perl_form                  Perl_vform
+    Perl_mess                  Perl_vmess
     Perl_deb                   Perl_vdeb
     Perl_newSVpvf              Perl_vnewSVpvf
     Perl_sv_setpvf             Perl_sv_vsetpvf
@@ -892,7 +874,6 @@ sub emit_func {
                  ? '' : 'return ');
     my $emitval = '';
     if (@args and $args[$#args] =~ /\.\.\./) {
-       pop @args;
        pop @aargs;
        my $retarg = '';
        my $ctxfunc = $func;
@@ -995,9 +976,9 @@ 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:
@@ -1070,6 +1051,7 @@ 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     |SV*    |mess_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|...
@@ -1096,7 +1078,6 @@ 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
 p      |I32    |debstack
@@ -1143,6 +1124,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
@@ -1346,7 +1328,9 @@ p |void   |markstack_grow
 #if defined(USE_LOCALE_COLLATE)
 p      |char*  |mem_collxfrm   |const char* s|STRLEN len|STRLEN* xlen
 #endif
-p      |SV*    |mess           |const char* pat|va_list* args
+p      |SV*    |mess           |const char* pat|...
+p      |SV*    |vmess          |const char* pat|va_list* args
+p      |void   |qerror         |SV* err
 p      |int    |mg_clear       |SV* sv
 p      |int    |mg_copy        |SV* sv|SV* nsv|const char* key|I32 klen
 p      |MAGIC* |mg_find        |SV* sv|int type
@@ -1496,7 +1480,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
@@ -1544,7 +1528,8 @@ p |void   |save_aptr      |AV** aptr
 p      |AV*    |save_ary       |GV* gv
 p      |void   |save_clearsv   |SV** svp
 p      |void   |save_delete    |HV* hv|char* key|I32 klen
-p      |void   |save_destructor|DESTRUCTORFUNC_t f|void* p
+p      |void   |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|void* p
+p      |void   |save_destructor_x|DESTRUCTORFUNC_t f|void* p
 p      |void   |save_freesv    |SV* sv
 p      |void   |save_freeop    |OP* o
 p      |void   |save_freepv    |char* pv
@@ -1673,15 +1658,15 @@ 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
 p      |void   |taint_env
-p      |void   |taint_proper   |const char* f|char* s
+p      |void   |taint_proper   |const char* f|const char* s
 p      |UV     |to_utf8_lower  |U8 *p
 p      |UV     |to_utf8_upper  |U8 *p
 p      |UV     |to_utf8_title  |U8 *p
@@ -1702,7 +1687,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|...
@@ -1770,8 +1755,10 @@ p        |void   |do_pmop_dump   |I32 level|PerlIO *file|PMOP *pm
 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*  |default_protect|volatile JMPENV *je|int *excpt \
+                               |protect_body_t body|...
+p      |void*  |vdefault_protect|volatile JMPENV *je|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
@@ -1779,6 +1766,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:
@@ -1842,6 +1834,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
@@ -1948,7 +1943,7 @@ s |I32    |regmatch       |regnode *prog
 s      |I32    |regrepeat      |regnode *p|I32 max
 s      |I32    |regrepeat_hard |regnode *p|I32 max|I32 *lp
 s      |I32    |regtry         |regexp *prog|char *startpos
-s      |bool   |reginclass     |char *p|I32 c
+s      |bool   |reginclass     |regnode *p|I32 c
 s      |bool   |reginclassutf8 |regnode *f|U8* p
 s      |CHECKPOINT|regcppush   |I32 parenfloor
 s      |char*|regcppop
@@ -1973,14 +1968,38 @@ s       |SV*    |more_sv
 s      |void   |more_xiv
 s      |void   |more_xnv
 s      |void   |more_xpv
+s      |void   |more_xpviv
+s      |void   |more_xpvnv
+s      |void   |more_xpvcv
+s      |void   |more_xpvav
+s      |void   |more_xpvhv
+s      |void   |more_xpvmg
+s      |void   |more_xpvlv
+s      |void   |more_xpvbm
 s      |void   |more_xrv
 s      |XPVIV* |new_xiv
 s      |XPVNV* |new_xnv
 s      |XPV*   |new_xpv
+s      |XPVIV* |new_xpviv
+s      |XPVNV* |new_xpvnv
+s      |XPVCV* |new_xpvcv
+s      |XPVAV* |new_xpvav
+s      |XPVHV* |new_xpvhv
+s      |XPVMG* |new_xpvmg
+s      |XPVLV* |new_xpvlv
+s      |XPVBM* |new_xpvbm
 s      |XRV*   |new_xrv
 s      |void   |del_xiv        |XPVIV* p
 s      |void   |del_xnv        |XPVNV* p
 s      |void   |del_xpv        |XPV* p
+s      |void   |del_xpviv      |XPVIV* p
+s      |void   |del_xpvnv      |XPVNV* p
+s      |void   |del_xpvcv      |XPVCV* p
+s      |void   |del_xpvav      |XPVAV* p
+s      |void   |del_xpvhv      |XPVHV* p
+s      |void   |del_xpvmg      |XPVMG* p
+s      |void   |del_xpvlv      |XPVLV* p
+s      |void   |del_xpvbm      |XPVBM* p
 s      |void   |del_xrv        |XRV* p
 s      |void   |sv_unglob      |SV* sv
 s      |void   |not_a_number   |SV *sv
@@ -2012,7 +2031,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 \
@@ -2031,8 +2050,8 @@ s |I32    |sublex_done
 s      |I32    |sublex_push
 s      |I32    |sublex_start
 s      |char * |filter_gets    |SV *sv|PerlIO *fp|STRLEN append
-s      |SV*    |new_constant   |char *s|STRLEN len|char *key|SV *sv \
-                               |SV *pv|char *type
+s      |SV*    |new_constant   |char *s|STRLEN len|const char *key|SV *sv \
+                               |SV *pv|const char *type
 s      |int    |ao             |int toketype
 s      |void   |depcom
 s      |char*  |incl_perldb