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");
/* (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
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
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
#endif /* PERL_POLLUTE */
END
-
close(EM);
unlink 'objXSUB.h';
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
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
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 |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
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|...
#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