yet more cleanups of the PERL_OBJECT, MULTIPLICITY and USE_THREADS
Gurusamy Sarathy [Mon, 12 Jul 1999 01:55:15 +0000 (01:55 +0000)]
builds; passing the implicit context is unified among the three
flavors; PERL_IMPLICIT_CONTEXT is auto-enabled under all three
flavors (see the top of perl.h) for testing; all varargs functions
foo() have a va_list-taking variant vfoo() for generating the
context-free versions; the PERL_OBJECT build should now be
hyper-compatible with CPAN extensions (C++ is totally out of
the picture)

result has only been tested on Windows

TODO: write docs on the THX rationale and idiomatic usage of
the Perl API

p4raw-id: //depot/perl@3667

69 files changed:
MANIFEST
XSUB.h
XSlock.h [deleted file]
bytecode.pl
deb.c
dump.c
embed.h
embed.pl
embedvar.h
ext/B/B.xs
ext/ByteLoader/ByteLoader.xs
ext/ByteLoader/byterun.c
ext/Data/Dumper/Dumper.xs
ext/Devel/Peek/Peek.xs
ext/Fcntl/Fcntl.xs
ext/IO/IO.xs
ext/Opcode/Opcode.xs
ext/POSIX/POSIX.xs
ext/SDBM_File/SDBM_File.xs
ext/Socket/Socket.xs
ext/Thread/Thread.xs
ext/attrs/attrs.xs
ext/re/re.xs
global.sym
globals.c
intrpvar.h
iperlsys.h
lib/ExtUtils/MM_Unix.pm
lib/ExtUtils/MM_Win32.pm
lib/ExtUtils/MakeMaker.pm
lib/ExtUtils/xsubpp
lib/base.pm
malloc.c
objXSUB.h
perl.c
perl.h
perlapi.c
perlapi.h
perlio.c
pp_sys.c
proto.h
regcomp.c
regexec.c
scope.c
sv.c
thrdvar.h
util.c
win32/GenCAPI.pl [deleted file]
win32/Makefile
win32/TEST [deleted file]
win32/autosplit.pl [deleted file]
win32/config_H.bc
win32/config_H.gc
win32/config_H.vc
win32/config_h.PL
win32/dl_win32.xs
win32/genxsdef.pl [deleted file]
win32/include/dirent.h
win32/include/sys/socket.h
win32/makedef.pl
win32/makefile.mk
win32/makemain.pl [deleted file]
win32/makeperldef.pl [deleted file]
win32/perllib.c
win32/runperl.c
win32/win32.c
win32/win32.h
win32/win32iop.h
win32/win32sck.c

index 1888c0d..023b51f 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -54,7 +54,6 @@ README.vos            Notes about Stratus VOS port
 README.win32           Notes about Win32 port
 Todo                   The Wishlist
 Todo-5.005             What needs doing before 5.005 release
-XSlock.h               Include file for extensions built with PERL_OBJECT defined
 XSUB.h                 Include file for extension subroutines
 apollo/netinet/in.h    Apollo DomainOS port: C header file frontend
 av.c                   Array value code
@@ -1401,10 +1400,7 @@ vos/vos_dummies.c        Wrappers to soak up undefined functions
 vos/vosish.h           VOS-specific header file
 warning.h              The warning numbers
 warning.pl             Program to write warning.h and lib/warning.pm
-win32/GenCAPI.pl       Win32 port for C API with PERL_OBJECT
 win32/Makefile         Win32 makefile for NMAKE (Visual C++ build)
-win32/TEST             Win32 port
-win32/autosplit.pl     Win32 port
 win32/bin/perlglob.pl  Win32 globbing
 win32/bin/pl2bat.pl    wrap perl scripts into batch files
 win32/bin/runperl.pl   run perl script via batch file namesake
@@ -1419,15 +1415,12 @@ win32/config_h.PL       Perl code to convert Win32 config.sh to config.h
 win32/config_sh.PL     Perl code to update Win32 config.sh from Makefile 
 win32/des_fcrypt.patch Win32 port
 win32/dl_win32.xs      Win32 port
-win32/genxsdef.pl      Win32 port
 win32/include/arpa/inet.h      Win32 port
 win32/include/dirent.h         Win32 port
 win32/include/netdb.h          Win32 port
 win32/include/sys/socket.h     Win32 port
-win32/makedef.pl       Win32 port
+win32/makedef.pl       Win32 exports definition file writer
 win32/makefile.mk      Win32 makefile for DMAKE (BC++, VC++ builds)
-win32/makemain.pl      Win32 port
-win32/makeperldef.pl   Win32 port
 win32/perlglob.c       Win32 port
 win32/perllib.c                Win32 port
 win32/pod.mak          Win32 port
diff --git a/XSUB.h b/XSUB.h
index c43b7f9..15f2b41 100644 (file)
--- a/XSUB.h
+++ b/XSUB.h
 #  define VTBL_amagicelem      &PL_vtbl_amagicelem
 #endif
 
-#ifdef PERL_OBJECT
-
+#if defined(PERL_OBJECT) || defined(PERL_CAPI)
 #  include "perlapi.h"
 #  include "objXSUB.h"
+#endif /* PERL_OBJECT || PERL_CAPI */
 
-#  undef  aTHXo
-#  define aTHXo                        pPerl
-#  undef  aTHXo_
-#  define aTHXo_               aTHXo,
-#  undef  _aTHXo
-#  define _aTHXo               ,aTHXo
-
-#  ifdef WIN32
-#    undef fprintf
-#    define fprintf                    pPerl->fprintf
-#  endif /* WIN32 */
-
+#if defined(PERL_CAPI)
+#  undef aTHX
+#  undef aTHX_
+#  undef _aTHX
+#  if defined(PERL_NO_GET_CONTEXT)
+#    define aTHX        my_perl
+#  else
+#    define aTHX        PERL_GET_INTERP
+#  endif /* PERL_NO_GET_CONTEXT */
+#  define aTHX_        aTHX,
+#  define _aTHX        ,aTHX
 #  ifndef NO_XSLOCKS
 #    undef closedir
 #    undef opendir
 #    define shutdown           PerlSock_shutdown
 #    define socket             PerlSock_socket
 #    define socketpair         PerlSock_socketpair
-#    ifdef WIN32
-#      include "XSlock.h"
-#    endif
 #  endif  /* NO_XSLOCKS */
-
-#endif /* PERL_OBJECT */
+#endif  /* PERL_CAPI */
diff --git a/XSlock.h b/XSlock.h
deleted file mode 100644 (file)
index 8fb0ce4..0000000
--- a/XSlock.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef __XSlock_h__
-#define __XSlock_h__
-
-class XSLockManager
-{
-public:
-       XSLockManager() { InitializeCriticalSection(&cs); };
-       ~XSLockManager() { DeleteCriticalSection(&cs); };
-       void Enter(void) { EnterCriticalSection(&cs); };
-       void Leave(void) { LeaveCriticalSection(&cs); };
-protected:
-       CRITICAL_SECTION cs;
-};
-
-XSLockManager g_XSLock;
-
-class XSLock
-{
-public:
-       XSLock() { g_XSLock.Enter(); };
-       ~XSLock() { g_XSLock.Leave(); };
-};
-
-CPerlObj* pPerl;
-
-#undef dXSARGS
-#define dXSARGS        \
-       dSP; dMARK;             \
-       I32 ax = mark - PL_stack_base + 1;      \
-       I32 items = sp - mark; \
-       XSLock localLock; \
-       ::pPerl = pPerl
-
-
-#endif
index dfd16aa..32f2000 100644 (file)
@@ -65,6 +65,7 @@ EOT
 open(BYTERUN_C, ">ext/ByteLoader/byterun.c") or die "ext/ByteLoader/byterun.c: $!";
 print BYTERUN_C $c_header, <<'EOT';
 
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #define NO_XSLOCKS
diff --git a/deb.c b/deb.c
index 252bb0b..b6456e6 100644 (file)
--- a/deb.c
+++ b/deb.c
 #define PERL_IN_DEB_C
 #include "perl.h"
 
+#if defined(PERL_IMPLICIT_CONTEXT)
+void
+Perl_deb_nocontext(const char *pat, ...)
+{
+#ifdef DEBUGGING
+    dTHX;
+    va_list args;
+    va_start(args, pat);
+    vdeb(pat, &args);
+    va_end(args);
+#endif /* DEBUGGING */
+}
+#endif
+
 void
 Perl_deb(pTHX_ const char *pat, ...)
 {
 #ifdef DEBUGGING
-    dTHR;
     va_list args;
+    va_start(args, pat);
+    vdeb(pat, &args);
+    va_end(args);
+#endif /* DEBUGGING */
+}
+
+void
+Perl_vdeb(pTHX_ const char *pat, va_list *args)
+{
+#ifdef DEBUGGING
+    dTHR;
     register I32 i;
     GV* gv = PL_curcop->cop_filegv;
 
@@ -37,10 +61,7 @@ Perl_deb(pTHX_ const char *pat, ...)
 #endif /* USE_THREADS */
     for (i=0; i<PL_dlevel; i++)
        PerlIO_printf(Perl_debug_log, "%c%c ",PL_debname[i],PL_debdelim[i]);
-
-    va_start(args, pat);
-    (void) PerlIO_vprintf(Perl_debug_log,pat,args);
-    va_end( args );
+    (void) PerlIO_vprintf(Perl_debug_log, pat, *args);
 #endif /* DEBUGGING */
 }
 
diff --git a/dump.c b/dump.c
index 450ab86..f506de8 100644 (file)
--- a/dump.c
+++ b/dump.c
 void
 Perl_dump_indent(pTHX_ I32 level, PerlIO *file, const char* pat, ...)
 {
-    dTHR;
     va_list args;
-    
     va_start(args, pat);
-    PerlIO_printf(file, "%*s", level*PL_dumpindent, "");
-    PerlIO_vprintf(file, pat, args);
+    dump_vindent(level, file, pat, &args);
     va_end(args);
 }
 
 void
+Perl_dump_vindent(pTHX_ I32 level, PerlIO *file, const char* pat, va_list *args)
+{
+    dTHR;
+    PerlIO_printf(file, "%*s", level*PL_dumpindent, "");
+    PerlIO_vprintf(file, pat, *args);
+}
+
+void
 Perl_dump_all(pTHX)
 {
     dTHR;
diff --git a/embed.h b/embed.h
index 22ef66d..dfd37d0 100644 (file)
--- a/embed.h
+++ b/embed.h
 #endif
 #define convert                        Perl_convert
 #define croak                  Perl_croak
+#define vcroak                 Perl_vcroak
 #if defined(PERL_IMPLICIT_CONTEXT)
 #define croak_nocontext                Perl_croak_nocontext
 #define die_nocontext          Perl_die_nocontext
+#define deb_nocontext          Perl_deb_nocontext
 #define form_nocontext         Perl_form_nocontext
 #define warn_nocontext         Perl_warn_nocontext
+#define warner_nocontext       Perl_warner_nocontext
 #define newSVpvf_nocontext     Perl_newSVpvf_nocontext
 #define sv_catpvf_nocontext    Perl_sv_catpvf_nocontext
 #define sv_setpvf_nocontext    Perl_sv_setpvf_nocontext
 #define sv_catpvf_mg_nocontext Perl_sv_catpvf_mg_nocontext
 #define sv_setpvf_mg_nocontext Perl_sv_setpvf_mg_nocontext
+#define fprintf_nocontext      Perl_fprintf_nocontext
 #endif
 #define cv_ckproto             Perl_cv_ckproto
 #define cv_clone               Perl_cv_clone
@@ -85,6 +89,7 @@
 #define get_ppaddr             Perl_get_ppaddr
 #define cxinc                  Perl_cxinc
 #define deb                    Perl_deb
+#define vdeb                   Perl_vdeb
 #define deb_growlevel          Perl_deb_growlevel
 #define debprofdump            Perl_debprofdump
 #define debop                  Perl_debop
@@ -93,6 +98,7 @@
 #define delimcpy               Perl_delimcpy
 #define deprecate              Perl_deprecate
 #define die                    Perl_die
+#define vdie                   Perl_vdie
 #define die_where              Perl_die_where
 #define dounwind               Perl_dounwind
 #define do_aexec               Perl_do_aexec
 #define force_list             Perl_force_list
 #define fold_constants         Perl_fold_constants
 #define form                   Perl_form
+#define vform                  Perl_vform
 #define free_tmps              Perl_free_tmps
 #define gen_constant_list      Perl_gen_constant_list
 #if !defined(HAS_GETENV_LEN)
 #define newSVpv                        Perl_newSVpv
 #define newSVpvn               Perl_newSVpvn
 #define newSVpvf               Perl_newSVpvf
+#define vnewSVpvf              Perl_vnewSVpvf
 #define newSVrv                        Perl_newSVrv
 #define newSVsv                        Perl_newSVsv
 #define newUNOP                        Perl_newUNOP
 #define newWHILEOP             Perl_newWHILEOP
-#if defined(USE_THREADS)
-#define new_struct_thread      Perl_new_struct_thread
-#endif
 #define new_stackinfo          Perl_new_stackinfo
 #define nextargv               Perl_nextargv
 #define ninstr                 Perl_ninstr
 #define peep                   Perl_peep
 #if defined(PERL_OBJECT)
 #else
+#if defined(USE_THREADS)
+#define new_struct_thread      Perl_new_struct_thread
+#endif
 #endif
 #define call_atexit            Perl_call_atexit
 #define call_argv              Perl_call_argv
 #define sv_backoff             Perl_sv_backoff
 #define sv_bless               Perl_sv_bless
 #define sv_catpvf              Perl_sv_catpvf
+#define sv_vcatpvf             Perl_sv_vcatpvf
 #define sv_catpv               Perl_sv_catpv
 #define sv_catpvn              Perl_sv_catpvn
 #define sv_catsv               Perl_sv_catsv
 #define sv_report_used         Perl_sv_report_used
 #define sv_reset               Perl_sv_reset
 #define sv_setpvf              Perl_sv_setpvf
+#define sv_vsetpvf             Perl_sv_vsetpvf
 #define sv_setiv               Perl_sv_setiv
 #define sv_setpviv             Perl_sv_setpviv
 #define sv_setuv               Perl_sv_setuv
 #define vivify_ref             Perl_vivify_ref
 #define wait4pid               Perl_wait4pid
 #define warn                   Perl_warn
+#define vwarn                  Perl_vwarn
 #define warner                 Perl_warner
+#define vwarner                        Perl_vwarner
 #define watch                  Perl_watch
 #define whichsig               Perl_whichsig
 #define yyerror                        Perl_yyerror
 #define runops_standard                Perl_runops_standard
 #define runops_debug           Perl_runops_debug
 #define sv_catpvf_mg           Perl_sv_catpvf_mg
+#define sv_vcatpvf_mg          Perl_sv_vcatpvf_mg
 #define sv_catpv_mg            Perl_sv_catpv_mg
 #define sv_catpvn_mg           Perl_sv_catpvn_mg
 #define sv_catsv_mg            Perl_sv_catsv_mg
 #define sv_setpvf_mg           Perl_sv_setpvf_mg
+#define sv_vsetpvf_mg          Perl_sv_vsetpvf_mg
 #define sv_setiv_mg            Perl_sv_setiv_mg
 #define sv_setpviv_mg          Perl_sv_setpviv_mg
 #define sv_setuv_mg            Perl_sv_setuv_mg
 #define get_vtbl               Perl_get_vtbl
 #define pv_display             Perl_pv_display
 #define dump_indent            Perl_dump_indent
+#define dump_vindent           Perl_dump_vindent
 #define do_gv_dump             Perl_do_gv_dump
 #define do_gvgv_dump           Perl_do_gvgv_dump
 #define do_hv_dump             Perl_do_hv_dump
 #define do_sv_dump             Perl_do_sv_dump
 #define magic_dump             Perl_magic_dump
 #define default_protect                Perl_default_protect
+#define vdefault_protect       Perl_vdefault_protect
 #define reginitcolors          Perl_reginitcolors
 #define sv_2pv_nolen           Perl_sv_2pv_nolen
 #define sv_pv                  Perl_sv_pv
 #endif
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
 #define mess_alloc             S_mess_alloc
-#define do_croak               S_do_croak
-#define do_warn                        S_do_warn
-#define do_die                 S_do_die
 #  if defined(LEAKTEST)
 #define xstat                  S_xstat
 #  endif
 #define condpair_magic(a)      Perl_condpair_magic(aTHX_ a)
 #endif
 #define convert(a,b,c)         Perl_convert(aTHX_ a,b,c)
+#define vcroak(a,b)            Perl_vcroak(aTHX_ a,b)
 #if defined(PERL_IMPLICIT_CONTEXT)
 #endif
 #define cv_ckproto(a,b,c)      Perl_cv_ckproto(aTHX_ a,b,c)
 #define get_opargs()           Perl_get_opargs(aTHX)
 #define get_ppaddr()           Perl_get_ppaddr(aTHX)
 #define cxinc()                        Perl_cxinc(aTHX)
+#define vdeb(a,b)              Perl_vdeb(aTHX_ a,b)
 #define deb_growlevel()                Perl_deb_growlevel(aTHX)
 #define debprofdump()          Perl_debprofdump(aTHX)
 #define debop(a)               Perl_debop(aTHX_ a)
 #define debstackptrs()         Perl_debstackptrs(aTHX)
 #define delimcpy(a,b,c,d,e,f)  Perl_delimcpy(aTHX_ a,b,c,d,e,f)
 #define deprecate(a)           Perl_deprecate(aTHX_ a)
+#define vdie(a,b)              Perl_vdie(aTHX_ a,b)
 #define die_where(a,b)         Perl_die_where(aTHX_ a,b)
 #define dounwind(a)            Perl_dounwind(aTHX_ a)
 #define do_aexec(a,b,c)                Perl_do_aexec(aTHX_ a,b,c)
 #endif
 #define force_list(a)          Perl_force_list(aTHX_ a)
 #define fold_constants(a)      Perl_fold_constants(aTHX_ a)
+#define vform(a,b)             Perl_vform(aTHX_ a,b)
 #define free_tmps()            Perl_free_tmps(aTHX)
 #define gen_constant_list(a)   Perl_gen_constant_list(aTHX_ a)
 #if !defined(HAS_GETENV_LEN)
 #define newSVnv(a)             Perl_newSVnv(aTHX_ a)
 #define newSVpv(a,b)           Perl_newSVpv(aTHX_ a,b)
 #define newSVpvn(a,b)          Perl_newSVpvn(aTHX_ a,b)
+#define vnewSVpvf(a,b)         Perl_vnewSVpvf(aTHX_ a,b)
 #define newSVrv(a,b)           Perl_newSVrv(aTHX_ a,b)
 #define newSVsv(a)             Perl_newSVsv(aTHX_ a)
 #define newUNOP(a,b,c)         Perl_newUNOP(aTHX_ a,b,c)
 #define newWHILEOP(a,b,c,d,e,f,g)      Perl_newWHILEOP(aTHX_ a,b,c,d,e,f,g)
-#if defined(USE_THREADS)
-#define new_struct_thread(a)   Perl_new_struct_thread(aTHX_ a)
-#endif
 #define new_stackinfo(a,b)     Perl_new_stackinfo(aTHX_ a,b)
 #define nextargv(a)            Perl_nextargv(aTHX_ a)
 #define ninstr(a,b,c,d)                Perl_ninstr(aTHX_ a,b,c,d)
 #define peep(a)                        Perl_peep(aTHX_ a)
 #if defined(PERL_OBJECT)
 #else
+#if defined(USE_THREADS)
+#define new_struct_thread(a)   Perl_new_struct_thread(aTHX_ a)
+#endif
 #endif
 #define call_atexit(a,b)       Perl_call_atexit(aTHX_ a,b)
 #define call_argv(a,b,c)       Perl_call_argv(aTHX_ a,b,c)
 #define sv_add_arena(a,b,c)    Perl_sv_add_arena(aTHX_ a,b,c)
 #define sv_backoff(a)          Perl_sv_backoff(aTHX_ a)
 #define sv_bless(a,b)          Perl_sv_bless(aTHX_ a,b)
+#define sv_vcatpvf(a,b,c)      Perl_sv_vcatpvf(aTHX_ a,b,c)
 #define sv_catpv(a,b)          Perl_sv_catpv(aTHX_ a,b)
 #define sv_catpvn(a,b,c)       Perl_sv_catpvn(aTHX_ a,b,c)
 #define sv_catsv(a,b)          Perl_sv_catsv(aTHX_ a,b)
 #define sv_replace(a,b)                Perl_sv_replace(aTHX_ a,b)
 #define sv_report_used()       Perl_sv_report_used(aTHX)
 #define sv_reset(a,b)          Perl_sv_reset(aTHX_ a,b)
+#define sv_vsetpvf(a,b,c)      Perl_sv_vsetpvf(aTHX_ a,b,c)
 #define sv_setiv(a,b)          Perl_sv_setiv(aTHX_ a,b)
 #define sv_setpviv(a,b)                Perl_sv_setpviv(aTHX_ a,b)
 #define sv_setuv(a,b)          Perl_sv_setuv(aTHX_ a,b)
 #define vivify_defelem(a)      Perl_vivify_defelem(aTHX_ a)
 #define vivify_ref(a,b)                Perl_vivify_ref(aTHX_ a,b)
 #define wait4pid(a,b,c)                Perl_wait4pid(aTHX_ a,b,c)
+#define vwarn(a,b)             Perl_vwarn(aTHX_ a,b)
+#define vwarner(a,b,c)         Perl_vwarner(aTHX_ a,b,c)
 #define watch(a)               Perl_watch(aTHX_ a)
 #define whichsig(a)            Perl_whichsig(aTHX_ a)
 #define yyerror(a)             Perl_yyerror(aTHX_ a)
 #endif
 #define runops_standard()      Perl_runops_standard(aTHX)
 #define runops_debug()         Perl_runops_debug(aTHX)
+#define sv_vcatpvf_mg(a,b,c)   Perl_sv_vcatpvf_mg(aTHX_ a,b,c)
 #define sv_catpv_mg(a,b)       Perl_sv_catpv_mg(aTHX_ a,b)
 #define sv_catpvn_mg(a,b,c)    Perl_sv_catpvn_mg(aTHX_ a,b,c)
 #define sv_catsv_mg(a,b)       Perl_sv_catsv_mg(aTHX_ a,b)
+#define sv_vsetpvf_mg(a,b,c)   Perl_sv_vsetpvf_mg(aTHX_ a,b,c)
 #define sv_setiv_mg(a,b)       Perl_sv_setiv_mg(aTHX_ a,b)
 #define sv_setpviv_mg(a,b)     Perl_sv_setpviv_mg(aTHX_ a,b)
 #define sv_setuv_mg(a,b)       Perl_sv_setuv_mg(aTHX_ a,b)
 #define sv_usepvn_mg(a,b,c)    Perl_sv_usepvn_mg(aTHX_ a,b,c)
 #define get_vtbl(a)            Perl_get_vtbl(aTHX_ a)
 #define pv_display(a,b,c,d,e)  Perl_pv_display(aTHX_ a,b,c,d,e)
+#define dump_vindent(a,b,c,d)  Perl_dump_vindent(aTHX_ a,b,c,d)
 #define do_gv_dump(a,b,c,d)    Perl_do_gv_dump(aTHX_ a,b,c,d)
 #define do_gvgv_dump(a,b,c,d)  Perl_do_gvgv_dump(aTHX_ a,b,c,d)
 #define do_hv_dump(a,b,c,d)    Perl_do_hv_dump(aTHX_ a,b,c,d)
 #define do_pmop_dump(a,b,c)    Perl_do_pmop_dump(aTHX_ a,b,c)
 #define do_sv_dump(a,b,c,d,e,f,g)      Perl_do_sv_dump(aTHX_ a,b,c,d,e,f,g)
 #define magic_dump(a)          Perl_magic_dump(aTHX_ a)
+#define vdefault_protect(a,b,c)        Perl_vdefault_protect(aTHX_ a,b,c)
 #define reginitcolors()                Perl_reginitcolors(aTHX)
 #define sv_2pv_nolen(a)                Perl_sv_2pv_nolen(aTHX_ a)
 #define sv_pv(a)               Perl_sv_pv(aTHX_ a)
 #endif
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
 #define mess_alloc()           S_mess_alloc(aTHX)
-#define do_croak(a,b)          S_do_croak(aTHX_ a,b)
-#define do_warn(a,b)           S_do_warn(aTHX_ a,b)
-#define do_die(a,b)            S_do_die(aTHX_ a,b)
 #  if defined(LEAKTEST)
 #define xstat(a)               S_xstat(aTHX_ a)
 #  endif
 #define convert                        Perl_convert
 #define Perl_croak             CPerlObj::Perl_croak
 #define croak                  Perl_croak
+#define Perl_vcroak            CPerlObj::Perl_vcroak
+#define vcroak                 Perl_vcroak
 #if defined(PERL_IMPLICIT_CONTEXT)
 #define Perl_croak_nocontext   CPerlObj::Perl_croak_nocontext
 #define croak_nocontext                Perl_croak_nocontext
 #define Perl_die_nocontext     CPerlObj::Perl_die_nocontext
 #define die_nocontext          Perl_die_nocontext
+#define Perl_deb_nocontext     CPerlObj::Perl_deb_nocontext
+#define deb_nocontext          Perl_deb_nocontext
 #define Perl_form_nocontext    CPerlObj::Perl_form_nocontext
 #define form_nocontext         Perl_form_nocontext
 #define Perl_warn_nocontext    CPerlObj::Perl_warn_nocontext
 #define warn_nocontext         Perl_warn_nocontext
+#define Perl_warner_nocontext  CPerlObj::Perl_warner_nocontext
+#define warner_nocontext       Perl_warner_nocontext
 #define Perl_newSVpvf_nocontext        CPerlObj::Perl_newSVpvf_nocontext
 #define newSVpvf_nocontext     Perl_newSVpvf_nocontext
 #define Perl_sv_catpvf_nocontext       CPerlObj::Perl_sv_catpvf_nocontext
 #define sv_catpvf_mg_nocontext Perl_sv_catpvf_mg_nocontext
 #define Perl_sv_setpvf_mg_nocontext    CPerlObj::Perl_sv_setpvf_mg_nocontext
 #define sv_setpvf_mg_nocontext Perl_sv_setpvf_mg_nocontext
+#define Perl_fprintf_nocontext CPerlObj::Perl_fprintf_nocontext
+#define fprintf_nocontext      Perl_fprintf_nocontext
 #endif
 #define Perl_cv_ckproto                CPerlObj::Perl_cv_ckproto
 #define cv_ckproto             Perl_cv_ckproto
 #define cxinc                  Perl_cxinc
 #define Perl_deb               CPerlObj::Perl_deb
 #define deb                    Perl_deb
+#define Perl_vdeb              CPerlObj::Perl_vdeb
+#define vdeb                   Perl_vdeb
 #define Perl_deb_growlevel     CPerlObj::Perl_deb_growlevel
 #define deb_growlevel          Perl_deb_growlevel
 #define Perl_debprofdump       CPerlObj::Perl_debprofdump
 #define deprecate              Perl_deprecate
 #define Perl_die               CPerlObj::Perl_die
 #define die                    Perl_die
+#define Perl_vdie              CPerlObj::Perl_vdie
+#define vdie                   Perl_vdie
 #define Perl_die_where         CPerlObj::Perl_die_where
 #define die_where              Perl_die_where
 #define Perl_dounwind          CPerlObj::Perl_dounwind
 #define fold_constants         Perl_fold_constants
 #define Perl_form              CPerlObj::Perl_form
 #define form                   Perl_form
+#define Perl_vform             CPerlObj::Perl_vform
+#define vform                  Perl_vform
 #define Perl_free_tmps         CPerlObj::Perl_free_tmps
 #define free_tmps              Perl_free_tmps
 #define Perl_gen_constant_list CPerlObj::Perl_gen_constant_list
 #define newSVpvn               Perl_newSVpvn
 #define Perl_newSVpvf          CPerlObj::Perl_newSVpvf
 #define newSVpvf               Perl_newSVpvf
+#define Perl_vnewSVpvf         CPerlObj::Perl_vnewSVpvf
+#define vnewSVpvf              Perl_vnewSVpvf
 #define Perl_newSVrv           CPerlObj::Perl_newSVrv
 #define newSVrv                        Perl_newSVrv
 #define Perl_newSVsv           CPerlObj::Perl_newSVsv
 #define newUNOP                        Perl_newUNOP
 #define Perl_newWHILEOP                CPerlObj::Perl_newWHILEOP
 #define newWHILEOP             Perl_newWHILEOP
-#if defined(USE_THREADS)
-#define Perl_new_struct_thread CPerlObj::Perl_new_struct_thread
-#define new_struct_thread      Perl_new_struct_thread
-#endif
 #define Perl_new_stackinfo     CPerlObj::Perl_new_stackinfo
 #define new_stackinfo          Perl_new_stackinfo
 #define Perl_nextargv          CPerlObj::Perl_nextargv
 #define perl_free              CPerlObj::perl_free
 #define perl_run               CPerlObj::perl_run
 #define perl_parse             CPerlObj::perl_parse
+#if defined(USE_THREADS)
+#define Perl_new_struct_thread CPerlObj::Perl_new_struct_thread
+#define new_struct_thread      Perl_new_struct_thread
+#endif
 #endif
 #define Perl_call_atexit       CPerlObj::Perl_call_atexit
 #define call_atexit            Perl_call_atexit
 #define sv_bless               Perl_sv_bless
 #define Perl_sv_catpvf         CPerlObj::Perl_sv_catpvf
 #define sv_catpvf              Perl_sv_catpvf
+#define Perl_sv_vcatpvf                CPerlObj::Perl_sv_vcatpvf
+#define sv_vcatpvf             Perl_sv_vcatpvf
 #define Perl_sv_catpv          CPerlObj::Perl_sv_catpv
 #define sv_catpv               Perl_sv_catpv
 #define Perl_sv_catpvn         CPerlObj::Perl_sv_catpvn
 #define sv_reset               Perl_sv_reset
 #define Perl_sv_setpvf         CPerlObj::Perl_sv_setpvf
 #define sv_setpvf              Perl_sv_setpvf
+#define Perl_sv_vsetpvf                CPerlObj::Perl_sv_vsetpvf
+#define sv_vsetpvf             Perl_sv_vsetpvf
 #define Perl_sv_setiv          CPerlObj::Perl_sv_setiv
 #define sv_setiv               Perl_sv_setiv
 #define Perl_sv_setpviv                CPerlObj::Perl_sv_setpviv
 #define wait4pid               Perl_wait4pid
 #define Perl_warn              CPerlObj::Perl_warn
 #define warn                   Perl_warn
+#define Perl_vwarn             CPerlObj::Perl_vwarn
+#define vwarn                  Perl_vwarn
 #define Perl_warner            CPerlObj::Perl_warner
 #define warner                 Perl_warner
+#define Perl_vwarner           CPerlObj::Perl_vwarner
+#define vwarner                        Perl_vwarner
 #define Perl_watch             CPerlObj::Perl_watch
 #define watch                  Perl_watch
 #define Perl_whichsig          CPerlObj::Perl_whichsig
 #define runops_debug           Perl_runops_debug
 #define Perl_sv_catpvf_mg      CPerlObj::Perl_sv_catpvf_mg
 #define sv_catpvf_mg           Perl_sv_catpvf_mg
+#define Perl_sv_vcatpvf_mg     CPerlObj::Perl_sv_vcatpvf_mg
+#define sv_vcatpvf_mg          Perl_sv_vcatpvf_mg
 #define Perl_sv_catpv_mg       CPerlObj::Perl_sv_catpv_mg
 #define sv_catpv_mg            Perl_sv_catpv_mg
 #define Perl_sv_catpvn_mg      CPerlObj::Perl_sv_catpvn_mg
 #define sv_catsv_mg            Perl_sv_catsv_mg
 #define Perl_sv_setpvf_mg      CPerlObj::Perl_sv_setpvf_mg
 #define sv_setpvf_mg           Perl_sv_setpvf_mg
+#define Perl_sv_vsetpvf_mg     CPerlObj::Perl_sv_vsetpvf_mg
+#define sv_vsetpvf_mg          Perl_sv_vsetpvf_mg
 #define Perl_sv_setiv_mg       CPerlObj::Perl_sv_setiv_mg
 #define sv_setiv_mg            Perl_sv_setiv_mg
 #define Perl_sv_setpviv_mg     CPerlObj::Perl_sv_setpviv_mg
 #define pv_display             Perl_pv_display
 #define Perl_dump_indent       CPerlObj::Perl_dump_indent
 #define dump_indent            Perl_dump_indent
+#define Perl_dump_vindent      CPerlObj::Perl_dump_vindent
+#define dump_vindent           Perl_dump_vindent
 #define Perl_do_gv_dump                CPerlObj::Perl_do_gv_dump
 #define do_gv_dump             Perl_do_gv_dump
 #define Perl_do_gvgv_dump      CPerlObj::Perl_do_gvgv_dump
 #define magic_dump             Perl_magic_dump
 #define Perl_default_protect   CPerlObj::Perl_default_protect
 #define default_protect                Perl_default_protect
+#define Perl_vdefault_protect  CPerlObj::Perl_vdefault_protect
+#define vdefault_protect       Perl_vdefault_protect
 #define Perl_reginitcolors     CPerlObj::Perl_reginitcolors
 #define reginitcolors          Perl_reginitcolors
 #define Perl_sv_2pv_nolen      CPerlObj::Perl_sv_2pv_nolen
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
 #define S_mess_alloc           CPerlObj::S_mess_alloc
 #define mess_alloc             S_mess_alloc
-#define S_do_croak             CPerlObj::S_do_croak
-#define do_croak               S_do_croak
-#define S_do_warn              CPerlObj::S_do_warn
-#define do_warn                        S_do_warn
-#define S_do_die               CPerlObj::S_do_die
-#define do_die                 S_do_die
 #  if defined(LEAKTEST)
 #define S_xstat                        CPerlObj::S_xstat
 #define xstat                  S_xstat
    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
 /* 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
index bdca208..927fb02 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -253,7 +253,8 @@ sub hide ($$) {
 
 sub objxsub_var ($$) {
     my ($pfx, $sym) = @_;
-    undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr(pPerl))");
+    my $arg = ($pfx eq 'G' ? 'NULL' : 'aTHXo');
+    undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr($arg))");
 }
 
 sub embedvar ($) {
@@ -456,14 +457,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
@@ -474,11 +477,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
@@ -526,7 +531,7 @@ END
 
 
 for $sym (sort keys %thread) {
-    print EM multon($sym,'T','PL_curinterp->');
+    print EM multon($sym,'T','PERL_GET_INTERP->');
 }
 
 print EM <<'END';
@@ -539,7 +544,7 @@ print EM <<'END';
 END
 
 for $sym (sort keys %intrp) {
-    print EM multon($sym,'I','PL_curinterp->');
+    print EM multon($sym,'I','PERL_GET_INTERP->');
 }
 
 print EM <<'END';
@@ -686,6 +691,10 @@ 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 {
@@ -717,6 +726,7 @@ for $sym (sort keys %ppsym) {
 
 print OBX <<'EOT';
 
+#endif  /* PERL_OBJECT */
 #endif /* __objXSUB_h__ */
 EOT
 
@@ -733,21 +743,30 @@ print CAPIH <<'EOT';
    perlvars.h and thrdvar.h.  Any changes made here will be lost!
 */
 
-#if defined(PERL_OBJECT)
-
 /* 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,
+#  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(void *p);
+#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(void *p);
+                       EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHXo);
 #define PERLVARI(v,t,i)        PERLVAR(v,t)
-#define PERLVARIC(v,t,i) PERLVAR(v,t)
+#define PERLVARIC(v,t,i) PERLVAR(v, const t)
 
 #include "thrdvar.h"
 #include "intrpvar.h"
@@ -760,7 +779,7 @@ START_EXTERN_C
 
 END_EXTERN_C
 
-#endif /* PERL_OBJECT */
+#endif /* PERL_OBJECT || PERL_CAPI */
 
 EOT
 
@@ -784,15 +803,22 @@ START_EXTERN_C
 #undef PERLVARA
 #undef PERLVARI
 #undef PERLVARIC
-#define PERLVAR(v,t)   t* Perl_##v##_ptr(void *p)                      \
-                       { return &(((CPerlObj*)p)->PL_##v); }
-#define PERLVARA(v,n,t)        PL_##v##_t* Perl_##v##_ptr(void *p)             \
-                       { return &(((CPerlObj*)p)->PL_##v); }
+#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,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
@@ -802,21 +828,73 @@ START_EXTERN_C
 
 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 ($retval,$func,@args) = @_;
+    my ($addcontext, $rettype,$func,@args) = @_;
     my @aargs = @args;
     for my $a (@aargs) { $a =~ s/^.*\b(\w+)$/$1/ }
-    unshift @args, 'void *pPerl';
+    my $ctxarg = '';
+    if (not $addcontext) {
+       $ctxarg = 'pTHXo';
+       $ctxarg .= '_ ' if @args;
+    }
+    my $decl = '';
+    if ($addcontext) {
+       $decl .= "    dTHXo;\n";
+    }
     local $" = ', ';
-    my $return = ($retval =~ /^\s*(void|Free_t|Signal_t)\s*$/ ? '' : 'return ');
-    return <<EOT
-$retval
-$func(@args)
+    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 .= <<EOT
+$rettype
+$func($ctxarg@args)
 {
-    $return((CPerlObj*)pPerl)->$func(@aargs);
+$decl    va_list args;
+    va_start(args, $aargs[$#aargs]);
+    $retarg((CPerlObj*)pPerl)->$vfuncs{$ctxfunc}(@aargs, &args);
+    va_end(args);$return
 }
 EOT
-
+    }
+    else {
+       $emitval .= <<EOT
+$rettype
+$func($ctxarg@args)
+{
+$decl    $return((CPerlObj*)pPerl)->$func(@aargs);
+}
+EOT
+    }
+    $emitval;
 }
 
 # XXXX temporary hack
@@ -840,17 +918,16 @@ walk_table {
     else {
        my ($flags,$retval,$func,@args) = @_;
        return $ret if exists $skipapi_funcs{$func};
-       unless (@args and $args[$#args] =~ /\.\.\./) {
-           unless ($flags =~ /s/) {
-               $ret .= "\n";
-               if ($flags =~ /p/) {
-                   $ret .= undefine("Perl_$func");
-                   $ret .= emit_func($retval,"Perl_$func",@args);
-               }
-               else {
-                   $ret .= undefine($func);
-                   $ret .= emit_func($retval,$func,@args);
-               }
+       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);
            }
        }
     }
@@ -862,15 +939,25 @@ for $sym (sort keys %ppsym) {
     print CAPI "\n";
     print CAPI undefine("Perl_$sym");
     if ($sym =~ /^ck_/) {
-       print CAPI emit_func('OP *',"Perl_$sym",'OP *o');
+       print CAPI emit_func(0, 'OP *',"Perl_$sym",'OP *o');
     }
     else {                                     # pp_foo
-       print CAPI emit_func('OP *',"Perl_$sym");
+       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 */
@@ -949,16 +1036,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
@@ -976,6 +1067,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
@@ -985,6 +1077,7 @@ 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
@@ -1044,6 +1137,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)
@@ -1305,14 +1399,13 @@ 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 \
@@ -1346,6 +1439,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
@@ -1479,6 +1575,7 @@ 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
@@ -1521,6 +1618,7 @@ 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
@@ -1573,7 +1671,9 @@ 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      |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
@@ -1607,10 +1707,12 @@ p       |struct perl_vars *|GetVars
 p      |int    |runops_standard
 p      |int    |runops_debug
 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
@@ -1623,6 +1725,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
@@ -1634,6 +1738,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
@@ -1913,9 +2018,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
index 6933cec..42d96de 100644 (file)
 
 /* traditional MULTIPLICITY (intepreter is in a global) */
 
-#define PL_Sv                  (PL_curinterp->TSv)
-#define PL_Xpv                 (PL_curinterp->TXpv)
-#define PL_av_fetch_sv         (PL_curinterp->Tav_fetch_sv)
-#define PL_bodytarget          (PL_curinterp->Tbodytarget)
-#define PL_bostr               (PL_curinterp->Tbostr)
-#define PL_chopset             (PL_curinterp->Tchopset)
-#define PL_colors              (PL_curinterp->Tcolors)
-#define PL_colorset            (PL_curinterp->Tcolorset)
-#define PL_curcop              (PL_curinterp->Tcurcop)
-#define PL_curpad              (PL_curinterp->Tcurpad)
-#define PL_curpm               (PL_curinterp->Tcurpm)
-#define PL_curstack            (PL_curinterp->Tcurstack)
-#define PL_curstackinfo                (PL_curinterp->Tcurstackinfo)
-#define PL_curstash            (PL_curinterp->Tcurstash)
-#define PL_defoutgv            (PL_curinterp->Tdefoutgv)
-#define PL_defstash            (PL_curinterp->Tdefstash)
-#define PL_delaymagic          (PL_curinterp->Tdelaymagic)
-#define PL_dirty               (PL_curinterp->Tdirty)
-#define PL_dumpindent          (PL_curinterp->Tdumpindent)
-#define PL_extralen            (PL_curinterp->Textralen)
-#define PL_firstgv             (PL_curinterp->Tfirstgv)
-#define PL_formtarget          (PL_curinterp->Tformtarget)
-#define PL_hv_fetch_ent_mh     (PL_curinterp->Thv_fetch_ent_mh)
-#define PL_hv_fetch_sv         (PL_curinterp->Thv_fetch_sv)
-#define PL_in_eval             (PL_curinterp->Tin_eval)
-#define PL_last_in_gv          (PL_curinterp->Tlast_in_gv)
-#define PL_lastgotoprobe       (PL_curinterp->Tlastgotoprobe)
-#define PL_lastscream          (PL_curinterp->Tlastscream)
-#define PL_localizing          (PL_curinterp->Tlocalizing)
-#define PL_mainstack           (PL_curinterp->Tmainstack)
-#define PL_markstack           (PL_curinterp->Tmarkstack)
-#define PL_markstack_max       (PL_curinterp->Tmarkstack_max)
-#define PL_markstack_ptr       (PL_curinterp->Tmarkstack_ptr)
-#define PL_maxscream           (PL_curinterp->Tmaxscream)
-#define PL_modcount            (PL_curinterp->Tmodcount)
-#define PL_na                  (PL_curinterp->Tna)
-#define PL_nrs                 (PL_curinterp->Tnrs)
-#define PL_ofs                 (PL_curinterp->Tofs)
-#define PL_ofslen              (PL_curinterp->Tofslen)
-#define PL_op                  (PL_curinterp->Top)
-#define PL_opsave              (PL_curinterp->Topsave)
-#define PL_protect             (PL_curinterp->Tprotect)
-#define PL_reg_call_cc         (PL_curinterp->Treg_call_cc)
-#define PL_reg_curpm           (PL_curinterp->Treg_curpm)
-#define PL_reg_eval_set                (PL_curinterp->Treg_eval_set)
-#define PL_reg_flags           (PL_curinterp->Treg_flags)
-#define PL_reg_ganch           (PL_curinterp->Treg_ganch)
-#define PL_reg_magic           (PL_curinterp->Treg_magic)
-#define PL_reg_oldcurpm                (PL_curinterp->Treg_oldcurpm)
-#define PL_reg_oldpos          (PL_curinterp->Treg_oldpos)
-#define PL_reg_oldsaved                (PL_curinterp->Treg_oldsaved)
-#define PL_reg_oldsavedlen     (PL_curinterp->Treg_oldsavedlen)
-#define PL_reg_re              (PL_curinterp->Treg_re)
-#define PL_reg_start_tmp       (PL_curinterp->Treg_start_tmp)
-#define PL_reg_start_tmpl      (PL_curinterp->Treg_start_tmpl)
-#define PL_reg_starttry                (PL_curinterp->Treg_starttry)
-#define PL_reg_sv              (PL_curinterp->Treg_sv)
-#define PL_regbol              (PL_curinterp->Tregbol)
-#define PL_regcc               (PL_curinterp->Tregcc)
-#define PL_regcode             (PL_curinterp->Tregcode)
-#define PL_regcomp_parse       (PL_curinterp->Tregcomp_parse)
-#define PL_regcomp_rx          (PL_curinterp->Tregcomp_rx)
-#define PL_regcompp            (PL_curinterp->Tregcompp)
-#define PL_regdata             (PL_curinterp->Tregdata)
-#define PL_regdummy            (PL_curinterp->Tregdummy)
-#define PL_regendp             (PL_curinterp->Tregendp)
-#define PL_regeol              (PL_curinterp->Tregeol)
-#define PL_regexecp            (PL_curinterp->Tregexecp)
-#define PL_regflags            (PL_curinterp->Tregflags)
-#define PL_regfree             (PL_curinterp->Tregfree)
-#define PL_regindent           (PL_curinterp->Tregindent)
-#define PL_reginput            (PL_curinterp->Treginput)
-#define PL_regint_start                (PL_curinterp->Tregint_start)
-#define PL_regint_string       (PL_curinterp->Tregint_string)
-#define PL_reginterp_cnt       (PL_curinterp->Treginterp_cnt)
-#define PL_reglastparen                (PL_curinterp->Treglastparen)
-#define PL_regnarrate          (PL_curinterp->Tregnarrate)
-#define PL_regnaughty          (PL_curinterp->Tregnaughty)
-#define PL_regnpar             (PL_curinterp->Tregnpar)
-#define PL_regprecomp          (PL_curinterp->Tregprecomp)
-#define PL_regprev             (PL_curinterp->Tregprev)
-#define PL_regprogram          (PL_curinterp->Tregprogram)
-#define PL_regsawback          (PL_curinterp->Tregsawback)
-#define PL_regseen             (PL_curinterp->Tregseen)
-#define PL_regsize             (PL_curinterp->Tregsize)
-#define PL_regstartp           (PL_curinterp->Tregstartp)
-#define PL_regtill             (PL_curinterp->Tregtill)
-#define PL_regxend             (PL_curinterp->Tregxend)
-#define PL_restartop           (PL_curinterp->Trestartop)
-#define PL_retstack            (PL_curinterp->Tretstack)
-#define PL_retstack_ix         (PL_curinterp->Tretstack_ix)
-#define PL_retstack_max                (PL_curinterp->Tretstack_max)
-#define PL_rs                  (PL_curinterp->Trs)
-#define PL_savestack           (PL_curinterp->Tsavestack)
-#define PL_savestack_ix                (PL_curinterp->Tsavestack_ix)
-#define PL_savestack_max       (PL_curinterp->Tsavestack_max)
-#define PL_scopestack          (PL_curinterp->Tscopestack)
-#define PL_scopestack_ix       (PL_curinterp->Tscopestack_ix)
-#define PL_scopestack_max      (PL_curinterp->Tscopestack_max)
-#define PL_screamfirst         (PL_curinterp->Tscreamfirst)
-#define PL_screamnext          (PL_curinterp->Tscreamnext)
-#define PL_secondgv            (PL_curinterp->Tsecondgv)
-#define PL_seen_evals          (PL_curinterp->Tseen_evals)
-#define PL_seen_zerolen                (PL_curinterp->Tseen_zerolen)
-#define PL_sortcop             (PL_curinterp->Tsortcop)
-#define PL_sortcxix            (PL_curinterp->Tsortcxix)
-#define PL_sortstash           (PL_curinterp->Tsortstash)
-#define PL_stack_base          (PL_curinterp->Tstack_base)
-#define PL_stack_max           (PL_curinterp->Tstack_max)
-#define PL_stack_sp            (PL_curinterp->Tstack_sp)
-#define PL_start_env           (PL_curinterp->Tstart_env)
-#define PL_statbuf             (PL_curinterp->Tstatbuf)
-#define PL_statcache           (PL_curinterp->Tstatcache)
-#define PL_statgv              (PL_curinterp->Tstatgv)
-#define PL_statname            (PL_curinterp->Tstatname)
-#define PL_tainted             (PL_curinterp->Ttainted)
-#define PL_timesbuf            (PL_curinterp->Ttimesbuf)
-#define PL_tmps_floor          (PL_curinterp->Ttmps_floor)
-#define PL_tmps_ix             (PL_curinterp->Ttmps_ix)
-#define PL_tmps_max            (PL_curinterp->Ttmps_max)
-#define PL_tmps_stack          (PL_curinterp->Ttmps_stack)
-#define PL_top_env             (PL_curinterp->Ttop_env)
-#define PL_toptarget           (PL_curinterp->Ttoptarget)
-#define PL_watchaddr           (PL_curinterp->Twatchaddr)
-#define PL_watchok             (PL_curinterp->Twatchok)
+#define PL_Sv                  (PERL_GET_INTERP->TSv)
+#define PL_Xpv                 (PERL_GET_INTERP->TXpv)
+#define PL_av_fetch_sv         (PERL_GET_INTERP->Tav_fetch_sv)
+#define PL_bodytarget          (PERL_GET_INTERP->Tbodytarget)
+#define PL_bostr               (PERL_GET_INTERP->Tbostr)
+#define PL_chopset             (PERL_GET_INTERP->Tchopset)
+#define PL_colors              (PERL_GET_INTERP->Tcolors)
+#define PL_colorset            (PERL_GET_INTERP->Tcolorset)
+#define PL_curcop              (PERL_GET_INTERP->Tcurcop)
+#define PL_curpad              (PERL_GET_INTERP->Tcurpad)
+#define PL_curpm               (PERL_GET_INTERP->Tcurpm)
+#define PL_curstack            (PERL_GET_INTERP->Tcurstack)
+#define PL_curstackinfo                (PERL_GET_INTERP->Tcurstackinfo)
+#define PL_curstash            (PERL_GET_INTERP->Tcurstash)
+#define PL_defoutgv            (PERL_GET_INTERP->Tdefoutgv)
+#define PL_defstash            (PERL_GET_INTERP->Tdefstash)
+#define PL_delaymagic          (PERL_GET_INTERP->Tdelaymagic)
+#define PL_dirty               (PERL_GET_INTERP->Tdirty)
+#define PL_dumpindent          (PERL_GET_INTERP->Tdumpindent)
+#define PL_extralen            (PERL_GET_INTERP->Textralen)
+#define PL_firstgv             (PERL_GET_INTERP->Tfirstgv)
+#define PL_formtarget          (PERL_GET_INTERP->Tformtarget)
+#define PL_hv_fetch_ent_mh     (PERL_GET_INTERP->Thv_fetch_ent_mh)
+#define PL_hv_fetch_sv         (PERL_GET_INTERP->Thv_fetch_sv)
+#define PL_in_eval             (PERL_GET_INTERP->Tin_eval)
+#define PL_last_in_gv          (PERL_GET_INTERP->Tlast_in_gv)
+#define PL_lastgotoprobe       (PERL_GET_INTERP->Tlastgotoprobe)
+#define PL_lastscream          (PERL_GET_INTERP->Tlastscream)
+#define PL_localizing          (PERL_GET_INTERP->Tlocalizing)
+#define PL_mainstack           (PERL_GET_INTERP->Tmainstack)
+#define PL_markstack           (PERL_GET_INTERP->Tmarkstack)
+#define PL_markstack_max       (PERL_GET_INTERP->Tmarkstack_max)
+#define PL_markstack_ptr       (PERL_GET_INTERP->Tmarkstack_ptr)
+#define PL_maxscream           (PERL_GET_INTERP->Tmaxscream)
+#define PL_modcount            (PERL_GET_INTERP->Tmodcount)
+#define PL_na                  (PERL_GET_INTERP->Tna)
+#define PL_nrs                 (PERL_GET_INTERP->Tnrs)
+#define PL_ofs                 (PERL_GET_INTERP->Tofs)
+#define PL_ofslen              (PERL_GET_INTERP->Tofslen)
+#define PL_op                  (PERL_GET_INTERP->Top)
+#define PL_opsave              (PERL_GET_INTERP->Topsave)
+#define PL_protect             (PERL_GET_INTERP->Tprotect)
+#define PL_reg_call_cc         (PERL_GET_INTERP->Treg_call_cc)
+#define PL_reg_curpm           (PERL_GET_INTERP->Treg_curpm)
+#define PL_reg_eval_set                (PERL_GET_INTERP->Treg_eval_set)
+#define PL_reg_flags           (PERL_GET_INTERP->Treg_flags)
+#define PL_reg_ganch           (PERL_GET_INTERP->Treg_ganch)
+#define PL_reg_magic           (PERL_GET_INTERP->Treg_magic)
+#define PL_reg_oldcurpm                (PERL_GET_INTERP->Treg_oldcurpm)
+#define PL_reg_oldpos          (PERL_GET_INTERP->Treg_oldpos)
+#define PL_reg_oldsaved                (PERL_GET_INTERP->Treg_oldsaved)
+#define PL_reg_oldsavedlen     (PERL_GET_INTERP->Treg_oldsavedlen)
+#define PL_reg_re              (PERL_GET_INTERP->Treg_re)
+#define PL_reg_start_tmp       (PERL_GET_INTERP->Treg_start_tmp)
+#define PL_reg_start_tmpl      (PERL_GET_INTERP->Treg_start_tmpl)
+#define PL_reg_starttry                (PERL_GET_INTERP->Treg_starttry)
+#define PL_reg_sv              (PERL_GET_INTERP->Treg_sv)
+#define PL_regbol              (PERL_GET_INTERP->Tregbol)
+#define PL_regcc               (PERL_GET_INTERP->Tregcc)
+#define PL_regcode             (PERL_GET_INTERP->Tregcode)
+#define PL_regcomp_parse       (PERL_GET_INTERP->Tregcomp_parse)
+#define PL_regcomp_rx          (PERL_GET_INTERP->Tregcomp_rx)
+#define PL_regcompp            (PERL_GET_INTERP->Tregcompp)
+#define PL_regdata             (PERL_GET_INTERP->Tregdata)
+#define PL_regdummy            (PERL_GET_INTERP->Tregdummy)
+#define PL_regendp             (PERL_GET_INTERP->Tregendp)
+#define PL_regeol              (PERL_GET_INTERP->Tregeol)
+#define PL_regexecp            (PERL_GET_INTERP->Tregexecp)
+#define PL_regflags            (PERL_GET_INTERP->Tregflags)
+#define PL_regfree             (PERL_GET_INTERP->Tregfree)
+#define PL_regindent           (PERL_GET_INTERP->Tregindent)
+#define PL_reginput            (PERL_GET_INTERP->Treginput)
+#define PL_regint_start                (PERL_GET_INTERP->Tregint_start)
+#define PL_regint_string       (PERL_GET_INTERP->Tregint_string)
+#define PL_reginterp_cnt       (PERL_GET_INTERP->Treginterp_cnt)
+#define PL_reglastparen                (PERL_GET_INTERP->Treglastparen)
+#define PL_regnarrate          (PERL_GET_INTERP->Tregnarrate)
+#define PL_regnaughty          (PERL_GET_INTERP->Tregnaughty)
+#define PL_regnpar             (PERL_GET_INTERP->Tregnpar)
+#define PL_regprecomp          (PERL_GET_INTERP->Tregprecomp)
+#define PL_regprev             (PERL_GET_INTERP->Tregprev)
+#define PL_regprogram          (PERL_GET_INTERP->Tregprogram)
+#define PL_regsawback          (PERL_GET_INTERP->Tregsawback)
+#define PL_regseen             (PERL_GET_INTERP->Tregseen)
+#define PL_regsize             (PERL_GET_INTERP->Tregsize)
+#define PL_regstartp           (PERL_GET_INTERP->Tregstartp)
+#define PL_regtill             (PERL_GET_INTERP->Tregtill)
+#define PL_regxend             (PERL_GET_INTERP->Tregxend)
+#define PL_restartop           (PERL_GET_INTERP->Trestartop)
+#define PL_retstack            (PERL_GET_INTERP->Tretstack)
+#define PL_retstack_ix         (PERL_GET_INTERP->Tretstack_ix)
+#define PL_retstack_max                (PERL_GET_INTERP->Tretstack_max)
+#define PL_rs                  (PERL_GET_INTERP->Trs)
+#define PL_savestack           (PERL_GET_INTERP->Tsavestack)
+#define PL_savestack_ix                (PERL_GET_INTERP->Tsavestack_ix)
+#define PL_savestack_max       (PERL_GET_INTERP->Tsavestack_max)
+#define PL_scopestack          (PERL_GET_INTERP->Tscopestack)
+#define PL_scopestack_ix       (PERL_GET_INTERP->Tscopestack_ix)
+#define PL_scopestack_max      (PERL_GET_INTERP->Tscopestack_max)
+#define PL_screamfirst         (PERL_GET_INTERP->Tscreamfirst)
+#define PL_screamnext          (PERL_GET_INTERP->Tscreamnext)
+#define PL_secondgv            (PERL_GET_INTERP->Tsecondgv)
+#define PL_seen_evals          (PERL_GET_INTERP->Tseen_evals)
+#define PL_seen_zerolen                (PERL_GET_INTERP->Tseen_zerolen)
+#define PL_sortcop             (PERL_GET_INTERP->Tsortcop)
+#define PL_sortcxix            (PERL_GET_INTERP->Tsortcxix)
+#define PL_sortstash           (PERL_GET_INTERP->Tsortstash)
+#define PL_stack_base          (PERL_GET_INTERP->Tstack_base)
+#define PL_stack_max           (PERL_GET_INTERP->Tstack_max)
+#define PL_stack_sp            (PERL_GET_INTERP->Tstack_sp)
+#define PL_start_env           (PERL_GET_INTERP->Tstart_env)
+#define PL_statbuf             (PERL_GET_INTERP->Tstatbuf)
+#define PL_statcache           (PERL_GET_INTERP->Tstatcache)
+#define PL_statgv              (PERL_GET_INTERP->Tstatgv)
+#define PL_statname            (PERL_GET_INTERP->Tstatname)
+#define PL_tainted             (PERL_GET_INTERP->Ttainted)
+#define PL_timesbuf            (PERL_GET_INTERP->Ttimesbuf)
+#define PL_tmps_floor          (PERL_GET_INTERP->Ttmps_floor)
+#define PL_tmps_ix             (PERL_GET_INTERP->Ttmps_ix)
+#define PL_tmps_max            (PERL_GET_INTERP->Ttmps_max)
+#define PL_tmps_stack          (PERL_GET_INTERP->Ttmps_stack)
+#define PL_top_env             (PERL_GET_INTERP->Ttop_env)
+#define PL_toptarget           (PERL_GET_INTERP->Ttoptarget)
+#define PL_watchaddr           (PERL_GET_INTERP->Twatchaddr)
+#define PL_watchok             (PERL_GET_INTERP->Twatchok)
 
 #endif /* !PERL_IMPLICIT_CONTEXT */
 #endif /* !USE_THREADS */
 
 /* These are always per-interpreter if there is more than one */
 
-#define PL_Argv                        (PL_curinterp->IArgv)
-#define PL_Cmd                 (PL_curinterp->ICmd)
-#define PL_DBcv                        (PL_curinterp->IDBcv)
-#define PL_DBgv                        (PL_curinterp->IDBgv)
-#define PL_DBline              (PL_curinterp->IDBline)
-#define PL_DBsignal            (PL_curinterp->IDBsignal)
-#define PL_DBsingle            (PL_curinterp->IDBsingle)
-#define PL_DBsub               (PL_curinterp->IDBsub)
-#define PL_DBtrace             (PL_curinterp->IDBtrace)
-#define PL_Dir                 (PL_curinterp->IDir)
-#define PL_Env                 (PL_curinterp->IEnv)
-#define PL_LIO                 (PL_curinterp->ILIO)
-#define PL_Mem                 (PL_curinterp->IMem)
-#define PL_Proc                        (PL_curinterp->IProc)
-#define PL_Sock                        (PL_curinterp->ISock)
-#define PL_StdIO               (PL_curinterp->IStdIO)
-#define PL_amagic_generation   (PL_curinterp->Iamagic_generation)
-#define PL_ampergv             (PL_curinterp->Iampergv)
-#define PL_an                  (PL_curinterp->Ian)
-#define PL_archpat_auto                (PL_curinterp->Iarchpat_auto)
-#define PL_argvgv              (PL_curinterp->Iargvgv)
-#define PL_argvoutgv           (PL_curinterp->Iargvoutgv)
-#define PL_basetime            (PL_curinterp->Ibasetime)
-#define PL_beginav             (PL_curinterp->Ibeginav)
-#define PL_bitcount            (PL_curinterp->Ibitcount)
-#define PL_bufend              (PL_curinterp->Ibufend)
-#define PL_bufptr              (PL_curinterp->Ibufptr)
-#define PL_cddir               (PL_curinterp->Icddir)
-#define PL_collation_ix                (PL_curinterp->Icollation_ix)
-#define PL_collation_name      (PL_curinterp->Icollation_name)
-#define PL_collation_standard  (PL_curinterp->Icollation_standard)
-#define PL_collxfrm_base       (PL_curinterp->Icollxfrm_base)
-#define PL_collxfrm_mult       (PL_curinterp->Icollxfrm_mult)
-#define PL_compcv              (PL_curinterp->Icompcv)
-#define PL_compiling           (PL_curinterp->Icompiling)
-#define PL_comppad             (PL_curinterp->Icomppad)
-#define PL_comppad_name                (PL_curinterp->Icomppad_name)
-#define PL_comppad_name_fill   (PL_curinterp->Icomppad_name_fill)
-#define PL_comppad_name_floor  (PL_curinterp->Icomppad_name_floor)
-#define PL_cop_seqmax          (PL_curinterp->Icop_seqmax)
-#define PL_copline             (PL_curinterp->Icopline)
-#define PL_cred_mutex          (PL_curinterp->Icred_mutex)
-#define PL_cryptseen           (PL_curinterp->Icryptseen)
-#define PL_cshlen              (PL_curinterp->Icshlen)
-#define PL_cshname             (PL_curinterp->Icshname)
-#define PL_curcopdb            (PL_curinterp->Icurcopdb)
-#define PL_curstname           (PL_curinterp->Icurstname)
-#define PL_curthr              (PL_curinterp->Icurthr)
-#define PL_dbargs              (PL_curinterp->Idbargs)
-#define PL_debdelim            (PL_curinterp->Idebdelim)
-#define PL_debname             (PL_curinterp->Idebname)
-#define PL_debstash            (PL_curinterp->Idebstash)
-#define PL_debug               (PL_curinterp->Idebug)
-#define PL_defgv               (PL_curinterp->Idefgv)
-#define PL_diehook             (PL_curinterp->Idiehook)
-#define PL_dlevel              (PL_curinterp->Idlevel)
-#define PL_dlmax               (PL_curinterp->Idlmax)
-#define PL_doextract           (PL_curinterp->Idoextract)
-#define PL_doswitches          (PL_curinterp->Idoswitches)
-#define PL_dowarn              (PL_curinterp->Idowarn)
-#define PL_e_script            (PL_curinterp->Ie_script)
-#define PL_efloatbuf           (PL_curinterp->Iefloatbuf)
-#define PL_efloatsize          (PL_curinterp->Iefloatsize)
-#define PL_egid                        (PL_curinterp->Iegid)
-#define PL_endav               (PL_curinterp->Iendav)
-#define PL_envgv               (PL_curinterp->Ienvgv)
-#define PL_errgv               (PL_curinterp->Ierrgv)
-#define PL_error_count         (PL_curinterp->Ierror_count)
-#define PL_euid                        (PL_curinterp->Ieuid)
-#define PL_eval_cond           (PL_curinterp->Ieval_cond)
-#define PL_eval_mutex          (PL_curinterp->Ieval_mutex)
-#define PL_eval_owner          (PL_curinterp->Ieval_owner)
-#define PL_eval_root           (PL_curinterp->Ieval_root)
-#define PL_eval_start          (PL_curinterp->Ieval_start)
-#define PL_evalseq             (PL_curinterp->Ievalseq)
-#define PL_exitlist            (PL_curinterp->Iexitlist)
-#define PL_exitlistlen         (PL_curinterp->Iexitlistlen)
-#define PL_expect              (PL_curinterp->Iexpect)
-#define PL_fdpid               (PL_curinterp->Ifdpid)
-#define PL_filemode            (PL_curinterp->Ifilemode)
-#define PL_filter_debug                (PL_curinterp->Ifilter_debug)
-#define PL_forkprocess         (PL_curinterp->Iforkprocess)
-#define PL_formfeed            (PL_curinterp->Iformfeed)
-#define PL_generation          (PL_curinterp->Igeneration)
-#define PL_gensym              (PL_curinterp->Igensym)
-#define PL_gid                 (PL_curinterp->Igid)
-#define PL_glob_index          (PL_curinterp->Iglob_index)
-#define PL_globalstash         (PL_curinterp->Iglobalstash)
-#define PL_he_root             (PL_curinterp->Ihe_root)
-#define PL_hintgv              (PL_curinterp->Ihintgv)
-#define PL_hints               (PL_curinterp->Ihints)
-#define PL_in_clean_all                (PL_curinterp->Iin_clean_all)
-#define PL_in_clean_objs       (PL_curinterp->Iin_clean_objs)
-#define PL_in_my               (PL_curinterp->Iin_my)
-#define PL_in_my_stash         (PL_curinterp->Iin_my_stash)
-#define PL_incgv               (PL_curinterp->Iincgv)
-#define PL_initav              (PL_curinterp->Iinitav)
-#define PL_inplace             (PL_curinterp->Iinplace)
-#define PL_last_lop            (PL_curinterp->Ilast_lop)
-#define PL_last_lop_op         (PL_curinterp->Ilast_lop_op)
-#define PL_last_swash_hv       (PL_curinterp->Ilast_swash_hv)
-#define PL_last_swash_key      (PL_curinterp->Ilast_swash_key)
-#define PL_last_swash_klen     (PL_curinterp->Ilast_swash_klen)
-#define PL_last_swash_slen     (PL_curinterp->Ilast_swash_slen)
-#define PL_last_swash_tmps     (PL_curinterp->Ilast_swash_tmps)
-#define PL_last_uni            (PL_curinterp->Ilast_uni)
-#define PL_lastfd              (PL_curinterp->Ilastfd)
-#define PL_lastsize            (PL_curinterp->Ilastsize)
-#define PL_lastspbase          (PL_curinterp->Ilastspbase)
-#define PL_laststatval         (PL_curinterp->Ilaststatval)
-#define PL_laststype           (PL_curinterp->Ilaststype)
-#define PL_leftgv              (PL_curinterp->Ileftgv)
-#define PL_lex_brackets                (PL_curinterp->Ilex_brackets)
-#define PL_lex_brackstack      (PL_curinterp->Ilex_brackstack)
-#define PL_lex_casemods                (PL_curinterp->Ilex_casemods)
-#define PL_lex_casestack       (PL_curinterp->Ilex_casestack)
-#define PL_lex_defer           (PL_curinterp->Ilex_defer)
-#define PL_lex_dojoin          (PL_curinterp->Ilex_dojoin)
-#define PL_lex_expect          (PL_curinterp->Ilex_expect)
-#define PL_lex_fakebrack       (PL_curinterp->Ilex_fakebrack)
-#define PL_lex_formbrack       (PL_curinterp->Ilex_formbrack)
-#define PL_lex_inpat           (PL_curinterp->Ilex_inpat)
-#define PL_lex_inwhat          (PL_curinterp->Ilex_inwhat)
-#define PL_lex_op              (PL_curinterp->Ilex_op)
-#define PL_lex_repl            (PL_curinterp->Ilex_repl)
-#define PL_lex_starts          (PL_curinterp->Ilex_starts)
-#define PL_lex_state           (PL_curinterp->Ilex_state)
-#define PL_lex_stuff           (PL_curinterp->Ilex_stuff)
-#define PL_lineary             (PL_curinterp->Ilineary)
-#define PL_linestart           (PL_curinterp->Ilinestart)
-#define PL_linestr             (PL_curinterp->Ilinestr)
-#define PL_localpatches                (PL_curinterp->Ilocalpatches)
-#define PL_main_cv             (PL_curinterp->Imain_cv)
-#define PL_main_root           (PL_curinterp->Imain_root)
-#define PL_main_start          (PL_curinterp->Imain_start)
-#define PL_malloc_mutex                (PL_curinterp->Imalloc_mutex)
-#define PL_max_intro_pending   (PL_curinterp->Imax_intro_pending)
-#define PL_maxo                        (PL_curinterp->Imaxo)
-#define PL_maxsysfd            (PL_curinterp->Imaxsysfd)
-#define PL_mess_sv             (PL_curinterp->Imess_sv)
-#define PL_min_intro_pending   (PL_curinterp->Imin_intro_pending)
-#define PL_minus_F             (PL_curinterp->Iminus_F)
-#define PL_minus_a             (PL_curinterp->Iminus_a)
-#define PL_minus_c             (PL_curinterp->Iminus_c)
-#define PL_minus_l             (PL_curinterp->Iminus_l)
-#define PL_minus_n             (PL_curinterp->Iminus_n)
-#define PL_minus_p             (PL_curinterp->Iminus_p)
-#define PL_modglobal           (PL_curinterp->Imodglobal)
-#define PL_multi_close         (PL_curinterp->Imulti_close)
-#define PL_multi_end           (PL_curinterp->Imulti_end)
-#define PL_multi_open          (PL_curinterp->Imulti_open)
-#define PL_multi_start         (PL_curinterp->Imulti_start)
-#define PL_multiline           (PL_curinterp->Imultiline)
-#define PL_mystrk              (PL_curinterp->Imystrk)
-#define PL_nexttoke            (PL_curinterp->Inexttoke)
-#define PL_nexttype            (PL_curinterp->Inexttype)
-#define PL_nextval             (PL_curinterp->Inextval)
-#define PL_nice_chunk          (PL_curinterp->Inice_chunk)
-#define PL_nice_chunk_size     (PL_curinterp->Inice_chunk_size)
-#define PL_nomemok             (PL_curinterp->Inomemok)
-#define PL_nthreads            (PL_curinterp->Inthreads)
-#define PL_nthreads_cond       (PL_curinterp->Inthreads_cond)
-#define PL_numeric_local       (PL_curinterp->Inumeric_local)
-#define PL_numeric_name                (PL_curinterp->Inumeric_name)
-#define PL_numeric_radix       (PL_curinterp->Inumeric_radix)
-#define PL_numeric_standard    (PL_curinterp->Inumeric_standard)
-#define PL_ofmt                        (PL_curinterp->Iofmt)
-#define PL_oldbufptr           (PL_curinterp->Ioldbufptr)
-#define PL_oldlastpm           (PL_curinterp->Ioldlastpm)
-#define PL_oldname             (PL_curinterp->Ioldname)
-#define PL_oldoldbufptr                (PL_curinterp->Ioldoldbufptr)
-#define PL_op_mask             (PL_curinterp->Iop_mask)
-#define PL_op_seqmax           (PL_curinterp->Iop_seqmax)
-#define PL_origalen            (PL_curinterp->Iorigalen)
-#define PL_origargc            (PL_curinterp->Iorigargc)
-#define PL_origargv            (PL_curinterp->Iorigargv)
-#define PL_origenviron         (PL_curinterp->Iorigenviron)
-#define PL_origfilename                (PL_curinterp->Iorigfilename)
-#define PL_ors                 (PL_curinterp->Iors)
-#define PL_orslen              (PL_curinterp->Iorslen)
-#define PL_osname              (PL_curinterp->Iosname)
-#define PL_pad_reset_pending   (PL_curinterp->Ipad_reset_pending)
-#define PL_padix               (PL_curinterp->Ipadix)
-#define PL_padix_floor         (PL_curinterp->Ipadix_floor)
-#define PL_parsehook           (PL_curinterp->Iparsehook)
-#define PL_patchlevel          (PL_curinterp->Ipatchlevel)
-#define PL_pending_ident       (PL_curinterp->Ipending_ident)
-#define PL_perl_destruct_level (PL_curinterp->Iperl_destruct_level)
-#define PL_perldb              (PL_curinterp->Iperldb)
-#define PL_pidstatus           (PL_curinterp->Ipidstatus)
-#define PL_preambleav          (PL_curinterp->Ipreambleav)
-#define PL_preambled           (PL_curinterp->Ipreambled)
-#define PL_preprocess          (PL_curinterp->Ipreprocess)
-#define PL_profiledata         (PL_curinterp->Iprofiledata)
-#define PL_replgv              (PL_curinterp->Ireplgv)
-#define PL_rightgv             (PL_curinterp->Irightgv)
-#define PL_rsfp                        (PL_curinterp->Irsfp)
-#define PL_rsfp_filters                (PL_curinterp->Irsfp_filters)
-#define PL_runops              (PL_curinterp->Irunops)
-#define PL_sawampersand                (PL_curinterp->Isawampersand)
-#define PL_sawstudy            (PL_curinterp->Isawstudy)
-#define PL_sawvec              (PL_curinterp->Isawvec)
-#define PL_sh_path             (PL_curinterp->Ish_path)
-#define PL_siggv               (PL_curinterp->Isiggv)
-#define PL_sighandlerp         (PL_curinterp->Isighandlerp)
-#define PL_splitstr            (PL_curinterp->Isplitstr)
-#define PL_srand_called                (PL_curinterp->Isrand_called)
-#define PL_statusvalue         (PL_curinterp->Istatusvalue)
-#define PL_statusvalue_vms     (PL_curinterp->Istatusvalue_vms)
-#define PL_stdingv             (PL_curinterp->Istdingv)
-#define PL_strchop             (PL_curinterp->Istrchop)
-#define PL_strtab              (PL_curinterp->Istrtab)
-#define PL_strtab_mutex                (PL_curinterp->Istrtab_mutex)
-#define PL_sub_generation      (PL_curinterp->Isub_generation)
-#define PL_sublex_info         (PL_curinterp->Isublex_info)
-#define PL_subline             (PL_curinterp->Isubline)
-#define PL_subname             (PL_curinterp->Isubname)
-#define PL_sv_arenaroot                (PL_curinterp->Isv_arenaroot)
-#define PL_sv_count            (PL_curinterp->Isv_count)
-#define PL_sv_mutex            (PL_curinterp->Isv_mutex)
-#define PL_sv_no               (PL_curinterp->Isv_no)
-#define PL_sv_objcount         (PL_curinterp->Isv_objcount)
-#define PL_sv_root             (PL_curinterp->Isv_root)
-#define PL_sv_undef            (PL_curinterp->Isv_undef)
-#define PL_sv_yes              (PL_curinterp->Isv_yes)
-#define PL_svref_mutex         (PL_curinterp->Isvref_mutex)
-#define PL_sys_intern          (PL_curinterp->Isys_intern)
-#define PL_tainting            (PL_curinterp->Itainting)
-#define PL_thisexpr            (PL_curinterp->Ithisexpr)
-#define PL_thr_key             (PL_curinterp->Ithr_key)
-#define PL_threadnum           (PL_curinterp->Ithreadnum)
-#define PL_threads_mutex       (PL_curinterp->Ithreads_mutex)
-#define PL_threadsv_names      (PL_curinterp->Ithreadsv_names)
-#define PL_thrsv               (PL_curinterp->Ithrsv)
-#define PL_tokenbuf            (PL_curinterp->Itokenbuf)
-#define PL_uid                 (PL_curinterp->Iuid)
-#define PL_unsafe              (PL_curinterp->Iunsafe)
-#define PL_utf8_alnum          (PL_curinterp->Iutf8_alnum)
-#define PL_utf8_alnumc         (PL_curinterp->Iutf8_alnumc)
-#define PL_utf8_alpha          (PL_curinterp->Iutf8_alpha)
-#define PL_utf8_ascii          (PL_curinterp->Iutf8_ascii)
-#define PL_utf8_cntrl          (PL_curinterp->Iutf8_cntrl)
-#define PL_utf8_digit          (PL_curinterp->Iutf8_digit)
-#define PL_utf8_graph          (PL_curinterp->Iutf8_graph)
-#define PL_utf8_lower          (PL_curinterp->Iutf8_lower)
-#define PL_utf8_mark           (PL_curinterp->Iutf8_mark)
-#define PL_utf8_print          (PL_curinterp->Iutf8_print)
-#define PL_utf8_punct          (PL_curinterp->Iutf8_punct)
-#define PL_utf8_space          (PL_curinterp->Iutf8_space)
-#define PL_utf8_tolower                (PL_curinterp->Iutf8_tolower)
-#define PL_utf8_totitle                (PL_curinterp->Iutf8_totitle)
-#define PL_utf8_toupper                (PL_curinterp->Iutf8_toupper)
-#define PL_utf8_upper          (PL_curinterp->Iutf8_upper)
-#define PL_utf8_xdigit         (PL_curinterp->Iutf8_xdigit)
-#define PL_uudmap              (PL_curinterp->Iuudmap)
-#define PL_warnhook            (PL_curinterp->Iwarnhook)
-#define PL_xiv_arenaroot       (PL_curinterp->Ixiv_arenaroot)
-#define PL_xiv_root            (PL_curinterp->Ixiv_root)
-#define PL_xnv_root            (PL_curinterp->Ixnv_root)
-#define PL_xpv_root            (PL_curinterp->Ixpv_root)
-#define PL_xrv_root            (PL_curinterp->Ixrv_root)
-#define PL_yychar              (PL_curinterp->Iyychar)
-#define PL_yydebug             (PL_curinterp->Iyydebug)
-#define PL_yyerrflag           (PL_curinterp->Iyyerrflag)
-#define PL_yylval              (PL_curinterp->Iyylval)
-#define PL_yynerrs             (PL_curinterp->Iyynerrs)
-#define PL_yyval               (PL_curinterp->Iyyval)
+#define PL_Argv                        (PERL_GET_INTERP->IArgv)
+#define PL_Cmd                 (PERL_GET_INTERP->ICmd)
+#define PL_DBcv                        (PERL_GET_INTERP->IDBcv)
+#define PL_DBgv                        (PERL_GET_INTERP->IDBgv)
+#define PL_DBline              (PERL_GET_INTERP->IDBline)
+#define PL_DBsignal            (PERL_GET_INTERP->IDBsignal)
+#define PL_DBsingle            (PERL_GET_INTERP->IDBsingle)
+#define PL_DBsub               (PERL_GET_INTERP->IDBsub)
+#define PL_DBtrace             (PERL_GET_INTERP->IDBtrace)
+#define PL_Dir                 (PERL_GET_INTERP->IDir)
+#define PL_Env                 (PERL_GET_INTERP->IEnv)
+#define PL_LIO                 (PERL_GET_INTERP->ILIO)
+#define PL_Mem                 (PERL_GET_INTERP->IMem)
+#define PL_Proc                        (PERL_GET_INTERP->IProc)
+#define PL_Sock                        (PERL_GET_INTERP->ISock)
+#define PL_StdIO               (PERL_GET_INTERP->IStdIO)
+#define PL_amagic_generation   (PERL_GET_INTERP->Iamagic_generation)
+#define PL_ampergv             (PERL_GET_INTERP->Iampergv)
+#define PL_an                  (PERL_GET_INTERP->Ian)
+#define PL_archpat_auto                (PERL_GET_INTERP->Iarchpat_auto)
+#define PL_argvgv              (PERL_GET_INTERP->Iargvgv)
+#define PL_argvoutgv           (PERL_GET_INTERP->Iargvoutgv)
+#define PL_basetime            (PERL_GET_INTERP->Ibasetime)
+#define PL_beginav             (PERL_GET_INTERP->Ibeginav)
+#define PL_bitcount            (PERL_GET_INTERP->Ibitcount)
+#define PL_bufend              (PERL_GET_INTERP->Ibufend)
+#define PL_bufptr              (PERL_GET_INTERP->Ibufptr)
+#define PL_cddir               (PERL_GET_INTERP->Icddir)
+#define PL_collation_ix                (PERL_GET_INTERP->Icollation_ix)
+#define PL_collation_name      (PERL_GET_INTERP->Icollation_name)
+#define PL_collation_standard  (PERL_GET_INTERP->Icollation_standard)
+#define PL_collxfrm_base       (PERL_GET_INTERP->Icollxfrm_base)
+#define PL_collxfrm_mult       (PERL_GET_INTERP->Icollxfrm_mult)
+#define PL_compcv              (PERL_GET_INTERP->Icompcv)
+#define PL_compiling           (PERL_GET_INTERP->Icompiling)
+#define PL_comppad             (PERL_GET_INTERP->Icomppad)
+#define PL_comppad_name                (PERL_GET_INTERP->Icomppad_name)
+#define PL_comppad_name_fill   (PERL_GET_INTERP->Icomppad_name_fill)
+#define PL_comppad_name_floor  (PERL_GET_INTERP->Icomppad_name_floor)
+#define PL_cop_seqmax          (PERL_GET_INTERP->Icop_seqmax)
+#define PL_copline             (PERL_GET_INTERP->Icopline)
+#define PL_cred_mutex          (PERL_GET_INTERP->Icred_mutex)
+#define PL_cryptseen           (PERL_GET_INTERP->Icryptseen)
+#define PL_cshlen              (PERL_GET_INTERP->Icshlen)
+#define PL_cshname             (PERL_GET_INTERP->Icshname)
+#define PL_curcopdb            (PERL_GET_INTERP->Icurcopdb)
+#define PL_curstname           (PERL_GET_INTERP->Icurstname)
+#define PL_curthr              (PERL_GET_INTERP->Icurthr)
+#define PL_dbargs              (PERL_GET_INTERP->Idbargs)
+#define PL_debdelim            (PERL_GET_INTERP->Idebdelim)
+#define PL_debname             (PERL_GET_INTERP->Idebname)
+#define PL_debstash            (PERL_GET_INTERP->Idebstash)
+#define PL_debug               (PERL_GET_INTERP->Idebug)
+#define PL_defgv               (PERL_GET_INTERP->Idefgv)
+#define PL_diehook             (PERL_GET_INTERP->Idiehook)
+#define PL_dlevel              (PERL_GET_INTERP->Idlevel)
+#define PL_dlmax               (PERL_GET_INTERP->Idlmax)
+#define PL_doextract           (PERL_GET_INTERP->Idoextract)
+#define PL_doswitches          (PERL_GET_INTERP->Idoswitches)
+#define PL_dowarn              (PERL_GET_INTERP->Idowarn)
+#define PL_e_script            (PERL_GET_INTERP->Ie_script)
+#define PL_efloatbuf           (PERL_GET_INTERP->Iefloatbuf)
+#define PL_efloatsize          (PERL_GET_INTERP->Iefloatsize)
+#define PL_egid                        (PERL_GET_INTERP->Iegid)
+#define PL_endav               (PERL_GET_INTERP->Iendav)
+#define PL_envgv               (PERL_GET_INTERP->Ienvgv)
+#define PL_errgv               (PERL_GET_INTERP->Ierrgv)
+#define PL_error_count         (PERL_GET_INTERP->Ierror_count)
+#define PL_euid                        (PERL_GET_INTERP->Ieuid)
+#define PL_eval_cond           (PERL_GET_INTERP->Ieval_cond)
+#define PL_eval_mutex          (PERL_GET_INTERP->Ieval_mutex)
+#define PL_eval_owner          (PERL_GET_INTERP->Ieval_owner)
+#define PL_eval_root           (PERL_GET_INTERP->Ieval_root)
+#define PL_eval_start          (PERL_GET_INTERP->Ieval_start)
+#define PL_evalseq             (PERL_GET_INTERP->Ievalseq)
+#define PL_exitlist            (PERL_GET_INTERP->Iexitlist)
+#define PL_exitlistlen         (PERL_GET_INTERP->Iexitlistlen)
+#define PL_expect              (PERL_GET_INTERP->Iexpect)
+#define PL_fdpid               (PERL_GET_INTERP->Ifdpid)
+#define PL_filemode            (PERL_GET_INTERP->Ifilemode)
+#define PL_filter_debug                (PERL_GET_INTERP->Ifilter_debug)
+#define PL_forkprocess         (PERL_GET_INTERP->Iforkprocess)
+#define PL_formfeed            (PERL_GET_INTERP->Iformfeed)
+#define PL_generation          (PERL_GET_INTERP->Igeneration)
+#define PL_gensym              (PERL_GET_INTERP->Igensym)
+#define PL_gid                 (PERL_GET_INTERP->Igid)
+#define PL_glob_index          (PERL_GET_INTERP->Iglob_index)
+#define PL_globalstash         (PERL_GET_INTERP->Iglobalstash)
+#define PL_he_root             (PERL_GET_INTERP->Ihe_root)
+#define PL_hintgv              (PERL_GET_INTERP->Ihintgv)
+#define PL_hints               (PERL_GET_INTERP->Ihints)
+#define PL_in_clean_all                (PERL_GET_INTERP->Iin_clean_all)
+#define PL_in_clean_objs       (PERL_GET_INTERP->Iin_clean_objs)
+#define PL_in_my               (PERL_GET_INTERP->Iin_my)
+#define PL_in_my_stash         (PERL_GET_INTERP->Iin_my_stash)
+#define PL_incgv               (PERL_GET_INTERP->Iincgv)
+#define PL_initav              (PERL_GET_INTERP->Iinitav)
+#define PL_inplace             (PERL_GET_INTERP->Iinplace)
+#define PL_last_lop            (PERL_GET_INTERP->Ilast_lop)
+#define PL_last_lop_op         (PERL_GET_INTERP->Ilast_lop_op)
+#define PL_last_swash_hv       (PERL_GET_INTERP->Ilast_swash_hv)
+#define PL_last_swash_key      (PERL_GET_INTERP->Ilast_swash_key)
+#define PL_last_swash_klen     (PERL_GET_INTERP->Ilast_swash_klen)
+#define PL_last_swash_slen     (PERL_GET_INTERP->Ilast_swash_slen)
+#define PL_last_swash_tmps     (PERL_GET_INTERP->Ilast_swash_tmps)
+#define PL_last_uni            (PERL_GET_INTERP->Ilast_uni)
+#define PL_lastfd              (PERL_GET_INTERP->Ilastfd)
+#define PL_lastsize            (PERL_GET_INTERP->Ilastsize)
+#define PL_lastspbase          (PERL_GET_INTERP->Ilastspbase)
+#define PL_laststatval         (PERL_GET_INTERP->Ilaststatval)
+#define PL_laststype           (PERL_GET_INTERP->Ilaststype)
+#define PL_leftgv              (PERL_GET_INTERP->Ileftgv)
+#define PL_lex_brackets                (PERL_GET_INTERP->Ilex_brackets)
+#define PL_lex_brackstack      (PERL_GET_INTERP->Ilex_brackstack)
+#define PL_lex_casemods                (PERL_GET_INTERP->Ilex_casemods)
+#define PL_lex_casestack       (PERL_GET_INTERP->Ilex_casestack)
+#define PL_lex_defer           (PERL_GET_INTERP->Ilex_defer)
+#define PL_lex_dojoin          (PERL_GET_INTERP->Ilex_dojoin)
+#define PL_lex_expect          (PERL_GET_INTERP->Ilex_expect)
+#define PL_lex_fakebrack       (PERL_GET_INTERP->Ilex_fakebrack)
+#define PL_lex_formbrack       (PERL_GET_INTERP->Ilex_formbrack)
+#define PL_lex_inpat           (PERL_GET_INTERP->Ilex_inpat)
+#define PL_lex_inwhat          (PERL_GET_INTERP->Ilex_inwhat)
+#define PL_lex_op              (PERL_GET_INTERP->Ilex_op)
+#define PL_lex_repl            (PERL_GET_INTERP->Ilex_repl)
+#define PL_lex_starts          (PERL_GET_INTERP->Ilex_starts)
+#define PL_lex_state           (PERL_GET_INTERP->Ilex_state)
+#define PL_lex_stuff           (PERL_GET_INTERP->Ilex_stuff)
+#define PL_lineary             (PERL_GET_INTERP->Ilineary)
+#define PL_linestart           (PERL_GET_INTERP->Ilinestart)
+#define PL_linestr             (PERL_GET_INTERP->Ilinestr)
+#define PL_localpatches                (PERL_GET_INTERP->Ilocalpatches)
+#define PL_main_cv             (PERL_GET_INTERP->Imain_cv)
+#define PL_main_root           (PERL_GET_INTERP->Imain_root)
+#define PL_main_start          (PERL_GET_INTERP->Imain_start)
+#define PL_malloc_mutex                (PERL_GET_INTERP->Imalloc_mutex)
+#define PL_max_intro_pending   (PERL_GET_INTERP->Imax_intro_pending)
+#define PL_maxo                        (PERL_GET_INTERP->Imaxo)
+#define PL_maxsysfd            (PERL_GET_INTERP->Imaxsysfd)
+#define PL_mess_sv             (PERL_GET_INTERP->Imess_sv)
+#define PL_min_intro_pending   (PERL_GET_INTERP->Imin_intro_pending)
+#define PL_minus_F             (PERL_GET_INTERP->Iminus_F)
+#define PL_minus_a             (PERL_GET_INTERP->Iminus_a)
+#define PL_minus_c             (PERL_GET_INTERP->Iminus_c)
+#define PL_minus_l             (PERL_GET_INTERP->Iminus_l)
+#define PL_minus_n             (PERL_GET_INTERP->Iminus_n)
+#define PL_minus_p             (PERL_GET_INTERP->Iminus_p)
+#define PL_modglobal           (PERL_GET_INTERP->Imodglobal)
+#define PL_multi_close         (PERL_GET_INTERP->Imulti_close)
+#define PL_multi_end           (PERL_GET_INTERP->Imulti_end)
+#define PL_multi_open          (PERL_GET_INTERP->Imulti_open)
+#define PL_multi_start         (PERL_GET_INTERP->Imulti_start)
+#define PL_multiline           (PERL_GET_INTERP->Imultiline)
+#define PL_mystrk              (PERL_GET_INTERP->Imystrk)
+#define PL_nexttoke            (PERL_GET_INTERP->Inexttoke)
+#define PL_nexttype            (PERL_GET_INTERP->Inexttype)
+#define PL_nextval             (PERL_GET_INTERP->Inextval)
+#define PL_nice_chunk          (PERL_GET_INTERP->Inice_chunk)
+#define PL_nice_chunk_size     (PERL_GET_INTERP->Inice_chunk_size)
+#define PL_nomemok             (PERL_GET_INTERP->Inomemok)
+#define PL_nthreads            (PERL_GET_INTERP->Inthreads)
+#define PL_nthreads_cond       (PERL_GET_INTERP->Inthreads_cond)
+#define PL_numeric_local       (PERL_GET_INTERP->Inumeric_local)
+#define PL_numeric_name                (PERL_GET_INTERP->Inumeric_name)
+#define PL_numeric_radix       (PERL_GET_INTERP->Inumeric_radix)
+#define PL_numeric_standard    (PERL_GET_INTERP->Inumeric_standard)
+#define PL_ofmt                        (PERL_GET_INTERP->Iofmt)
+#define PL_oldbufptr           (PERL_GET_INTERP->Ioldbufptr)
+#define PL_oldlastpm           (PERL_GET_INTERP->Ioldlastpm)
+#define PL_oldname             (PERL_GET_INTERP->Ioldname)
+#define PL_oldoldbufptr                (PERL_GET_INTERP->Ioldoldbufptr)
+#define PL_op_mask             (PERL_GET_INTERP->Iop_mask)
+#define PL_op_seqmax           (PERL_GET_INTERP->Iop_seqmax)
+#define PL_origalen            (PERL_GET_INTERP->Iorigalen)
+#define PL_origargc            (PERL_GET_INTERP->Iorigargc)
+#define PL_origargv            (PERL_GET_INTERP->Iorigargv)
+#define PL_origenviron         (PERL_GET_INTERP->Iorigenviron)
+#define PL_origfilename                (PERL_GET_INTERP->Iorigfilename)
+#define PL_ors                 (PERL_GET_INTERP->Iors)
+#define PL_orslen              (PERL_GET_INTERP->Iorslen)
+#define PL_osname              (PERL_GET_INTERP->Iosname)
+#define PL_pad_reset_pending   (PERL_GET_INTERP->Ipad_reset_pending)
+#define PL_padix               (PERL_GET_INTERP->Ipadix)
+#define PL_padix_floor         (PERL_GET_INTERP->Ipadix_floor)
+#define PL_parsehook           (PERL_GET_INTERP->Iparsehook)
+#define PL_patchlevel          (PERL_GET_INTERP->Ipatchlevel)
+#define PL_pending_ident       (PERL_GET_INTERP->Ipending_ident)
+#define PL_perl_destruct_level (PERL_GET_INTERP->Iperl_destruct_level)
+#define PL_perldb              (PERL_GET_INTERP->Iperldb)
+#define PL_pidstatus           (PERL_GET_INTERP->Ipidstatus)
+#define PL_preambleav          (PERL_GET_INTERP->Ipreambleav)
+#define PL_preambled           (PERL_GET_INTERP->Ipreambled)
+#define PL_preprocess          (PERL_GET_INTERP->Ipreprocess)
+#define PL_profiledata         (PERL_GET_INTERP->Iprofiledata)
+#define PL_replgv              (PERL_GET_INTERP->Ireplgv)
+#define PL_rightgv             (PERL_GET_INTERP->Irightgv)
+#define PL_rsfp                        (PERL_GET_INTERP->Irsfp)
+#define PL_rsfp_filters                (PERL_GET_INTERP->Irsfp_filters)
+#define PL_runops              (PERL_GET_INTERP->Irunops)
+#define PL_sawampersand                (PERL_GET_INTERP->Isawampersand)
+#define PL_sawstudy            (PERL_GET_INTERP->Isawstudy)
+#define PL_sawvec              (PERL_GET_INTERP->Isawvec)
+#define PL_sh_path             (PERL_GET_INTERP->Ish_path)
+#define PL_siggv               (PERL_GET_INTERP->Isiggv)
+#define PL_sighandlerp         (PERL_GET_INTERP->Isighandlerp)
+#define PL_splitstr            (PERL_GET_INTERP->Isplitstr)
+#define PL_srand_called                (PERL_GET_INTERP->Isrand_called)
+#define PL_statusvalue         (PERL_GET_INTERP->Istatusvalue)
+#define PL_statusvalue_vms     (PERL_GET_INTERP->Istatusvalue_vms)
+#define PL_stdingv             (PERL_GET_INTERP->Istdingv)
+#define PL_strchop             (PERL_GET_INTERP->Istrchop)
+#define PL_strtab              (PERL_GET_INTERP->Istrtab)
+#define PL_strtab_mutex                (PERL_GET_INTERP->Istrtab_mutex)
+#define PL_sub_generation      (PERL_GET_INTERP->Isub_generation)
+#define PL_sublex_info         (PERL_GET_INTERP->Isublex_info)
+#define PL_subline             (PERL_GET_INTERP->Isubline)
+#define PL_subname             (PERL_GET_INTERP->Isubname)
+#define PL_sv_arenaroot                (PERL_GET_INTERP->Isv_arenaroot)
+#define PL_sv_count            (PERL_GET_INTERP->Isv_count)
+#define PL_sv_mutex            (PERL_GET_INTERP->Isv_mutex)
+#define PL_sv_no               (PERL_GET_INTERP->Isv_no)
+#define PL_sv_objcount         (PERL_GET_INTERP->Isv_objcount)
+#define PL_sv_root             (PERL_GET_INTERP->Isv_root)
+#define PL_sv_undef            (PERL_GET_INTERP->Isv_undef)
+#define PL_sv_yes              (PERL_GET_INTERP->Isv_yes)
+#define PL_svref_mutex         (PERL_GET_INTERP->Isvref_mutex)
+#define PL_sys_intern          (PERL_GET_INTERP->Isys_intern)
+#define PL_tainting            (PERL_GET_INTERP->Itainting)
+#define PL_thisexpr            (PERL_GET_INTERP->Ithisexpr)
+#define PL_thr_key             (PERL_GET_INTERP->Ithr_key)
+#define PL_threadnum           (PERL_GET_INTERP->Ithreadnum)
+#define PL_threads_mutex       (PERL_GET_INTERP->Ithreads_mutex)
+#define PL_threadsv_names      (PERL_GET_INTERP->Ithreadsv_names)
+#define PL_thrsv               (PERL_GET_INTERP->Ithrsv)
+#define PL_tokenbuf            (PERL_GET_INTERP->Itokenbuf)
+#define PL_uid                 (PERL_GET_INTERP->Iuid)
+#define PL_unsafe              (PERL_GET_INTERP->Iunsafe)
+#define PL_utf8_alnum          (PERL_GET_INTERP->Iutf8_alnum)
+#define PL_utf8_alnumc         (PERL_GET_INTERP->Iutf8_alnumc)
+#define PL_utf8_alpha          (PERL_GET_INTERP->Iutf8_alpha)
+#define PL_utf8_ascii          (PERL_GET_INTERP->Iutf8_ascii)
+#define PL_utf8_cntrl          (PERL_GET_INTERP->Iutf8_cntrl)
+#define PL_utf8_digit          (PERL_GET_INTERP->Iutf8_digit)
+#define PL_utf8_graph          (PERL_GET_INTERP->Iutf8_graph)
+#define PL_utf8_lower          (PERL_GET_INTERP->Iutf8_lower)
+#define PL_utf8_mark           (PERL_GET_INTERP->Iutf8_mark)
+#define PL_utf8_print          (PERL_GET_INTERP->Iutf8_print)
+#define PL_utf8_punct          (PERL_GET_INTERP->Iutf8_punct)
+#define PL_utf8_space          (PERL_GET_INTERP->Iutf8_space)
+#define PL_utf8_tolower                (PERL_GET_INTERP->Iutf8_tolower)
+#define PL_utf8_totitle                (PERL_GET_INTERP->Iutf8_totitle)
+#define PL_utf8_toupper                (PERL_GET_INTERP->Iutf8_toupper)
+#define PL_utf8_upper          (PERL_GET_INTERP->Iutf8_upper)
+#define PL_utf8_xdigit         (PERL_GET_INTERP->Iutf8_xdigit)
+#define PL_uudmap              (PERL_GET_INTERP->Iuudmap)
+#define PL_warnhook            (PERL_GET_INTERP->Iwarnhook)
+#define PL_xiv_arenaroot       (PERL_GET_INTERP->Ixiv_arenaroot)
+#define PL_xiv_root            (PERL_GET_INTERP->Ixiv_root)
+#define PL_xnv_root            (PERL_GET_INTERP->Ixnv_root)
+#define PL_xpv_root            (PERL_GET_INTERP->Ixpv_root)
+#define PL_xrv_root            (PERL_GET_INTERP->Ixrv_root)
+#define PL_yychar              (PERL_GET_INTERP->Iyychar)
+#define PL_yydebug             (PERL_GET_INTERP->Iyydebug)
+#define PL_yyerrflag           (PERL_GET_INTERP->Iyyerrflag)
+#define PL_yylval              (PERL_GET_INTERP->Iyylval)
+#define PL_yynerrs             (PERL_GET_INTERP->Iyynerrs)
+#define PL_yyval               (PERL_GET_INTERP->Iyyval)
 
 #else  /* !MULTIPLICITY */
 
index 39e381d..2c9a888 100644 (file)
@@ -7,6 +7,7 @@
  *
  */
 
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
index 07f0838..a3d53f6 100644 (file)
@@ -1,3 +1,4 @@
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
@@ -6,6 +7,7 @@
 static void
 freadpv(U32 len, void *data, XPV *pv)
 {
+    dTHX;
     New(666, pv->xpv_pv, len, char);
     PerlIO_read((PerlIO*)data, (void*)pv->xpv_pv, len);
     pv->xpv_len = len;
index 18fa4a1..60dc98d 100644 (file)
@@ -9,6 +9,7 @@
  * This file is autogenerated from bytecode.pl. Changes made here will be lost.
  */
 
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #define NO_XSLOCKS
index 27d128b..3cbc7c5 100644 (file)
@@ -1,3 +1,4 @@
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
index 016a6eb..df91476 100644 (file)
@@ -1,3 +1,4 @@
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
index 2446ab7..bc16cc9 100644 (file)
@@ -1,3 +1,4 @@
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
index eb18f0c..e614cff 100644 (file)
@@ -4,6 +4,7 @@
  * modify it under the same terms as Perl itself.
  */
 
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #define PERLIO_NOT_STDIO 1
 #include "perl.h"
index c7d5f3e..9b6e016 100644 (file)
@@ -1,3 +1,4 @@
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
index bbf9a7a..e4433e0 100644 (file)
@@ -1,11 +1,14 @@
 #ifdef WIN32
 #define _POSIX_
 #endif
+
+#define PERL_NO_GET_CONTEXT
+
 #include "EXTERN.h"
 #define PERLIO_NOT_STDIO 1
 #include "perl.h"
 #include "XSUB.h"
-#ifdef PERL_OBJECT     /* XXX _very_ temporary hacks */
+#if defined(PERL_OBJECT) || defined(PERL_CAPI)
 #  undef signal
 #  undef open
 #  undef setmode
index c2e940b..ee672ca 100644 (file)
@@ -1,3 +1,4 @@
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
index c09c313..6abc647 100644 (file)
@@ -1,3 +1,4 @@
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
@@ -68,6 +69,7 @@
 static int
 my_inet_aton(register const char *cp, struct in_addr *addr)
 {
+       dTHX;
        register U32 val;
        register int base;
        register char c;
index 5d61941..4043a02 100644 (file)
@@ -1,3 +1,4 @@
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
@@ -324,6 +325,7 @@ static Signal_t handle_thread_signal (int sig);
 static Signal_t
 handle_thread_signal(int sig)
 {
+    dTHXo;
     unsigned char c = (unsigned char) sig;
     /*
      * We're not really allowed to call fprintf in a signal handler
index 4e0afb0..53ba535 100644 (file)
@@ -1,3 +1,4 @@
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
index 10e44f7..98ffd74 100644 (file)
@@ -3,6 +3,7 @@
 #  define DEBUGGING
 #endif
 
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
index 36e2e75..06c71da 100644 (file)
@@ -44,15 +44,19 @@ Perl_my_chsize
 Perl_condpair_magic
 Perl_convert
 Perl_croak
+Perl_vcroak
 Perl_croak_nocontext
 Perl_die_nocontext
+Perl_deb_nocontext
 Perl_form_nocontext
 Perl_warn_nocontext
+Perl_warner_nocontext
 Perl_newSVpvf_nocontext
 Perl_sv_catpvf_nocontext
 Perl_sv_setpvf_nocontext
 Perl_sv_catpvf_mg_nocontext
 Perl_sv_setpvf_mg_nocontext
+Perl_fprintf_nocontext
 Perl_cv_ckproto
 Perl_cv_clone
 Perl_cv_const_sv
@@ -69,6 +73,7 @@ Perl_get_opargs
 Perl_get_ppaddr
 Perl_cxinc
 Perl_deb
+Perl_vdeb
 Perl_deb_growlevel
 Perl_debprofdump
 Perl_debop
@@ -77,6 +82,7 @@ Perl_debstackptrs
 Perl_delimcpy
 Perl_deprecate
 Perl_die
+Perl_vdie
 Perl_die_where
 Perl_dounwind
 Perl_do_aexec
@@ -125,6 +131,7 @@ Perl_find_threadsv
 Perl_force_list
 Perl_fold_constants
 Perl_form
+Perl_vform
 Perl_free_tmps
 Perl_gen_constant_list
 Perl_getenv_len
@@ -358,11 +365,11 @@ Perl_newSVnv
 Perl_newSVpv
 Perl_newSVpvn
 Perl_newSVpvf
+Perl_vnewSVpvf
 Perl_newSVrv
 Perl_newSVsv
 Perl_newUNOP
 Perl_newWHILEOP
-Perl_new_struct_thread
 Perl_new_stackinfo
 Perl_nextargv
 Perl_ninstr
@@ -391,6 +398,7 @@ perl_destruct
 perl_free
 perl_run
 perl_parse
+Perl_new_struct_thread
 Perl_call_atexit
 Perl_call_argv
 Perl_call_method
@@ -511,6 +519,7 @@ Perl_sv_add_arena
 Perl_sv_backoff
 Perl_sv_bless
 Perl_sv_catpvf
+Perl_sv_vcatpvf
 Perl_sv_catpv
 Perl_sv_catpvn
 Perl_sv_catsv
@@ -549,6 +558,7 @@ Perl_sv_replace
 Perl_sv_report_used
 Perl_sv_reset
 Perl_sv_setpvf
+Perl_sv_vsetpvf
 Perl_sv_setiv
 Perl_sv_setpviv
 Perl_sv_setuv
@@ -591,7 +601,9 @@ Perl_vivify_defelem
 Perl_vivify_ref
 Perl_wait4pid
 Perl_warn
+Perl_vwarn
 Perl_warner
+Perl_vwarner
 Perl_watch
 Perl_whichsig
 Perl_yyerror
@@ -616,10 +628,12 @@ Perl_GetVars
 Perl_runops_standard
 Perl_runops_debug
 Perl_sv_catpvf_mg
+Perl_sv_vcatpvf_mg
 Perl_sv_catpv_mg
 Perl_sv_catpvn_mg
 Perl_sv_catsv_mg
 Perl_sv_setpvf_mg
+Perl_sv_vsetpvf_mg
 Perl_sv_setiv_mg
 Perl_sv_setpviv_mg
 Perl_sv_setuv_mg
@@ -631,6 +645,7 @@ Perl_sv_usepvn_mg
 Perl_get_vtbl
 Perl_pv_display
 Perl_dump_indent
+Perl_dump_vindent
 Perl_do_gv_dump
 Perl_do_gvgv_dump
 Perl_do_hv_dump
@@ -640,6 +655,7 @@ Perl_do_pmop_dump
 Perl_do_sv_dump
 Perl_magic_dump
 Perl_default_protect
+Perl_vdefault_protect
 Perl_reginitcolors
 Perl_sv_2pv_nolen
 Perl_sv_pv
index 216139d..fc88f31 100644 (file)
--- a/globals.c
+++ b/globals.c
@@ -46,14 +46,6 @@ CPerlObj::Init(void)
 {
 }
 
-int
-CPerlObj::fprintf(PerlIO *stream, const char *format, ...)
-{
-    va_list(arglist);
-    va_start(arglist, format);
-    return PerlIO_vprintf(stream, format, arglist);
-}
-
 #ifdef WIN32           /* XXX why are these needed? */
 bool
 Perl_do_exec(char *cmd)
@@ -69,3 +61,12 @@ CPerlObj::do_aspawn(void *vreally, void **vmark, void **vsp)
 #endif  /* WIN32 */
 
 #endif   /* PERL_OBJECT */
+
+int
+Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...)
+{
+    dTHX;
+    va_list(arglist);
+    va_start(arglist, format);
+    return PerlIO_vprintf(stream, format, arglist);
+}
index 6bff0dd..0b9dfa6 100644 (file)
@@ -382,12 +382,12 @@ PERLVAR(Icred_mutex,      perl_mutex)     /* altered credentials in effect */
 
 #endif /* USE_THREADS */
 
-#ifdef PERL_OBJECT
-PERLVARI(IMem,         IPerlMem*,  NULL)
-PERLVARI(IEnv,         IPerlEnv*,  NULL)
-PERLVARI(IStdIO,       IPerlStdIO*, NULL)
-PERLVARI(ILIO,         IPerlLIO*,  NULL)
-PERLVARI(IDir,         IPerlDir*,  NULL)
-PERLVARI(ISock,                IPerlSock*, NULL)
-PERLVARI(IProc,                IPerlProc*, NULL)
+#if defined(PERL_IMPLICIT_SYS)
+PERLVARI(IMem,         struct IPerlMem*,  NULL)
+PERLVARI(IEnv,         struct IPerlEnv*,  NULL)
+PERLVARI(IStdIO,       struct IPerlStdIO*, NULL)
+PERLVARI(ILIO,         struct IPerlLIO*,  NULL)
+PERLVARI(IDir,         struct IPerlDir*,  NULL)
+PERLVARI(ISock,                struct IPerlSock*, NULL)
+PERLVARI(IProc,                struct IPerlProc*, NULL)
 #endif
index 8d05812..00bcf97 100644 (file)
@@ -74,7 +74,7 @@
 extern void PerlIO_init (void);
 #endif
 
-#ifdef PERL_OBJECT
+#if defined(PERL_IMPLICIT_SYS)
 
 #ifndef PerlIO
 typedef struct _PerlIO PerlIO;
@@ -258,7 +258,7 @@ struct IPerlStdIOInfo
        (*PL_StdIO->pSetPtrCnt)(PL_StdIO, (f), (p), (c))
 #define PerlIO_setlinebuf(f)                                           \
        (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f))
-#define PerlIO_printf          fprintf
+#define PerlIO_printf          Perl_fprintf_nocontext
 #define PerlIO_stdoutf         *PL_StdIO->pPrintf
 #define PerlIO_vprintf(f,fmt,a)                                                \
        (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a)          
@@ -277,14 +277,14 @@ struct IPerlStdIOInfo
 #define PerlIO_init()                                                  \
        (*PL_StdIO->pInit)(PL_StdIO)
 #undef         init_os_extras
-#define init_os_extras(x)                                              \
+#define init_os_extras()                                               \
        (*PL_StdIO->pInitOSExtras)(PL_StdIO)
 
-#else  /* PERL_OBJECT */
+#else  /* PERL_IMPLICIT_SYS */
 
 #include "perlsdio.h"
 
-#endif /* PERL_OBJECT */
+#endif /* PERL_IMPLICIT_SYS */
 
 #ifndef PERLIO_IS_STDIO
 #ifdef USE_SFIO
@@ -466,7 +466,7 @@ extern int  PerlIO_setpos           (PerlIO *,const Fpos_t *);
  *   Interface for directory functions
  */
 
-#ifdef PERL_OBJECT
+#if defined(PERL_IMPLICIT_SYS)
 
 /* IPerlDir            */
 struct IPerlDir;
@@ -518,7 +518,7 @@ struct IPerlDirInfo
 #define PerlDir_tell(dir)                                      \
        (*PL_Dir->pTell)(PL_Dir, (dir))
 
-#else  /* PERL_OBJECT */
+#else  /* PERL_IMPLICIT_SYS */
 
 #define PerlDir_mkdir(name, mode)      Mkdir((name), (mode))
 #ifdef VMS
@@ -534,13 +534,13 @@ struct IPerlDirInfo
 #define PerlDir_seek(dir, loc)         seekdir((dir), (loc))
 #define PerlDir_tell(dir)              telldir((dir))
 
-#endif /* PERL_OBJECT */
+#endif /* PERL_IMPLICIT_SYS */
 
 /*
     Interface for perl environment functions
 */
 
-#ifdef PERL_OBJECT
+#if defined(PERL_IMPLICIT_SYS)
 
 /* IPerlEnv            */
 struct IPerlEnv;
@@ -617,7 +617,7 @@ struct IPerlEnvInfo
        (*PL_Env->pSiteLibPath)(PL_Env,(str))
 #endif
 
-#else  /* PERL_OBJECT */
+#else  /* PERL_IMPLICIT_SYS */
 
 #define PerlEnv_putenv(str)            putenv((str))
 #define PerlEnv_getenv(str)            getenv((str))
@@ -635,13 +635,13 @@ struct IPerlEnvInfo
 #define PerlEnv_os_id()                        win32_os_id()
 #endif
 
-#endif /* PERL_OBJECT */
+#endif /* PERL_IMPLICIT_SYS */
 
 /*
     Interface for perl low-level IO functions
 */
 
-#ifdef PERL_OBJECT
+#if defined(PERL_IMPLICIT_SYS)
 
 /* IPerlLIO            */
 struct IPerlLIO;
@@ -763,7 +763,7 @@ struct IPerlLIOInfo
 #define PerlLIO_write(fd, buf, count)                                  \
        (*PL_LIO->pWrite)(PL_LIO, (fd), (buf), (count))
 
-#else  /* PERL_OBJECT */
+#else  /* PERL_IMPLICIT_SYS */
 
 #define PerlLIO_access(file, mode)     access((file), (mode))
 #define PerlLIO_chmod(file, mode)      chmod((file), (mode))
@@ -796,13 +796,13 @@ struct IPerlLIOInfo
 #define PerlLIO_utime(file, time)      utime((file), (time))
 #define PerlLIO_write(fd, buf, count)  write((fd), (buf), (count))
 
-#endif /* PERL_OBJECT */
+#endif /* PERL_IMPLICIT_SYS */
 
 /*
     Interface for perl memory allocation
 */
 
-#ifdef PERL_OBJECT
+#if defined(PERL_IMPLICIT_SYS)
 
 /* IPerlMem            */
 struct IPerlMem;
@@ -830,20 +830,20 @@ struct IPerlMemInfo
 #define PerlMem_free(buf)                                  \
        (*PL_Mem->pFree)(PL_Mem, (buf))
 
-#else  /* PERL_OBJECT */
+#else  /* PERL_IMPLICIT_SYS */
 
 #define PerlMem_malloc(size)           malloc((size))
 #define PerlMem_realloc(buf, size)     realloc((buf), (size))
 #define PerlMem_free(buf)              free((buf))
 
-#endif /* PERL_OBJECT */
+#endif /* PERL_IMPLICIT_SYS */
 
 /*
     Interface for perl process functions
 */
 
 
-#ifdef PERL_OBJECT
+#if defined(PERL_IMPLICIT_SYS)
 
 #ifndef Sighandler_t
 typedef Signal_t (*Sighandler_t) (int);
@@ -1008,7 +1008,7 @@ struct IPerlProcInfo
        (*PL_Proc->pASpawn)(PL_Proc, (m), (c), (a))
 #endif
 
-#else  /* PERL_OBJECT */
+#else  /* PERL_IMPLICIT_SYS */
 
 #define PerlProc_abort()       abort()
 #define PerlProc_crypt(c,s)    crypt((c), (s))
@@ -1041,17 +1041,17 @@ struct IPerlProcInfo
 
 #ifdef WIN32
 #define PerlProc_DynaLoad(f)                                           \
-       win32_dynaload(aTHX_ (f))
+       win32_dynaload((f))
 #define PerlProc_GetOSError(s,e)                                       \
-       win32_str_os_error(aTHX_ (s), (e))
+       win32_str_os_error((s), (e))
 #endif
-#endif /* PERL_OBJECT */
+#endif /* PERL_IMPLICIT_SYS */
 
 /*
     Interface for perl socket functions
 */
 
-#ifdef PERL_OBJECT
+#if defined(PERL_IMPLICIT_SYS)
 
 /* PerlSock            */
 struct IPerlSock;
@@ -1265,7 +1265,7 @@ struct IPerlSockInfo
        (*PL_Sock->pClosesocket)(PL_Sock, s)
 #endif
 
-#else  /* PERL_OBJECT */
+#else  /* PERL_IMPLICIT_SYS */
 
 #define PerlSock_htonl(x)              htonl(x)
 #define PerlSock_htons(x)              htons(x)
@@ -1323,7 +1323,7 @@ struct IPerlSockInfo
 #define PerlSock_closesocket(s)                closesocket(s)
 #endif
 
-#endif /* PERL_OBJECT */
+#endif /* PERL_IMPLICIT_SYS */
 
 /* Mention
 
index 03bb435..0e4712c 100644 (file)
@@ -376,9 +376,8 @@ sub cflags {
        $self->{uc $_} ||= $cflags{$_}
     }
 
-    if ($self->{CAPI} && $Is_PERL_OBJECT) {
-        $self->{CCFLAGS} =~ s/-DPERL_OBJECT(\s|$)//;
-        $self->{CCFLAGS} .= ' -DPERL_CAPI ';
+    if ($Is_PERL_OBJECT) {
+        $self->{CCFLAGS} =~ s/-DPERL_OBJECT(\b|$)/-DPERL_CAPI/g;
         if ($Is_Win32 && $Config{'cc'} =~ /^cl.exe/i) {
             # Turn off C++ mode of the MSC compiler
             $self->{CCFLAGS} =~ s/-TP(\s|$)//;
@@ -3415,7 +3414,7 @@ sub tool_xsubpp {
        }
     }
 
-    my $xsubpp = $self->{CAPI} ? "xsubpp -object_capi" : "xsubpp";
+    my $xsubpp = "xsubpp";
 
     return qq{
 XSUBPPDIR = $xsdir
index 5191bc8..f6d19a2 100644 (file)
@@ -479,11 +479,6 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)\.exists
 sub perl_archive
 {
     my ($self) = @_;
-    if($OBJ) {
-        if ($self->{CAPI}) {
-            return '$(PERL_INC)\perlCAPI$(LIB_EXT)';
-        }
-    }
     return '$(PERL_INC)\\'.$Config{'libperl'};
 }
 
index 42bf416..6fe9339 100644 (file)
@@ -1226,6 +1226,9 @@ currently used by MakeMaker but may be handy in Makefile.PLs.
 
 =item CAPI
 
+[This attribute is obsolete in Perl 5.6.  PERL_OBJECT builds are C-compatible
+by default.]
+
 Switch to force usage of the Perl C API even when compiling for PERL_OBJECT.
 
 Note that this attribute is passed through to any recursive build,
index ac9ea74..e5c7e09 100755 (executable)
@@ -6,7 +6,7 @@ xsubpp - compiler to convert Perl XS code into C code
 
 =head1 SYNOPSIS
 
-B<xsubpp> [B<-v>] [B<-C++>] [B<-except>] [B<-s pattern>] [B<-prototypes>] [B<-noversioncheck>] [B<-nolinenumbers>] [B<-typemap typemap>] [B<-object_capi>]... file.xs
+B<xsubpp> [B<-v>] [B<-C++>] [B<-except>] [B<-s pattern>] [B<-prototypes>] [B<-noversioncheck>] [B<-nolinenumbers>] [B<-typemap typemap>] ... file.xs
 
 =head1 DESCRIPTION
 
@@ -59,11 +59,7 @@ number.
 
 Prevents the inclusion of `#line' directives in the output.
 
-=item B<-object_capi>
-
-Compile code as C in a PERL_OBJECT environment.
-
-back
+=back
 
 =head1 ENVIRONMENT
 
@@ -127,6 +123,7 @@ SWITCH: while (@ARGV and $ARGV[0] =~ /^-./) {
     $WantPrototypes = 1, next SWITCH   if $flag eq 'prototypes';
     $WantVersionChk = 0, next SWITCH   if $flag eq 'noversioncheck';
     $WantVersionChk = 1, next SWITCH   if $flag eq 'versioncheck';
+    # XXX left this in for compat
     $WantCAPI = 1, next SWITCH    if $flag eq 'object_capi';
     $except = " TRY",  next SWITCH     if $flag eq 'except';
     push(@tm,shift),   next SWITCH     if $flag eq 'typemap';
@@ -1261,24 +1258,10 @@ print Q<<"EOF";
 ##endif
 EOF
 
-if ($WantCAPI) {
-print Q<<"EOF";
-##ifdef PERL_CAPI
-#XS(boot__CAPI_entry)
-##else
-EOF
-}
-
 print Q<<"EOF";
 #XS(boot_$Module_cname)
 EOF
 
-if ($WantCAPI) {
-print Q<<"EOF";
-##endif        /* PERL_CAPI */
-EOF
-}
-
 print Q<<"EOF";
 #[[
 #    dXSARGS;
@@ -1317,22 +1300,6 @@ print Q<<"EOF";;
 #
 EOF
 
-if ($WantCAPI) { 
-print Q<<"EOF";
-##ifdef PERL_CAPI
-##define XSCAPI(name) void name(void *pPerl, CV* cv)
-#
-##ifdef __cplusplus
-#extern "C"
-##endif
-#XSCAPI(boot_$Module_cname)
-#[[
-#    boot_CAPI_handler(cv, boot__CAPI_entry, pPerl);
-#]]
-##endif        /* PERL_CAPI */
-EOF
-}
-
 warn("Please specify prototyping behavior for $filename (see perlxs manual)\n") 
     unless $ProtoUsed ;
 &Exit;
index 9a733ea..7fb3d2b 100644 (file)
@@ -56,7 +56,7 @@ sub import {
            # Only ignore "Can't locate" errors from our eval require.
            # Other fatal errors (syntax etc) must be reported.
            die if $@ && $@ !~ /^Can't locate .*? at \(eval /;
-           unless (defined %{"$base\::"}) {
+           unless (%{"$base\::"}) {
                require Carp;
                Carp::croak("Base class package \"$base\" is empty.\n",
                            "\t(Perhaps you need to 'use' the module ",
index 8a6a8bc..dc5a69f 100644 (file)
--- a/malloc.c
+++ b/malloc.c
 #     define dTHX              extern int Perl___notused
 #     define WITH_THX(s)       s
 #  endif
+#  ifndef PERL_GET_INTERP
+#     define PERL_GET_INTERP   PL_curinterp
+#  endif
 #endif
 
 #ifndef MUTEX_LOCK
 
 #ifdef DEBUGGING
 #  undef DEBUG_m
-#  define DEBUG_m(a)  if (PL_curinterp && PL_debug & 128)   a
+#  define DEBUG_m(a)  if (PERL_GET_INTERP && PL_debug & 128)   a
 #endif
 
 /*
index e741aa4..43e29f4 100644 (file)
--- a/objXSUB.h
+++ b/objXSUB.h
 /* Variables */
 
 #undef  PL_Argv
-#define PL_Argv                        (*Perl_IArgv_ptr(pPerl))
+#define PL_Argv                        (*Perl_IArgv_ptr(aTHXo))
 #undef  PL_Cmd
-#define PL_Cmd                 (*Perl_ICmd_ptr(pPerl))
+#define PL_Cmd                 (*Perl_ICmd_ptr(aTHXo))
 #undef  PL_DBcv
-#define PL_DBcv                        (*Perl_IDBcv_ptr(pPerl))
+#define PL_DBcv                        (*Perl_IDBcv_ptr(aTHXo))
 #undef  PL_DBgv
-#define PL_DBgv                        (*Perl_IDBgv_ptr(pPerl))
+#define PL_DBgv                        (*Perl_IDBgv_ptr(aTHXo))
 #undef  PL_DBline
-#define PL_DBline              (*Perl_IDBline_ptr(pPerl))
+#define PL_DBline              (*Perl_IDBline_ptr(aTHXo))
 #undef  PL_DBsignal
-#define PL_DBsignal            (*Perl_IDBsignal_ptr(pPerl))
+#define PL_DBsignal            (*Perl_IDBsignal_ptr(aTHXo))
 #undef  PL_DBsingle
-#define PL_DBsingle            (*Perl_IDBsingle_ptr(pPerl))
+#define PL_DBsingle            (*Perl_IDBsingle_ptr(aTHXo))
 #undef  PL_DBsub
-#define PL_DBsub               (*Perl_IDBsub_ptr(pPerl))
+#define PL_DBsub               (*Perl_IDBsub_ptr(aTHXo))
 #undef  PL_DBtrace
-#define PL_DBtrace             (*Perl_IDBtrace_ptr(pPerl))
+#define PL_DBtrace             (*Perl_IDBtrace_ptr(aTHXo))
 #undef  PL_Dir
-#define PL_Dir                 (*Perl_IDir_ptr(pPerl))
+#define PL_Dir                 (*Perl_IDir_ptr(aTHXo))
 #undef  PL_Env
-#define PL_Env                 (*Perl_IEnv_ptr(pPerl))
+#define PL_Env                 (*Perl_IEnv_ptr(aTHXo))
 #undef  PL_LIO
-#define PL_LIO                 (*Perl_ILIO_ptr(pPerl))
+#define PL_LIO                 (*Perl_ILIO_ptr(aTHXo))
 #undef  PL_Mem
-#define PL_Mem                 (*Perl_IMem_ptr(pPerl))
+#define PL_Mem                 (*Perl_IMem_ptr(aTHXo))
 #undef  PL_Proc
-#define PL_Proc                        (*Perl_IProc_ptr(pPerl))
+#define PL_Proc                        (*Perl_IProc_ptr(aTHXo))
 #undef  PL_Sock
-#define PL_Sock                        (*Perl_ISock_ptr(pPerl))
+#define PL_Sock                        (*Perl_ISock_ptr(aTHXo))
 #undef  PL_StdIO
-#define PL_StdIO               (*Perl_IStdIO_ptr(pPerl))
+#define PL_StdIO               (*Perl_IStdIO_ptr(aTHXo))
 #undef  PL_amagic_generation
-#define PL_amagic_generation   (*Perl_Iamagic_generation_ptr(pPerl))
+#define PL_amagic_generation   (*Perl_Iamagic_generation_ptr(aTHXo))
 #undef  PL_ampergv
-#define PL_ampergv             (*Perl_Iampergv_ptr(pPerl))
+#define PL_ampergv             (*Perl_Iampergv_ptr(aTHXo))
 #undef  PL_an
-#define PL_an                  (*Perl_Ian_ptr(pPerl))
+#define PL_an                  (*Perl_Ian_ptr(aTHXo))
 #undef  PL_archpat_auto
-#define PL_archpat_auto                (*Perl_Iarchpat_auto_ptr(pPerl))
+#define PL_archpat_auto                (*Perl_Iarchpat_auto_ptr(aTHXo))
 #undef  PL_argvgv
-#define PL_argvgv              (*Perl_Iargvgv_ptr(pPerl))
+#define PL_argvgv              (*Perl_Iargvgv_ptr(aTHXo))
 #undef  PL_argvoutgv
-#define PL_argvoutgv           (*Perl_Iargvoutgv_ptr(pPerl))
+#define PL_argvoutgv           (*Perl_Iargvoutgv_ptr(aTHXo))
 #undef  PL_basetime
-#define PL_basetime            (*Perl_Ibasetime_ptr(pPerl))
+#define PL_basetime            (*Perl_Ibasetime_ptr(aTHXo))
 #undef  PL_beginav
-#define PL_beginav             (*Perl_Ibeginav_ptr(pPerl))
+#define PL_beginav             (*Perl_Ibeginav_ptr(aTHXo))
 #undef  PL_bitcount
-#define PL_bitcount            (*Perl_Ibitcount_ptr(pPerl))
+#define PL_bitcount            (*Perl_Ibitcount_ptr(aTHXo))
 #undef  PL_bufend
-#define PL_bufend              (*Perl_Ibufend_ptr(pPerl))
+#define PL_bufend              (*Perl_Ibufend_ptr(aTHXo))
 #undef  PL_bufptr
-#define PL_bufptr              (*Perl_Ibufptr_ptr(pPerl))
+#define PL_bufptr              (*Perl_Ibufptr_ptr(aTHXo))
 #undef  PL_cddir
-#define PL_cddir               (*Perl_Icddir_ptr(pPerl))
+#define PL_cddir               (*Perl_Icddir_ptr(aTHXo))
 #undef  PL_collation_ix
-#define PL_collation_ix                (*Perl_Icollation_ix_ptr(pPerl))
+#define PL_collation_ix                (*Perl_Icollation_ix_ptr(aTHXo))
 #undef  PL_collation_name
-#define PL_collation_name      (*Perl_Icollation_name_ptr(pPerl))
+#define PL_collation_name      (*Perl_Icollation_name_ptr(aTHXo))
 #undef  PL_collation_standard
-#define PL_collation_standard  (*Perl_Icollation_standard_ptr(pPerl))
+#define PL_collation_standard  (*Perl_Icollation_standard_ptr(aTHXo))
 #undef  PL_collxfrm_base
-#define PL_collxfrm_base       (*Perl_Icollxfrm_base_ptr(pPerl))
+#define PL_collxfrm_base       (*Perl_Icollxfrm_base_ptr(aTHXo))
 #undef  PL_collxfrm_mult
-#define PL_collxfrm_mult       (*Perl_Icollxfrm_mult_ptr(pPerl))
+#define PL_collxfrm_mult       (*Perl_Icollxfrm_mult_ptr(aTHXo))
 #undef  PL_compcv
-#define PL_compcv              (*Perl_Icompcv_ptr(pPerl))
+#define PL_compcv              (*Perl_Icompcv_ptr(aTHXo))
 #undef  PL_compiling
-#define PL_compiling           (*Perl_Icompiling_ptr(pPerl))
+#define PL_compiling           (*Perl_Icompiling_ptr(aTHXo))
 #undef  PL_comppad
-#define PL_comppad             (*Perl_Icomppad_ptr(pPerl))
+#define PL_comppad             (*Perl_Icomppad_ptr(aTHXo))
 #undef  PL_comppad_name
-#define PL_comppad_name                (*Perl_Icomppad_name_ptr(pPerl))
+#define PL_comppad_name                (*Perl_Icomppad_name_ptr(aTHXo))
 #undef  PL_comppad_name_fill
-#define PL_comppad_name_fill   (*Perl_Icomppad_name_fill_ptr(pPerl))
+#define PL_comppad_name_fill   (*Perl_Icomppad_name_fill_ptr(aTHXo))
 #undef  PL_comppad_name_floor
-#define PL_comppad_name_floor  (*Perl_Icomppad_name_floor_ptr(pPerl))
+#define PL_comppad_name_floor  (*Perl_Icomppad_name_floor_ptr(aTHXo))
 #undef  PL_cop_seqmax
-#define PL_cop_seqmax          (*Perl_Icop_seqmax_ptr(pPerl))
+#define PL_cop_seqmax          (*Perl_Icop_seqmax_ptr(aTHXo))
 #undef  PL_copline
-#define PL_copline             (*Perl_Icopline_ptr(pPerl))
+#define PL_copline             (*Perl_Icopline_ptr(aTHXo))
 #undef  PL_cred_mutex
-#define PL_cred_mutex          (*Perl_Icred_mutex_ptr(pPerl))
+#define PL_cred_mutex          (*Perl_Icred_mutex_ptr(aTHXo))
 #undef  PL_cryptseen
-#define PL_cryptseen           (*Perl_Icryptseen_ptr(pPerl))
+#define PL_cryptseen           (*Perl_Icryptseen_ptr(aTHXo))
 #undef  PL_cshlen
-#define PL_cshlen              (*Perl_Icshlen_ptr(pPerl))
+#define PL_cshlen              (*Perl_Icshlen_ptr(aTHXo))
 #undef  PL_cshname
-#define PL_cshname             (*Perl_Icshname_ptr(pPerl))
+#define PL_cshname             (*Perl_Icshname_ptr(aTHXo))
 #undef  PL_curcopdb
-#define PL_curcopdb            (*Perl_Icurcopdb_ptr(pPerl))
+#define PL_curcopdb            (*Perl_Icurcopdb_ptr(aTHXo))
 #undef  PL_curstname
-#define PL_curstname           (*Perl_Icurstname_ptr(pPerl))
+#define PL_curstname           (*Perl_Icurstname_ptr(aTHXo))
 #undef  PL_curthr
-#define PL_curthr              (*Perl_Icurthr_ptr(pPerl))
+#define PL_curthr              (*Perl_Icurthr_ptr(aTHXo))
 #undef  PL_dbargs
-#define PL_dbargs              (*Perl_Idbargs_ptr(pPerl))
+#define PL_dbargs              (*Perl_Idbargs_ptr(aTHXo))
 #undef  PL_debdelim
-#define PL_debdelim            (*Perl_Idebdelim_ptr(pPerl))
+#define PL_debdelim            (*Perl_Idebdelim_ptr(aTHXo))
 #undef  PL_debname
-#define PL_debname             (*Perl_Idebname_ptr(pPerl))
+#define PL_debname             (*Perl_Idebname_ptr(aTHXo))
 #undef  PL_debstash
-#define PL_debstash            (*Perl_Idebstash_ptr(pPerl))
+#define PL_debstash            (*Perl_Idebstash_ptr(aTHXo))
 #undef  PL_debug
-#define PL_debug               (*Perl_Idebug_ptr(pPerl))
+#define PL_debug               (*Perl_Idebug_ptr(aTHXo))
 #undef  PL_defgv
-#define PL_defgv               (*Perl_Idefgv_ptr(pPerl))
+#define PL_defgv               (*Perl_Idefgv_ptr(aTHXo))
 #undef  PL_diehook
-#define PL_diehook             (*Perl_Idiehook_ptr(pPerl))
+#define PL_diehook             (*Perl_Idiehook_ptr(aTHXo))
 #undef  PL_dlevel
-#define PL_dlevel              (*Perl_Idlevel_ptr(pPerl))
+#define PL_dlevel              (*Perl_Idlevel_ptr(aTHXo))
 #undef  PL_dlmax
-#define PL_dlmax               (*Perl_Idlmax_ptr(pPerl))
+#define PL_dlmax               (*Perl_Idlmax_ptr(aTHXo))
 #undef  PL_doextract
-#define PL_doextract           (*Perl_Idoextract_ptr(pPerl))
+#define PL_doextract           (*Perl_Idoextract_ptr(aTHXo))
 #undef  PL_doswitches
-#define PL_doswitches          (*Perl_Idoswitches_ptr(pPerl))
+#define PL_doswitches          (*Perl_Idoswitches_ptr(aTHXo))
 #undef  PL_dowarn
-#define PL_dowarn              (*Perl_Idowarn_ptr(pPerl))
+#define PL_dowarn              (*Perl_Idowarn_ptr(aTHXo))
 #undef  PL_e_script
-#define PL_e_script            (*Perl_Ie_script_ptr(pPerl))
+#define PL_e_script            (*Perl_Ie_script_ptr(aTHXo))
 #undef  PL_efloatbuf
-#define PL_efloatbuf           (*Perl_Iefloatbuf_ptr(pPerl))
+#define PL_efloatbuf           (*Perl_Iefloatbuf_ptr(aTHXo))
 #undef  PL_efloatsize
-#define PL_efloatsize          (*Perl_Iefloatsize_ptr(pPerl))
+#define PL_efloatsize          (*Perl_Iefloatsize_ptr(aTHXo))
 #undef  PL_egid
-#define PL_egid                        (*Perl_Iegid_ptr(pPerl))
+#define PL_egid                        (*Perl_Iegid_ptr(aTHXo))
 #undef  PL_endav
-#define PL_endav               (*Perl_Iendav_ptr(pPerl))
+#define PL_endav               (*Perl_Iendav_ptr(aTHXo))
 #undef  PL_envgv
-#define PL_envgv               (*Perl_Ienvgv_ptr(pPerl))
+#define PL_envgv               (*Perl_Ienvgv_ptr(aTHXo))
 #undef  PL_errgv
-#define PL_errgv               (*Perl_Ierrgv_ptr(pPerl))
+#define PL_errgv               (*Perl_Ierrgv_ptr(aTHXo))
 #undef  PL_error_count
-#define PL_error_count         (*Perl_Ierror_count_ptr(pPerl))
+#define PL_error_count         (*Perl_Ierror_count_ptr(aTHXo))
 #undef  PL_euid
-#define PL_euid                        (*Perl_Ieuid_ptr(pPerl))
+#define PL_euid                        (*Perl_Ieuid_ptr(aTHXo))
 #undef  PL_eval_cond
-#define PL_eval_cond           (*Perl_Ieval_cond_ptr(pPerl))
+#define PL_eval_cond           (*Perl_Ieval_cond_ptr(aTHXo))
 #undef  PL_eval_mutex
-#define PL_eval_mutex          (*Perl_Ieval_mutex_ptr(pPerl))
+#define PL_eval_mutex          (*Perl_Ieval_mutex_ptr(aTHXo))
 #undef  PL_eval_owner
-#define PL_eval_owner          (*Perl_Ieval_owner_ptr(pPerl))
+#define PL_eval_owner          (*Perl_Ieval_owner_ptr(aTHXo))
 #undef  PL_eval_root
-#define PL_eval_root           (*Perl_Ieval_root_ptr(pPerl))
+#define PL_eval_root           (*Perl_Ieval_root_ptr(aTHXo))
 #undef  PL_eval_start
-#define PL_eval_start          (*Perl_Ieval_start_ptr(pPerl))
+#define PL_eval_start          (*Perl_Ieval_start_ptr(aTHXo))
 #undef  PL_evalseq
-#define PL_evalseq             (*Perl_Ievalseq_ptr(pPerl))
+#define PL_evalseq             (*Perl_Ievalseq_ptr(aTHXo))
 #undef  PL_exitlist
-#define PL_exitlist            (*Perl_Iexitlist_ptr(pPerl))
+#define PL_exitlist            (*Perl_Iexitlist_ptr(aTHXo))
 #undef  PL_exitlistlen
-#define PL_exitlistlen         (*Perl_Iexitlistlen_ptr(pPerl))
+#define PL_exitlistlen         (*Perl_Iexitlistlen_ptr(aTHXo))
 #undef  PL_expect
-#define PL_expect              (*Perl_Iexpect_ptr(pPerl))
+#define PL_expect              (*Perl_Iexpect_ptr(aTHXo))
 #undef  PL_fdpid
-#define PL_fdpid               (*Perl_Ifdpid_ptr(pPerl))
+#define PL_fdpid               (*Perl_Ifdpid_ptr(aTHXo))
 #undef  PL_filemode
-#define PL_filemode            (*Perl_Ifilemode_ptr(pPerl))
+#define PL_filemode            (*Perl_Ifilemode_ptr(aTHXo))
 #undef  PL_filter_debug
-#define PL_filter_debug                (*Perl_Ifilter_debug_ptr(pPerl))
+#define PL_filter_debug                (*Perl_Ifilter_debug_ptr(aTHXo))
 #undef  PL_forkprocess
-#define PL_forkprocess         (*Perl_Iforkprocess_ptr(pPerl))
+#define PL_forkprocess         (*Perl_Iforkprocess_ptr(aTHXo))
 #undef  PL_formfeed
-#define PL_formfeed            (*Perl_Iformfeed_ptr(pPerl))
+#define PL_formfeed            (*Perl_Iformfeed_ptr(aTHXo))
 #undef  PL_generation
-#define PL_generation          (*Perl_Igeneration_ptr(pPerl))
+#define PL_generation          (*Perl_Igeneration_ptr(aTHXo))
 #undef  PL_gensym
-#define PL_gensym              (*Perl_Igensym_ptr(pPerl))
+#define PL_gensym              (*Perl_Igensym_ptr(aTHXo))
 #undef  PL_gid
-#define PL_gid                 (*Perl_Igid_ptr(pPerl))
+#define PL_gid                 (*Perl_Igid_ptr(aTHXo))
 #undef  PL_glob_index
-#define PL_glob_index          (*Perl_Iglob_index_ptr(pPerl))
+#define PL_glob_index          (*Perl_Iglob_index_ptr(aTHXo))
 #undef  PL_globalstash
-#define PL_globalstash         (*Perl_Iglobalstash_ptr(pPerl))
+#define PL_globalstash         (*Perl_Iglobalstash_ptr(aTHXo))
 #undef  PL_he_root
-#define PL_he_root             (*Perl_Ihe_root_ptr(pPerl))
+#define PL_he_root             (*Perl_Ihe_root_ptr(aTHXo))
 #undef  PL_hintgv
-#define PL_hintgv              (*Perl_Ihintgv_ptr(pPerl))
+#define PL_hintgv              (*Perl_Ihintgv_ptr(aTHXo))
 #undef  PL_hints
-#define PL_hints               (*Perl_Ihints_ptr(pPerl))
+#define PL_hints               (*Perl_Ihints_ptr(aTHXo))
 #undef  PL_in_clean_all
-#define PL_in_clean_all                (*Perl_Iin_clean_all_ptr(pPerl))
+#define PL_in_clean_all                (*Perl_Iin_clean_all_ptr(aTHXo))
 #undef  PL_in_clean_objs
-#define PL_in_clean_objs       (*Perl_Iin_clean_objs_ptr(pPerl))
+#define PL_in_clean_objs       (*Perl_Iin_clean_objs_ptr(aTHXo))
 #undef  PL_in_my
-#define PL_in_my               (*Perl_Iin_my_ptr(pPerl))
+#define PL_in_my               (*Perl_Iin_my_ptr(aTHXo))
 #undef  PL_in_my_stash
-#define PL_in_my_stash         (*Perl_Iin_my_stash_ptr(pPerl))
+#define PL_in_my_stash         (*Perl_Iin_my_stash_ptr(aTHXo))
 #undef  PL_incgv
-#define PL_incgv               (*Perl_Iincgv_ptr(pPerl))
+#define PL_incgv               (*Perl_Iincgv_ptr(aTHXo))
 #undef  PL_initav
-#define PL_initav              (*Perl_Iinitav_ptr(pPerl))
+#define PL_initav              (*Perl_Iinitav_ptr(aTHXo))
 #undef  PL_inplace
-#define PL_inplace             (*Perl_Iinplace_ptr(pPerl))
+#define PL_inplace             (*Perl_Iinplace_ptr(aTHXo))
 #undef  PL_last_lop
-#define PL_last_lop            (*Perl_Ilast_lop_ptr(pPerl))
+#define PL_last_lop            (*Perl_Ilast_lop_ptr(aTHXo))
 #undef  PL_last_lop_op
-#define PL_last_lop_op         (*Perl_Ilast_lop_op_ptr(pPerl))
+#define PL_last_lop_op         (*Perl_Ilast_lop_op_ptr(aTHXo))
 #undef  PL_last_swash_hv
-#define PL_last_swash_hv       (*Perl_Ilast_swash_hv_ptr(pPerl))
+#define PL_last_swash_hv       (*Perl_Ilast_swash_hv_ptr(aTHXo))
 #undef  PL_last_swash_key
-#define PL_last_swash_key      (*Perl_Ilast_swash_key_ptr(pPerl))
+#define PL_last_swash_key      (*Perl_Ilast_swash_key_ptr(aTHXo))
 #undef  PL_last_swash_klen
-#define PL_last_swash_klen     (*Perl_Ilast_swash_klen_ptr(pPerl))
+#define PL_last_swash_klen     (*Perl_Ilast_swash_klen_ptr(aTHXo))
 #undef  PL_last_swash_slen
-#define PL_last_swash_slen     (*Perl_Ilast_swash_slen_ptr(pPerl))
+#define PL_last_swash_slen     (*Perl_Ilast_swash_slen_ptr(aTHXo))
 #undef  PL_last_swash_tmps
-#define PL_last_swash_tmps     (*Perl_Ilast_swash_tmps_ptr(pPerl))
+#define PL_last_swash_tmps     (*Perl_Ilast_swash_tmps_ptr(aTHXo))
 #undef  PL_last_uni
-#define PL_last_uni            (*Perl_Ilast_uni_ptr(pPerl))
+#define PL_last_uni            (*Perl_Ilast_uni_ptr(aTHXo))
 #undef  PL_lastfd
-#define PL_lastfd              (*Perl_Ilastfd_ptr(pPerl))
+#define PL_lastfd              (*Perl_Ilastfd_ptr(aTHXo))
 #undef  PL_lastsize
-#define PL_lastsize            (*Perl_Ilastsize_ptr(pPerl))
+#define PL_lastsize            (*Perl_Ilastsize_ptr(aTHXo))
 #undef  PL_lastspbase
-#define PL_lastspbase          (*Perl_Ilastspbase_ptr(pPerl))
+#define PL_lastspbase          (*Perl_Ilastspbase_ptr(aTHXo))
 #undef  PL_laststatval
-#define PL_laststatval         (*Perl_Ilaststatval_ptr(pPerl))
+#define PL_laststatval         (*Perl_Ilaststatval_ptr(aTHXo))
 #undef  PL_laststype
-#define PL_laststype           (*Perl_Ilaststype_ptr(pPerl))
+#define PL_laststype           (*Perl_Ilaststype_ptr(aTHXo))
 #undef  PL_leftgv
-#define PL_leftgv              (*Perl_Ileftgv_ptr(pPerl))
+#define PL_leftgv              (*Perl_Ileftgv_ptr(aTHXo))
 #undef  PL_lex_brackets
-#define PL_lex_brackets                (*Perl_Ilex_brackets_ptr(pPerl))
+#define PL_lex_brackets                (*Perl_Ilex_brackets_ptr(aTHXo))
 #undef  PL_lex_brackstack
-#define PL_lex_brackstack      (*Perl_Ilex_brackstack_ptr(pPerl))
+#define PL_lex_brackstack      (*Perl_Ilex_brackstack_ptr(aTHXo))
 #undef  PL_lex_casemods
-#define PL_lex_casemods                (*Perl_Ilex_casemods_ptr(pPerl))
+#define PL_lex_casemods                (*Perl_Ilex_casemods_ptr(aTHXo))
 #undef  PL_lex_casestack
-#define PL_lex_casestack       (*Perl_Ilex_casestack_ptr(pPerl))
+#define PL_lex_casestack       (*Perl_Ilex_casestack_ptr(aTHXo))
 #undef  PL_lex_defer
-#define PL_lex_defer           (*Perl_Ilex_defer_ptr(pPerl))
+#define PL_lex_defer           (*Perl_Ilex_defer_ptr(aTHXo))
 #undef  PL_lex_dojoin
-#define PL_lex_dojoin          (*Perl_Ilex_dojoin_ptr(pPerl))
+#define PL_lex_dojoin          (*Perl_Ilex_dojoin_ptr(aTHXo))
 #undef  PL_lex_expect
-#define PL_lex_expect          (*Perl_Ilex_expect_ptr(pPerl))
+#define PL_lex_expect          (*Perl_Ilex_expect_ptr(aTHXo))
 #undef  PL_lex_fakebrack
-#define PL_lex_fakebrack       (*Perl_Ilex_fakebrack_ptr(pPerl))
+#define PL_lex_fakebrack       (*Perl_Ilex_fakebrack_ptr(aTHXo))
 #undef  PL_lex_formbrack
-#define PL_lex_formbrack       (*Perl_Ilex_formbrack_ptr(pPerl))
+#define PL_lex_formbrack       (*Perl_Ilex_formbrack_ptr(aTHXo))
 #undef  PL_lex_inpat
-#define PL_lex_inpat           (*Perl_Ilex_inpat_ptr(pPerl))
+#define PL_lex_inpat           (*Perl_Ilex_inpat_ptr(aTHXo))
 #undef  PL_lex_inwhat
-#define PL_lex_inwhat          (*Perl_Ilex_inwhat_ptr(pPerl))
+#define PL_lex_inwhat          (*Perl_Ilex_inwhat_ptr(aTHXo))
 #undef  PL_lex_op
-#define PL_lex_op              (*Perl_Ilex_op_ptr(pPerl))
+#define PL_lex_op              (*Perl_Ilex_op_ptr(aTHXo))
 #undef  PL_lex_repl
-#define PL_lex_repl            (*Perl_Ilex_repl_ptr(pPerl))
+#define PL_lex_repl            (*Perl_Ilex_repl_ptr(aTHXo))
 #undef  PL_lex_starts
-#define PL_lex_starts          (*Perl_Ilex_starts_ptr(pPerl))
+#define PL_lex_starts          (*Perl_Ilex_starts_ptr(aTHXo))
 #undef  PL_lex_state
-#define PL_lex_state           (*Perl_Ilex_state_ptr(pPerl))
+#define PL_lex_state           (*Perl_Ilex_state_ptr(aTHXo))
 #undef  PL_lex_stuff
-#define PL_lex_stuff           (*Perl_Ilex_stuff_ptr(pPerl))
+#define PL_lex_stuff           (*Perl_Ilex_stuff_ptr(aTHXo))
 #undef  PL_lineary
-#define PL_lineary             (*Perl_Ilineary_ptr(pPerl))
+#define PL_lineary             (*Perl_Ilineary_ptr(aTHXo))
 #undef  PL_linestart
-#define PL_linestart           (*Perl_Ilinestart_ptr(pPerl))
+#define PL_linestart           (*Perl_Ilinestart_ptr(aTHXo))
 #undef  PL_linestr
-#define PL_linestr             (*Perl_Ilinestr_ptr(pPerl))
+#define PL_linestr             (*Perl_Ilinestr_ptr(aTHXo))
 #undef  PL_localpatches
-#define PL_localpatches                (*Perl_Ilocalpatches_ptr(pPerl))
+#define PL_localpatches                (*Perl_Ilocalpatches_ptr(aTHXo))
 #undef  PL_main_cv
-#define PL_main_cv             (*Perl_Imain_cv_ptr(pPerl))
+#define PL_main_cv             (*Perl_Imain_cv_ptr(aTHXo))
 #undef  PL_main_root
-#define PL_main_root           (*Perl_Imain_root_ptr(pPerl))
+#define PL_main_root           (*Perl_Imain_root_ptr(aTHXo))
 #undef  PL_main_start
-#define PL_main_start          (*Perl_Imain_start_ptr(pPerl))
+#define PL_main_start          (*Perl_Imain_start_ptr(aTHXo))
 #undef  PL_malloc_mutex
-#define PL_malloc_mutex                (*Perl_Imalloc_mutex_ptr(pPerl))
+#define PL_malloc_mutex                (*Perl_Imalloc_mutex_ptr(aTHXo))
 #undef  PL_max_intro_pending
-#define PL_max_intro_pending   (*Perl_Imax_intro_pending_ptr(pPerl))
+#define PL_max_intro_pending   (*Perl_Imax_intro_pending_ptr(aTHXo))
 #undef  PL_maxo
-#define PL_maxo                        (*Perl_Imaxo_ptr(pPerl))
+#define PL_maxo                        (*Perl_Imaxo_ptr(aTHXo))
 #undef  PL_maxsysfd
-#define PL_maxsysfd            (*Perl_Imaxsysfd_ptr(pPerl))
+#define PL_maxsysfd            (*Perl_Imaxsysfd_ptr(aTHXo))
 #undef  PL_mess_sv
-#define PL_mess_sv             (*Perl_Imess_sv_ptr(pPerl))
+#define PL_mess_sv             (*Perl_Imess_sv_ptr(aTHXo))
 #undef  PL_min_intro_pending
-#define PL_min_intro_pending   (*Perl_Imin_intro_pending_ptr(pPerl))
+#define PL_min_intro_pending   (*Perl_Imin_intro_pending_ptr(aTHXo))
 #undef  PL_minus_F
-#define PL_minus_F             (*Perl_Iminus_F_ptr(pPerl))
+#define PL_minus_F             (*Perl_Iminus_F_ptr(aTHXo))
 #undef  PL_minus_a
-#define PL_minus_a             (*Perl_Iminus_a_ptr(pPerl))
+#define PL_minus_a             (*Perl_Iminus_a_ptr(aTHXo))
 #undef  PL_minus_c
-#define PL_minus_c             (*Perl_Iminus_c_ptr(pPerl))
+#define PL_minus_c             (*Perl_Iminus_c_ptr(aTHXo))
 #undef  PL_minus_l
-#define PL_minus_l             (*Perl_Iminus_l_ptr(pPerl))
+#define PL_minus_l             (*Perl_Iminus_l_ptr(aTHXo))
 #undef  PL_minus_n
-#define PL_minus_n             (*Perl_Iminus_n_ptr(pPerl))
+#define PL_minus_n             (*Perl_Iminus_n_ptr(aTHXo))
 #undef  PL_minus_p
-#define PL_minus_p             (*Perl_Iminus_p_ptr(pPerl))
+#define PL_minus_p             (*Perl_Iminus_p_ptr(aTHXo))
 #undef  PL_modglobal
-#define PL_modglobal           (*Perl_Imodglobal_ptr(pPerl))
+#define PL_modglobal           (*Perl_Imodglobal_ptr(aTHXo))
 #undef  PL_multi_close
-#define PL_multi_close         (*Perl_Imulti_close_ptr(pPerl))
+#define PL_multi_close         (*Perl_Imulti_close_ptr(aTHXo))
 #undef  PL_multi_end
-#define PL_multi_end           (*Perl_Imulti_end_ptr(pPerl))
+#define PL_multi_end           (*Perl_Imulti_end_ptr(aTHXo))
 #undef  PL_multi_open
-#define PL_multi_open          (*Perl_Imulti_open_ptr(pPerl))
+#define PL_multi_open          (*Perl_Imulti_open_ptr(aTHXo))
 #undef  PL_multi_start
-#define PL_multi_start         (*Perl_Imulti_start_ptr(pPerl))
+#define PL_multi_start         (*Perl_Imulti_start_ptr(aTHXo))
 #undef  PL_multiline
-#define PL_multiline           (*Perl_Imultiline_ptr(pPerl))
+#define PL_multiline           (*Perl_Imultiline_ptr(aTHXo))
 #undef  PL_mystrk
-#define PL_mystrk              (*Perl_Imystrk_ptr(pPerl))
+#define PL_mystrk              (*Perl_Imystrk_ptr(aTHXo))
 #undef  PL_nexttoke
-#define PL_nexttoke            (*Perl_Inexttoke_ptr(pPerl))
+#define PL_nexttoke            (*Perl_Inexttoke_ptr(aTHXo))
 #undef  PL_nexttype
-#define PL_nexttype            (*Perl_Inexttype_ptr(pPerl))
+#define PL_nexttype            (*Perl_Inexttype_ptr(aTHXo))
 #undef  PL_nextval
-#define PL_nextval             (*Perl_Inextval_ptr(pPerl))
+#define PL_nextval             (*Perl_Inextval_ptr(aTHXo))
 #undef  PL_nice_chunk
-#define PL_nice_chunk          (*Perl_Inice_chunk_ptr(pPerl))
+#define PL_nice_chunk          (*Perl_Inice_chunk_ptr(aTHXo))
 #undef  PL_nice_chunk_size
-#define PL_nice_chunk_size     (*Perl_Inice_chunk_size_ptr(pPerl))
+#define PL_nice_chunk_size     (*Perl_Inice_chunk_size_ptr(aTHXo))
 #undef  PL_nomemok
-#define PL_nomemok             (*Perl_Inomemok_ptr(pPerl))
+#define PL_nomemok             (*Perl_Inomemok_ptr(aTHXo))
 #undef  PL_nthreads
-#define PL_nthreads            (*Perl_Inthreads_ptr(pPerl))
+#define PL_nthreads            (*Perl_Inthreads_ptr(aTHXo))
 #undef  PL_nthreads_cond
-#define PL_nthreads_cond       (*Perl_Inthreads_cond_ptr(pPerl))
+#define PL_nthreads_cond       (*Perl_Inthreads_cond_ptr(aTHXo))
 #undef  PL_numeric_local
-#define PL_numeric_local       (*Perl_Inumeric_local_ptr(pPerl))
+#define PL_numeric_local       (*Perl_Inumeric_local_ptr(aTHXo))
 #undef  PL_numeric_name
-#define PL_numeric_name                (*Perl_Inumeric_name_ptr(pPerl))
+#define PL_numeric_name                (*Perl_Inumeric_name_ptr(aTHXo))
 #undef  PL_numeric_radix
-#define PL_numeric_radix       (*Perl_Inumeric_radix_ptr(pPerl))
+#define PL_numeric_radix       (*Perl_Inumeric_radix_ptr(aTHXo))
 #undef  PL_numeric_standard
-#define PL_numeric_standard    (*Perl_Inumeric_standard_ptr(pPerl))
+#define PL_numeric_standard    (*Perl_Inumeric_standard_ptr(aTHXo))
 #undef  PL_ofmt
-#define PL_ofmt                        (*Perl_Iofmt_ptr(pPerl))
+#define PL_ofmt                        (*Perl_Iofmt_ptr(aTHXo))
 #undef  PL_oldbufptr
-#define PL_oldbufptr           (*Perl_Ioldbufptr_ptr(pPerl))
+#define PL_oldbufptr           (*Perl_Ioldbufptr_ptr(aTHXo))
 #undef  PL_oldlastpm
-#define PL_oldlastpm           (*Perl_Ioldlastpm_ptr(pPerl))
+#define PL_oldlastpm           (*Perl_Ioldlastpm_ptr(aTHXo))
 #undef  PL_oldname
-#define PL_oldname             (*Perl_Ioldname_ptr(pPerl))
+#define PL_oldname             (*Perl_Ioldname_ptr(aTHXo))
 #undef  PL_oldoldbufptr
-#define PL_oldoldbufptr                (*Perl_Ioldoldbufptr_ptr(pPerl))
+#define PL_oldoldbufptr                (*Perl_Ioldoldbufptr_ptr(aTHXo))
 #undef  PL_op_mask
-#define PL_op_mask             (*Perl_Iop_mask_ptr(pPerl))
+#define PL_op_mask             (*Perl_Iop_mask_ptr(aTHXo))
 #undef  PL_op_seqmax
-#define PL_op_seqmax           (*Perl_Iop_seqmax_ptr(pPerl))
+#define PL_op_seqmax           (*Perl_Iop_seqmax_ptr(aTHXo))
 #undef  PL_origalen
-#define PL_origalen            (*Perl_Iorigalen_ptr(pPerl))
+#define PL_origalen            (*Perl_Iorigalen_ptr(aTHXo))
 #undef  PL_origargc
-#define PL_origargc            (*Perl_Iorigargc_ptr(pPerl))
+#define PL_origargc            (*Perl_Iorigargc_ptr(aTHXo))
 #undef  PL_origargv
-#define PL_origargv            (*Perl_Iorigargv_ptr(pPerl))
+#define PL_origargv            (*Perl_Iorigargv_ptr(aTHXo))
 #undef  PL_origenviron
-#define PL_origenviron         (*Perl_Iorigenviron_ptr(pPerl))
+#define PL_origenviron         (*Perl_Iorigenviron_ptr(aTHXo))
 #undef  PL_origfilename
-#define PL_origfilename                (*Perl_Iorigfilename_ptr(pPerl))
+#define PL_origfilename                (*Perl_Iorigfilename_ptr(aTHXo))
 #undef  PL_ors
-#define PL_ors                 (*Perl_Iors_ptr(pPerl))
+#define PL_ors                 (*Perl_Iors_ptr(aTHXo))
 #undef  PL_orslen
-#define PL_orslen              (*Perl_Iorslen_ptr(pPerl))
+#define PL_orslen              (*Perl_Iorslen_ptr(aTHXo))
 #undef  PL_osname
-#define PL_osname              (*Perl_Iosname_ptr(pPerl))
+#define PL_osname              (*Perl_Iosname_ptr(aTHXo))
 #undef  PL_pad_reset_pending
-#define PL_pad_reset_pending   (*Perl_Ipad_reset_pending_ptr(pPerl))
+#define PL_pad_reset_pending   (*Perl_Ipad_reset_pending_ptr(aTHXo))
 #undef  PL_padix
-#define PL_padix               (*Perl_Ipadix_ptr(pPerl))
+#define PL_padix               (*Perl_Ipadix_ptr(aTHXo))
 #undef  PL_padix_floor
-#define PL_padix_floor         (*Perl_Ipadix_floor_ptr(pPerl))
+#define PL_padix_floor         (*Perl_Ipadix_floor_ptr(aTHXo))
 #undef  PL_parsehook
-#define PL_parsehook           (*Perl_Iparsehook_ptr(pPerl))
+#define PL_parsehook           (*Perl_Iparsehook_ptr(aTHXo))
 #undef  PL_patchlevel
-#define PL_patchlevel          (*Perl_Ipatchlevel_ptr(pPerl))
+#define PL_patchlevel          (*Perl_Ipatchlevel_ptr(aTHXo))
 #undef  PL_pending_ident
-#define PL_pending_ident       (*Perl_Ipending_ident_ptr(pPerl))
+#define PL_pending_ident       (*Perl_Ipending_ident_ptr(aTHXo))
 #undef  PL_perl_destruct_level
-#define PL_perl_destruct_level (*Perl_Iperl_destruct_level_ptr(pPerl))
+#define PL_perl_destruct_level (*Perl_Iperl_destruct_level_ptr(aTHXo))
 #undef  PL_perldb
-#define PL_perldb              (*Perl_Iperldb_ptr(pPerl))
+#define PL_perldb              (*Perl_Iperldb_ptr(aTHXo))
 #undef  PL_pidstatus
-#define PL_pidstatus           (*Perl_Ipidstatus_ptr(pPerl))
+#define PL_pidstatus           (*Perl_Ipidstatus_ptr(aTHXo))
 #undef  PL_preambleav
-#define PL_preambleav          (*Perl_Ipreambleav_ptr(pPerl))
+#define PL_preambleav          (*Perl_Ipreambleav_ptr(aTHXo))
 #undef  PL_preambled
-#define PL_preambled           (*Perl_Ipreambled_ptr(pPerl))
+#define PL_preambled           (*Perl_Ipreambled_ptr(aTHXo))
 #undef  PL_preprocess
-#define PL_preprocess          (*Perl_Ipreprocess_ptr(pPerl))
+#define PL_preprocess          (*Perl_Ipreprocess_ptr(aTHXo))
 #undef  PL_profiledata
-#define PL_profiledata         (*Perl_Iprofiledata_ptr(pPerl))
+#define PL_profiledata         (*Perl_Iprofiledata_ptr(aTHXo))
 #undef  PL_replgv
-#define PL_replgv              (*Perl_Ireplgv_ptr(pPerl))
+#define PL_replgv              (*Perl_Ireplgv_ptr(aTHXo))
 #undef  PL_rightgv
-#define PL_rightgv             (*Perl_Irightgv_ptr(pPerl))
+#define PL_rightgv             (*Perl_Irightgv_ptr(aTHXo))
 #undef  PL_rsfp
-#define PL_rsfp                        (*Perl_Irsfp_ptr(pPerl))
+#define PL_rsfp                        (*Perl_Irsfp_ptr(aTHXo))
 #undef  PL_rsfp_filters
-#define PL_rsfp_filters                (*Perl_Irsfp_filters_ptr(pPerl))
+#define PL_rsfp_filters                (*Perl_Irsfp_filters_ptr(aTHXo))
 #undef  PL_runops
-#define PL_runops              (*Perl_Irunops_ptr(pPerl))
+#define PL_runops              (*Perl_Irunops_ptr(aTHXo))
 #undef  PL_sawampersand
-#define PL_sawampersand                (*Perl_Isawampersand_ptr(pPerl))
+#define PL_sawampersand                (*Perl_Isawampersand_ptr(aTHXo))
 #undef  PL_sawstudy
-#define PL_sawstudy            (*Perl_Isawstudy_ptr(pPerl))
+#define PL_sawstudy            (*Perl_Isawstudy_ptr(aTHXo))
 #undef  PL_sawvec
-#define PL_sawvec              (*Perl_Isawvec_ptr(pPerl))
+#define PL_sawvec              (*Perl_Isawvec_ptr(aTHXo))
 #undef  PL_sh_path
-#define PL_sh_path             (*Perl_Ish_path_ptr(pPerl))
+#define PL_sh_path             (*Perl_Ish_path_ptr(aTHXo))
 #undef  PL_siggv
-#define PL_siggv               (*Perl_Isiggv_ptr(pPerl))
+#define PL_siggv               (*Perl_Isiggv_ptr(aTHXo))
 #undef  PL_sighandlerp
-#define PL_sighandlerp         (*Perl_Isighandlerp_ptr(pPerl))
+#define PL_sighandlerp         (*Perl_Isighandlerp_ptr(aTHXo))
 #undef  PL_splitstr
-#define PL_splitstr            (*Perl_Isplitstr_ptr(pPerl))
+#define PL_splitstr            (*Perl_Isplitstr_ptr(aTHXo))
 #undef  PL_srand_called
-#define PL_srand_called                (*Perl_Isrand_called_ptr(pPerl))
+#define PL_srand_called                (*Perl_Isrand_called_ptr(aTHXo))
 #undef  PL_statusvalue
-#define PL_statusvalue         (*Perl_Istatusvalue_ptr(pPerl))
+#define PL_statusvalue         (*Perl_Istatusvalue_ptr(aTHXo))
 #undef  PL_statusvalue_vms
-#define PL_statusvalue_vms     (*Perl_Istatusvalue_vms_ptr(pPerl))
+#define PL_statusvalue_vms     (*Perl_Istatusvalue_vms_ptr(aTHXo))
 #undef  PL_stdingv
-#define PL_stdingv             (*Perl_Istdingv_ptr(pPerl))
+#define PL_stdingv             (*Perl_Istdingv_ptr(aTHXo))
 #undef  PL_strchop
-#define PL_strchop             (*Perl_Istrchop_ptr(pPerl))
+#define PL_strchop             (*Perl_Istrchop_ptr(aTHXo))
 #undef  PL_strtab
-#define PL_strtab              (*Perl_Istrtab_ptr(pPerl))
+#define PL_strtab              (*Perl_Istrtab_ptr(aTHXo))
 #undef  PL_strtab_mutex
-#define PL_strtab_mutex                (*Perl_Istrtab_mutex_ptr(pPerl))
+#define PL_strtab_mutex                (*Perl_Istrtab_mutex_ptr(aTHXo))
 #undef  PL_sub_generation
-#define PL_sub_generation      (*Perl_Isub_generation_ptr(pPerl))
+#define PL_sub_generation      (*Perl_Isub_generation_ptr(aTHXo))
 #undef  PL_sublex_info
-#define PL_sublex_info         (*Perl_Isublex_info_ptr(pPerl))
+#define PL_sublex_info         (*Perl_Isublex_info_ptr(aTHXo))
 #undef  PL_subline
-#define PL_subline             (*Perl_Isubline_ptr(pPerl))
+#define PL_subline             (*Perl_Isubline_ptr(aTHXo))
 #undef  PL_subname
-#define PL_subname             (*Perl_Isubname_ptr(pPerl))
+#define PL_subname             (*Perl_Isubname_ptr(aTHXo))
 #undef  PL_sv_arenaroot
-#define PL_sv_arenaroot                (*Perl_Isv_arenaroot_ptr(pPerl))
+#define PL_sv_arenaroot                (*Perl_Isv_arenaroot_ptr(aTHXo))
 #undef  PL_sv_count
-#define PL_sv_count            (*Perl_Isv_count_ptr(pPerl))
+#define PL_sv_count            (*Perl_Isv_count_ptr(aTHXo))
 #undef  PL_sv_mutex
-#define PL_sv_mutex            (*Perl_Isv_mutex_ptr(pPerl))
+#define PL_sv_mutex            (*Perl_Isv_mutex_ptr(aTHXo))
 #undef  PL_sv_no
-#define PL_sv_no               (*Perl_Isv_no_ptr(pPerl))
+#define PL_sv_no               (*Perl_Isv_no_ptr(aTHXo))
 #undef  PL_sv_objcount
-#define PL_sv_objcount         (*Perl_Isv_objcount_ptr(pPerl))
+#define PL_sv_objcount         (*Perl_Isv_objcount_ptr(aTHXo))
 #undef  PL_sv_root
-#define PL_sv_root             (*Perl_Isv_root_ptr(pPerl))
+#define PL_sv_root             (*Perl_Isv_root_ptr(aTHXo))
 #undef  PL_sv_undef
-#define PL_sv_undef            (*Perl_Isv_undef_ptr(pPerl))
+#define PL_sv_undef            (*Perl_Isv_undef_ptr(aTHXo))
 #undef  PL_sv_yes
-#define PL_sv_yes              (*Perl_Isv_yes_ptr(pPerl))
+#define PL_sv_yes              (*Perl_Isv_yes_ptr(aTHXo))
 #undef  PL_svref_mutex
-#define PL_svref_mutex         (*Perl_Isvref_mutex_ptr(pPerl))
+#define PL_svref_mutex         (*Perl_Isvref_mutex_ptr(aTHXo))
 #undef  PL_sys_intern
-#define PL_sys_intern          (*Perl_Isys_intern_ptr(pPerl))
+#define PL_sys_intern          (*Perl_Isys_intern_ptr(aTHXo))
 #undef  PL_tainting
-#define PL_tainting            (*Perl_Itainting_ptr(pPerl))
+#define PL_tainting            (*Perl_Itainting_ptr(aTHXo))
 #undef  PL_thisexpr
-#define PL_thisexpr            (*Perl_Ithisexpr_ptr(pPerl))
+#define PL_thisexpr            (*Perl_Ithisexpr_ptr(aTHXo))
 #undef  PL_thr_key
-#define PL_thr_key             (*Perl_Ithr_key_ptr(pPerl))
+#define PL_thr_key             (*Perl_Ithr_key_ptr(aTHXo))
 #undef  PL_threadnum
-#define PL_threadnum           (*Perl_Ithreadnum_ptr(pPerl))
+#define PL_threadnum           (*Perl_Ithreadnum_ptr(aTHXo))
 #undef  PL_threads_mutex
-#define PL_threads_mutex       (*Perl_Ithreads_mutex_ptr(pPerl))
+#define PL_threads_mutex       (*Perl_Ithreads_mutex_ptr(aTHXo))
 #undef  PL_threadsv_names
-#define PL_threadsv_names      (*Perl_Ithreadsv_names_ptr(pPerl))
+#define PL_threadsv_names      (*Perl_Ithreadsv_names_ptr(aTHXo))
 #undef  PL_thrsv
-#define PL_thrsv               (*Perl_Ithrsv_ptr(pPerl))
+#define PL_thrsv               (*Perl_Ithrsv_ptr(aTHXo))
 #undef  PL_tokenbuf
-#define PL_tokenbuf            (*Perl_Itokenbuf_ptr(pPerl))
+#define PL_tokenbuf            (*Perl_Itokenbuf_ptr(aTHXo))
 #undef  PL_uid
-#define PL_uid                 (*Perl_Iuid_ptr(pPerl))
+#define PL_uid                 (*Perl_Iuid_ptr(aTHXo))
 #undef  PL_unsafe
-#define PL_unsafe              (*Perl_Iunsafe_ptr(pPerl))
+#define PL_unsafe              (*Perl_Iunsafe_ptr(aTHXo))
 #undef  PL_utf8_alnum
-#define PL_utf8_alnum          (*Perl_Iutf8_alnum_ptr(pPerl))
+#define PL_utf8_alnum          (*Perl_Iutf8_alnum_ptr(aTHXo))
 #undef  PL_utf8_alnumc
-#define PL_utf8_alnumc         (*Perl_Iutf8_alnumc_ptr(pPerl))
+#define PL_utf8_alnumc         (*Perl_Iutf8_alnumc_ptr(aTHXo))
 #undef  PL_utf8_alpha
-#define PL_utf8_alpha          (*Perl_Iutf8_alpha_ptr(pPerl))
+#define PL_utf8_alpha          (*Perl_Iutf8_alpha_ptr(aTHXo))
 #undef  PL_utf8_ascii
-#define PL_utf8_ascii          (*Perl_Iutf8_ascii_ptr(pPerl))
+#define PL_utf8_ascii          (*Perl_Iutf8_ascii_ptr(aTHXo))
 #undef  PL_utf8_cntrl
-#define PL_utf8_cntrl          (*Perl_Iutf8_cntrl_ptr(pPerl))
+#define PL_utf8_cntrl          (*Perl_Iutf8_cntrl_ptr(aTHXo))
 #undef  PL_utf8_digit
-#define PL_utf8_digit          (*Perl_Iutf8_digit_ptr(pPerl))
+#define PL_utf8_digit          (*Perl_Iutf8_digit_ptr(aTHXo))
 #undef  PL_utf8_graph
-#define PL_utf8_graph          (*Perl_Iutf8_graph_ptr(pPerl))
+#define PL_utf8_graph          (*Perl_Iutf8_graph_ptr(aTHXo))
 #undef  PL_utf8_lower
-#define PL_utf8_lower          (*Perl_Iutf8_lower_ptr(pPerl))
+#define PL_utf8_lower          (*Perl_Iutf8_lower_ptr(aTHXo))
 #undef  PL_utf8_mark
-#define PL_utf8_mark           (*Perl_Iutf8_mark_ptr(pPerl))
+#define PL_utf8_mark           (*Perl_Iutf8_mark_ptr(aTHXo))
 #undef  PL_utf8_print
-#define PL_utf8_print          (*Perl_Iutf8_print_ptr(pPerl))
+#define PL_utf8_print          (*Perl_Iutf8_print_ptr(aTHXo))
 #undef  PL_utf8_punct
-#define PL_utf8_punct          (*Perl_Iutf8_punct_ptr(pPerl))
+#define PL_utf8_punct          (*Perl_Iutf8_punct_ptr(aTHXo))
 #undef  PL_utf8_space
-#define PL_utf8_space          (*Perl_Iutf8_space_ptr(pPerl))
+#define PL_utf8_space          (*Perl_Iutf8_space_ptr(aTHXo))
 #undef  PL_utf8_tolower
-#define PL_utf8_tolower                (*Perl_Iutf8_tolower_ptr(pPerl))
+#define PL_utf8_tolower                (*Perl_Iutf8_tolower_ptr(aTHXo))
 #undef  PL_utf8_totitle
-#define PL_utf8_totitle                (*Perl_Iutf8_totitle_ptr(pPerl))
+#define PL_utf8_totitle                (*Perl_Iutf8_totitle_ptr(aTHXo))
 #undef  PL_utf8_toupper
-#define PL_utf8_toupper                (*Perl_Iutf8_toupper_ptr(pPerl))
+#define PL_utf8_toupper                (*Perl_Iutf8_toupper_ptr(aTHXo))
 #undef  PL_utf8_upper
-#define PL_utf8_upper          (*Perl_Iutf8_upper_ptr(pPerl))
+#define PL_utf8_upper          (*Perl_Iutf8_upper_ptr(aTHXo))
 #undef  PL_utf8_xdigit
-#define PL_utf8_xdigit         (*Perl_Iutf8_xdigit_ptr(pPerl))
+#define PL_utf8_xdigit         (*Perl_Iutf8_xdigit_ptr(aTHXo))
 #undef  PL_uudmap
-#define PL_uudmap              (*Perl_Iuudmap_ptr(pPerl))
+#define PL_uudmap              (*Perl_Iuudmap_ptr(aTHXo))
 #undef  PL_warnhook
-#define PL_warnhook            (*Perl_Iwarnhook_ptr(pPerl))
+#define PL_warnhook            (*Perl_Iwarnhook_ptr(aTHXo))
 #undef  PL_xiv_arenaroot
-#define PL_xiv_arenaroot       (*Perl_Ixiv_arenaroot_ptr(pPerl))
+#define PL_xiv_arenaroot       (*Perl_Ixiv_arenaroot_ptr(aTHXo))
 #undef  PL_xiv_root
-#define PL_xiv_root            (*Perl_Ixiv_root_ptr(pPerl))
+#define PL_xiv_root            (*Perl_Ixiv_root_ptr(aTHXo))
 #undef  PL_xnv_root
-#define PL_xnv_root            (*Perl_Ixnv_root_ptr(pPerl))
+#define PL_xnv_root            (*Perl_Ixnv_root_ptr(aTHXo))
 #undef  PL_xpv_root
-#define PL_xpv_root            (*Perl_Ixpv_root_ptr(pPerl))
+#define PL_xpv_root            (*Perl_Ixpv_root_ptr(aTHXo))
 #undef  PL_xrv_root
-#define PL_xrv_root            (*Perl_Ixrv_root_ptr(pPerl))
+#define PL_xrv_root            (*Perl_Ixrv_root_ptr(aTHXo))
 #undef  PL_yychar
-#define PL_yychar              (*Perl_Iyychar_ptr(pPerl))
+#define PL_yychar              (*Perl_Iyychar_ptr(aTHXo))
 #undef  PL_yydebug
-#define PL_yydebug             (*Perl_Iyydebug_ptr(pPerl))
+#define PL_yydebug             (*Perl_Iyydebug_ptr(aTHXo))
 #undef  PL_yyerrflag
-#define PL_yyerrflag           (*Perl_Iyyerrflag_ptr(pPerl))
+#define PL_yyerrflag           (*Perl_Iyyerrflag_ptr(aTHXo))
 #undef  PL_yylval
-#define PL_yylval              (*Perl_Iyylval_ptr(pPerl))
+#define PL_yylval              (*Perl_Iyylval_ptr(aTHXo))
 #undef  PL_yynerrs
-#define PL_yynerrs             (*Perl_Iyynerrs_ptr(pPerl))
+#define PL_yynerrs             (*Perl_Iyynerrs_ptr(aTHXo))
 #undef  PL_yyval
-#define PL_yyval               (*Perl_Iyyval_ptr(pPerl))
+#define PL_yyval               (*Perl_Iyyval_ptr(aTHXo))
 #undef  PL_Sv
-#define PL_Sv                  (*Perl_TSv_ptr(pPerl))
+#define PL_Sv                  (*Perl_TSv_ptr(aTHXo))
 #undef  PL_Xpv
-#define PL_Xpv                 (*Perl_TXpv_ptr(pPerl))
+#define PL_Xpv                 (*Perl_TXpv_ptr(aTHXo))
 #undef  PL_av_fetch_sv
-#define PL_av_fetch_sv         (*Perl_Tav_fetch_sv_ptr(pPerl))
+#define PL_av_fetch_sv         (*Perl_Tav_fetch_sv_ptr(aTHXo))
 #undef  PL_bodytarget
-#define PL_bodytarget          (*Perl_Tbodytarget_ptr(pPerl))
+#define PL_bodytarget          (*Perl_Tbodytarget_ptr(aTHXo))
 #undef  PL_bostr
-#define PL_bostr               (*Perl_Tbostr_ptr(pPerl))
+#define PL_bostr               (*Perl_Tbostr_ptr(aTHXo))
 #undef  PL_chopset
-#define PL_chopset             (*Perl_Tchopset_ptr(pPerl))
+#define PL_chopset             (*Perl_Tchopset_ptr(aTHXo))
 #undef  PL_colors
-#define PL_colors              (*Perl_Tcolors_ptr(pPerl))
+#define PL_colors              (*Perl_Tcolors_ptr(aTHXo))
 #undef  PL_colorset
-#define PL_colorset            (*Perl_Tcolorset_ptr(pPerl))
+#define PL_colorset            (*Perl_Tcolorset_ptr(aTHXo))
 #undef  PL_curcop
-#define PL_curcop              (*Perl_Tcurcop_ptr(pPerl))
+#define PL_curcop              (*Perl_Tcurcop_ptr(aTHXo))
 #undef  PL_curpad
-#define PL_curpad              (*Perl_Tcurpad_ptr(pPerl))
+#define PL_curpad              (*Perl_Tcurpad_ptr(aTHXo))
 #undef  PL_curpm
-#define PL_curpm               (*Perl_Tcurpm_ptr(pPerl))
+#define PL_curpm               (*Perl_Tcurpm_ptr(aTHXo))
 #undef  PL_curstack
-#define PL_curstack            (*Perl_Tcurstack_ptr(pPerl))
+#define PL_curstack            (*Perl_Tcurstack_ptr(aTHXo))
 #undef  PL_curstackinfo
-#define PL_curstackinfo                (*Perl_Tcurstackinfo_ptr(pPerl))
+#define PL_curstackinfo                (*Perl_Tcurstackinfo_ptr(aTHXo))
 #undef  PL_curstash
-#define PL_curstash            (*Perl_Tcurstash_ptr(pPerl))
+#define PL_curstash            (*Perl_Tcurstash_ptr(aTHXo))
 #undef  PL_defoutgv
-#define PL_defoutgv            (*Perl_Tdefoutgv_ptr(pPerl))
+#define PL_defoutgv            (*Perl_Tdefoutgv_ptr(aTHXo))
 #undef  PL_defstash
-#define PL_defstash            (*Perl_Tdefstash_ptr(pPerl))
+#define PL_defstash            (*Perl_Tdefstash_ptr(aTHXo))
 #undef  PL_delaymagic
-#define PL_delaymagic          (*Perl_Tdelaymagic_ptr(pPerl))
+#define PL_delaymagic          (*Perl_Tdelaymagic_ptr(aTHXo))
 #undef  PL_dirty
-#define PL_dirty               (*Perl_Tdirty_ptr(pPerl))
+#define PL_dirty               (*Perl_Tdirty_ptr(aTHXo))
 #undef  PL_dumpindent
-#define PL_dumpindent          (*Perl_Tdumpindent_ptr(pPerl))
+#define PL_dumpindent          (*Perl_Tdumpindent_ptr(aTHXo))
 #undef  PL_extralen
-#define PL_extralen            (*Perl_Textralen_ptr(pPerl))
+#define PL_extralen            (*Perl_Textralen_ptr(aTHXo))
 #undef  PL_firstgv
-#define PL_firstgv             (*Perl_Tfirstgv_ptr(pPerl))
+#define PL_firstgv             (*Perl_Tfirstgv_ptr(aTHXo))
 #undef  PL_formtarget
-#define PL_formtarget          (*Perl_Tformtarget_ptr(pPerl))
+#define PL_formtarget          (*Perl_Tformtarget_ptr(aTHXo))
 #undef  PL_hv_fetch_ent_mh
-#define PL_hv_fetch_ent_mh     (*Perl_Thv_fetch_ent_mh_ptr(pPerl))
+#define PL_hv_fetch_ent_mh     (*Perl_Thv_fetch_ent_mh_ptr(aTHXo))
 #undef  PL_hv_fetch_sv
-#define PL_hv_fetch_sv         (*Perl_Thv_fetch_sv_ptr(pPerl))
+#define PL_hv_fetch_sv         (*Perl_Thv_fetch_sv_ptr(aTHXo))
 #undef  PL_in_eval
-#define PL_in_eval             (*Perl_Tin_eval_ptr(pPerl))
+#define PL_in_eval             (*Perl_Tin_eval_ptr(aTHXo))
 #undef  PL_last_in_gv
-#define PL_last_in_gv          (*Perl_Tlast_in_gv_ptr(pPerl))
+#define PL_last_in_gv          (*Perl_Tlast_in_gv_ptr(aTHXo))
 #undef  PL_lastgotoprobe
-#define PL_lastgotoprobe       (*Perl_Tlastgotoprobe_ptr(pPerl))
+#define PL_lastgotoprobe       (*Perl_Tlastgotoprobe_ptr(aTHXo))
 #undef  PL_lastscream
-#define PL_lastscream          (*Perl_Tlastscream_ptr(pPerl))
+#define PL_lastscream          (*Perl_Tlastscream_ptr(aTHXo))
 #undef  PL_localizing
-#define PL_localizing          (*Perl_Tlocalizing_ptr(pPerl))
+#define PL_localizing          (*Perl_Tlocalizing_ptr(aTHXo))
 #undef  PL_mainstack
-#define PL_mainstack           (*Perl_Tmainstack_ptr(pPerl))
+#define PL_mainstack           (*Perl_Tmainstack_ptr(aTHXo))
 #undef  PL_markstack
-#define PL_markstack           (*Perl_Tmarkstack_ptr(pPerl))
+#define PL_markstack           (*Perl_Tmarkstack_ptr(aTHXo))
 #undef  PL_markstack_max
-#define PL_markstack_max       (*Perl_Tmarkstack_max_ptr(pPerl))
+#define PL_markstack_max       (*Perl_Tmarkstack_max_ptr(aTHXo))
 #undef  PL_markstack_ptr
-#define PL_markstack_ptr       (*Perl_Tmarkstack_ptr_ptr(pPerl))
+#define PL_markstack_ptr       (*Perl_Tmarkstack_ptr_ptr(aTHXo))
 #undef  PL_maxscream
-#define PL_maxscream           (*Perl_Tmaxscream_ptr(pPerl))
+#define PL_maxscream           (*Perl_Tmaxscream_ptr(aTHXo))
 #undef  PL_modcount
-#define PL_modcount            (*Perl_Tmodcount_ptr(pPerl))
+#define PL_modcount            (*Perl_Tmodcount_ptr(aTHXo))
 #undef  PL_na
-#define PL_na                  (*Perl_Tna_ptr(pPerl))
+#define PL_na                  (*Perl_Tna_ptr(aTHXo))
 #undef  PL_nrs
-#define PL_nrs                 (*Perl_Tnrs_ptr(pPerl))
+#define PL_nrs                 (*Perl_Tnrs_ptr(aTHXo))
 #undef  PL_ofs
-#define PL_ofs                 (*Perl_Tofs_ptr(pPerl))
+#define PL_ofs                 (*Perl_Tofs_ptr(aTHXo))
 #undef  PL_ofslen
-#define PL_ofslen              (*Perl_Tofslen_ptr(pPerl))
+#define PL_ofslen              (*Perl_Tofslen_ptr(aTHXo))
 #undef  PL_op
-#define PL_op                  (*Perl_Top_ptr(pPerl))
+#define PL_op                  (*Perl_Top_ptr(aTHXo))
 #undef  PL_opsave
-#define PL_opsave              (*Perl_Topsave_ptr(pPerl))
+#define PL_opsave              (*Perl_Topsave_ptr(aTHXo))
 #undef  PL_protect
-#define PL_protect             (*Perl_Tprotect_ptr(pPerl))
+#define PL_protect             (*Perl_Tprotect_ptr(aTHXo))
 #undef  PL_reg_call_cc
-#define PL_reg_call_cc         (*Perl_Treg_call_cc_ptr(pPerl))
+#define PL_reg_call_cc         (*Perl_Treg_call_cc_ptr(aTHXo))
 #undef  PL_reg_curpm
-#define PL_reg_curpm           (*Perl_Treg_curpm_ptr(pPerl))
+#define PL_reg_curpm           (*Perl_Treg_curpm_ptr(aTHXo))
 #undef  PL_reg_eval_set
-#define PL_reg_eval_set                (*Perl_Treg_eval_set_ptr(pPerl))
+#define PL_reg_eval_set                (*Perl_Treg_eval_set_ptr(aTHXo))
 #undef  PL_reg_flags
-#define PL_reg_flags           (*Perl_Treg_flags_ptr(pPerl))
+#define PL_reg_flags           (*Perl_Treg_flags_ptr(aTHXo))
 #undef  PL_reg_ganch
-#define PL_reg_ganch           (*Perl_Treg_ganch_ptr(pPerl))
+#define PL_reg_ganch           (*Perl_Treg_ganch_ptr(aTHXo))
 #undef  PL_reg_magic
-#define PL_reg_magic           (*Perl_Treg_magic_ptr(pPerl))
+#define PL_reg_magic           (*Perl_Treg_magic_ptr(aTHXo))
 #undef  PL_reg_oldcurpm
-#define PL_reg_oldcurpm                (*Perl_Treg_oldcurpm_ptr(pPerl))
+#define PL_reg_oldcurpm                (*Perl_Treg_oldcurpm_ptr(aTHXo))
 #undef  PL_reg_oldpos
-#define PL_reg_oldpos          (*Perl_Treg_oldpos_ptr(pPerl))
+#define PL_reg_oldpos          (*Perl_Treg_oldpos_ptr(aTHXo))
 #undef  PL_reg_oldsaved
-#define PL_reg_oldsaved                (*Perl_Treg_oldsaved_ptr(pPerl))
+#define PL_reg_oldsaved                (*Perl_Treg_oldsaved_ptr(aTHXo))
 #undef  PL_reg_oldsavedlen
-#define PL_reg_oldsavedlen     (*Perl_Treg_oldsavedlen_ptr(pPerl))
+#define PL_reg_oldsavedlen     (*Perl_Treg_oldsavedlen_ptr(aTHXo))
 #undef  PL_reg_re
-#define PL_reg_re              (*Perl_Treg_re_ptr(pPerl))
+#define PL_reg_re              (*Perl_Treg_re_ptr(aTHXo))
 #undef  PL_reg_start_tmp
-#define PL_reg_start_tmp       (*Perl_Treg_start_tmp_ptr(pPerl))
+#define PL_reg_start_tmp       (*Perl_Treg_start_tmp_ptr(aTHXo))
 #undef  PL_reg_start_tmpl
-#define PL_reg_start_tmpl      (*Perl_Treg_start_tmpl_ptr(pPerl))
+#define PL_reg_start_tmpl      (*Perl_Treg_start_tmpl_ptr(aTHXo))
 #undef  PL_reg_starttry
-#define PL_reg_starttry                (*Perl_Treg_starttry_ptr(pPerl))
+#define PL_reg_starttry                (*Perl_Treg_starttry_ptr(aTHXo))
 #undef  PL_reg_sv
-#define PL_reg_sv              (*Perl_Treg_sv_ptr(pPerl))
+#define PL_reg_sv              (*Perl_Treg_sv_ptr(aTHXo))
 #undef  PL_regbol
-#define PL_regbol              (*Perl_Tregbol_ptr(pPerl))
+#define PL_regbol              (*Perl_Tregbol_ptr(aTHXo))
 #undef  PL_regcc
-#define PL_regcc               (*Perl_Tregcc_ptr(pPerl))
+#define PL_regcc               (*Perl_Tregcc_ptr(aTHXo))
 #undef  PL_regcode
-#define PL_regcode             (*Perl_Tregcode_ptr(pPerl))
+#define PL_regcode             (*Perl_Tregcode_ptr(aTHXo))
 #undef  PL_regcomp_parse
-#define PL_regcomp_parse       (*Perl_Tregcomp_parse_ptr(pPerl))
+#define PL_regcomp_parse       (*Perl_Tregcomp_parse_ptr(aTHXo))
 #undef  PL_regcomp_rx
-#define PL_regcomp_rx          (*Perl_Tregcomp_rx_ptr(pPerl))
+#define PL_regcomp_rx          (*Perl_Tregcomp_rx_ptr(aTHXo))
 #undef  PL_regcompp
-#define PL_regcompp            (*Perl_Tregcompp_ptr(pPerl))
+#define PL_regcompp            (*Perl_Tregcompp_ptr(aTHXo))
 #undef  PL_regdata
-#define PL_regdata             (*Perl_Tregdata_ptr(pPerl))
+#define PL_regdata             (*Perl_Tregdata_ptr(aTHXo))
 #undef  PL_regdummy
-#define PL_regdummy            (*Perl_Tregdummy_ptr(pPerl))
+#define PL_regdummy            (*Perl_Tregdummy_ptr(aTHXo))
 #undef  PL_regendp
-#define PL_regendp             (*Perl_Tregendp_ptr(pPerl))
+#define PL_regendp             (*Perl_Tregendp_ptr(aTHXo))
 #undef  PL_regeol
-#define PL_regeol              (*Perl_Tregeol_ptr(pPerl))
+#define PL_regeol              (*Perl_Tregeol_ptr(aTHXo))
 #undef  PL_regexecp
-#define PL_regexecp            (*Perl_Tregexecp_ptr(pPerl))
+#define PL_regexecp            (*Perl_Tregexecp_ptr(aTHXo))
 #undef  PL_regflags
-#define PL_regflags            (*Perl_Tregflags_ptr(pPerl))
+#define PL_regflags            (*Perl_Tregflags_ptr(aTHXo))
 #undef  PL_regfree
-#define PL_regfree             (*Perl_Tregfree_ptr(pPerl))
+#define PL_regfree             (*Perl_Tregfree_ptr(aTHXo))
 #undef  PL_regindent
-#define PL_regindent           (*Perl_Tregindent_ptr(pPerl))
+#define PL_regindent           (*Perl_Tregindent_ptr(aTHXo))
 #undef  PL_reginput
-#define PL_reginput            (*Perl_Treginput_ptr(pPerl))
+#define PL_reginput            (*Perl_Treginput_ptr(aTHXo))
 #undef  PL_regint_start
-#define PL_regint_start                (*Perl_Tregint_start_ptr(pPerl))
+#define PL_regint_start                (*Perl_Tregint_start_ptr(aTHXo))
 #undef  PL_regint_string
-#define PL_regint_string       (*Perl_Tregint_string_ptr(pPerl))
+#define PL_regint_string       (*Perl_Tregint_string_ptr(aTHXo))
 #undef  PL_reginterp_cnt
-#define PL_reginterp_cnt       (*Perl_Treginterp_cnt_ptr(pPerl))
+#define PL_reginterp_cnt       (*Perl_Treginterp_cnt_ptr(aTHXo))
 #undef  PL_reglastparen
-#define PL_reglastparen                (*Perl_Treglastparen_ptr(pPerl))
+#define PL_reglastparen                (*Perl_Treglastparen_ptr(aTHXo))
 #undef  PL_regnarrate
-#define PL_regnarrate          (*Perl_Tregnarrate_ptr(pPerl))
+#define PL_regnarrate          (*Perl_Tregnarrate_ptr(aTHXo))
 #undef  PL_regnaughty
-#define PL_regnaughty          (*Perl_Tregnaughty_ptr(pPerl))
+#define PL_regnaughty          (*Perl_Tregnaughty_ptr(aTHXo))
 #undef  PL_regnpar
-#define PL_regnpar             (*Perl_Tregnpar_ptr(pPerl))
+#define PL_regnpar             (*Perl_Tregnpar_ptr(aTHXo))
 #undef  PL_regprecomp
-#define PL_regprecomp          (*Perl_Tregprecomp_ptr(pPerl))
+#define PL_regprecomp          (*Perl_Tregprecomp_ptr(aTHXo))
 #undef  PL_regprev
-#define PL_regprev             (*Perl_Tregprev_ptr(pPerl))
+#define PL_regprev             (*Perl_Tregprev_ptr(aTHXo))
 #undef  PL_regprogram
-#define PL_regprogram          (*Perl_Tregprogram_ptr(pPerl))
+#define PL_regprogram          (*Perl_Tregprogram_ptr(aTHXo))
 #undef  PL_regsawback
-#define PL_regsawback          (*Perl_Tregsawback_ptr(pPerl))
+#define PL_regsawback          (*Perl_Tregsawback_ptr(aTHXo))
 #undef  PL_regseen
-#define PL_regseen             (*Perl_Tregseen_ptr(pPerl))
+#define PL_regseen             (*Perl_Tregseen_ptr(aTHXo))
 #undef  PL_regsize
-#define PL_regsize             (*Perl_Tregsize_ptr(pPerl))
+#define PL_regsize             (*Perl_Tregsize_ptr(aTHXo))
 #undef  PL_regstartp
-#define PL_regstartp           (*Perl_Tregstartp_ptr(pPerl))
+#define PL_regstartp           (*Perl_Tregstartp_ptr(aTHXo))
 #undef  PL_regtill
-#define PL_regtill             (*Perl_Tregtill_ptr(pPerl))
+#define PL_regtill             (*Perl_Tregtill_ptr(aTHXo))
 #undef  PL_regxend
-#define PL_regxend             (*Perl_Tregxend_ptr(pPerl))
+#define PL_regxend             (*Perl_Tregxend_ptr(aTHXo))
 #undef  PL_restartop
-#define PL_restartop           (*Perl_Trestartop_ptr(pPerl))
+#define PL_restartop           (*Perl_Trestartop_ptr(aTHXo))
 #undef  PL_retstack
-#define PL_retstack            (*Perl_Tretstack_ptr(pPerl))
+#define PL_retstack            (*Perl_Tretstack_ptr(aTHXo))
 #undef  PL_retstack_ix
-#define PL_retstack_ix         (*Perl_Tretstack_ix_ptr(pPerl))
+#define PL_retstack_ix         (*Perl_Tretstack_ix_ptr(aTHXo))
 #undef  PL_retstack_max
-#define PL_retstack_max                (*Perl_Tretstack_max_ptr(pPerl))
+#define PL_retstack_max                (*Perl_Tretstack_max_ptr(aTHXo))
 #undef  PL_rs
-#define PL_rs                  (*Perl_Trs_ptr(pPerl))
+#define PL_rs                  (*Perl_Trs_ptr(aTHXo))
 #undef  PL_savestack
-#define PL_savestack           (*Perl_Tsavestack_ptr(pPerl))
+#define PL_savestack           (*Perl_Tsavestack_ptr(aTHXo))
 #undef  PL_savestack_ix
-#define PL_savestack_ix                (*Perl_Tsavestack_ix_ptr(pPerl))
+#define PL_savestack_ix                (*Perl_Tsavestack_ix_ptr(aTHXo))
 #undef  PL_savestack_max
-#define PL_savestack_max       (*Perl_Tsavestack_max_ptr(pPerl))
+#define PL_savestack_max       (*Perl_Tsavestack_max_ptr(aTHXo))
 #undef  PL_scopestack
-#define PL_scopestack          (*Perl_Tscopestack_ptr(pPerl))
+#define PL_scopestack          (*Perl_Tscopestack_ptr(aTHXo))
 #undef  PL_scopestack_ix
-#define PL_scopestack_ix       (*Perl_Tscopestack_ix_ptr(pPerl))
+#define PL_scopestack_ix       (*Perl_Tscopestack_ix_ptr(aTHXo))
 #undef  PL_scopestack_max
-#define PL_scopestack_max      (*Perl_Tscopestack_max_ptr(pPerl))
+#define PL_scopestack_max      (*Perl_Tscopestack_max_ptr(aTHXo))
 #undef  PL_screamfirst
-#define PL_screamfirst         (*Perl_Tscreamfirst_ptr(pPerl))
+#define PL_screamfirst         (*Perl_Tscreamfirst_ptr(aTHXo))
 #undef  PL_screamnext
-#define PL_screamnext          (*Perl_Tscreamnext_ptr(pPerl))
+#define PL_screamnext          (*Perl_Tscreamnext_ptr(aTHXo))
 #undef  PL_secondgv
-#define PL_secondgv            (*Perl_Tsecondgv_ptr(pPerl))
+#define PL_secondgv            (*Perl_Tsecondgv_ptr(aTHXo))
 #undef  PL_seen_evals
-#define PL_seen_evals          (*Perl_Tseen_evals_ptr(pPerl))
+#define PL_seen_evals          (*Perl_Tseen_evals_ptr(aTHXo))
 #undef  PL_seen_zerolen
-#define PL_seen_zerolen                (*Perl_Tseen_zerolen_ptr(pPerl))
+#define PL_seen_zerolen                (*Perl_Tseen_zerolen_ptr(aTHXo))
 #undef  PL_sortcop
-#define PL_sortcop             (*Perl_Tsortcop_ptr(pPerl))
+#define PL_sortcop             (*Perl_Tsortcop_ptr(aTHXo))
 #undef  PL_sortcxix
-#define PL_sortcxix            (*Perl_Tsortcxix_ptr(pPerl))
+#define PL_sortcxix            (*Perl_Tsortcxix_ptr(aTHXo))
 #undef  PL_sortstash
-#define PL_sortstash           (*Perl_Tsortstash_ptr(pPerl))
+#define PL_sortstash           (*Perl_Tsortstash_ptr(aTHXo))
 #undef  PL_stack_base
-#define PL_stack_base          (*Perl_Tstack_base_ptr(pPerl))
+#define PL_stack_base          (*Perl_Tstack_base_ptr(aTHXo))
 #undef  PL_stack_max
-#define PL_stack_max           (*Perl_Tstack_max_ptr(pPerl))
+#define PL_stack_max           (*Perl_Tstack_max_ptr(aTHXo))
 #undef  PL_stack_sp
-#define PL_stack_sp            (*Perl_Tstack_sp_ptr(pPerl))
+#define PL_stack_sp            (*Perl_Tstack_sp_ptr(aTHXo))
 #undef  PL_start_env
-#define PL_start_env           (*Perl_Tstart_env_ptr(pPerl))
+#define PL_start_env           (*Perl_Tstart_env_ptr(aTHXo))
 #undef  PL_statbuf
-#define PL_statbuf             (*Perl_Tstatbuf_ptr(pPerl))
+#define PL_statbuf             (*Perl_Tstatbuf_ptr(aTHXo))
 #undef  PL_statcache
-#define PL_statcache           (*Perl_Tstatcache_ptr(pPerl))
+#define PL_statcache           (*Perl_Tstatcache_ptr(aTHXo))
 #undef  PL_statgv
-#define PL_statgv              (*Perl_Tstatgv_ptr(pPerl))
+#define PL_statgv              (*Perl_Tstatgv_ptr(aTHXo))
 #undef  PL_statname
-#define PL_statname            (*Perl_Tstatname_ptr(pPerl))
+#define PL_statname            (*Perl_Tstatname_ptr(aTHXo))
 #undef  PL_tainted
-#define PL_tainted             (*Perl_Ttainted_ptr(pPerl))
+#define PL_tainted             (*Perl_Ttainted_ptr(aTHXo))
 #undef  PL_timesbuf
-#define PL_timesbuf            (*Perl_Ttimesbuf_ptr(pPerl))
+#define PL_timesbuf            (*Perl_Ttimesbuf_ptr(aTHXo))
 #undef  PL_tmps_floor
-#define PL_tmps_floor          (*Perl_Ttmps_floor_ptr(pPerl))
+#define PL_tmps_floor          (*Perl_Ttmps_floor_ptr(aTHXo))
 #undef  PL_tmps_ix
-#define PL_tmps_ix             (*Perl_Ttmps_ix_ptr(pPerl))
+#define PL_tmps_ix             (*Perl_Ttmps_ix_ptr(aTHXo))
 #undef  PL_tmps_max
-#define PL_tmps_max            (*Perl_Ttmps_max_ptr(pPerl))
+#define PL_tmps_max            (*Perl_Ttmps_max_ptr(aTHXo))
 #undef  PL_tmps_stack
-#define PL_tmps_stack          (*Perl_Ttmps_stack_ptr(pPerl))
+#define PL_tmps_stack          (*Perl_Ttmps_stack_ptr(aTHXo))
 #undef  PL_top_env
-#define PL_top_env             (*Perl_Ttop_env_ptr(pPerl))
+#define PL_top_env             (*Perl_Ttop_env_ptr(aTHXo))
 #undef  PL_toptarget
-#define PL_toptarget           (*Perl_Ttoptarget_ptr(pPerl))
+#define PL_toptarget           (*Perl_Ttoptarget_ptr(aTHXo))
 #undef  PL_watchaddr
-#define PL_watchaddr           (*Perl_Twatchaddr_ptr(pPerl))
+#define PL_watchaddr           (*Perl_Twatchaddr_ptr(aTHXo))
 #undef  PL_watchok
-#define PL_watchok             (*Perl_Twatchok_ptr(pPerl))
+#define PL_watchok             (*Perl_Twatchok_ptr(aTHXo))
 #undef  PL_No
-#define PL_No                  (*Perl_GNo_ptr(pPerl))
+#define PL_No                  (*Perl_GNo_ptr(NULL))
 #undef  PL_Yes
-#define PL_Yes                 (*Perl_GYes_ptr(pPerl))
+#define PL_Yes                 (*Perl_GYes_ptr(NULL))
 #undef  PL_curinterp
-#define PL_curinterp           (*Perl_Gcurinterp_ptr(pPerl))
+#define PL_curinterp           (*Perl_Gcurinterp_ptr(NULL))
 #undef  PL_do_undump
-#define PL_do_undump           (*Perl_Gdo_undump_ptr(pPerl))
+#define PL_do_undump           (*Perl_Gdo_undump_ptr(NULL))
 #undef  PL_hexdigit
-#define PL_hexdigit            (*Perl_Ghexdigit_ptr(pPerl))
+#define PL_hexdigit            (*Perl_Ghexdigit_ptr(NULL))
 #undef  PL_patleave
-#define PL_patleave            (*Perl_Gpatleave_ptr(pPerl))
+#define PL_patleave            (*Perl_Gpatleave_ptr(NULL))
 
 /* Functions */
 
 #if defined(PERL_OBJECT)
+
+/* XXX soon to be eliminated, only a few things in PERLCORE need these now */
+
+#if defined(PERL_OBJECT)
 #endif
 #undef  Perl_amagic_call
 #define Perl_amagic_call       pPerl->Perl_amagic_call
 #define Perl_croak             pPerl->Perl_croak
 #undef  croak
 #define croak                  Perl_croak
+#undef  Perl_vcroak
+#define Perl_vcroak            pPerl->Perl_vcroak
+#undef  vcroak
+#define vcroak                 Perl_vcroak
 #if defined(PERL_IMPLICIT_CONTEXT)
 #undef  Perl_croak_nocontext
 #define Perl_croak_nocontext   pPerl->Perl_croak_nocontext
 #define Perl_die_nocontext     pPerl->Perl_die_nocontext
 #undef  die_nocontext
 #define die_nocontext          Perl_die_nocontext
+#undef  Perl_deb_nocontext
+#define Perl_deb_nocontext     pPerl->Perl_deb_nocontext
+#undef  deb_nocontext
+#define deb_nocontext          Perl_deb_nocontext
 #undef  Perl_form_nocontext
 #define Perl_form_nocontext    pPerl->Perl_form_nocontext
 #undef  form_nocontext
 #define Perl_warn_nocontext    pPerl->Perl_warn_nocontext
 #undef  warn_nocontext
 #define warn_nocontext         Perl_warn_nocontext
+#undef  Perl_warner_nocontext
+#define Perl_warner_nocontext  pPerl->Perl_warner_nocontext
+#undef  warner_nocontext
+#define warner_nocontext       Perl_warner_nocontext
 #undef  Perl_newSVpvf_nocontext
 #define Perl_newSVpvf_nocontext        pPerl->Perl_newSVpvf_nocontext
 #undef  newSVpvf_nocontext
 #define Perl_sv_setpvf_mg_nocontext    pPerl->Perl_sv_setpvf_mg_nocontext
 #undef  sv_setpvf_mg_nocontext
 #define sv_setpvf_mg_nocontext Perl_sv_setpvf_mg_nocontext
+#undef  Perl_fprintf_nocontext
+#define Perl_fprintf_nocontext pPerl->Perl_fprintf_nocontext
+#undef  fprintf_nocontext
+#define fprintf_nocontext      Perl_fprintf_nocontext
 #endif
 #undef  Perl_cv_ckproto
 #define Perl_cv_ckproto                pPerl->Perl_cv_ckproto
 #define Perl_deb               pPerl->Perl_deb
 #undef  deb
 #define deb                    Perl_deb
+#undef  Perl_vdeb
+#define Perl_vdeb              pPerl->Perl_vdeb
+#undef  vdeb
+#define vdeb                   Perl_vdeb
 #undef  Perl_deb_growlevel
 #define Perl_deb_growlevel     pPerl->Perl_deb_growlevel
 #undef  deb_growlevel
 #define Perl_die               pPerl->Perl_die
 #undef  die
 #define die                    Perl_die
+#undef  Perl_vdie
+#define Perl_vdie              pPerl->Perl_vdie
+#undef  vdie
+#define vdie                   Perl_vdie
 #undef  Perl_die_where
 #define Perl_die_where         pPerl->Perl_die_where
 #undef  die_where
 #define Perl_form              pPerl->Perl_form
 #undef  form
 #define form                   Perl_form
+#undef  Perl_vform
+#define Perl_vform             pPerl->Perl_vform
+#undef  vform
+#define vform                  Perl_vform
 #undef  Perl_free_tmps
 #define Perl_free_tmps         pPerl->Perl_free_tmps
 #undef  free_tmps
 #define Perl_newSVpvf          pPerl->Perl_newSVpvf
 #undef  newSVpvf
 #define newSVpvf               Perl_newSVpvf
+#undef  Perl_vnewSVpvf
+#define Perl_vnewSVpvf         pPerl->Perl_vnewSVpvf
+#undef  vnewSVpvf
+#define vnewSVpvf              Perl_vnewSVpvf
 #undef  Perl_newSVrv
 #define Perl_newSVrv           pPerl->Perl_newSVrv
 #undef  newSVrv
 #define Perl_newWHILEOP                pPerl->Perl_newWHILEOP
 #undef  newWHILEOP
 #define newWHILEOP             Perl_newWHILEOP
-#if defined(USE_THREADS)
-#undef  Perl_new_struct_thread
-#define Perl_new_struct_thread pPerl->Perl_new_struct_thread
-#undef  new_struct_thread
-#define new_struct_thread      Perl_new_struct_thread
-#endif
 #undef  Perl_new_stackinfo
 #define Perl_new_stackinfo     pPerl->Perl_new_stackinfo
 #undef  new_stackinfo
 #define perl_run               pPerl->perl_run
 #undef  perl_parse
 #define perl_parse             pPerl->perl_parse
+#if defined(USE_THREADS)
+#undef  Perl_new_struct_thread
+#define Perl_new_struct_thread pPerl->Perl_new_struct_thread
+#undef  new_struct_thread
+#define new_struct_thread      Perl_new_struct_thread
+#endif
 #endif
 #undef  Perl_call_atexit
 #define Perl_call_atexit       pPerl->Perl_call_atexit
 #define Perl_sv_catpvf         pPerl->Perl_sv_catpvf
 #undef  sv_catpvf
 #define sv_catpvf              Perl_sv_catpvf
+#undef  Perl_sv_vcatpvf
+#define Perl_sv_vcatpvf                pPerl->Perl_sv_vcatpvf
+#undef  sv_vcatpvf
+#define sv_vcatpvf             Perl_sv_vcatpvf
 #undef  Perl_sv_catpv
 #define Perl_sv_catpv          pPerl->Perl_sv_catpv
 #undef  sv_catpv
 #define Perl_sv_setpvf         pPerl->Perl_sv_setpvf
 #undef  sv_setpvf
 #define sv_setpvf              Perl_sv_setpvf
+#undef  Perl_sv_vsetpvf
+#define Perl_sv_vsetpvf                pPerl->Perl_sv_vsetpvf
+#undef  sv_vsetpvf
+#define sv_vsetpvf             Perl_sv_vsetpvf
 #undef  Perl_sv_setiv
 #define Perl_sv_setiv          pPerl->Perl_sv_setiv
 #undef  sv_setiv
 #define Perl_warn              pPerl->Perl_warn
 #undef  warn
 #define warn                   Perl_warn
+#undef  Perl_vwarn
+#define Perl_vwarn             pPerl->Perl_vwarn
+#undef  vwarn
+#define vwarn                  Perl_vwarn
 #undef  Perl_warner
 #define Perl_warner            pPerl->Perl_warner
 #undef  warner
 #define warner                 Perl_warner
+#undef  Perl_vwarner
+#define Perl_vwarner           pPerl->Perl_vwarner
+#undef  vwarner
+#define vwarner                        Perl_vwarner
 #undef  Perl_watch
 #define Perl_watch             pPerl->Perl_watch
 #undef  watch
 #define Perl_sv_catpvf_mg      pPerl->Perl_sv_catpvf_mg
 #undef  sv_catpvf_mg
 #define sv_catpvf_mg           Perl_sv_catpvf_mg
+#undef  Perl_sv_vcatpvf_mg
+#define Perl_sv_vcatpvf_mg     pPerl->Perl_sv_vcatpvf_mg
+#undef  sv_vcatpvf_mg
+#define sv_vcatpvf_mg          Perl_sv_vcatpvf_mg
 #undef  Perl_sv_catpv_mg
 #define Perl_sv_catpv_mg       pPerl->Perl_sv_catpv_mg
 #undef  sv_catpv_mg
 #define Perl_sv_setpvf_mg      pPerl->Perl_sv_setpvf_mg
 #undef  sv_setpvf_mg
 #define sv_setpvf_mg           Perl_sv_setpvf_mg
+#undef  Perl_sv_vsetpvf_mg
+#define Perl_sv_vsetpvf_mg     pPerl->Perl_sv_vsetpvf_mg
+#undef  sv_vsetpvf_mg
+#define sv_vsetpvf_mg          Perl_sv_vsetpvf_mg
 #undef  Perl_sv_setiv_mg
 #define Perl_sv_setiv_mg       pPerl->Perl_sv_setiv_mg
 #undef  sv_setiv_mg
 #define Perl_dump_indent       pPerl->Perl_dump_indent
 #undef  dump_indent
 #define dump_indent            Perl_dump_indent
+#undef  Perl_dump_vindent
+#define Perl_dump_vindent      pPerl->Perl_dump_vindent
+#undef  dump_vindent
+#define dump_vindent           Perl_dump_vindent
 #undef  Perl_do_gv_dump
 #define Perl_do_gv_dump                pPerl->Perl_do_gv_dump
 #undef  do_gv_dump
 #define Perl_default_protect   pPerl->Perl_default_protect
 #undef  default_protect
 #define default_protect                Perl_default_protect
+#undef  Perl_vdefault_protect
+#define Perl_vdefault_protect  pPerl->Perl_vdefault_protect
+#undef  vdefault_protect
+#define vdefault_protect       Perl_vdefault_protect
 #undef  Perl_reginitcolors
 #define Perl_reginitcolors     pPerl->Perl_reginitcolors
 #undef  reginitcolors
 #undef  pp_xor
 #define pp_xor                 Perl_pp_xor
 
+#endif  /* PERL_OBJECT */
 #endif /* __objXSUB_h__ */
diff --git a/perl.c b/perl.c
index b654404..bb3f2a9 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -61,10 +61,8 @@ perl_alloc(void)
 {
     PerlInterpreter *my_perl;
 
-#if !defined(PERL_IMPLICIT_CONTEXT)
-    PL_curinterp = 0;
-#endif
     New(53, my_perl, 1, PerlInterpreter);
+    PERL_SET_INTERP(my_perl);
     return my_perl;
 }
 #endif /* PERL_OBJECT */
@@ -79,11 +77,6 @@ perl_construct(pTHXx)
 #endif /* FAKE_THREADS */
 #endif /* USE_THREADS */
     
-#ifndef PERL_OBJECT
-    if (!(PL_curinterp = my_perl))
-       return;
-#endif
-
 #ifdef MULTIPLICITY
     Zero(my_perl, 1, PerlInterpreter);
 #endif
@@ -219,11 +212,6 @@ perl_destruct(pTHXx)
     dTHX;
 #endif /* USE_THREADS */
 
-#if !defined(PERL_OBJECT) && !defined(PERL_IMPLICIT_CONTEXT)
-    if (!(PL_curinterp = my_perl))
-       return;
-#endif
-
 #ifdef USE_THREADS
 #ifndef FAKE_THREADS
     /* Pass 1 on any remaining threads: detach joinables, join zombies */
@@ -568,14 +556,10 @@ perl_destruct(pTHXx)
 void
 perl_free(pTHXx)
 {
-#ifdef PERL_OBJECT
-       Safefree(this);
+#if defined(PERL_OBJECT)
+    Safefree(this);
 #else
-#  if !defined(PERL_IMPLICIT_CONTEXT)
-    if (!(PL_curinterp = my_perl))
-       return;
-#  endif
-    Safefree(my_perl);
+    Safefree(aTHXx);
 #endif
 }
 
@@ -606,11 +590,6 @@ setuid perl scripts securely.\n");
 #endif
 #endif
 
-#if !defined(PERL_OBJECT) && !defined(PERL_IMPLICIT_CONTEXT)
-    if (!(PL_curinterp = my_perl))
-       return 255;
-#endif
-
 #if defined(__DYNAMIC__) && (defined(NeXT) || defined(__NeXT__))
     _dyld_lookup_and_bind
        ("__environ", (unsigned long *) &environ_pointer, NULL);
@@ -948,7 +927,7 @@ print \"  \\@INC:\\n    @INC\\n\";");
     if (xsinit)
        (*xsinit)(aTHXo);       /* in case linked C routines want magical variables */
 #if defined(VMS) || defined(WIN32) || defined(DJGPP)
-    init_os_extras(aTHX);
+    init_os_extras();
 #endif
 
 #ifdef USE_SOCKS
@@ -1017,11 +996,6 @@ perl_run(pTHXx)
     dTHX;
 #endif
 
-#if !defined(PERL_OBJECT) && !defined(PERL_IMPLICIT_CONTEXT)
-    if (!(PL_curinterp = my_perl))
-       return 255;
-#endif
-
     oldscope = PL_scopestack_ix;
 
  redo_body:
@@ -1907,8 +1881,8 @@ S_init_interp(pTHX)
 #      define PERLVARI(var,type,init)  my_perl->var = init;
 #      define PERLVARIC(var,type,init) my_perl->var = init;
 #    else
-#      define PERLVARI(var,type,init)  PL_curinterp->var = init;
-#      define PERLVARIC(var,type,init) PL_curinterp->var = init;
+#      define PERLVARI(var,type,init)  PERL_GET_INTERP->var = init;
+#      define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init;
 #    endif
 #    include "intrpvar.h"
 #    ifndef USE_THREADS
@@ -2900,13 +2874,14 @@ S_incpush(pTHX_ char *p, int addsubdirs)
 STATIC struct perl_thread *
 S_init_main_thread(pTHX)
 {
-#ifndef PERL_IMPLICIT_CONTEXT
+#if !defined(PERL_IMPLICIT_CONTEXT)
     struct perl_thread *thr;
 #endif
     XPV *xpv;
 
     Newz(53, thr, 1, struct perl_thread);
     PL_curcop = &PL_compiling;
+    thr->interp = PERL_GET_INTERP;
     thr->cvcache = newHV();
     thr->threadsv = newAV();
     /* thr->threadsvp is set when find_threadsv is called */
diff --git a/perl.h b/perl.h
index 68c4940..07dada4 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -9,8 +9,6 @@
 #ifndef H_PERL
 #define H_PERL 1
 
-/*#define PERL_IMPLICIT_CONTEXT*/
-
 #ifdef PERL_FOR_X2P
 /*
  * This file is being used for x2p stuff. 
 
 /* XXXXXX testing threads via implicit pointer */
 #ifdef USE_THREADS
-#define PERL_IMPLICIT_CONTEXT
+#  ifndef PERL_IMPLICIT_CONTEXT
+#    define PERL_IMPLICIT_CONTEXT
+#  endif
+#  ifndef PERL_IMPLICIT_SYS
+/*#    define PERL_IMPLICIT_SYS*/              /* XXX not done yet */
+#  endif
+#endif
+
+/* XXXXXX testing multiplicity via implicit pointer */
+#if defined(MULTIPLICITY)
+#  ifndef PERL_IMPLICIT_CONTEXT
+#    define PERL_IMPLICIT_CONTEXT
+#  endif
+#  ifndef PERL_IMPLICIT_SYS
+/*#    define PERL_IMPLICIT_SYS*/              /* XXX not done yet */
+#  endif
+#endif
+
+#ifdef PERL_CAPI
+#  undef PERL_OBJECT
+#  ifndef PERL_IMPLICIT_CONTEXT
+#    define PERL_IMPLICIT_CONTEXT
+#  endif
+#  ifndef PERL_IMPLICIT_SYS
+#    define PERL_IMPLICIT_SYS
+#  endif
+#endif
+
+#ifdef PERL_OBJECT
+#  ifndef PERL_IMPLICIT_CONTEXT
+#    define PERL_IMPLICIT_CONTEXT
+#  endif
+#  ifndef PERL_IMPLICIT_SYS
+#    define PERL_IMPLICIT_SYS
+#  endif
 #endif
 
 #ifdef PERL_OBJECT
@@ -108,18 +140,20 @@ functions are now member functions of the PERL_OBJECT.
 class CPerlObj;
 
 #define STATIC
-#define CPERLscope(x) CPerlObj::x
-#define CALL_FPTR(fptr) (this->*fptr)
-
-#define pTHXo          CPerlObj *pPerl
-#define pTHXo_         pTHXo,
-#define _pTHXo         ,pTHXo
-#define aTHXo          this
-#define aTHXo_         this,
-#define _aTHXo         ,this
+#define CPERLscope(x)          CPerlObj::x
+#define CALL_FPTR(fptr)                (this->*fptr)
+
+#define pTHXo                  CPerlObj *pPerl
+#define pTHXo_                 pTHXo,
+#define _pTHXo                 ,pTHXo
+#define aTHXo                  this
+#define aTHXo_                 this,
+#define _aTHXo                 ,this
 #define PERL_OBJECT_THIS       aTHXo
 #define PERL_OBJECT_THIS_      aTHXo_
 #define _PERL_OBJECT_THIS      _aTHXo
+#define dTHXoa(a)              pTHXo = (CPerlObj *)a
+#define dTHXo                  dTHXoa(PERL_GET_INTERP)
 
 #define pTHXx          void
 #define pTHXx_
@@ -130,6 +164,27 @@ class CPerlObj;
 
 #else /* !PERL_OBJECT */
 
+#ifdef PERL_IMPLICIT_CONTEXT
+#  ifdef USE_THREADS
+struct perl_thread;
+#    define pTHX       register struct perl_thread *thr
+#    define aTHX       thr
+#    define dTHXa(a)   pTHX = (struct perl_thread *)a
+#    define dTHX       dTHXa(THR)
+#    define dTHR       dNOOP
+#  else
+#    define MULTIPLICITY
+#    define pTHX       register PerlInterpreter *my_perl
+#    define aTHX       my_perl
+#    define dTHXa(a)   pTHX = (PerlInterpreter *)a
+#    define dTHX       dTHXa(PERL_GET_INTERP)
+#  endif
+#  define pTHX_                pTHX,
+#  define _pTHX                ,pTHX
+#  define aTHX_                aTHX,
+#  define _aTHX                ,aTHX
+#endif
+
 #define STATIC static
 #define CPERLscope(x) x
 #define CPERLarg void
@@ -153,27 +208,6 @@ class CPerlObj;
 #define NOOP (void)0
 #define dNOOP extern int Perl___notused
 
-#ifdef PERL_IMPLICIT_CONTEXT
-#  ifdef USE_THREADS
-struct perl_thread;
-#    define pTHX       register struct perl_thread *thr
-#    define aTHX       thr
-#    define dTHXa(a)   pTHX = (struct perl_thread *)a
-#    define dTHX       dTHXa(SvPVX(PL_thrsv))
-#    define dTHR       dNOOP
-#  else
-#    define MULTIPLICITY
-#    define pTHX       register PerlInterpreter *my_perl
-#    define aTHX       my_perl
-#    define dTHXa(a)   pTHX = (PerlInterpreter *)a
-#    define dTHX       dTHXa(PL_curinterp)
-#  endif
-#  define pTHX_                pTHX,
-#  define _pTHX                ,pTHX
-#  define aTHX_                aTHX,
-#  define _aTHX                ,aTHX
-#endif
-
 #ifndef pTHX
 #  define pTHX         void
 #  define pTHX_
@@ -192,6 +226,7 @@ struct perl_thread;
 #  define aTHXo                aTHX
 #  define aTHXo_       aTHX_
 #  define _aTHXo       _aTHX
+#  define dTHXo                dTHX
 #endif
 
 #ifndef pTHXx
@@ -201,6 +236,7 @@ struct perl_thread;
 #  define aTHXx                my_perl
 #  define aTHXx_       aTHXx,
 #  define _aTHXx       ,aTHXx
+#  define dTHXx                dTHX
 #endif
 
 #undef START_EXTERN_C
@@ -1503,7 +1539,11 @@ typedef pthread_key_t    perl_key;
 #    endif /* WIN32 */
 #  endif /* FAKE_THREADS */
 #endif /* USE_THREADS */
-  
+
+#ifdef WIN32
+#include "win32.h"
+#endif
+
 #ifdef VMS
 #   define STATUS_NATIVE       PL_statusvalue_vms
 #   define STATUS_NATIVE_EXPORT \
@@ -1564,11 +1604,19 @@ typedef pthread_key_t   perl_key;
 #  ifdef FFLUSH_ALL
 #   define PERL_FLUSHALL_FOR_CHILD     my_fflush_all()
 #  else
-#   define PERL_FLUSHALL_FOR_CHILD     (void)0
+#   define PERL_FLUSHALL_FOR_CHILD     NOOP
 #  endif
 # endif
 #endif
 
+#ifndef PERL_SET_INTERP
+#  define PERL_SET_INTERP(i)           (PL_curinterp = (PerlInterpreter*)(i))
+#endif
+
+#ifndef PERL_GET_INTERP
+#  define PERL_GET_INTERP              (PL_curinterp)
+#endif
+
 /* Some unistd.h's give a prototype for pause() even though
    HAS_PAUSE ends up undefined.  This causes the #define
    below to be rejected by the compmiler.  Sigh.
@@ -1637,10 +1685,6 @@ typedef I32 (*filter_t) (pTHXo_ int, SV *, int);
 #define FILTER_DATA(idx)          (AvARRAY(PL_rsfp_filters)[idx])
 #define FILTER_ISREADER(idx)      (idx >= AvFILLp(PL_rsfp_filters))
 
-#ifdef WIN32
-#include "win32.h"
-#endif
-
 #include "iperlsys.h"
 #include "regexp.h"
 #include "sv.h"
@@ -1827,7 +1871,7 @@ Gid_t getegid (void);
 #  if defined(PERL_OBJECT)
 #    define DEBUG_m(a) if (PL_debug & 128)     a
 #  else
-#    define DEBUG_m(a) if (PL_curinterp && PL_debug & 128)     a
+#    define DEBUG_m(a) if (PERL_GET_INTERP && PL_debug & 128)  a
 #  endif
 #define DEBUG_f(a) if (PL_debug & 256) a
 #define DEBUG_r(a) if (PL_debug & 512) a
@@ -2534,7 +2578,6 @@ public:
 #include "pp_proto.h"
 
 #ifdef PERL_OBJECT
-VIRTUAL int CPerlObj::fprintf (PerlIO *pf, const char *pat, ...);
 VIRTUAL int CPerlObj::do_aspawn (void *vreally, void **vmark, void **vsp);
 #undef PERL_DECL_PROT
 #else
@@ -2562,18 +2605,6 @@ VIRTUAL int CPerlObj::do_aspawn (void *vreally, void **vmark, void **vsp);
 #define PERLVARI(var,type,init) EXT type  PL_##var INIT(init);
 #define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init);
 
-#ifndef PERL_GLOBAL_STRUCT
-#  ifndef PERL_OBJECT
-START_EXTERN_C
-#  endif
-
-#  include "perlvars.h"
-
-#  ifndef PERL_OBJECT
-END_EXTERN_C
-#  endif
-#endif
-
 #ifndef MULTIPLICITY
 
 #  include "intrpvar.h"
@@ -2592,6 +2623,7 @@ END_EXTERN_C
 PERLVARA(object_compatibility,30,      char)
 };
 
+
 #  include "embed.h"
 #  if defined(WIN32) && !defined(WIN32IO_IS_STDIO)
 #    define errno      CPerlObj::ErrorNo()
@@ -2608,6 +2640,14 @@ PERLVARA(object_compatibility,30,        char)
 
 #endif  /* PERL_OBJECT */
 
+#ifndef PERL_GLOBAL_STRUCT
+START_EXTERN_C
+
+#  include "perlvars.h"
+
+END_EXTERN_C
+#endif
+
 #undef PERLVAR
 #undef PERLVARA
 #undef PERLVARI
index 855ed22..d3ebc9b 100755 (executable)
--- a/perlapi.c
+++ b/perlapi.c
@@ -16,15 +16,22 @@ START_EXTERN_C
 #undef PERLVARA
 #undef PERLVARI
 #undef PERLVARIC
-#define PERLVAR(v,t)   t* Perl_##v##_ptr(void *p)                      \
-                       { return &(((CPerlObj*)p)->PL_##v); }
-#define PERLVARA(v,n,t)        PL_##v##_t* Perl_##v##_ptr(void *p)             \
-                       { return &(((CPerlObj*)p)->PL_##v); }
+#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,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
@@ -37,252 +44,252 @@ START_EXTERN_C
 
 #undef  Perl_amagic_call
 SV*
-Perl_amagic_call(void *pPerl, SV* left, SV* right, int method, int dir)
+Perl_amagic_call(pTHXo_ SV* left, SV* right, int method, int dir)
 {
     return ((CPerlObj*)pPerl)->Perl_amagic_call(left, right, method, dir);
 }
 
 #undef  Perl_Gv_AMupdate
 bool
-Perl_Gv_AMupdate(void *pPerl, HV* stash)
+Perl_Gv_AMupdate(pTHXo_ HV* stash)
 {
     return ((CPerlObj*)pPerl)->Perl_Gv_AMupdate(stash);
 }
 
 #undef  Perl_append_elem
 OP*
-Perl_append_elem(void *pPerl, I32 optype, OP* head, OP* tail)
+Perl_append_elem(pTHXo_ I32 optype, OP* head, OP* tail)
 {
     return ((CPerlObj*)pPerl)->Perl_append_elem(optype, head, tail);
 }
 
 #undef  Perl_append_list
 OP*
-Perl_append_list(void *pPerl, I32 optype, LISTOP* first, LISTOP* last)
+Perl_append_list(pTHXo_ I32 optype, LISTOP* first, LISTOP* last)
 {
     return ((CPerlObj*)pPerl)->Perl_append_list(optype, first, last);
 }
 
 #undef  Perl_apply
 I32
-Perl_apply(void *pPerl, I32 type, SV** mark, SV** sp)
+Perl_apply(pTHXo_ I32 type, SV** mark, SV** sp)
 {
     return ((CPerlObj*)pPerl)->Perl_apply(type, mark, sp);
 }
 
 #undef  Perl_assertref
 void
-Perl_assertref(void *pPerl, OP* o)
+Perl_assertref(pTHXo_ OP* o)
 {
     ((CPerlObj*)pPerl)->Perl_assertref(o);
 }
 
 #undef  Perl_avhv_exists_ent
 bool
-Perl_avhv_exists_ent(void *pPerl, AV *ar, SV* keysv, U32 hash)
+Perl_avhv_exists_ent(pTHXo_ AV *ar, SV* keysv, U32 hash)
 {
     return ((CPerlObj*)pPerl)->Perl_avhv_exists_ent(ar, keysv, hash);
 }
 
 #undef  Perl_avhv_fetch_ent
 SV**
-Perl_avhv_fetch_ent(void *pPerl, AV *ar, SV* keysv, I32 lval, U32 hash)
+Perl_avhv_fetch_ent(pTHXo_ AV *ar, SV* keysv, I32 lval, U32 hash)
 {
     return ((CPerlObj*)pPerl)->Perl_avhv_fetch_ent(ar, keysv, lval, hash);
 }
 
 #undef  Perl_avhv_iternext
 HE*
-Perl_avhv_iternext(void *pPerl, AV *ar)
+Perl_avhv_iternext(pTHXo_ AV *ar)
 {
     return ((CPerlObj*)pPerl)->Perl_avhv_iternext(ar);
 }
 
 #undef  Perl_avhv_iterval
 SV*
-Perl_avhv_iterval(void *pPerl, AV *ar, HE* entry)
+Perl_avhv_iterval(pTHXo_ AV *ar, HE* entry)
 {
     return ((CPerlObj*)pPerl)->Perl_avhv_iterval(ar, entry);
 }
 
 #undef  Perl_avhv_keys
 HV*
-Perl_avhv_keys(void *pPerl, AV *ar)
+Perl_avhv_keys(pTHXo_ AV *ar)
 {
     return ((CPerlObj*)pPerl)->Perl_avhv_keys(ar);
 }
 
 #undef  Perl_av_clear
 void
-Perl_av_clear(void *pPerl, AV* ar)
+Perl_av_clear(pTHXo_ AV* ar)
 {
     ((CPerlObj*)pPerl)->Perl_av_clear(ar);
 }
 
 #undef  Perl_av_extend
 void
-Perl_av_extend(void *pPerl, AV* ar, I32 key)
+Perl_av_extend(pTHXo_ AV* ar, I32 key)
 {
     ((CPerlObj*)pPerl)->Perl_av_extend(ar, key);
 }
 
 #undef  Perl_av_fake
 AV*
-Perl_av_fake(void *pPerl, I32 size, SV** svp)
+Perl_av_fake(pTHXo_ I32 size, SV** svp)
 {
     return ((CPerlObj*)pPerl)->Perl_av_fake(size, svp);
 }
 
 #undef  Perl_av_fetch
 SV**
-Perl_av_fetch(void *pPerl, AV* ar, I32 key, I32 lval)
+Perl_av_fetch(pTHXo_ AV* ar, I32 key, I32 lval)
 {
     return ((CPerlObj*)pPerl)->Perl_av_fetch(ar, key, lval);
 }
 
 #undef  Perl_av_fill
 void
-Perl_av_fill(void *pPerl, AV* ar, I32 fill)
+Perl_av_fill(pTHXo_ AV* ar, I32 fill)
 {
     ((CPerlObj*)pPerl)->Perl_av_fill(ar, fill);
 }
 
 #undef  Perl_av_len
 I32
-Perl_av_len(void *pPerl, AV* ar)
+Perl_av_len(pTHXo_ AV* ar)
 {
     return ((CPerlObj*)pPerl)->Perl_av_len(ar);
 }
 
 #undef  Perl_av_make
 AV*
-Perl_av_make(void *pPerl, I32 size, SV** svp)
+Perl_av_make(pTHXo_ I32 size, SV** svp)
 {
     return ((CPerlObj*)pPerl)->Perl_av_make(size, svp);
 }
 
 #undef  Perl_av_pop
 SV*
-Perl_av_pop(void *pPerl, AV* ar)
+Perl_av_pop(pTHXo_ AV* ar)
 {
     return ((CPerlObj*)pPerl)->Perl_av_pop(ar);
 }
 
 #undef  Perl_av_push
 void
-Perl_av_push(void *pPerl, AV* ar, SV* val)
+Perl_av_push(pTHXo_ AV* ar, SV* val)
 {
     ((CPerlObj*)pPerl)->Perl_av_push(ar, val);
 }
 
 #undef  Perl_av_reify
 void
-Perl_av_reify(void *pPerl, AV* ar)
+Perl_av_reify(pTHXo_ AV* ar)
 {
     ((CPerlObj*)pPerl)->Perl_av_reify(ar);
 }
 
 #undef  Perl_av_shift
 SV*
-Perl_av_shift(void *pPerl, AV* ar)
+Perl_av_shift(pTHXo_ AV* ar)
 {
     return ((CPerlObj*)pPerl)->Perl_av_shift(ar);
 }
 
 #undef  Perl_av_store
 SV**
-Perl_av_store(void *pPerl, AV* ar, I32 key, SV* val)
+Perl_av_store(pTHXo_ AV* ar, I32 key, SV* val)
 {
     return ((CPerlObj*)pPerl)->Perl_av_store(ar, key, val);
 }
 
 #undef  Perl_av_undef
 void
-Perl_av_undef(void *pPerl, AV* ar)
+Perl_av_undef(pTHXo_ AV* ar)
 {
     ((CPerlObj*)pPerl)->Perl_av_undef(ar);
 }
 
 #undef  Perl_av_unshift
 void
-Perl_av_unshift(void *pPerl, AV* ar, I32 num)
+Perl_av_unshift(pTHXo_ AV* ar, I32 num)
 {
     ((CPerlObj*)pPerl)->Perl_av_unshift(ar, num);
 }
 
 #undef  Perl_bind_match
 OP*
-Perl_bind_match(void *pPerl, I32 type, OP* left, OP* pat)
+Perl_bind_match(pTHXo_ I32 type, OP* left, OP* pat)
 {
     return ((CPerlObj*)pPerl)->Perl_bind_match(type, left, pat);
 }
 
 #undef  Perl_block_end
 OP*
-Perl_block_end(void *pPerl, I32 floor, OP* seq)
+Perl_block_end(pTHXo_ I32 floor, OP* seq)
 {
     return ((CPerlObj*)pPerl)->Perl_block_end(floor, seq);
 }
 
 #undef  Perl_block_gimme
 I32
-Perl_block_gimme(void *pPerl)
+Perl_block_gimme(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_block_gimme();
 }
 
 #undef  Perl_block_start
 int
-Perl_block_start(void *pPerl, int full)
+Perl_block_start(pTHXo_ int full)
 {
     return ((CPerlObj*)pPerl)->Perl_block_start(full);
 }
 
 #undef  Perl_boot_core_UNIVERSAL
 void
-Perl_boot_core_UNIVERSAL(void *pPerl)
+Perl_boot_core_UNIVERSAL(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_boot_core_UNIVERSAL();
 }
 
 #undef  Perl_call_list
 void
-Perl_call_list(void *pPerl, I32 oldscope, AV* av_list)
+Perl_call_list(pTHXo_ I32 oldscope, AV* av_list)
 {
     ((CPerlObj*)pPerl)->Perl_call_list(oldscope, av_list);
 }
 
 #undef  Perl_cando
 I32
-Perl_cando(void *pPerl, I32 bit, I32 effective, Stat_t* statbufp)
+Perl_cando(pTHXo_ I32 bit, I32 effective, Stat_t* statbufp)
 {
     return ((CPerlObj*)pPerl)->Perl_cando(bit, effective, statbufp);
 }
 
 #undef  Perl_cast_ulong
 U32
-Perl_cast_ulong(void *pPerl, NV f)
+Perl_cast_ulong(pTHXo_ NV f)
 {
     return ((CPerlObj*)pPerl)->Perl_cast_ulong(f);
 }
 
 #undef  Perl_cast_i32
 I32
-Perl_cast_i32(void *pPerl, NV f)
+Perl_cast_i32(pTHXo_ NV f)
 {
     return ((CPerlObj*)pPerl)->Perl_cast_i32(f);
 }
 
 #undef  Perl_cast_iv
 IV
-Perl_cast_iv(void *pPerl, NV f)
+Perl_cast_iv(pTHXo_ NV f)
 {
     return ((CPerlObj*)pPerl)->Perl_cast_iv(f);
 }
 
 #undef  Perl_cast_uv
 UV
-Perl_cast_uv(void *pPerl, NV f)
+Perl_cast_uv(pTHXo_ NV f)
 {
     return ((CPerlObj*)pPerl)->Perl_cast_uv(f);
 }
@@ -290,7 +297,7 @@ Perl_cast_uv(void *pPerl, NV f)
 
 #undef  Perl_my_chsize
 I32
-Perl_my_chsize(void *pPerl, int fd, Off_t length)
+Perl_my_chsize(pTHXo_ int fd, Off_t length)
 {
     return ((CPerlObj*)pPerl)->Perl_my_chsize(fd, length);
 }
@@ -299,7 +306,7 @@ Perl_my_chsize(void *pPerl, int fd, Off_t length)
 
 #undef  Perl_condpair_magic
 MAGIC*
-Perl_condpair_magic(void *pPerl, SV *sv)
+Perl_condpair_magic(pTHXo_ SV *sv)
 {
     return ((CPerlObj*)pPerl)->Perl_condpair_magic(sv);
 }
@@ -307,219 +314,405 @@ Perl_condpair_magic(void *pPerl, SV *sv)
 
 #undef  Perl_convert
 OP*
-Perl_convert(void *pPerl, I32 optype, I32 flags, OP* o)
+Perl_convert(pTHXo_ I32 optype, I32 flags, OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_convert(optype, flags, o);
 }
+
+#undef  Perl_croak
+void
+Perl_croak(pTHXo_ const char* pat)
+{
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_vcroak(pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_vcroak
+void
+Perl_vcroak(pTHXo_ const char* pat, va_list* args)
+{
+    ((CPerlObj*)pPerl)->Perl_vcroak(pat, args);
+}
 #if defined(PERL_IMPLICIT_CONTEXT)
+
+#undef  Perl_croak_nocontext
+void
+Perl_croak_nocontext(const char* pat)
+{
+    dTHXo;
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_vcroak(pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_die_nocontext
+OP*
+Perl_die_nocontext(const char* pat)
+{
+    dTHXo;
+    OP* retval;
+    va_list args;
+    va_start(args, pat);
+    retval = ((CPerlObj*)pPerl)->Perl_vdie(pat, &args);
+    va_end(args);
+    return retval;
+
+}
+
+#undef  Perl_deb_nocontext
+void
+Perl_deb_nocontext(const char* pat)
+{
+    dTHXo;
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_vdeb(pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_form_nocontext
+char*
+Perl_form_nocontext(const char* pat)
+{
+    dTHXo;
+    char* retval;
+    va_list args;
+    va_start(args, pat);
+    retval = ((CPerlObj*)pPerl)->Perl_vform(pat, &args);
+    va_end(args);
+    return retval;
+
+}
+
+#undef  Perl_warn_nocontext
+void
+Perl_warn_nocontext(const char* pat)
+{
+    dTHXo;
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_vwarn(pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_warner_nocontext
+void
+Perl_warner_nocontext(U32 err, const char* pat)
+{
+    dTHXo;
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_vwarner(err, pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_newSVpvf_nocontext
+SV*
+Perl_newSVpvf_nocontext(const char* pat)
+{
+    dTHXo;
+    SV* retval;
+    va_list args;
+    va_start(args, pat);
+    retval = ((CPerlObj*)pPerl)->Perl_vnewSVpvf(pat, &args);
+    va_end(args);
+    return retval;
+
+}
+
+#undef  Perl_sv_catpvf_nocontext
+void
+Perl_sv_catpvf_nocontext(SV* sv, const char* pat)
+{
+    dTHXo;
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_sv_vcatpvf(sv, pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_sv_setpvf_nocontext
+void
+Perl_sv_setpvf_nocontext(SV* sv, const char* pat)
+{
+    dTHXo;
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_sv_vsetpvf(sv, pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_sv_catpvf_mg_nocontext
+void
+Perl_sv_catpvf_mg_nocontext(SV* sv, const char* pat)
+{
+    dTHXo;
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_sv_vcatpvf_mg(sv, pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_sv_setpvf_mg_nocontext
+void
+Perl_sv_setpvf_mg_nocontext(SV* sv, const char* pat)
+{
+    dTHXo;
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_sv_vsetpvf_mg(sv, pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_fprintf_nocontext
 #endif
 
 #undef  Perl_cv_ckproto
 void
-Perl_cv_ckproto(void *pPerl, CV* cv, GV* gv, char* p)
+Perl_cv_ckproto(pTHXo_ CV* cv, GV* gv, char* p)
 {
     ((CPerlObj*)pPerl)->Perl_cv_ckproto(cv, gv, p);
 }
 
 #undef  Perl_cv_clone
 CV*
-Perl_cv_clone(void *pPerl, CV* proto)
+Perl_cv_clone(pTHXo_ CV* proto)
 {
     return ((CPerlObj*)pPerl)->Perl_cv_clone(proto);
 }
 
 #undef  Perl_cv_const_sv
 SV*
-Perl_cv_const_sv(void *pPerl, CV* cv)
+Perl_cv_const_sv(pTHXo_ CV* cv)
 {
     return ((CPerlObj*)pPerl)->Perl_cv_const_sv(cv);
 }
 
 #undef  Perl_op_const_sv
 SV*
-Perl_op_const_sv(void *pPerl, OP* o, CV* cv)
+Perl_op_const_sv(pTHXo_ OP* o, CV* cv)
 {
     return ((CPerlObj*)pPerl)->Perl_op_const_sv(o, cv);
 }
 
 #undef  Perl_cv_undef
 void
-Perl_cv_undef(void *pPerl, CV* cv)
+Perl_cv_undef(pTHXo_ CV* cv)
 {
     ((CPerlObj*)pPerl)->Perl_cv_undef(cv);
 }
 
 #undef  Perl_cx_dump
 void
-Perl_cx_dump(void *pPerl, PERL_CONTEXT* cs)
+Perl_cx_dump(pTHXo_ PERL_CONTEXT* cs)
 {
     ((CPerlObj*)pPerl)->Perl_cx_dump(cs);
 }
 
 #undef  Perl_filter_add
 SV*
-Perl_filter_add(void *pPerl, filter_t funcp, SV* datasv)
+Perl_filter_add(pTHXo_ filter_t funcp, SV* datasv)
 {
     return ((CPerlObj*)pPerl)->Perl_filter_add(funcp, datasv);
 }
 
 #undef  Perl_filter_del
 void
-Perl_filter_del(void *pPerl, filter_t funcp)
+Perl_filter_del(pTHXo_ filter_t funcp)
 {
     ((CPerlObj*)pPerl)->Perl_filter_del(funcp);
 }
 
 #undef  Perl_filter_read
 I32
-Perl_filter_read(void *pPerl, int idx, SV* buffer, int maxlen)
+Perl_filter_read(pTHXo_ int idx, SV* buffer, int maxlen)
 {
     return ((CPerlObj*)pPerl)->Perl_filter_read(idx, buffer, maxlen);
 }
 
 #undef  Perl_get_op_descs
 char**
-Perl_get_op_descs(void *pPerl)
+Perl_get_op_descs(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_get_op_descs();
 }
 
 #undef  Perl_get_op_names
 char**
-Perl_get_op_names(void *pPerl)
+Perl_get_op_names(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_get_op_names();
 }
 
 #undef  Perl_get_no_modify
 char*
-Perl_get_no_modify(void *pPerl)
+Perl_get_no_modify(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_get_no_modify();
 }
 
 #undef  Perl_get_opargs
 U32*
-Perl_get_opargs(void *pPerl)
+Perl_get_opargs(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_get_opargs();
 }
 
 #undef  Perl_get_ppaddr
 PPADDR_t*
-Perl_get_ppaddr(void *pPerl)
+Perl_get_ppaddr(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_get_ppaddr();
 }
 
 #undef  Perl_cxinc
 I32
-Perl_cxinc(void *pPerl)
+Perl_cxinc(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_cxinc();
 }
 
+#undef  Perl_deb
+void
+Perl_deb(pTHXo_ const char* pat)
+{
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_vdeb(pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_vdeb
+void
+Perl_vdeb(pTHXo_ const char* pat, va_list* args)
+{
+    ((CPerlObj*)pPerl)->Perl_vdeb(pat, args);
+}
+
 #undef  Perl_deb_growlevel
 void
-Perl_deb_growlevel(void *pPerl)
+Perl_deb_growlevel(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_deb_growlevel();
 }
 
 #undef  Perl_debprofdump
 void
-Perl_debprofdump(void *pPerl)
+Perl_debprofdump(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_debprofdump();
 }
 
 #undef  Perl_debop
 I32
-Perl_debop(void *pPerl, OP* o)
+Perl_debop(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_debop(o);
 }
 
 #undef  Perl_debstack
 I32
-Perl_debstack(void *pPerl)
+Perl_debstack(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_debstack();
 }
 
 #undef  Perl_debstackptrs
 I32
-Perl_debstackptrs(void *pPerl)
+Perl_debstackptrs(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_debstackptrs();
 }
 
 #undef  Perl_delimcpy
 char*
-Perl_delimcpy(void *pPerl, char* to, char* toend, char* from, char* fromend, int delim, I32* retlen)
+Perl_delimcpy(pTHXo_ char* to, char* toend, char* from, char* fromend, int delim, I32* retlen)
 {
     return ((CPerlObj*)pPerl)->Perl_delimcpy(to, toend, from, fromend, delim, retlen);
 }
 
 #undef  Perl_deprecate
 void
-Perl_deprecate(void *pPerl, char* s)
+Perl_deprecate(pTHXo_ char* s)
 {
     ((CPerlObj*)pPerl)->Perl_deprecate(s);
 }
 
+#undef  Perl_die
+OP*
+Perl_die(pTHXo_ const char* pat)
+{
+    OP* retval;
+    va_list args;
+    va_start(args, pat);
+    retval = ((CPerlObj*)pPerl)->Perl_vdie(pat, &args);
+    va_end(args);
+    return retval;
+
+}
+
+#undef  Perl_vdie
+OP*
+Perl_vdie(pTHXo_ const char* pat, va_list* args)
+{
+    return ((CPerlObj*)pPerl)->Perl_vdie(pat, args);
+}
+
 #undef  Perl_die_where
 OP*
-Perl_die_where(void *pPerl, char* message, STRLEN msglen)
+Perl_die_where(pTHXo_ char* message, STRLEN msglen)
 {
     return ((CPerlObj*)pPerl)->Perl_die_where(message, msglen);
 }
 
 #undef  Perl_dounwind
 void
-Perl_dounwind(void *pPerl, I32 cxix)
+Perl_dounwind(pTHXo_ I32 cxix)
 {
     ((CPerlObj*)pPerl)->Perl_dounwind(cxix);
 }
 
 #undef  Perl_do_aexec
 bool
-Perl_do_aexec(void *pPerl, SV* really, SV** mark, SV** sp)
+Perl_do_aexec(pTHXo_ SV* really, SV** mark, SV** sp)
 {
     return ((CPerlObj*)pPerl)->Perl_do_aexec(really, mark, sp);
 }
 
 #undef  Perl_do_binmode
 int
-Perl_do_binmode(void *pPerl, PerlIO *fp, int iotype, int flag)
+Perl_do_binmode(pTHXo_ PerlIO *fp, int iotype, int flag)
 {
     return ((CPerlObj*)pPerl)->Perl_do_binmode(fp, iotype, flag);
 }
 
 #undef  Perl_do_chop
 void
-Perl_do_chop(void *pPerl, SV* asv, SV* sv)
+Perl_do_chop(pTHXo_ SV* asv, SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_do_chop(asv, sv);
 }
 
 #undef  Perl_do_close
 bool
-Perl_do_close(void *pPerl, GV* gv, bool not_implicit)
+Perl_do_close(pTHXo_ GV* gv, bool not_implicit)
 {
     return ((CPerlObj*)pPerl)->Perl_do_close(gv, not_implicit);
 }
 
 #undef  Perl_do_eof
 bool
-Perl_do_eof(void *pPerl, GV* gv)
+Perl_do_eof(pTHXo_ GV* gv)
 {
     return ((CPerlObj*)pPerl)->Perl_do_eof(gv);
 }
 
 #undef  Perl_do_exec
 bool
-Perl_do_exec(void *pPerl, char* cmd)
+Perl_do_exec(pTHXo_ char* cmd)
 {
     return ((CPerlObj*)pPerl)->Perl_do_exec(cmd);
 }
@@ -527,7 +720,7 @@ Perl_do_exec(void *pPerl, char* cmd)
 
 #undef  Perl_do_exec3
 bool
-Perl_do_exec3(void *pPerl, char* cmd, int fd, int flag)
+Perl_do_exec3(pTHXo_ char* cmd, int fd, int flag)
 {
     return ((CPerlObj*)pPerl)->Perl_do_exec3(cmd, fd, flag);
 }
@@ -535,7 +728,7 @@ Perl_do_exec3(void *pPerl, char* cmd, int fd, int flag)
 
 #undef  Perl_do_execfree
 void
-Perl_do_execfree(void *pPerl)
+Perl_do_execfree(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_do_execfree();
 }
@@ -543,42 +736,42 @@ Perl_do_execfree(void *pPerl)
 
 #undef  Perl_do_ipcctl
 I32
-Perl_do_ipcctl(void *pPerl, I32 optype, SV** mark, SV** sp)
+Perl_do_ipcctl(pTHXo_ I32 optype, SV** mark, SV** sp)
 {
     return ((CPerlObj*)pPerl)->Perl_do_ipcctl(optype, mark, sp);
 }
 
 #undef  Perl_do_ipcget
 I32
-Perl_do_ipcget(void *pPerl, I32 optype, SV** mark, SV** sp)
+Perl_do_ipcget(pTHXo_ I32 optype, SV** mark, SV** sp)
 {
     return ((CPerlObj*)pPerl)->Perl_do_ipcget(optype, mark, sp);
 }
 
 #undef  Perl_do_msgrcv
 I32
-Perl_do_msgrcv(void *pPerl, SV** mark, SV** sp)
+Perl_do_msgrcv(pTHXo_ SV** mark, SV** sp)
 {
     return ((CPerlObj*)pPerl)->Perl_do_msgrcv(mark, sp);
 }
 
 #undef  Perl_do_msgsnd
 I32
-Perl_do_msgsnd(void *pPerl, SV** mark, SV** sp)
+Perl_do_msgsnd(pTHXo_ SV** mark, SV** sp)
 {
     return ((CPerlObj*)pPerl)->Perl_do_msgsnd(mark, sp);
 }
 
 #undef  Perl_do_semop
 I32
-Perl_do_semop(void *pPerl, SV** mark, SV** sp)
+Perl_do_semop(pTHXo_ SV** mark, SV** sp)
 {
     return ((CPerlObj*)pPerl)->Perl_do_semop(mark, sp);
 }
 
 #undef  Perl_do_shmio
 I32
-Perl_do_shmio(void *pPerl, I32 optype, SV** mark, SV** sp)
+Perl_do_shmio(pTHXo_ I32 optype, SV** mark, SV** sp)
 {
     return ((CPerlObj*)pPerl)->Perl_do_shmio(optype, mark, sp);
 }
@@ -586,126 +779,126 @@ Perl_do_shmio(void *pPerl, I32 optype, SV** mark, SV** sp)
 
 #undef  Perl_do_join
 void
-Perl_do_join(void *pPerl, SV* sv, SV* del, SV** mark, SV** sp)
+Perl_do_join(pTHXo_ SV* sv, SV* del, SV** mark, SV** sp)
 {
     ((CPerlObj*)pPerl)->Perl_do_join(sv, del, mark, sp);
 }
 
 #undef  Perl_do_kv
 OP*
-Perl_do_kv(void *pPerl)
+Perl_do_kv(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_do_kv();
 }
 
 #undef  Perl_do_open
 bool
-Perl_do_open(void *pPerl, GV* gv, char* name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO* supplied_fp)
+Perl_do_open(pTHXo_ GV* gv, char* name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO* supplied_fp)
 {
     return ((CPerlObj*)pPerl)->Perl_do_open(gv, name, len, as_raw, rawmode, rawperm, supplied_fp);
 }
 
 #undef  Perl_do_pipe
 void
-Perl_do_pipe(void *pPerl, SV* sv, GV* rgv, GV* wgv)
+Perl_do_pipe(pTHXo_ SV* sv, GV* rgv, GV* wgv)
 {
     ((CPerlObj*)pPerl)->Perl_do_pipe(sv, rgv, wgv);
 }
 
 #undef  Perl_do_print
 bool
-Perl_do_print(void *pPerl, SV* sv, PerlIO* fp)
+Perl_do_print(pTHXo_ SV* sv, PerlIO* fp)
 {
     return ((CPerlObj*)pPerl)->Perl_do_print(sv, fp);
 }
 
 #undef  Perl_do_readline
 OP*
-Perl_do_readline(void *pPerl)
+Perl_do_readline(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_do_readline();
 }
 
 #undef  Perl_do_chomp
 I32
-Perl_do_chomp(void *pPerl, SV* sv)
+Perl_do_chomp(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_do_chomp(sv);
 }
 
 #undef  Perl_do_seek
 bool
-Perl_do_seek(void *pPerl, GV* gv, Off_t pos, int whence)
+Perl_do_seek(pTHXo_ GV* gv, Off_t pos, int whence)
 {
     return ((CPerlObj*)pPerl)->Perl_do_seek(gv, pos, whence);
 }
 
 #undef  Perl_do_sprintf
 void
-Perl_do_sprintf(void *pPerl, SV* sv, I32 len, SV** sarg)
+Perl_do_sprintf(pTHXo_ SV* sv, I32 len, SV** sarg)
 {
     ((CPerlObj*)pPerl)->Perl_do_sprintf(sv, len, sarg);
 }
 
 #undef  Perl_do_sysseek
 Off_t
-Perl_do_sysseek(void *pPerl, GV* gv, Off_t pos, int whence)
+Perl_do_sysseek(pTHXo_ GV* gv, Off_t pos, int whence)
 {
     return ((CPerlObj*)pPerl)->Perl_do_sysseek(gv, pos, whence);
 }
 
 #undef  Perl_do_tell
 Off_t
-Perl_do_tell(void *pPerl, GV* gv)
+Perl_do_tell(pTHXo_ GV* gv)
 {
     return ((CPerlObj*)pPerl)->Perl_do_tell(gv);
 }
 
 #undef  Perl_do_trans
 I32
-Perl_do_trans(void *pPerl, SV* sv)
+Perl_do_trans(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_do_trans(sv);
 }
 
 #undef  Perl_do_vecset
 void
-Perl_do_vecset(void *pPerl, SV* sv)
+Perl_do_vecset(pTHXo_ SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_do_vecset(sv);
 }
 
 #undef  Perl_do_vop
 void
-Perl_do_vop(void *pPerl, I32 optype, SV* sv, SV* left, SV* right)
+Perl_do_vop(pTHXo_ I32 optype, SV* sv, SV* left, SV* right)
 {
     ((CPerlObj*)pPerl)->Perl_do_vop(optype, sv, left, right);
 }
 
 #undef  Perl_dofile
 OP*
-Perl_dofile(void *pPerl, OP* term)
+Perl_dofile(pTHXo_ OP* term)
 {
     return ((CPerlObj*)pPerl)->Perl_dofile(term);
 }
 
 #undef  Perl_dowantarray
 I32
-Perl_dowantarray(void *pPerl)
+Perl_dowantarray(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_dowantarray();
 }
 
 #undef  Perl_dump_all
 void
-Perl_dump_all(void *pPerl)
+Perl_dump_all(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_dump_all();
 }
 
 #undef  Perl_dump_eval
 void
-Perl_dump_eval(void *pPerl)
+Perl_dump_eval(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_dump_eval();
 }
@@ -713,7 +906,7 @@ Perl_dump_eval(void *pPerl)
 
 #undef  Perl_dump_fds
 void
-Perl_dump_fds(void *pPerl, char* s)
+Perl_dump_fds(pTHXo_ char* s)
 {
     ((CPerlObj*)pPerl)->Perl_dump_fds(s);
 }
@@ -721,63 +914,63 @@ Perl_dump_fds(void *pPerl, char* s)
 
 #undef  Perl_dump_form
 void
-Perl_dump_form(void *pPerl, GV* gv)
+Perl_dump_form(pTHXo_ GV* gv)
 {
     ((CPerlObj*)pPerl)->Perl_dump_form(gv);
 }
 
 #undef  Perl_gv_dump
 void
-Perl_gv_dump(void *pPerl, GV* gv)
+Perl_gv_dump(pTHXo_ GV* gv)
 {
     ((CPerlObj*)pPerl)->Perl_gv_dump(gv);
 }
 
 #undef  Perl_op_dump
 void
-Perl_op_dump(void *pPerl, OP* arg)
+Perl_op_dump(pTHXo_ OP* arg)
 {
     ((CPerlObj*)pPerl)->Perl_op_dump(arg);
 }
 
 #undef  Perl_pmop_dump
 void
-Perl_pmop_dump(void *pPerl, PMOP* pm)
+Perl_pmop_dump(pTHXo_ PMOP* pm)
 {
     ((CPerlObj*)pPerl)->Perl_pmop_dump(pm);
 }
 
 #undef  Perl_dump_packsubs
 void
-Perl_dump_packsubs(void *pPerl, HV* stash)
+Perl_dump_packsubs(pTHXo_ HV* stash)
 {
     ((CPerlObj*)pPerl)->Perl_dump_packsubs(stash);
 }
 
 #undef  Perl_dump_sub
 void
-Perl_dump_sub(void *pPerl, GV* gv)
+Perl_dump_sub(pTHXo_ GV* gv)
 {
     ((CPerlObj*)pPerl)->Perl_dump_sub(gv);
 }
 
 #undef  Perl_fbm_compile
 void
-Perl_fbm_compile(void *pPerl, SV* sv, U32 flags)
+Perl_fbm_compile(pTHXo_ SV* sv, U32 flags)
 {
     ((CPerlObj*)pPerl)->Perl_fbm_compile(sv, flags);
 }
 
 #undef  Perl_fbm_instr
 char*
-Perl_fbm_instr(void *pPerl, unsigned char* big, unsigned char* bigend, SV* littlesv, U32 flags)
+Perl_fbm_instr(pTHXo_ unsigned char* big, unsigned char* bigend, SV* littlesv, U32 flags)
 {
     return ((CPerlObj*)pPerl)->Perl_fbm_instr(big, bigend, littlesv, flags);
 }
 
 #undef  Perl_find_script
 char*
-Perl_find_script(void *pPerl, char *scriptname, bool dosearch, char **search_ext, I32 flags)
+Perl_find_script(pTHXo_ char *scriptname, bool dosearch, char **search_ext, I32 flags)
 {
     return ((CPerlObj*)pPerl)->Perl_find_script(scriptname, dosearch, search_ext, flags);
 }
@@ -785,7 +978,7 @@ Perl_find_script(void *pPerl, char *scriptname, bool dosearch, char **search_ext
 
 #undef  Perl_find_threadsv
 PADOFFSET
-Perl_find_threadsv(void *pPerl, const char *name)
+Perl_find_threadsv(pTHXo_ const char *name)
 {
     return ((CPerlObj*)pPerl)->Perl_find_threadsv(name);
 }
@@ -793,28 +986,48 @@ Perl_find_threadsv(void *pPerl, const char *name)
 
 #undef  Perl_force_list
 OP*
-Perl_force_list(void *pPerl, OP* arg)
+Perl_force_list(pTHXo_ OP* arg)
 {
     return ((CPerlObj*)pPerl)->Perl_force_list(arg);
 }
 
 #undef  Perl_fold_constants
 OP*
-Perl_fold_constants(void *pPerl, OP* arg)
+Perl_fold_constants(pTHXo_ OP* arg)
 {
     return ((CPerlObj*)pPerl)->Perl_fold_constants(arg);
 }
 
+#undef  Perl_form
+char*
+Perl_form(pTHXo_ const char* pat)
+{
+    char* retval;
+    va_list args;
+    va_start(args, pat);
+    retval = ((CPerlObj*)pPerl)->Perl_vform(pat, &args);
+    va_end(args);
+    return retval;
+
+}
+
+#undef  Perl_vform
+char*
+Perl_vform(pTHXo_ const char* pat, va_list* args)
+{
+    return ((CPerlObj*)pPerl)->Perl_vform(pat, args);
+}
+
 #undef  Perl_free_tmps
 void
-Perl_free_tmps(void *pPerl)
+Perl_free_tmps(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_free_tmps();
 }
 
 #undef  Perl_gen_constant_list
 OP*
-Perl_gen_constant_list(void *pPerl, OP* o)
+Perl_gen_constant_list(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_gen_constant_list(o);
 }
@@ -822,7 +1035,7 @@ Perl_gen_constant_list(void *pPerl, OP* o)
 
 #undef  Perl_getenv_len
 char*
-Perl_getenv_len(void *pPerl, char* key, unsigned long *len)
+Perl_getenv_len(pTHXo_ char* key, unsigned long *len)
 {
     return ((CPerlObj*)pPerl)->Perl_getenv_len(key, len);
 }
@@ -830,882 +1043,882 @@ Perl_getenv_len(void *pPerl, char* key, unsigned long *len)
 
 #undef  Perl_gp_free
 void
-Perl_gp_free(void *pPerl, GV* gv)
+Perl_gp_free(pTHXo_ GV* gv)
 {
     ((CPerlObj*)pPerl)->Perl_gp_free(gv);
 }
 
 #undef  Perl_gp_ref
 GP*
-Perl_gp_ref(void *pPerl, GP* gp)
+Perl_gp_ref(pTHXo_ GP* gp)
 {
     return ((CPerlObj*)pPerl)->Perl_gp_ref(gp);
 }
 
 #undef  Perl_gv_AVadd
 GV*
-Perl_gv_AVadd(void *pPerl, GV* gv)
+Perl_gv_AVadd(pTHXo_ GV* gv)
 {
     return ((CPerlObj*)pPerl)->Perl_gv_AVadd(gv);
 }
 
 #undef  Perl_gv_HVadd
 GV*
-Perl_gv_HVadd(void *pPerl, GV* gv)
+Perl_gv_HVadd(pTHXo_ GV* gv)
 {
     return ((CPerlObj*)pPerl)->Perl_gv_HVadd(gv);
 }
 
 #undef  Perl_gv_IOadd
 GV*
-Perl_gv_IOadd(void *pPerl, GV* gv)
+Perl_gv_IOadd(pTHXo_ GV* gv)
 {
     return ((CPerlObj*)pPerl)->Perl_gv_IOadd(gv);
 }
 
 #undef  Perl_gv_autoload4
 GV*
-Perl_gv_autoload4(void *pPerl, HV* stash, const char* name, STRLEN len, I32 method)
+Perl_gv_autoload4(pTHXo_ HV* stash, const char* name, STRLEN len, I32 method)
 {
     return ((CPerlObj*)pPerl)->Perl_gv_autoload4(stash, name, len, method);
 }
 
 #undef  Perl_gv_check
 void
-Perl_gv_check(void *pPerl, HV* stash)
+Perl_gv_check(pTHXo_ HV* stash)
 {
     ((CPerlObj*)pPerl)->Perl_gv_check(stash);
 }
 
 #undef  Perl_gv_efullname
 void
-Perl_gv_efullname(void *pPerl, SV* sv, GV* gv)
+Perl_gv_efullname(pTHXo_ SV* sv, GV* gv)
 {
     ((CPerlObj*)pPerl)->Perl_gv_efullname(sv, gv);
 }
 
 #undef  Perl_gv_efullname3
 void
-Perl_gv_efullname3(void *pPerl, SV* sv, GV* gv, const char* prefix)
+Perl_gv_efullname3(pTHXo_ SV* sv, GV* gv, const char* prefix)
 {
     ((CPerlObj*)pPerl)->Perl_gv_efullname3(sv, gv, prefix);
 }
 
 #undef  Perl_gv_fetchfile
 GV*
-Perl_gv_fetchfile(void *pPerl, const char* name)
+Perl_gv_fetchfile(pTHXo_ const char* name)
 {
     return ((CPerlObj*)pPerl)->Perl_gv_fetchfile(name);
 }
 
 #undef  Perl_gv_fetchmeth
 GV*
-Perl_gv_fetchmeth(void *pPerl, HV* stash, const char* name, STRLEN len, I32 level)
+Perl_gv_fetchmeth(pTHXo_ HV* stash, const char* name, STRLEN len, I32 level)
 {
     return ((CPerlObj*)pPerl)->Perl_gv_fetchmeth(stash, name, len, level);
 }
 
 #undef  Perl_gv_fetchmethod
 GV*
-Perl_gv_fetchmethod(void *pPerl, HV* stash, const char* name)
+Perl_gv_fetchmethod(pTHXo_ HV* stash, const char* name)
 {
     return ((CPerlObj*)pPerl)->Perl_gv_fetchmethod(stash, name);
 }
 
 #undef  Perl_gv_fetchmethod_autoload
 GV*
-Perl_gv_fetchmethod_autoload(void *pPerl, HV* stash, const char* name, I32 autoload)
+Perl_gv_fetchmethod_autoload(pTHXo_ HV* stash, const char* name, I32 autoload)
 {
     return ((CPerlObj*)pPerl)->Perl_gv_fetchmethod_autoload(stash, name, autoload);
 }
 
 #undef  Perl_gv_fetchpv
 GV*
-Perl_gv_fetchpv(void *pPerl, const char* name, I32 add, I32 sv_type)
+Perl_gv_fetchpv(pTHXo_ const char* name, I32 add, I32 sv_type)
 {
     return ((CPerlObj*)pPerl)->Perl_gv_fetchpv(name, add, sv_type);
 }
 
 #undef  Perl_gv_fullname
 void
-Perl_gv_fullname(void *pPerl, SV* sv, GV* gv)
+Perl_gv_fullname(pTHXo_ SV* sv, GV* gv)
 {
     ((CPerlObj*)pPerl)->Perl_gv_fullname(sv, gv);
 }
 
 #undef  Perl_gv_fullname3
 void
-Perl_gv_fullname3(void *pPerl, SV* sv, GV* gv, const char* prefix)
+Perl_gv_fullname3(pTHXo_ SV* sv, GV* gv, const char* prefix)
 {
     ((CPerlObj*)pPerl)->Perl_gv_fullname3(sv, gv, prefix);
 }
 
 #undef  Perl_gv_init
 void
-Perl_gv_init(void *pPerl, GV* gv, HV* stash, const char* name, STRLEN len, int multi)
+Perl_gv_init(pTHXo_ GV* gv, HV* stash, const char* name, STRLEN len, int multi)
 {
     ((CPerlObj*)pPerl)->Perl_gv_init(gv, stash, name, len, multi);
 }
 
 #undef  Perl_gv_stashpv
 HV*
-Perl_gv_stashpv(void *pPerl, const char* name, I32 create)
+Perl_gv_stashpv(pTHXo_ const char* name, I32 create)
 {
     return ((CPerlObj*)pPerl)->Perl_gv_stashpv(name, create);
 }
 
 #undef  Perl_gv_stashpvn
 HV*
-Perl_gv_stashpvn(void *pPerl, const char* name, U32 namelen, I32 create)
+Perl_gv_stashpvn(pTHXo_ const char* name, U32 namelen, I32 create)
 {
     return ((CPerlObj*)pPerl)->Perl_gv_stashpvn(name, namelen, create);
 }
 
 #undef  Perl_gv_stashsv
 HV*
-Perl_gv_stashsv(void *pPerl, SV* sv, I32 create)
+Perl_gv_stashsv(pTHXo_ SV* sv, I32 create)
 {
     return ((CPerlObj*)pPerl)->Perl_gv_stashsv(sv, create);
 }
 
 #undef  Perl_hv_clear
 void
-Perl_hv_clear(void *pPerl, HV* tb)
+Perl_hv_clear(pTHXo_ HV* tb)
 {
     ((CPerlObj*)pPerl)->Perl_hv_clear(tb);
 }
 
 #undef  Perl_hv_delayfree_ent
 void
-Perl_hv_delayfree_ent(void *pPerl, HV* hv, HE* entry)
+Perl_hv_delayfree_ent(pTHXo_ HV* hv, HE* entry)
 {
     ((CPerlObj*)pPerl)->Perl_hv_delayfree_ent(hv, entry);
 }
 
 #undef  Perl_hv_delete
 SV*
-Perl_hv_delete(void *pPerl, HV* tb, const char* key, U32 klen, I32 flags)
+Perl_hv_delete(pTHXo_ HV* tb, const char* key, U32 klen, I32 flags)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_delete(tb, key, klen, flags);
 }
 
 #undef  Perl_hv_delete_ent
 SV*
-Perl_hv_delete_ent(void *pPerl, HV* tb, SV* key, I32 flags, U32 hash)
+Perl_hv_delete_ent(pTHXo_ HV* tb, SV* key, I32 flags, U32 hash)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_delete_ent(tb, key, flags, hash);
 }
 
 #undef  Perl_hv_exists
 bool
-Perl_hv_exists(void *pPerl, HV* tb, const char* key, U32 klen)
+Perl_hv_exists(pTHXo_ HV* tb, const char* key, U32 klen)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_exists(tb, key, klen);
 }
 
 #undef  Perl_hv_exists_ent
 bool
-Perl_hv_exists_ent(void *pPerl, HV* tb, SV* key, U32 hash)
+Perl_hv_exists_ent(pTHXo_ HV* tb, SV* key, U32 hash)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_exists_ent(tb, key, hash);
 }
 
 #undef  Perl_hv_fetch
 SV**
-Perl_hv_fetch(void *pPerl, HV* tb, const char* key, U32 klen, I32 lval)
+Perl_hv_fetch(pTHXo_ HV* tb, const char* key, U32 klen, I32 lval)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_fetch(tb, key, klen, lval);
 }
 
 #undef  Perl_hv_fetch_ent
 HE*
-Perl_hv_fetch_ent(void *pPerl, HV* tb, SV* key, I32 lval, U32 hash)
+Perl_hv_fetch_ent(pTHXo_ HV* tb, SV* key, I32 lval, U32 hash)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_fetch_ent(tb, key, lval, hash);
 }
 
 #undef  Perl_hv_free_ent
 void
-Perl_hv_free_ent(void *pPerl, HV* hv, HE* entry)
+Perl_hv_free_ent(pTHXo_ HV* hv, HE* entry)
 {
     ((CPerlObj*)pPerl)->Perl_hv_free_ent(hv, entry);
 }
 
 #undef  Perl_hv_iterinit
 I32
-Perl_hv_iterinit(void *pPerl, HV* tb)
+Perl_hv_iterinit(pTHXo_ HV* tb)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_iterinit(tb);
 }
 
 #undef  Perl_hv_iterkey
 char*
-Perl_hv_iterkey(void *pPerl, HE* entry, I32* retlen)
+Perl_hv_iterkey(pTHXo_ HE* entry, I32* retlen)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_iterkey(entry, retlen);
 }
 
 #undef  Perl_hv_iterkeysv
 SV*
-Perl_hv_iterkeysv(void *pPerl, HE* entry)
+Perl_hv_iterkeysv(pTHXo_ HE* entry)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_iterkeysv(entry);
 }
 
 #undef  Perl_hv_iternext
 HE*
-Perl_hv_iternext(void *pPerl, HV* tb)
+Perl_hv_iternext(pTHXo_ HV* tb)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_iternext(tb);
 }
 
 #undef  Perl_hv_iternextsv
 SV*
-Perl_hv_iternextsv(void *pPerl, HV* hv, char** key, I32* retlen)
+Perl_hv_iternextsv(pTHXo_ HV* hv, char** key, I32* retlen)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_iternextsv(hv, key, retlen);
 }
 
 #undef  Perl_hv_iterval
 SV*
-Perl_hv_iterval(void *pPerl, HV* tb, HE* entry)
+Perl_hv_iterval(pTHXo_ HV* tb, HE* entry)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_iterval(tb, entry);
 }
 
 #undef  Perl_hv_ksplit
 void
-Perl_hv_ksplit(void *pPerl, HV* hv, IV newmax)
+Perl_hv_ksplit(pTHXo_ HV* hv, IV newmax)
 {
     ((CPerlObj*)pPerl)->Perl_hv_ksplit(hv, newmax);
 }
 
 #undef  Perl_hv_magic
 void
-Perl_hv_magic(void *pPerl, HV* hv, GV* gv, int how)
+Perl_hv_magic(pTHXo_ HV* hv, GV* gv, int how)
 {
     ((CPerlObj*)pPerl)->Perl_hv_magic(hv, gv, how);
 }
 
 #undef  Perl_hv_store
 SV**
-Perl_hv_store(void *pPerl, HV* tb, const char* key, U32 klen, SV* val, U32 hash)
+Perl_hv_store(pTHXo_ HV* tb, const char* key, U32 klen, SV* val, U32 hash)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_store(tb, key, klen, val, hash);
 }
 
 #undef  Perl_hv_store_ent
 HE*
-Perl_hv_store_ent(void *pPerl, HV* tb, SV* key, SV* val, U32 hash)
+Perl_hv_store_ent(pTHXo_ HV* tb, SV* key, SV* val, U32 hash)
 {
     return ((CPerlObj*)pPerl)->Perl_hv_store_ent(tb, key, val, hash);
 }
 
 #undef  Perl_hv_undef
 void
-Perl_hv_undef(void *pPerl, HV* tb)
+Perl_hv_undef(pTHXo_ HV* tb)
 {
     ((CPerlObj*)pPerl)->Perl_hv_undef(tb);
 }
 
 #undef  Perl_ibcmp
 I32
-Perl_ibcmp(void *pPerl, const char* a, const char* b, I32 len)
+Perl_ibcmp(pTHXo_ const char* a, const char* b, I32 len)
 {
     return ((CPerlObj*)pPerl)->Perl_ibcmp(a, b, len);
 }
 
 #undef  Perl_ibcmp_locale
 I32
-Perl_ibcmp_locale(void *pPerl, const char* a, const char* b, I32 len)
+Perl_ibcmp_locale(pTHXo_ const char* a, const char* b, I32 len)
 {
     return ((CPerlObj*)pPerl)->Perl_ibcmp_locale(a, b, len);
 }
 
 #undef  Perl_ingroup
 I32
-Perl_ingroup(void *pPerl, I32 testgid, I32 effective)
+Perl_ingroup(pTHXo_ I32 testgid, I32 effective)
 {
     return ((CPerlObj*)pPerl)->Perl_ingroup(testgid, effective);
 }
 
 #undef  Perl_init_stacks
 void
-Perl_init_stacks(void *pPerl)
+Perl_init_stacks(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_init_stacks();
 }
 
 #undef  Perl_intro_my
 U32
-Perl_intro_my(void *pPerl)
+Perl_intro_my(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_intro_my();
 }
 
 #undef  Perl_instr
 char*
-Perl_instr(void *pPerl, const char* big, const char* little)
+Perl_instr(pTHXo_ const char* big, const char* little)
 {
     return ((CPerlObj*)pPerl)->Perl_instr(big, little);
 }
 
 #undef  Perl_io_close
 bool
-Perl_io_close(void *pPerl, IO* io)
+Perl_io_close(pTHXo_ IO* io)
 {
     return ((CPerlObj*)pPerl)->Perl_io_close(io);
 }
 
 #undef  Perl_invert
 OP*
-Perl_invert(void *pPerl, OP* cmd)
+Perl_invert(pTHXo_ OP* cmd)
 {
     return ((CPerlObj*)pPerl)->Perl_invert(cmd);
 }
 
 #undef  Perl_is_uni_alnum
 bool
-Perl_is_uni_alnum(void *pPerl, U32 c)
+Perl_is_uni_alnum(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_alnum(c);
 }
 
 #undef  Perl_is_uni_alnumc
 bool
-Perl_is_uni_alnumc(void *pPerl, U32 c)
+Perl_is_uni_alnumc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_alnumc(c);
 }
 
 #undef  Perl_is_uni_idfirst
 bool
-Perl_is_uni_idfirst(void *pPerl, U32 c)
+Perl_is_uni_idfirst(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_idfirst(c);
 }
 
 #undef  Perl_is_uni_alpha
 bool
-Perl_is_uni_alpha(void *pPerl, U32 c)
+Perl_is_uni_alpha(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_alpha(c);
 }
 
 #undef  Perl_is_uni_ascii
 bool
-Perl_is_uni_ascii(void *pPerl, U32 c)
+Perl_is_uni_ascii(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_ascii(c);
 }
 
 #undef  Perl_is_uni_space
 bool
-Perl_is_uni_space(void *pPerl, U32 c)
+Perl_is_uni_space(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_space(c);
 }
 
 #undef  Perl_is_uni_cntrl
 bool
-Perl_is_uni_cntrl(void *pPerl, U32 c)
+Perl_is_uni_cntrl(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_cntrl(c);
 }
 
 #undef  Perl_is_uni_graph
 bool
-Perl_is_uni_graph(void *pPerl, U32 c)
+Perl_is_uni_graph(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_graph(c);
 }
 
 #undef  Perl_is_uni_digit
 bool
-Perl_is_uni_digit(void *pPerl, U32 c)
+Perl_is_uni_digit(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_digit(c);
 }
 
 #undef  Perl_is_uni_upper
 bool
-Perl_is_uni_upper(void *pPerl, U32 c)
+Perl_is_uni_upper(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_upper(c);
 }
 
 #undef  Perl_is_uni_lower
 bool
-Perl_is_uni_lower(void *pPerl, U32 c)
+Perl_is_uni_lower(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_lower(c);
 }
 
 #undef  Perl_is_uni_print
 bool
-Perl_is_uni_print(void *pPerl, U32 c)
+Perl_is_uni_print(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_print(c);
 }
 
 #undef  Perl_is_uni_punct
 bool
-Perl_is_uni_punct(void *pPerl, U32 c)
+Perl_is_uni_punct(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_punct(c);
 }
 
 #undef  Perl_is_uni_xdigit
 bool
-Perl_is_uni_xdigit(void *pPerl, U32 c)
+Perl_is_uni_xdigit(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_xdigit(c);
 }
 
 #undef  Perl_to_uni_upper
 U32
-Perl_to_uni_upper(void *pPerl, U32 c)
+Perl_to_uni_upper(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_to_uni_upper(c);
 }
 
 #undef  Perl_to_uni_title
 U32
-Perl_to_uni_title(void *pPerl, U32 c)
+Perl_to_uni_title(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_to_uni_title(c);
 }
 
 #undef  Perl_to_uni_lower
 U32
-Perl_to_uni_lower(void *pPerl, U32 c)
+Perl_to_uni_lower(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_to_uni_lower(c);
 }
 
 #undef  Perl_is_uni_alnum_lc
 bool
-Perl_is_uni_alnum_lc(void *pPerl, U32 c)
+Perl_is_uni_alnum_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_alnum_lc(c);
 }
 
 #undef  Perl_is_uni_alnumc_lc
 bool
-Perl_is_uni_alnumc_lc(void *pPerl, U32 c)
+Perl_is_uni_alnumc_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_alnumc_lc(c);
 }
 
 #undef  Perl_is_uni_idfirst_lc
 bool
-Perl_is_uni_idfirst_lc(void *pPerl, U32 c)
+Perl_is_uni_idfirst_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_idfirst_lc(c);
 }
 
 #undef  Perl_is_uni_alpha_lc
 bool
-Perl_is_uni_alpha_lc(void *pPerl, U32 c)
+Perl_is_uni_alpha_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_alpha_lc(c);
 }
 
 #undef  Perl_is_uni_ascii_lc
 bool
-Perl_is_uni_ascii_lc(void *pPerl, U32 c)
+Perl_is_uni_ascii_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_ascii_lc(c);
 }
 
 #undef  Perl_is_uni_space_lc
 bool
-Perl_is_uni_space_lc(void *pPerl, U32 c)
+Perl_is_uni_space_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_space_lc(c);
 }
 
 #undef  Perl_is_uni_cntrl_lc
 bool
-Perl_is_uni_cntrl_lc(void *pPerl, U32 c)
+Perl_is_uni_cntrl_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_cntrl_lc(c);
 }
 
 #undef  Perl_is_uni_graph_lc
 bool
-Perl_is_uni_graph_lc(void *pPerl, U32 c)
+Perl_is_uni_graph_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_graph_lc(c);
 }
 
 #undef  Perl_is_uni_digit_lc
 bool
-Perl_is_uni_digit_lc(void *pPerl, U32 c)
+Perl_is_uni_digit_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_digit_lc(c);
 }
 
 #undef  Perl_is_uni_upper_lc
 bool
-Perl_is_uni_upper_lc(void *pPerl, U32 c)
+Perl_is_uni_upper_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_upper_lc(c);
 }
 
 #undef  Perl_is_uni_lower_lc
 bool
-Perl_is_uni_lower_lc(void *pPerl, U32 c)
+Perl_is_uni_lower_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_lower_lc(c);
 }
 
 #undef  Perl_is_uni_print_lc
 bool
-Perl_is_uni_print_lc(void *pPerl, U32 c)
+Perl_is_uni_print_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_print_lc(c);
 }
 
 #undef  Perl_is_uni_punct_lc
 bool
-Perl_is_uni_punct_lc(void *pPerl, U32 c)
+Perl_is_uni_punct_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_punct_lc(c);
 }
 
 #undef  Perl_is_uni_xdigit_lc
 bool
-Perl_is_uni_xdigit_lc(void *pPerl, U32 c)
+Perl_is_uni_xdigit_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_is_uni_xdigit_lc(c);
 }
 
 #undef  Perl_to_uni_upper_lc
 U32
-Perl_to_uni_upper_lc(void *pPerl, U32 c)
+Perl_to_uni_upper_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_to_uni_upper_lc(c);
 }
 
 #undef  Perl_to_uni_title_lc
 U32
-Perl_to_uni_title_lc(void *pPerl, U32 c)
+Perl_to_uni_title_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_to_uni_title_lc(c);
 }
 
 #undef  Perl_to_uni_lower_lc
 U32
-Perl_to_uni_lower_lc(void *pPerl, U32 c)
+Perl_to_uni_lower_lc(pTHXo_ U32 c)
 {
     return ((CPerlObj*)pPerl)->Perl_to_uni_lower_lc(c);
 }
 
 #undef  Perl_is_utf8_alnum
 bool
-Perl_is_utf8_alnum(void *pPerl, U8 *p)
+Perl_is_utf8_alnum(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_alnum(p);
 }
 
 #undef  Perl_is_utf8_alnumc
 bool
-Perl_is_utf8_alnumc(void *pPerl, U8 *p)
+Perl_is_utf8_alnumc(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_alnumc(p);
 }
 
 #undef  Perl_is_utf8_idfirst
 bool
-Perl_is_utf8_idfirst(void *pPerl, U8 *p)
+Perl_is_utf8_idfirst(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_idfirst(p);
 }
 
 #undef  Perl_is_utf8_alpha
 bool
-Perl_is_utf8_alpha(void *pPerl, U8 *p)
+Perl_is_utf8_alpha(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_alpha(p);
 }
 
 #undef  Perl_is_utf8_ascii
 bool
-Perl_is_utf8_ascii(void *pPerl, U8 *p)
+Perl_is_utf8_ascii(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_ascii(p);
 }
 
 #undef  Perl_is_utf8_space
 bool
-Perl_is_utf8_space(void *pPerl, U8 *p)
+Perl_is_utf8_space(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_space(p);
 }
 
 #undef  Perl_is_utf8_cntrl
 bool
-Perl_is_utf8_cntrl(void *pPerl, U8 *p)
+Perl_is_utf8_cntrl(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_cntrl(p);
 }
 
 #undef  Perl_is_utf8_digit
 bool
-Perl_is_utf8_digit(void *pPerl, U8 *p)
+Perl_is_utf8_digit(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_digit(p);
 }
 
 #undef  Perl_is_utf8_graph
 bool
-Perl_is_utf8_graph(void *pPerl, U8 *p)
+Perl_is_utf8_graph(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_graph(p);
 }
 
 #undef  Perl_is_utf8_upper
 bool
-Perl_is_utf8_upper(void *pPerl, U8 *p)
+Perl_is_utf8_upper(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_upper(p);
 }
 
 #undef  Perl_is_utf8_lower
 bool
-Perl_is_utf8_lower(void *pPerl, U8 *p)
+Perl_is_utf8_lower(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_lower(p);
 }
 
 #undef  Perl_is_utf8_print
 bool
-Perl_is_utf8_print(void *pPerl, U8 *p)
+Perl_is_utf8_print(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_print(p);
 }
 
 #undef  Perl_is_utf8_punct
 bool
-Perl_is_utf8_punct(void *pPerl, U8 *p)
+Perl_is_utf8_punct(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_punct(p);
 }
 
 #undef  Perl_is_utf8_xdigit
 bool
-Perl_is_utf8_xdigit(void *pPerl, U8 *p)
+Perl_is_utf8_xdigit(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_xdigit(p);
 }
 
 #undef  Perl_is_utf8_mark
 bool
-Perl_is_utf8_mark(void *pPerl, U8 *p)
+Perl_is_utf8_mark(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_is_utf8_mark(p);
 }
 
 #undef  Perl_jmaybe
 OP*
-Perl_jmaybe(void *pPerl, OP* arg)
+Perl_jmaybe(pTHXo_ OP* arg)
 {
     return ((CPerlObj*)pPerl)->Perl_jmaybe(arg);
 }
 
 #undef  Perl_keyword
 I32
-Perl_keyword(void *pPerl, char* d, I32 len)
+Perl_keyword(pTHXo_ char* d, I32 len)
 {
     return ((CPerlObj*)pPerl)->Perl_keyword(d, len);
 }
 
 #undef  Perl_leave_scope
 void
-Perl_leave_scope(void *pPerl, I32 base)
+Perl_leave_scope(pTHXo_ I32 base)
 {
     ((CPerlObj*)pPerl)->Perl_leave_scope(base);
 }
 
 #undef  Perl_lex_end
 void
-Perl_lex_end(void *pPerl)
+Perl_lex_end(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_lex_end();
 }
 
 #undef  Perl_lex_start
 void
-Perl_lex_start(void *pPerl, SV* line)
+Perl_lex_start(pTHXo_ SV* line)
 {
     ((CPerlObj*)pPerl)->Perl_lex_start(line);
 }
 
 #undef  Perl_linklist
 OP*
-Perl_linklist(void *pPerl, OP* o)
+Perl_linklist(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_linklist(o);
 }
 
 #undef  Perl_list
 OP*
-Perl_list(void *pPerl, OP* o)
+Perl_list(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_list(o);
 }
 
 #undef  Perl_listkids
 OP*
-Perl_listkids(void *pPerl, OP* o)
+Perl_listkids(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_listkids(o);
 }
 
 #undef  Perl_localize
 OP*
-Perl_localize(void *pPerl, OP* arg, I32 lexical)
+Perl_localize(pTHXo_ OP* arg, I32 lexical)
 {
     return ((CPerlObj*)pPerl)->Perl_localize(arg, lexical);
 }
 
 #undef  Perl_looks_like_number
 I32
-Perl_looks_like_number(void *pPerl, SV* sv)
+Perl_looks_like_number(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_looks_like_number(sv);
 }
 
 #undef  Perl_magic_clearenv
 int
-Perl_magic_clearenv(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_clearenv(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_clearenv(sv, mg);
 }
 
 #undef  Perl_magic_clear_all_env
 int
-Perl_magic_clear_all_env(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_clear_all_env(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_clear_all_env(sv, mg);
 }
 
 #undef  Perl_magic_clearpack
 int
-Perl_magic_clearpack(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_clearpack(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_clearpack(sv, mg);
 }
 
 #undef  Perl_magic_clearsig
 int
-Perl_magic_clearsig(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_clearsig(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_clearsig(sv, mg);
 }
 
 #undef  Perl_magic_existspack
 int
-Perl_magic_existspack(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_existspack(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_existspack(sv, mg);
 }
 
 #undef  Perl_magic_freeregexp
 int
-Perl_magic_freeregexp(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_freeregexp(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_freeregexp(sv, mg);
 }
 
 #undef  Perl_magic_get
 int
-Perl_magic_get(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_get(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_get(sv, mg);
 }
 
 #undef  Perl_magic_getarylen
 int
-Perl_magic_getarylen(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_getarylen(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_getarylen(sv, mg);
 }
 
 #undef  Perl_magic_getdefelem
 int
-Perl_magic_getdefelem(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_getdefelem(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_getdefelem(sv, mg);
 }
 
 #undef  Perl_magic_getglob
 int
-Perl_magic_getglob(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_getglob(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_getglob(sv, mg);
 }
 
 #undef  Perl_magic_getnkeys
 int
-Perl_magic_getnkeys(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_getnkeys(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_getnkeys(sv, mg);
 }
 
 #undef  Perl_magic_getpack
 int
-Perl_magic_getpack(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_getpack(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_getpack(sv, mg);
 }
 
 #undef  Perl_magic_getpos
 int
-Perl_magic_getpos(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_getpos(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_getpos(sv, mg);
 }
 
 #undef  Perl_magic_getsig
 int
-Perl_magic_getsig(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_getsig(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_getsig(sv, mg);
 }
 
 #undef  Perl_magic_getsubstr
 int
-Perl_magic_getsubstr(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_getsubstr(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_getsubstr(sv, mg);
 }
 
 #undef  Perl_magic_gettaint
 int
-Perl_magic_gettaint(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_gettaint(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_gettaint(sv, mg);
 }
 
 #undef  Perl_magic_getuvar
 int
-Perl_magic_getuvar(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_getuvar(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_getuvar(sv, mg);
 }
 
 #undef  Perl_magic_getvec
 int
-Perl_magic_getvec(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_getvec(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_getvec(sv, mg);
 }
 
 #undef  Perl_magic_len
 U32
-Perl_magic_len(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_len(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_len(sv, mg);
 }
@@ -1713,7 +1926,7 @@ Perl_magic_len(void *pPerl, SV* sv, MAGIC* mg)
 
 #undef  Perl_magic_mutexfree
 int
-Perl_magic_mutexfree(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_mutexfree(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_mutexfree(sv, mg);
 }
@@ -1721,56 +1934,56 @@ Perl_magic_mutexfree(void *pPerl, SV* sv, MAGIC* mg)
 
 #undef  Perl_magic_nextpack
 int
-Perl_magic_nextpack(void *pPerl, SV* sv, MAGIC* mg, SV* key)
+Perl_magic_nextpack(pTHXo_ SV* sv, MAGIC* mg, SV* key)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_nextpack(sv, mg, key);
 }
 
 #undef  Perl_magic_regdata_cnt
 U32
-Perl_magic_regdata_cnt(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_regdata_cnt(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_regdata_cnt(sv, mg);
 }
 
 #undef  Perl_magic_regdatum_get
 int
-Perl_magic_regdatum_get(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_regdatum_get(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_regdatum_get(sv, mg);
 }
 
 #undef  Perl_magic_set
 int
-Perl_magic_set(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_set(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_set(sv, mg);
 }
 
 #undef  Perl_magic_setamagic
 int
-Perl_magic_setamagic(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setamagic(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setamagic(sv, mg);
 }
 
 #undef  Perl_magic_setarylen
 int
-Perl_magic_setarylen(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setarylen(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setarylen(sv, mg);
 }
 
 #undef  Perl_magic_setbm
 int
-Perl_magic_setbm(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setbm(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setbm(sv, mg);
 }
 
 #undef  Perl_magic_setdbline
 int
-Perl_magic_setdbline(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setdbline(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setdbline(sv, mg);
 }
@@ -1778,7 +1991,7 @@ Perl_magic_setdbline(void *pPerl, SV* sv, MAGIC* mg)
 
 #undef  Perl_magic_setcollxfrm
 int
-Perl_magic_setcollxfrm(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setcollxfrm(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setcollxfrm(sv, mg);
 }
@@ -1786,126 +1999,126 @@ Perl_magic_setcollxfrm(void *pPerl, SV* sv, MAGIC* mg)
 
 #undef  Perl_magic_setdefelem
 int
-Perl_magic_setdefelem(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setdefelem(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setdefelem(sv, mg);
 }
 
 #undef  Perl_magic_setenv
 int
-Perl_magic_setenv(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setenv(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setenv(sv, mg);
 }
 
 #undef  Perl_magic_setfm
 int
-Perl_magic_setfm(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setfm(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setfm(sv, mg);
 }
 
 #undef  Perl_magic_setisa
 int
-Perl_magic_setisa(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setisa(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setisa(sv, mg);
 }
 
 #undef  Perl_magic_setglob
 int
-Perl_magic_setglob(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setglob(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setglob(sv, mg);
 }
 
 #undef  Perl_magic_setmglob
 int
-Perl_magic_setmglob(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setmglob(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setmglob(sv, mg);
 }
 
 #undef  Perl_magic_setnkeys
 int
-Perl_magic_setnkeys(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setnkeys(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setnkeys(sv, mg);
 }
 
 #undef  Perl_magic_setpack
 int
-Perl_magic_setpack(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setpack(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setpack(sv, mg);
 }
 
 #undef  Perl_magic_setpos
 int
-Perl_magic_setpos(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setpos(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setpos(sv, mg);
 }
 
 #undef  Perl_magic_setsig
 int
-Perl_magic_setsig(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setsig(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setsig(sv, mg);
 }
 
 #undef  Perl_magic_setsubstr
 int
-Perl_magic_setsubstr(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setsubstr(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setsubstr(sv, mg);
 }
 
 #undef  Perl_magic_settaint
 int
-Perl_magic_settaint(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_settaint(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_settaint(sv, mg);
 }
 
 #undef  Perl_magic_setuvar
 int
-Perl_magic_setuvar(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setuvar(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setuvar(sv, mg);
 }
 
 #undef  Perl_magic_setvec
 int
-Perl_magic_setvec(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_setvec(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_setvec(sv, mg);
 }
 
 #undef  Perl_magic_set_all_env
 int
-Perl_magic_set_all_env(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_set_all_env(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_set_all_env(sv, mg);
 }
 
 #undef  Perl_magic_sizepack
 U32
-Perl_magic_sizepack(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_sizepack(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_sizepack(sv, mg);
 }
 
 #undef  Perl_magic_wipepack
 int
-Perl_magic_wipepack(void *pPerl, SV* sv, MAGIC* mg)
+Perl_magic_wipepack(pTHXo_ SV* sv, MAGIC* mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_wipepack(sv, mg);
 }
 
 #undef  Perl_magicname
 void
-Perl_magicname(void *pPerl, char* sym, char* name, I32 namlen)
+Perl_magicname(pTHXo_ char* sym, char* name, I32 namlen)
 {
     ((CPerlObj*)pPerl)->Perl_magicname(sym, name, namlen);
 }
@@ -1913,15 +2126,16 @@ Perl_magicname(void *pPerl, char* sym, char* name, I32 namlen)
 
 #undef  Perl_malloced_size
 MEM_SIZE
-Perl_malloced_size(void *pPerl, void *p)
+Perl_malloced_size(void *p)
 {
+    dTHXo;
     return ((CPerlObj*)pPerl)->Perl_malloced_size(p);
 }
 #endif
 
 #undef  Perl_markstack_grow
 void
-Perl_markstack_grow(void *pPerl)
+Perl_markstack_grow(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_markstack_grow();
 }
@@ -1929,7 +2143,7 @@ Perl_markstack_grow(void *pPerl)
 
 #undef  Perl_mem_collxfrm
 char*
-Perl_mem_collxfrm(void *pPerl, const char* s, STRLEN len, STRLEN* xlen)
+Perl_mem_collxfrm(pTHXo_ const char* s, STRLEN len, STRLEN* xlen)
 {
     return ((CPerlObj*)pPerl)->Perl_mem_collxfrm(s, len, xlen);
 }
@@ -1937,98 +2151,98 @@ Perl_mem_collxfrm(void *pPerl, const char* s, STRLEN len, STRLEN* xlen)
 
 #undef  Perl_mess
 SV*
-Perl_mess(void *pPerl, const char* pat, va_list* args)
+Perl_mess(pTHXo_ const char* pat, va_list* args)
 {
     return ((CPerlObj*)pPerl)->Perl_mess(pat, args);
 }
 
 #undef  Perl_mg_clear
 int
-Perl_mg_clear(void *pPerl, SV* sv)
+Perl_mg_clear(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_mg_clear(sv);
 }
 
 #undef  Perl_mg_copy
 int
-Perl_mg_copy(void *pPerl, SV* sv, SV* nsv, const char* key, I32 klen)
+Perl_mg_copy(pTHXo_ SV* sv, SV* nsv, const char* key, I32 klen)
 {
     return ((CPerlObj*)pPerl)->Perl_mg_copy(sv, nsv, key, klen);
 }
 
 #undef  Perl_mg_find
 MAGIC*
-Perl_mg_find(void *pPerl, SV* sv, int type)
+Perl_mg_find(pTHXo_ SV* sv, int type)
 {
     return ((CPerlObj*)pPerl)->Perl_mg_find(sv, type);
 }
 
 #undef  Perl_mg_free
 int
-Perl_mg_free(void *pPerl, SV* sv)
+Perl_mg_free(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_mg_free(sv);
 }
 
 #undef  Perl_mg_get
 int
-Perl_mg_get(void *pPerl, SV* sv)
+Perl_mg_get(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_mg_get(sv);
 }
 
 #undef  Perl_mg_length
 U32
-Perl_mg_length(void *pPerl, SV* sv)
+Perl_mg_length(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_mg_length(sv);
 }
 
 #undef  Perl_mg_magical
 void
-Perl_mg_magical(void *pPerl, SV* sv)
+Perl_mg_magical(pTHXo_ SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_mg_magical(sv);
 }
 
 #undef  Perl_mg_set
 int
-Perl_mg_set(void *pPerl, SV* sv)
+Perl_mg_set(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_mg_set(sv);
 }
 
 #undef  Perl_mg_size
 I32
-Perl_mg_size(void *pPerl, SV* sv)
+Perl_mg_size(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_mg_size(sv);
 }
 
 #undef  Perl_mod
 OP*
-Perl_mod(void *pPerl, OP* o, I32 type)
+Perl_mod(pTHXo_ OP* o, I32 type)
 {
     return ((CPerlObj*)pPerl)->Perl_mod(o, type);
 }
 
 #undef  Perl_moreswitches
 char*
-Perl_moreswitches(void *pPerl, char* s)
+Perl_moreswitches(pTHXo_ char* s)
 {
     return ((CPerlObj*)pPerl)->Perl_moreswitches(s);
 }
 
 #undef  Perl_my
 OP*
-Perl_my(void *pPerl, OP* o)
+Perl_my(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_my(o);
 }
 
 #undef  Perl_my_atof
 NV
-Perl_my_atof(void *pPerl, const char *s)
+Perl_my_atof(pTHXo_ const char *s)
 {
     return ((CPerlObj*)pPerl)->Perl_my_atof(s);
 }
@@ -2036,7 +2250,7 @@ Perl_my_atof(void *pPerl, const char *s)
 
 #undef  Perl_my_bcopy
 char*
-Perl_my_bcopy(void *pPerl, const char* from, char* to, I32 len)
+Perl_my_bcopy(pTHXo_ const char* from, char* to, I32 len)
 {
     return ((CPerlObj*)pPerl)->Perl_my_bcopy(from, to, len);
 }
@@ -2045,7 +2259,7 @@ Perl_my_bcopy(void *pPerl, const char* from, char* to, I32 len)
 
 #undef  Perl_my_bzero
 char*
-Perl_my_bzero(void *pPerl, char* loc, I32 len)
+Perl_my_bzero(pTHXo_ char* loc, I32 len)
 {
     return ((CPerlObj*)pPerl)->Perl_my_bzero(loc, len);
 }
@@ -2053,28 +2267,28 @@ Perl_my_bzero(void *pPerl, char* loc, I32 len)
 
 #undef  Perl_my_exit
 void
-Perl_my_exit(void *pPerl, U32 status)
+Perl_my_exit(pTHXo_ U32 status)
 {
     ((CPerlObj*)pPerl)->Perl_my_exit(status);
 }
 
 #undef  Perl_my_failure_exit
 void
-Perl_my_failure_exit(void *pPerl)
+Perl_my_failure_exit(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_my_failure_exit();
 }
 
 #undef  Perl_my_fflush_all
 I32
-Perl_my_fflush_all(void *pPerl)
+Perl_my_fflush_all(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_my_fflush_all();
 }
 
 #undef  Perl_my_lstat
 I32
-Perl_my_lstat(void *pPerl)
+Perl_my_lstat(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_my_lstat();
 }
@@ -2082,7 +2296,7 @@ Perl_my_lstat(void *pPerl)
 
 #undef  Perl_my_memcmp
 I32
-Perl_my_memcmp(void *pPerl, const char* s1, const char* s2, I32 len)
+Perl_my_memcmp(pTHXo_ const char* s1, const char* s2, I32 len)
 {
     return ((CPerlObj*)pPerl)->Perl_my_memcmp(s1, s2, len);
 }
@@ -2091,7 +2305,7 @@ Perl_my_memcmp(void *pPerl, const char* s1, const char* s2, I32 len)
 
 #undef  Perl_my_memset
 void*
-Perl_my_memset(void *pPerl, char* loc, I32 ch, I32 len)
+Perl_my_memset(pTHXo_ char* loc, I32 ch, I32 len)
 {
     return ((CPerlObj*)pPerl)->Perl_my_memset(loc, ch, len);
 }
@@ -2100,14 +2314,14 @@ Perl_my_memset(void *pPerl, char* loc, I32 ch, I32 len)
 
 #undef  Perl_my_pclose
 I32
-Perl_my_pclose(void *pPerl, PerlIO* ptr)
+Perl_my_pclose(pTHXo_ PerlIO* ptr)
 {
     return ((CPerlObj*)pPerl)->Perl_my_pclose(ptr);
 }
 
 #undef  Perl_my_popen
 PerlIO*
-Perl_my_popen(void *pPerl, char* cmd, char* mode)
+Perl_my_popen(pTHXo_ char* cmd, char* mode)
 {
     return ((CPerlObj*)pPerl)->Perl_my_popen(cmd, mode);
 }
@@ -2115,14 +2329,14 @@ Perl_my_popen(void *pPerl, char* cmd, char* mode)
 
 #undef  Perl_my_setenv
 void
-Perl_my_setenv(void *pPerl, char* nam, char* val)
+Perl_my_setenv(pTHXo_ char* nam, char* val)
 {
     ((CPerlObj*)pPerl)->Perl_my_setenv(nam, val);
 }
 
 #undef  Perl_my_stat
 I32
-Perl_my_stat(void *pPerl)
+Perl_my_stat(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_my_stat();
 }
@@ -2130,21 +2344,21 @@ Perl_my_stat(void *pPerl)
 
 #undef  Perl_my_swap
 short
-Perl_my_swap(void *pPerl, short s)
+Perl_my_swap(pTHXo_ short s)
 {
     return ((CPerlObj*)pPerl)->Perl_my_swap(s);
 }
 
 #undef  Perl_my_htonl
 long
-Perl_my_htonl(void *pPerl, long l)
+Perl_my_htonl(pTHXo_ long l)
 {
     return ((CPerlObj*)pPerl)->Perl_my_htonl(l);
 }
 
 #undef  Perl_my_ntohl
 long
-Perl_my_ntohl(void *pPerl, long l)
+Perl_my_ntohl(pTHXo_ long l)
 {
     return ((CPerlObj*)pPerl)->Perl_my_ntohl(l);
 }
@@ -2152,457 +2366,468 @@ Perl_my_ntohl(void *pPerl, long l)
 
 #undef  Perl_my_unexec
 void
-Perl_my_unexec(void *pPerl)
+Perl_my_unexec(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_my_unexec();
 }
 
 #undef  Perl_newANONLIST
 OP*
-Perl_newANONLIST(void *pPerl, OP* o)
+Perl_newANONLIST(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_newANONLIST(o);
 }
 
 #undef  Perl_newANONHASH
 OP*
-Perl_newANONHASH(void *pPerl, OP* o)
+Perl_newANONHASH(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_newANONHASH(o);
 }
 
 #undef  Perl_newANONSUB
 OP*
-Perl_newANONSUB(void *pPerl, I32 floor, OP* proto, OP* block)
+Perl_newANONSUB(pTHXo_ I32 floor, OP* proto, OP* block)
 {
     return ((CPerlObj*)pPerl)->Perl_newANONSUB(floor, proto, block);
 }
 
 #undef  Perl_newASSIGNOP
 OP*
-Perl_newASSIGNOP(void *pPerl, I32 flags, OP* left, I32 optype, OP* right)
+Perl_newASSIGNOP(pTHXo_ I32 flags, OP* left, I32 optype, OP* right)
 {
     return ((CPerlObj*)pPerl)->Perl_newASSIGNOP(flags, left, optype, right);
 }
 
 #undef  Perl_newCONDOP
 OP*
-Perl_newCONDOP(void *pPerl, I32 flags, OP* expr, OP* trueop, OP* falseop)
+Perl_newCONDOP(pTHXo_ I32 flags, OP* expr, OP* trueop, OP* falseop)
 {
     return ((CPerlObj*)pPerl)->Perl_newCONDOP(flags, expr, trueop, falseop);
 }
 
 #undef  Perl_newCONSTSUB
 void
-Perl_newCONSTSUB(void *pPerl, HV* stash, char* name, SV* sv)
+Perl_newCONSTSUB(pTHXo_ HV* stash, char* name, SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_newCONSTSUB(stash, name, sv);
 }
 
 #undef  Perl_newFORM
 void
-Perl_newFORM(void *pPerl, I32 floor, OP* o, OP* block)
+Perl_newFORM(pTHXo_ I32 floor, OP* o, OP* block)
 {
     ((CPerlObj*)pPerl)->Perl_newFORM(floor, o, block);
 }
 
 #undef  Perl_newFOROP
 OP*
-Perl_newFOROP(void *pPerl, I32 flags, char* label, line_t forline, OP* sclr, OP* expr, OP*block, OP*cont)
+Perl_newFOROP(pTHXo_ I32 flags, char* label, line_t forline, OP* sclr, OP* expr, OP*block, OP*cont)
 {
     return ((CPerlObj*)pPerl)->Perl_newFOROP(flags, label, forline, sclr, expr, block, cont);
 }
 
 #undef  Perl_newLOGOP
 OP*
-Perl_newLOGOP(void *pPerl, I32 optype, I32 flags, OP* left, OP* right)
+Perl_newLOGOP(pTHXo_ I32 optype, I32 flags, OP* left, OP* right)
 {
     return ((CPerlObj*)pPerl)->Perl_newLOGOP(optype, flags, left, right);
 }
 
 #undef  Perl_newLOOPEX
 OP*
-Perl_newLOOPEX(void *pPerl, I32 type, OP* label)
+Perl_newLOOPEX(pTHXo_ I32 type, OP* label)
 {
     return ((CPerlObj*)pPerl)->Perl_newLOOPEX(type, label);
 }
 
 #undef  Perl_newLOOPOP
 OP*
-Perl_newLOOPOP(void *pPerl, I32 flags, I32 debuggable, OP* expr, OP* block)
+Perl_newLOOPOP(pTHXo_ I32 flags, I32 debuggable, OP* expr, OP* block)
 {
     return ((CPerlObj*)pPerl)->Perl_newLOOPOP(flags, debuggable, expr, block);
 }
 
 #undef  Perl_newNULLLIST
 OP*
-Perl_newNULLLIST(void *pPerl)
+Perl_newNULLLIST(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_newNULLLIST();
 }
 
 #undef  Perl_newOP
 OP*
-Perl_newOP(void *pPerl, I32 optype, I32 flags)
+Perl_newOP(pTHXo_ I32 optype, I32 flags)
 {
     return ((CPerlObj*)pPerl)->Perl_newOP(optype, flags);
 }
 
 #undef  Perl_newPROG
 void
-Perl_newPROG(void *pPerl, OP* o)
+Perl_newPROG(pTHXo_ OP* o)
 {
     ((CPerlObj*)pPerl)->Perl_newPROG(o);
 }
 
 #undef  Perl_newRANGE
 OP*
-Perl_newRANGE(void *pPerl, I32 flags, OP* left, OP* right)
+Perl_newRANGE(pTHXo_ I32 flags, OP* left, OP* right)
 {
     return ((CPerlObj*)pPerl)->Perl_newRANGE(flags, left, right);
 }
 
 #undef  Perl_newSLICEOP
 OP*
-Perl_newSLICEOP(void *pPerl, I32 flags, OP* subscript, OP* listop)
+Perl_newSLICEOP(pTHXo_ I32 flags, OP* subscript, OP* listop)
 {
     return ((CPerlObj*)pPerl)->Perl_newSLICEOP(flags, subscript, listop);
 }
 
 #undef  Perl_newSTATEOP
 OP*
-Perl_newSTATEOP(void *pPerl, I32 flags, char* label, OP* o)
+Perl_newSTATEOP(pTHXo_ I32 flags, char* label, OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_newSTATEOP(flags, label, o);
 }
 
 #undef  Perl_newSUB
 CV*
-Perl_newSUB(void *pPerl, I32 floor, OP* o, OP* proto, OP* block)
+Perl_newSUB(pTHXo_ I32 floor, OP* o, OP* proto, OP* block)
 {
     return ((CPerlObj*)pPerl)->Perl_newSUB(floor, o, proto, block);
 }
 
 #undef  Perl_newXS
 CV*
-Perl_newXS(void *pPerl, char* name, XSUBADDR_t f, char* filename)
+Perl_newXS(pTHXo_ char* name, XSUBADDR_t f, char* filename)
 {
     return ((CPerlObj*)pPerl)->Perl_newXS(name, f, filename);
 }
 
 #undef  Perl_newAV
 AV*
-Perl_newAV(void *pPerl)
+Perl_newAV(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_newAV();
 }
 
 #undef  Perl_newAVREF
 OP*
-Perl_newAVREF(void *pPerl, OP* o)
+Perl_newAVREF(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_newAVREF(o);
 }
 
 #undef  Perl_newBINOP
 OP*
-Perl_newBINOP(void *pPerl, I32 type, I32 flags, OP* first, OP* last)
+Perl_newBINOP(pTHXo_ I32 type, I32 flags, OP* first, OP* last)
 {
     return ((CPerlObj*)pPerl)->Perl_newBINOP(type, flags, first, last);
 }
 
 #undef  Perl_newCVREF
 OP*
-Perl_newCVREF(void *pPerl, I32 flags, OP* o)
+Perl_newCVREF(pTHXo_ I32 flags, OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_newCVREF(flags, o);
 }
 
 #undef  Perl_newGVOP
 OP*
-Perl_newGVOP(void *pPerl, I32 type, I32 flags, GV* gv)
+Perl_newGVOP(pTHXo_ I32 type, I32 flags, GV* gv)
 {
     return ((CPerlObj*)pPerl)->Perl_newGVOP(type, flags, gv);
 }
 
 #undef  Perl_newGVgen
 GV*
-Perl_newGVgen(void *pPerl, char* pack)
+Perl_newGVgen(pTHXo_ char* pack)
 {
     return ((CPerlObj*)pPerl)->Perl_newGVgen(pack);
 }
 
 #undef  Perl_newGVREF
 OP*
-Perl_newGVREF(void *pPerl, I32 type, OP* o)
+Perl_newGVREF(pTHXo_ I32 type, OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_newGVREF(type, o);
 }
 
 #undef  Perl_newHVREF
 OP*
-Perl_newHVREF(void *pPerl, OP* o)
+Perl_newHVREF(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_newHVREF(o);
 }
 
 #undef  Perl_newHV
 HV*
-Perl_newHV(void *pPerl)
+Perl_newHV(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_newHV();
 }
 
 #undef  Perl_newHVhv
 HV*
-Perl_newHVhv(void *pPerl, HV* hv)
+Perl_newHVhv(pTHXo_ HV* hv)
 {
     return ((CPerlObj*)pPerl)->Perl_newHVhv(hv);
 }
 
 #undef  Perl_newIO
 IO*
-Perl_newIO(void *pPerl)
+Perl_newIO(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_newIO();
 }
 
 #undef  Perl_newLISTOP
 OP*
-Perl_newLISTOP(void *pPerl, I32 type, I32 flags, OP* first, OP* last)
+Perl_newLISTOP(pTHXo_ I32 type, I32 flags, OP* first, OP* last)
 {
     return ((CPerlObj*)pPerl)->Perl_newLISTOP(type, flags, first, last);
 }
 
 #undef  Perl_newPMOP
 OP*
-Perl_newPMOP(void *pPerl, I32 type, I32 flags)
+Perl_newPMOP(pTHXo_ I32 type, I32 flags)
 {
     return ((CPerlObj*)pPerl)->Perl_newPMOP(type, flags);
 }
 
 #undef  Perl_newPVOP
 OP*
-Perl_newPVOP(void *pPerl, I32 type, I32 flags, char* pv)
+Perl_newPVOP(pTHXo_ I32 type, I32 flags, char* pv)
 {
     return ((CPerlObj*)pPerl)->Perl_newPVOP(type, flags, pv);
 }
 
 #undef  Perl_newRV
 SV*
-Perl_newRV(void *pPerl, SV* pref)
+Perl_newRV(pTHXo_ SV* pref)
 {
     return ((CPerlObj*)pPerl)->Perl_newRV(pref);
 }
 
 #undef  Perl_newRV_noinc
 SV*
-Perl_newRV_noinc(void *pPerl, SV *sv)
+Perl_newRV_noinc(pTHXo_ SV *sv)
 {
     return ((CPerlObj*)pPerl)->Perl_newRV_noinc(sv);
 }
 
 #undef  Perl_newSV
 SV*
-Perl_newSV(void *pPerl, STRLEN len)
+Perl_newSV(pTHXo_ STRLEN len)
 {
     return ((CPerlObj*)pPerl)->Perl_newSV(len);
 }
 
 #undef  Perl_newSVREF
 OP*
-Perl_newSVREF(void *pPerl, OP* o)
+Perl_newSVREF(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_newSVREF(o);
 }
 
 #undef  Perl_newSVOP
 OP*
-Perl_newSVOP(void *pPerl, I32 type, I32 flags, SV* sv)
+Perl_newSVOP(pTHXo_ I32 type, I32 flags, SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_newSVOP(type, flags, sv);
 }
 
 #undef  Perl_newSViv
 SV*
-Perl_newSViv(void *pPerl, IV i)
+Perl_newSViv(pTHXo_ IV i)
 {
     return ((CPerlObj*)pPerl)->Perl_newSViv(i);
 }
 
 #undef  Perl_newSVnv
 SV*
-Perl_newSVnv(void *pPerl, NV n)
+Perl_newSVnv(pTHXo_ NV n)
 {
     return ((CPerlObj*)pPerl)->Perl_newSVnv(n);
 }
 
 #undef  Perl_newSVpv
 SV*
-Perl_newSVpv(void *pPerl, const char* s, STRLEN len)
+Perl_newSVpv(pTHXo_ const char* s, STRLEN len)
 {
     return ((CPerlObj*)pPerl)->Perl_newSVpv(s, len);
 }
 
 #undef  Perl_newSVpvn
 SV*
-Perl_newSVpvn(void *pPerl, const char* s, STRLEN len)
+Perl_newSVpvn(pTHXo_ const char* s, STRLEN len)
 {
     return ((CPerlObj*)pPerl)->Perl_newSVpvn(s, len);
 }
 
+#undef  Perl_newSVpvf
+SV*
+Perl_newSVpvf(pTHXo_ const char* pat)
+{
+    SV* retval;
+    va_list args;
+    va_start(args, pat);
+    retval = ((CPerlObj*)pPerl)->Perl_vnewSVpvf(pat, &args);
+    va_end(args);
+    return retval;
+
+}
+
+#undef  Perl_vnewSVpvf
+SV*
+Perl_vnewSVpvf(pTHXo_ const char* pat, va_list* args)
+{
+    return ((CPerlObj*)pPerl)->Perl_vnewSVpvf(pat, args);
+}
+
 #undef  Perl_newSVrv
 SV*
-Perl_newSVrv(void *pPerl, SV* rv, const char* classname)
+Perl_newSVrv(pTHXo_ SV* rv, const char* classname)
 {
     return ((CPerlObj*)pPerl)->Perl_newSVrv(rv, classname);
 }
 
 #undef  Perl_newSVsv
 SV*
-Perl_newSVsv(void *pPerl, SV* old)
+Perl_newSVsv(pTHXo_ SV* old)
 {
     return ((CPerlObj*)pPerl)->Perl_newSVsv(old);
 }
 
 #undef  Perl_newUNOP
 OP*
-Perl_newUNOP(void *pPerl, I32 type, I32 flags, OP* first)
+Perl_newUNOP(pTHXo_ I32 type, I32 flags, OP* first)
 {
     return ((CPerlObj*)pPerl)->Perl_newUNOP(type, flags, first);
 }
 
 #undef  Perl_newWHILEOP
 OP*
-Perl_newWHILEOP(void *pPerl, I32 flags, I32 debuggable, LOOP* loop, I32 whileline, OP* expr, OP* block, OP* cont)
+Perl_newWHILEOP(pTHXo_ I32 flags, I32 debuggable, LOOP* loop, I32 whileline, OP* expr, OP* block, OP* cont)
 {
     return ((CPerlObj*)pPerl)->Perl_newWHILEOP(flags, debuggable, loop, whileline, expr, block, cont);
 }
-#if defined(USE_THREADS)
-
-#undef  Perl_new_struct_thread
-struct perl_thread*
-Perl_new_struct_thread(void *pPerl, struct perl_thread *t)
-{
-    return ((CPerlObj*)pPerl)->Perl_new_struct_thread(t);
-}
-#endif
 
 #undef  Perl_new_stackinfo
 PERL_SI*
-Perl_new_stackinfo(void *pPerl, I32 stitems, I32 cxitems)
+Perl_new_stackinfo(pTHXo_ I32 stitems, I32 cxitems)
 {
     return ((CPerlObj*)pPerl)->Perl_new_stackinfo(stitems, cxitems);
 }
 
 #undef  Perl_nextargv
 PerlIO*
-Perl_nextargv(void *pPerl, GV* gv)
+Perl_nextargv(pTHXo_ GV* gv)
 {
     return ((CPerlObj*)pPerl)->Perl_nextargv(gv);
 }
 
 #undef  Perl_ninstr
 char*
-Perl_ninstr(void *pPerl, const char* big, const char* bigend, const char* little, const char* lend)
+Perl_ninstr(pTHXo_ const char* big, const char* bigend, const char* little, const char* lend)
 {
     return ((CPerlObj*)pPerl)->Perl_ninstr(big, bigend, little, lend);
 }
 
 #undef  Perl_oopsCV
 OP*
-Perl_oopsCV(void *pPerl, OP* o)
+Perl_oopsCV(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_oopsCV(o);
 }
 
 #undef  Perl_op_free
 void
-Perl_op_free(void *pPerl, OP* arg)
+Perl_op_free(pTHXo_ OP* arg)
 {
     ((CPerlObj*)pPerl)->Perl_op_free(arg);
 }
 
 #undef  Perl_package
 void
-Perl_package(void *pPerl, OP* o)
+Perl_package(pTHXo_ OP* o)
 {
     ((CPerlObj*)pPerl)->Perl_package(o);
 }
 
 #undef  Perl_pad_alloc
 PADOFFSET
-Perl_pad_alloc(void *pPerl, I32 optype, U32 tmptype)
+Perl_pad_alloc(pTHXo_ I32 optype, U32 tmptype)
 {
     return ((CPerlObj*)pPerl)->Perl_pad_alloc(optype, tmptype);
 }
 
 #undef  Perl_pad_allocmy
 PADOFFSET
-Perl_pad_allocmy(void *pPerl, char* name)
+Perl_pad_allocmy(pTHXo_ char* name)
 {
     return ((CPerlObj*)pPerl)->Perl_pad_allocmy(name);
 }
 
 #undef  Perl_pad_findmy
 PADOFFSET
-Perl_pad_findmy(void *pPerl, char* name)
+Perl_pad_findmy(pTHXo_ char* name)
 {
     return ((CPerlObj*)pPerl)->Perl_pad_findmy(name);
 }
 
 #undef  Perl_oopsAV
 OP*
-Perl_oopsAV(void *pPerl, OP* o)
+Perl_oopsAV(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_oopsAV(o);
 }
 
 #undef  Perl_oopsHV
 OP*
-Perl_oopsHV(void *pPerl, OP* o)
+Perl_oopsHV(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_oopsHV(o);
 }
 
 #undef  Perl_pad_leavemy
 void
-Perl_pad_leavemy(void *pPerl, I32 fill)
+Perl_pad_leavemy(pTHXo_ I32 fill)
 {
     ((CPerlObj*)pPerl)->Perl_pad_leavemy(fill);
 }
 
 #undef  Perl_pad_sv
 SV*
-Perl_pad_sv(void *pPerl, PADOFFSET po)
+Perl_pad_sv(pTHXo_ PADOFFSET po)
 {
     return ((CPerlObj*)pPerl)->Perl_pad_sv(po);
 }
 
 #undef  Perl_pad_free
 void
-Perl_pad_free(void *pPerl, PADOFFSET po)
+Perl_pad_free(pTHXo_ PADOFFSET po)
 {
     ((CPerlObj*)pPerl)->Perl_pad_free(po);
 }
 
 #undef  Perl_pad_reset
 void
-Perl_pad_reset(void *pPerl)
+Perl_pad_reset(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_pad_reset();
 }
 
 #undef  Perl_pad_swipe
 void
-Perl_pad_swipe(void *pPerl, PADOFFSET po)
+Perl_pad_swipe(pTHXo_ PADOFFSET po)
 {
     ((CPerlObj*)pPerl)->Perl_pad_swipe(po);
 }
 
 #undef  Perl_peep
 void
-Perl_peep(void *pPerl, OP* o)
+Perl_peep(pTHXo_ OP* o)
 {
     ((CPerlObj*)pPerl)->Perl_peep(o);
 }
@@ -2611,351 +2836,361 @@ Perl_peep(void *pPerl, OP* o)
 
 #undef  perl_alloc
 PerlInterpreter*
-perl_alloc(void *pPerl)
+perl_alloc()
 {
+    dTHXo;
     return ((CPerlObj*)pPerl)->perl_alloc();
 }
+#if defined(USE_THREADS)
+
+#undef  Perl_new_struct_thread
+struct perl_thread*
+Perl_new_struct_thread(pTHXo_ struct perl_thread *t)
+{
+    return ((CPerlObj*)pPerl)->Perl_new_struct_thread(t);
+}
+#endif
 #endif
 
 #undef  Perl_call_atexit
 void
-Perl_call_atexit(void *pPerl, ATEXIT_t fn, void *ptr)
+Perl_call_atexit(pTHXo_ ATEXIT_t fn, void *ptr)
 {
     ((CPerlObj*)pPerl)->Perl_call_atexit(fn, ptr);
 }
 
 #undef  Perl_call_argv
 I32
-Perl_call_argv(void *pPerl, const char* sub_name, I32 flags, char** argv)
+Perl_call_argv(pTHXo_ const char* sub_name, I32 flags, char** argv)
 {
     return ((CPerlObj*)pPerl)->Perl_call_argv(sub_name, flags, argv);
 }
 
 #undef  Perl_call_method
 I32
-Perl_call_method(void *pPerl, const char* methname, I32 flags)
+Perl_call_method(pTHXo_ const char* methname, I32 flags)
 {
     return ((CPerlObj*)pPerl)->Perl_call_method(methname, flags);
 }
 
 #undef  Perl_call_pv
 I32
-Perl_call_pv(void *pPerl, const char* sub_name, I32 flags)
+Perl_call_pv(pTHXo_ const char* sub_name, I32 flags)
 {
     return ((CPerlObj*)pPerl)->Perl_call_pv(sub_name, flags);
 }
 
 #undef  Perl_call_sv
 I32
-Perl_call_sv(void *pPerl, SV* sv, I32 flags)
+Perl_call_sv(pTHXo_ SV* sv, I32 flags)
 {
     return ((CPerlObj*)pPerl)->Perl_call_sv(sv, flags);
 }
 
 #undef  Perl_eval_pv
 SV*
-Perl_eval_pv(void *pPerl, const char* p, I32 croak_on_error)
+Perl_eval_pv(pTHXo_ const char* p, I32 croak_on_error)
 {
     return ((CPerlObj*)pPerl)->Perl_eval_pv(p, croak_on_error);
 }
 
 #undef  Perl_eval_sv
 I32
-Perl_eval_sv(void *pPerl, SV* sv, I32 flags)
+Perl_eval_sv(pTHXo_ SV* sv, I32 flags)
 {
     return ((CPerlObj*)pPerl)->Perl_eval_sv(sv, flags);
 }
 
 #undef  Perl_get_sv
 SV*
-Perl_get_sv(void *pPerl, const char* name, I32 create)
+Perl_get_sv(pTHXo_ const char* name, I32 create)
 {
     return ((CPerlObj*)pPerl)->Perl_get_sv(name, create);
 }
 
 #undef  Perl_get_av
 AV*
-Perl_get_av(void *pPerl, const char* name, I32 create)
+Perl_get_av(pTHXo_ const char* name, I32 create)
 {
     return ((CPerlObj*)pPerl)->Perl_get_av(name, create);
 }
 
 #undef  Perl_get_hv
 HV*
-Perl_get_hv(void *pPerl, const char* name, I32 create)
+Perl_get_hv(pTHXo_ const char* name, I32 create)
 {
     return ((CPerlObj*)pPerl)->Perl_get_hv(name, create);
 }
 
 #undef  Perl_get_cv
 CV*
-Perl_get_cv(void *pPerl, const char* name, I32 create)
+Perl_get_cv(pTHXo_ const char* name, I32 create)
 {
     return ((CPerlObj*)pPerl)->Perl_get_cv(name, create);
 }
 
 #undef  Perl_init_i18nl10n
 int
-Perl_init_i18nl10n(void *pPerl, int printwarn)
+Perl_init_i18nl10n(pTHXo_ int printwarn)
 {
     return ((CPerlObj*)pPerl)->Perl_init_i18nl10n(printwarn);
 }
 
 #undef  Perl_init_i18nl14n
 int
-Perl_init_i18nl14n(void *pPerl, int printwarn)
+Perl_init_i18nl14n(pTHXo_ int printwarn)
 {
     return ((CPerlObj*)pPerl)->Perl_init_i18nl14n(printwarn);
 }
 
 #undef  Perl_new_collate
 void
-Perl_new_collate(void *pPerl, const char* newcoll)
+Perl_new_collate(pTHXo_ const char* newcoll)
 {
     ((CPerlObj*)pPerl)->Perl_new_collate(newcoll);
 }
 
 #undef  Perl_new_ctype
 void
-Perl_new_ctype(void *pPerl, const char* newctype)
+Perl_new_ctype(pTHXo_ const char* newctype)
 {
     ((CPerlObj*)pPerl)->Perl_new_ctype(newctype);
 }
 
 #undef  Perl_new_numeric
 void
-Perl_new_numeric(void *pPerl, const char* newcoll)
+Perl_new_numeric(pTHXo_ const char* newcoll)
 {
     ((CPerlObj*)pPerl)->Perl_new_numeric(newcoll);
 }
 
 #undef  Perl_set_numeric_local
 void
-Perl_set_numeric_local(void *pPerl)
+Perl_set_numeric_local(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_set_numeric_local();
 }
 
 #undef  Perl_set_numeric_radix
 void
-Perl_set_numeric_radix(void *pPerl)
+Perl_set_numeric_radix(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_set_numeric_radix();
 }
 
 #undef  Perl_set_numeric_standard
 void
-Perl_set_numeric_standard(void *pPerl)
+Perl_set_numeric_standard(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_set_numeric_standard();
 }
 
 #undef  Perl_require_pv
 void
-Perl_require_pv(void *pPerl, const char* pv)
+Perl_require_pv(pTHXo_ const char* pv)
 {
     ((CPerlObj*)pPerl)->Perl_require_pv(pv);
 }
 
 #undef  Perl_pidgone
 void
-Perl_pidgone(void *pPerl, int pid, int status)
+Perl_pidgone(pTHXo_ int pid, int status)
 {
     ((CPerlObj*)pPerl)->Perl_pidgone(pid, status);
 }
 
 #undef  Perl_pmflag
 void
-Perl_pmflag(void *pPerl, U16* pmfl, int ch)
+Perl_pmflag(pTHXo_ U16* pmfl, int ch)
 {
     ((CPerlObj*)pPerl)->Perl_pmflag(pmfl, ch);
 }
 
 #undef  Perl_pmruntime
 OP*
-Perl_pmruntime(void *pPerl, OP* pm, OP* expr, OP* repl)
+Perl_pmruntime(pTHXo_ OP* pm, OP* expr, OP* repl)
 {
     return ((CPerlObj*)pPerl)->Perl_pmruntime(pm, expr, repl);
 }
 
 #undef  Perl_pmtrans
 OP*
-Perl_pmtrans(void *pPerl, OP* o, OP* expr, OP* repl)
+Perl_pmtrans(pTHXo_ OP* o, OP* expr, OP* repl)
 {
     return ((CPerlObj*)pPerl)->Perl_pmtrans(o, expr, repl);
 }
 
 #undef  Perl_pop_return
 OP*
-Perl_pop_return(void *pPerl)
+Perl_pop_return(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pop_return();
 }
 
 #undef  Perl_pop_scope
 void
-Perl_pop_scope(void *pPerl)
+Perl_pop_scope(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_pop_scope();
 }
 
 #undef  Perl_prepend_elem
 OP*
-Perl_prepend_elem(void *pPerl, I32 optype, OP* head, OP* tail)
+Perl_prepend_elem(pTHXo_ I32 optype, OP* head, OP* tail)
 {
     return ((CPerlObj*)pPerl)->Perl_prepend_elem(optype, head, tail);
 }
 
 #undef  Perl_push_return
 void
-Perl_push_return(void *pPerl, OP* o)
+Perl_push_return(pTHXo_ OP* o)
 {
     ((CPerlObj*)pPerl)->Perl_push_return(o);
 }
 
 #undef  Perl_push_scope
 void
-Perl_push_scope(void *pPerl)
+Perl_push_scope(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_push_scope();
 }
 
 #undef  Perl_ref
 OP*
-Perl_ref(void *pPerl, OP* o, I32 type)
+Perl_ref(pTHXo_ OP* o, I32 type)
 {
     return ((CPerlObj*)pPerl)->Perl_ref(o, type);
 }
 
 #undef  Perl_refkids
 OP*
-Perl_refkids(void *pPerl, OP* o, I32 type)
+Perl_refkids(pTHXo_ OP* o, I32 type)
 {
     return ((CPerlObj*)pPerl)->Perl_refkids(o, type);
 }
 
 #undef  Perl_regdump
 void
-Perl_regdump(void *pPerl, regexp* r)
+Perl_regdump(pTHXo_ regexp* r)
 {
     ((CPerlObj*)pPerl)->Perl_regdump(r);
 }
 
 #undef  Perl_pregexec
 I32
-Perl_pregexec(void *pPerl, regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, U32 nosave)
+Perl_pregexec(pTHXo_ regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, U32 nosave)
 {
     return ((CPerlObj*)pPerl)->Perl_pregexec(prog, stringarg, strend, strbeg, minend, screamer, nosave);
 }
 
 #undef  Perl_pregfree
 void
-Perl_pregfree(void *pPerl, struct regexp* r)
+Perl_pregfree(pTHXo_ struct regexp* r)
 {
     ((CPerlObj*)pPerl)->Perl_pregfree(r);
 }
 
 #undef  Perl_pregcomp
 regexp*
-Perl_pregcomp(void *pPerl, char* exp, char* xend, PMOP* pm)
+Perl_pregcomp(pTHXo_ char* exp, char* xend, PMOP* pm)
 {
     return ((CPerlObj*)pPerl)->Perl_pregcomp(exp, xend, pm);
 }
 
 #undef  Perl_re_intuit_start
 char*
-Perl_re_intuit_start(void *pPerl, regexp* prog, SV* sv, char* strpos, char* strend, U32 flags, struct re_scream_pos_data_s *data)
+Perl_re_intuit_start(pTHXo_ regexp* prog, SV* sv, char* strpos, char* strend, U32 flags, struct re_scream_pos_data_s *data)
 {
     return ((CPerlObj*)pPerl)->Perl_re_intuit_start(prog, sv, strpos, strend, flags, data);
 }
 
 #undef  Perl_re_intuit_string
 SV*
-Perl_re_intuit_string(void *pPerl, regexp* prog)
+Perl_re_intuit_string(pTHXo_ regexp* prog)
 {
     return ((CPerlObj*)pPerl)->Perl_re_intuit_string(prog);
 }
 
 #undef  Perl_regexec_flags
 I32
-Perl_regexec_flags(void *pPerl, regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, void* data, U32 flags)
+Perl_regexec_flags(pTHXo_ regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, void* data, U32 flags)
 {
     return ((CPerlObj*)pPerl)->Perl_regexec_flags(prog, stringarg, strend, strbeg, minend, screamer, data, flags);
 }
 
 #undef  Perl_regnext
 regnode*
-Perl_regnext(void *pPerl, regnode* p)
+Perl_regnext(pTHXo_ regnode* p)
 {
     return ((CPerlObj*)pPerl)->Perl_regnext(p);
 }
 
 #undef  Perl_regprop
 void
-Perl_regprop(void *pPerl, SV* sv, regnode* o)
+Perl_regprop(pTHXo_ SV* sv, regnode* o)
 {
     ((CPerlObj*)pPerl)->Perl_regprop(sv, o);
 }
 
 #undef  Perl_repeatcpy
 void
-Perl_repeatcpy(void *pPerl, char* to, const char* from, I32 len, I32 count)
+Perl_repeatcpy(pTHXo_ char* to, const char* from, I32 len, I32 count)
 {
     ((CPerlObj*)pPerl)->Perl_repeatcpy(to, from, len, count);
 }
 
 #undef  Perl_rninstr
 char*
-Perl_rninstr(void *pPerl, const char* big, const char* bigend, const char* little, const char* lend)
+Perl_rninstr(pTHXo_ const char* big, const char* bigend, const char* little, const char* lend)
 {
     return ((CPerlObj*)pPerl)->Perl_rninstr(big, bigend, little, lend);
 }
 
 #undef  Perl_rsignal
 Sighandler_t
-Perl_rsignal(void *pPerl, int i, Sighandler_t t)
+Perl_rsignal(pTHXo_ int i, Sighandler_t t)
 {
     return ((CPerlObj*)pPerl)->Perl_rsignal(i, t);
 }
 
 #undef  Perl_rsignal_restore
 int
-Perl_rsignal_restore(void *pPerl, int i, Sigsave_t* t)
+Perl_rsignal_restore(pTHXo_ int i, Sigsave_t* t)
 {
     return ((CPerlObj*)pPerl)->Perl_rsignal_restore(i, t);
 }
 
 #undef  Perl_rsignal_save
 int
-Perl_rsignal_save(void *pPerl, int i, Sighandler_t t1, Sigsave_t* t2)
+Perl_rsignal_save(pTHXo_ int i, Sighandler_t t1, Sigsave_t* t2)
 {
     return ((CPerlObj*)pPerl)->Perl_rsignal_save(i, t1, t2);
 }
 
 #undef  Perl_rsignal_state
 Sighandler_t
-Perl_rsignal_state(void *pPerl, int i)
+Perl_rsignal_state(pTHXo_ int i)
 {
     return ((CPerlObj*)pPerl)->Perl_rsignal_state(i);
 }
 
 #undef  Perl_rxres_free
 void
-Perl_rxres_free(void *pPerl, void** rsp)
+Perl_rxres_free(pTHXo_ void** rsp)
 {
     ((CPerlObj*)pPerl)->Perl_rxres_free(rsp);
 }
 
 #undef  Perl_rxres_restore
 void
-Perl_rxres_restore(void *pPerl, void** rsp, REGEXP* prx)
+Perl_rxres_restore(pTHXo_ void** rsp, REGEXP* prx)
 {
     ((CPerlObj*)pPerl)->Perl_rxres_restore(rsp, prx);
 }
 
 #undef  Perl_rxres_save
 void
-Perl_rxres_save(void *pPerl, void** rsp, REGEXP* prx)
+Perl_rxres_save(pTHXo_ void** rsp, REGEXP* prx)
 {
     ((CPerlObj*)pPerl)->Perl_rxres_save(rsp, prx);
 }
@@ -2963,7 +3198,7 @@ Perl_rxres_save(void *pPerl, void** rsp, REGEXP* prx)
 
 #undef  Perl_same_dirent
 I32
-Perl_same_dirent(void *pPerl, char* a, char* b)
+Perl_same_dirent(pTHXo_ char* a, char* b)
 {
     return ((CPerlObj*)pPerl)->Perl_same_dirent(a, b);
 }
@@ -2971,315 +3206,315 @@ Perl_same_dirent(void *pPerl, char* a, char* b)
 
 #undef  Perl_savepv
 char*
-Perl_savepv(void *pPerl, const char* sv)
+Perl_savepv(pTHXo_ const char* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_savepv(sv);
 }
 
 #undef  Perl_savepvn
 char*
-Perl_savepvn(void *pPerl, const char* sv, I32 len)
+Perl_savepvn(pTHXo_ const char* sv, I32 len)
 {
     return ((CPerlObj*)pPerl)->Perl_savepvn(sv, len);
 }
 
 #undef  Perl_savestack_grow
 void
-Perl_savestack_grow(void *pPerl)
+Perl_savestack_grow(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_savestack_grow();
 }
 
 #undef  Perl_save_aelem
 void
-Perl_save_aelem(void *pPerl, AV* av, I32 idx, SV **sptr)
+Perl_save_aelem(pTHXo_ AV* av, I32 idx, SV **sptr)
 {
     ((CPerlObj*)pPerl)->Perl_save_aelem(av, idx, sptr);
 }
 
 #undef  Perl_save_alloc
 I32
-Perl_save_alloc(void *pPerl, I32 size, I32 pad)
+Perl_save_alloc(pTHXo_ I32 size, I32 pad)
 {
     return ((CPerlObj*)pPerl)->Perl_save_alloc(size, pad);
 }
 
 #undef  Perl_save_aptr
 void
-Perl_save_aptr(void *pPerl, AV** aptr)
+Perl_save_aptr(pTHXo_ AV** aptr)
 {
     ((CPerlObj*)pPerl)->Perl_save_aptr(aptr);
 }
 
 #undef  Perl_save_ary
 AV*
-Perl_save_ary(void *pPerl, GV* gv)
+Perl_save_ary(pTHXo_ GV* gv)
 {
     return ((CPerlObj*)pPerl)->Perl_save_ary(gv);
 }
 
 #undef  Perl_save_clearsv
 void
-Perl_save_clearsv(void *pPerl, SV** svp)
+Perl_save_clearsv(pTHXo_ SV** svp)
 {
     ((CPerlObj*)pPerl)->Perl_save_clearsv(svp);
 }
 
 #undef  Perl_save_delete
 void
-Perl_save_delete(void *pPerl, HV* hv, char* key, I32 klen)
+Perl_save_delete(pTHXo_ HV* hv, char* key, I32 klen)
 {
     ((CPerlObj*)pPerl)->Perl_save_delete(hv, key, klen);
 }
 
 #undef  Perl_save_destructor
 void
-Perl_save_destructor(void *pPerl, DESTRUCTORFUNC_t f, void* p)
+Perl_save_destructor(pTHXo_ DESTRUCTORFUNC_t f, void* p)
 {
     ((CPerlObj*)pPerl)->Perl_save_destructor(f, p);
 }
 
 #undef  Perl_save_freesv
 void
-Perl_save_freesv(void *pPerl, SV* sv)
+Perl_save_freesv(pTHXo_ SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_save_freesv(sv);
 }
 
 #undef  Perl_save_freeop
 void
-Perl_save_freeop(void *pPerl, OP* o)
+Perl_save_freeop(pTHXo_ OP* o)
 {
     ((CPerlObj*)pPerl)->Perl_save_freeop(o);
 }
 
 #undef  Perl_save_freepv
 void
-Perl_save_freepv(void *pPerl, char* pv)
+Perl_save_freepv(pTHXo_ char* pv)
 {
     ((CPerlObj*)pPerl)->Perl_save_freepv(pv);
 }
 
 #undef  Perl_save_generic_svref
 void
-Perl_save_generic_svref(void *pPerl, SV** sptr)
+Perl_save_generic_svref(pTHXo_ SV** sptr)
 {
     ((CPerlObj*)pPerl)->Perl_save_generic_svref(sptr);
 }
 
 #undef  Perl_save_gp
 void
-Perl_save_gp(void *pPerl, GV* gv, I32 empty)
+Perl_save_gp(pTHXo_ GV* gv, I32 empty)
 {
     ((CPerlObj*)pPerl)->Perl_save_gp(gv, empty);
 }
 
 #undef  Perl_save_hash
 HV*
-Perl_save_hash(void *pPerl, GV* gv)
+Perl_save_hash(pTHXo_ GV* gv)
 {
     return ((CPerlObj*)pPerl)->Perl_save_hash(gv);
 }
 
 #undef  Perl_save_helem
 void
-Perl_save_helem(void *pPerl, HV* hv, SV *key, SV **sptr)
+Perl_save_helem(pTHXo_ HV* hv, SV *key, SV **sptr)
 {
     ((CPerlObj*)pPerl)->Perl_save_helem(hv, key, sptr);
 }
 
 #undef  Perl_save_hints
 void
-Perl_save_hints(void *pPerl)
+Perl_save_hints(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_save_hints();
 }
 
 #undef  Perl_save_hptr
 void
-Perl_save_hptr(void *pPerl, HV** hptr)
+Perl_save_hptr(pTHXo_ HV** hptr)
 {
     ((CPerlObj*)pPerl)->Perl_save_hptr(hptr);
 }
 
 #undef  Perl_save_I16
 void
-Perl_save_I16(void *pPerl, I16* intp)
+Perl_save_I16(pTHXo_ I16* intp)
 {
     ((CPerlObj*)pPerl)->Perl_save_I16(intp);
 }
 
 #undef  Perl_save_I32
 void
-Perl_save_I32(void *pPerl, I32* intp)
+Perl_save_I32(pTHXo_ I32* intp)
 {
     ((CPerlObj*)pPerl)->Perl_save_I32(intp);
 }
 
 #undef  Perl_save_int
 void
-Perl_save_int(void *pPerl, int* intp)
+Perl_save_int(pTHXo_ int* intp)
 {
     ((CPerlObj*)pPerl)->Perl_save_int(intp);
 }
 
 #undef  Perl_save_item
 void
-Perl_save_item(void *pPerl, SV* item)
+Perl_save_item(pTHXo_ SV* item)
 {
     ((CPerlObj*)pPerl)->Perl_save_item(item);
 }
 
 #undef  Perl_save_iv
 void
-Perl_save_iv(void *pPerl, IV* iv)
+Perl_save_iv(pTHXo_ IV* iv)
 {
     ((CPerlObj*)pPerl)->Perl_save_iv(iv);
 }
 
 #undef  Perl_save_list
 void
-Perl_save_list(void *pPerl, SV** sarg, I32 maxsarg)
+Perl_save_list(pTHXo_ SV** sarg, I32 maxsarg)
 {
     ((CPerlObj*)pPerl)->Perl_save_list(sarg, maxsarg);
 }
 
 #undef  Perl_save_long
 void
-Perl_save_long(void *pPerl, long* longp)
+Perl_save_long(pTHXo_ long* longp)
 {
     ((CPerlObj*)pPerl)->Perl_save_long(longp);
 }
 
 #undef  Perl_save_nogv
 void
-Perl_save_nogv(void *pPerl, GV* gv)
+Perl_save_nogv(pTHXo_ GV* gv)
 {
     ((CPerlObj*)pPerl)->Perl_save_nogv(gv);
 }
 
 #undef  Perl_save_op
 void
-Perl_save_op(void *pPerl)
+Perl_save_op(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_save_op();
 }
 
 #undef  Perl_save_scalar
 SV*
-Perl_save_scalar(void *pPerl, GV* gv)
+Perl_save_scalar(pTHXo_ GV* gv)
 {
     return ((CPerlObj*)pPerl)->Perl_save_scalar(gv);
 }
 
 #undef  Perl_save_pptr
 void
-Perl_save_pptr(void *pPerl, char** pptr)
+Perl_save_pptr(pTHXo_ char** pptr)
 {
     ((CPerlObj*)pPerl)->Perl_save_pptr(pptr);
 }
 
 #undef  Perl_save_re_context
 void
-Perl_save_re_context(void *pPerl)
+Perl_save_re_context(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_save_re_context();
 }
 
 #undef  Perl_save_sptr
 void
-Perl_save_sptr(void *pPerl, SV** sptr)
+Perl_save_sptr(pTHXo_ SV** sptr)
 {
     ((CPerlObj*)pPerl)->Perl_save_sptr(sptr);
 }
 
 #undef  Perl_save_svref
 SV*
-Perl_save_svref(void *pPerl, SV** sptr)
+Perl_save_svref(pTHXo_ SV** sptr)
 {
     return ((CPerlObj*)pPerl)->Perl_save_svref(sptr);
 }
 
 #undef  Perl_save_threadsv
 SV**
-Perl_save_threadsv(void *pPerl, PADOFFSET i)
+Perl_save_threadsv(pTHXo_ PADOFFSET i)
 {
     return ((CPerlObj*)pPerl)->Perl_save_threadsv(i);
 }
 
 #undef  Perl_sawparens
 OP*
-Perl_sawparens(void *pPerl, OP* o)
+Perl_sawparens(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_sawparens(o);
 }
 
 #undef  Perl_scalar
 OP*
-Perl_scalar(void *pPerl, OP* o)
+Perl_scalar(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_scalar(o);
 }
 
 #undef  Perl_scalarkids
 OP*
-Perl_scalarkids(void *pPerl, OP* o)
+Perl_scalarkids(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_scalarkids(o);
 }
 
 #undef  Perl_scalarseq
 OP*
-Perl_scalarseq(void *pPerl, OP* o)
+Perl_scalarseq(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_scalarseq(o);
 }
 
 #undef  Perl_scalarvoid
 OP*
-Perl_scalarvoid(void *pPerl, OP* o)
+Perl_scalarvoid(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_scalarvoid(o);
 }
 
 #undef  Perl_scan_bin
 UV
-Perl_scan_bin(void *pPerl, char* start, I32 len, I32* retlen)
+Perl_scan_bin(pTHXo_ char* start, I32 len, I32* retlen)
 {
     return ((CPerlObj*)pPerl)->Perl_scan_bin(start, len, retlen);
 }
 
 #undef  Perl_scan_hex
 UV
-Perl_scan_hex(void *pPerl, char* start, I32 len, I32* retlen)
+Perl_scan_hex(pTHXo_ char* start, I32 len, I32* retlen)
 {
     return ((CPerlObj*)pPerl)->Perl_scan_hex(start, len, retlen);
 }
 
 #undef  Perl_scan_num
 char*
-Perl_scan_num(void *pPerl, char* s)
+Perl_scan_num(pTHXo_ char* s)
 {
     return ((CPerlObj*)pPerl)->Perl_scan_num(s);
 }
 
 #undef  Perl_scan_oct
 UV
-Perl_scan_oct(void *pPerl, char* start, I32 len, I32* retlen)
+Perl_scan_oct(pTHXo_ char* start, I32 len, I32* retlen)
 {
     return ((CPerlObj*)pPerl)->Perl_scan_oct(start, len, retlen);
 }
 
 #undef  Perl_scope
 OP*
-Perl_scope(void *pPerl, OP* o)
+Perl_scope(pTHXo_ OP* o)
 {
     return ((CPerlObj*)pPerl)->Perl_scope(o);
 }
 
 #undef  Perl_screaminstr
 char*
-Perl_screaminstr(void *pPerl, SV* bigsv, SV* littlesv, I32 start_shift, I32 end_shift, I32 *state, I32 last)
+Perl_screaminstr(pTHXo_ SV* bigsv, SV* littlesv, I32 start_shift, I32 end_shift, I32 *state, I32 last)
 {
     return ((CPerlObj*)pPerl)->Perl_screaminstr(bigsv, littlesv, start_shift, end_shift, state, last);
 }
@@ -3287,7 +3522,7 @@ Perl_screaminstr(void *pPerl, SV* bigsv, SV* littlesv, I32 start_shift, I32 end_
 
 #undef  Perl_setenv_getix
 I32
-Perl_setenv_getix(void *pPerl, char* nam)
+Perl_setenv_getix(pTHXo_ char* nam)
 {
     return ((CPerlObj*)pPerl)->Perl_setenv_getix(nam);
 }
@@ -3295,224 +3530,242 @@ Perl_setenv_getix(void *pPerl, char* nam)
 
 #undef  Perl_setdefout
 void
-Perl_setdefout(void *pPerl, GV* gv)
+Perl_setdefout(pTHXo_ GV* gv)
 {
     ((CPerlObj*)pPerl)->Perl_setdefout(gv);
 }
 
 #undef  Perl_sharepvn
 char*
-Perl_sharepvn(void *pPerl, const char* sv, I32 len, U32 hash)
+Perl_sharepvn(pTHXo_ const char* sv, I32 len, U32 hash)
 {
     return ((CPerlObj*)pPerl)->Perl_sharepvn(sv, len, hash);
 }
 
 #undef  Perl_share_hek
 HEK*
-Perl_share_hek(void *pPerl, const char* sv, I32 len, U32 hash)
+Perl_share_hek(pTHXo_ const char* sv, I32 len, U32 hash)
 {
     return ((CPerlObj*)pPerl)->Perl_share_hek(sv, len, hash);
 }
 
 #undef  Perl_sighandler
 Signal_t
-Perl_sighandler(void *pPerl, int sig)
+Perl_sighandler(int sig)
 {
+    dTHXo;
     ((CPerlObj*)pPerl)->Perl_sighandler(sig);
 }
 
 #undef  Perl_stack_grow
 SV**
-Perl_stack_grow(void *pPerl, SV** sp, SV**p, int n)
+Perl_stack_grow(pTHXo_ SV** sp, SV**p, int n)
 {
     return ((CPerlObj*)pPerl)->Perl_stack_grow(sp, p, n);
 }
 
 #undef  Perl_start_subparse
 I32
-Perl_start_subparse(void *pPerl, I32 is_format, U32 flags)
+Perl_start_subparse(pTHXo_ I32 is_format, U32 flags)
 {
     return ((CPerlObj*)pPerl)->Perl_start_subparse(is_format, flags);
 }
 
 #undef  Perl_sub_crush_depth
 void
-Perl_sub_crush_depth(void *pPerl, CV* cv)
+Perl_sub_crush_depth(pTHXo_ CV* cv)
 {
     ((CPerlObj*)pPerl)->Perl_sub_crush_depth(cv);
 }
 
 #undef  Perl_sv_2bool
 bool
-Perl_sv_2bool(void *pPerl, SV* sv)
+Perl_sv_2bool(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_2bool(sv);
 }
 
 #undef  Perl_sv_2cv
 CV*
-Perl_sv_2cv(void *pPerl, SV* sv, HV** st, GV** gvp, I32 lref)
+Perl_sv_2cv(pTHXo_ SV* sv, HV** st, GV** gvp, I32 lref)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_2cv(sv, st, gvp, lref);
 }
 
 #undef  Perl_sv_2io
 IO*
-Perl_sv_2io(void *pPerl, SV* sv)
+Perl_sv_2io(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_2io(sv);
 }
 
 #undef  Perl_sv_2iv
 IV
-Perl_sv_2iv(void *pPerl, SV* sv)
+Perl_sv_2iv(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_2iv(sv);
 }
 
 #undef  Perl_sv_2mortal
 SV*
-Perl_sv_2mortal(void *pPerl, SV* sv)
+Perl_sv_2mortal(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_2mortal(sv);
 }
 
 #undef  Perl_sv_2nv
 NV
-Perl_sv_2nv(void *pPerl, SV* sv)
+Perl_sv_2nv(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_2nv(sv);
 }
 
 #undef  Perl_sv_2pv
 char*
-Perl_sv_2pv(void *pPerl, SV* sv, STRLEN* lp)
+Perl_sv_2pv(pTHXo_ SV* sv, STRLEN* lp)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_2pv(sv, lp);
 }
 
 #undef  Perl_sv_2uv
 UV
-Perl_sv_2uv(void *pPerl, SV* sv)
+Perl_sv_2uv(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_2uv(sv);
 }
 
 #undef  Perl_sv_iv
 IV
-Perl_sv_iv(void *pPerl, SV* sv)
+Perl_sv_iv(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_iv(sv);
 }
 
 #undef  Perl_sv_uv
 UV
-Perl_sv_uv(void *pPerl, SV* sv)
+Perl_sv_uv(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_uv(sv);
 }
 
 #undef  Perl_sv_nv
 NV
-Perl_sv_nv(void *pPerl, SV* sv)
+Perl_sv_nv(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_nv(sv);
 }
 
 #undef  Perl_sv_pvn
 char*
-Perl_sv_pvn(void *pPerl, SV *sv, STRLEN *len)
+Perl_sv_pvn(pTHXo_ SV *sv, STRLEN *len)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_pvn(sv, len);
 }
 
 #undef  Perl_sv_true
 I32
-Perl_sv_true(void *pPerl, SV *sv)
+Perl_sv_true(pTHXo_ SV *sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_true(sv);
 }
 
 #undef  Perl_sv_add_arena
 void
-Perl_sv_add_arena(void *pPerl, char* ptr, U32 size, U32 flags)
+Perl_sv_add_arena(pTHXo_ char* ptr, U32 size, U32 flags)
 {
     ((CPerlObj*)pPerl)->Perl_sv_add_arena(ptr, size, flags);
 }
 
 #undef  Perl_sv_backoff
 int
-Perl_sv_backoff(void *pPerl, SV* sv)
+Perl_sv_backoff(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_backoff(sv);
 }
 
 #undef  Perl_sv_bless
 SV*
-Perl_sv_bless(void *pPerl, SV* sv, HV* stash)
+Perl_sv_bless(pTHXo_ SV* sv, HV* stash)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_bless(sv, stash);
 }
 
+#undef  Perl_sv_catpvf
+void
+Perl_sv_catpvf(pTHXo_ SV* sv, const char* pat)
+{
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_sv_vcatpvf(sv, pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_sv_vcatpvf
+void
+Perl_sv_vcatpvf(pTHXo_ SV* sv, const char* pat, va_list* args)
+{
+    ((CPerlObj*)pPerl)->Perl_sv_vcatpvf(sv, pat, args);
+}
+
 #undef  Perl_sv_catpv
 void
-Perl_sv_catpv(void *pPerl, SV* sv, const char* ptr)
+Perl_sv_catpv(pTHXo_ SV* sv, const char* ptr)
 {
     ((CPerlObj*)pPerl)->Perl_sv_catpv(sv, ptr);
 }
 
 #undef  Perl_sv_catpvn
 void
-Perl_sv_catpvn(void *pPerl, SV* sv, const char* ptr, STRLEN len)
+Perl_sv_catpvn(pTHXo_ SV* sv, const char* ptr, STRLEN len)
 {
     ((CPerlObj*)pPerl)->Perl_sv_catpvn(sv, ptr, len);
 }
 
 #undef  Perl_sv_catsv
 void
-Perl_sv_catsv(void *pPerl, SV* dsv, SV* ssv)
+Perl_sv_catsv(pTHXo_ SV* dsv, SV* ssv)
 {
     ((CPerlObj*)pPerl)->Perl_sv_catsv(dsv, ssv);
 }
 
 #undef  Perl_sv_chop
 void
-Perl_sv_chop(void *pPerl, SV* sv, char* ptr)
+Perl_sv_chop(pTHXo_ SV* sv, char* ptr)
 {
     ((CPerlObj*)pPerl)->Perl_sv_chop(sv, ptr);
 }
 
 #undef  Perl_sv_clean_all
 void
-Perl_sv_clean_all(void *pPerl)
+Perl_sv_clean_all(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_sv_clean_all();
 }
 
 #undef  Perl_sv_clean_objs
 void
-Perl_sv_clean_objs(void *pPerl)
+Perl_sv_clean_objs(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_sv_clean_objs();
 }
 
 #undef  Perl_sv_clear
 void
-Perl_sv_clear(void *pPerl, SV* sv)
+Perl_sv_clear(pTHXo_ SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_sv_clear(sv);
 }
 
 #undef  Perl_sv_cmp
 I32
-Perl_sv_cmp(void *pPerl, SV* sv1, SV* sv2)
+Perl_sv_cmp(pTHXo_ SV* sv1, SV* sv2)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_cmp(sv1, sv2);
 }
 
 #undef  Perl_sv_cmp_locale
 I32
-Perl_sv_cmp_locale(void *pPerl, SV* sv1, SV* sv2)
+Perl_sv_cmp_locale(pTHXo_ SV* sv1, SV* sv2)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_cmp_locale(sv1, sv2);
 }
@@ -3520,7 +3773,7 @@ Perl_sv_cmp_locale(void *pPerl, SV* sv1, SV* sv2)
 
 #undef  Perl_sv_collxfrm
 char*
-Perl_sv_collxfrm(void *pPerl, SV* sv, STRLEN* nxp)
+Perl_sv_collxfrm(pTHXo_ SV* sv, STRLEN* nxp)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_collxfrm(sv, nxp);
 }
@@ -3528,378 +3781,395 @@ Perl_sv_collxfrm(void *pPerl, SV* sv, STRLEN* nxp)
 
 #undef  Perl_sv_compile_2op
 OP*
-Perl_sv_compile_2op(void *pPerl, SV* sv, OP** startp, char* code, AV** avp)
+Perl_sv_compile_2op(pTHXo_ SV* sv, OP** startp, char* code, AV** avp)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_compile_2op(sv, startp, code, avp);
 }
 
 #undef  Perl_sv_dec
 void
-Perl_sv_dec(void *pPerl, SV* sv)
+Perl_sv_dec(pTHXo_ SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_sv_dec(sv);
 }
 
 #undef  Perl_sv_dump
 void
-Perl_sv_dump(void *pPerl, SV* sv)
+Perl_sv_dump(pTHXo_ SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_sv_dump(sv);
 }
 
 #undef  Perl_sv_derived_from
 bool
-Perl_sv_derived_from(void *pPerl, SV* sv, const char* name)
+Perl_sv_derived_from(pTHXo_ SV* sv, const char* name)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_derived_from(sv, name);
 }
 
 #undef  Perl_sv_eq
 I32
-Perl_sv_eq(void *pPerl, SV* sv1, SV* sv2)
+Perl_sv_eq(pTHXo_ SV* sv1, SV* sv2)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_eq(sv1, sv2);
 }
 
 #undef  Perl_sv_free
 void
-Perl_sv_free(void *pPerl, SV* sv)
+Perl_sv_free(pTHXo_ SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_sv_free(sv);
 }
 
 #undef  Perl_sv_free_arenas
 void
-Perl_sv_free_arenas(void *pPerl)
+Perl_sv_free_arenas(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_sv_free_arenas();
 }
 
 #undef  Perl_sv_gets
 char*
-Perl_sv_gets(void *pPerl, SV* sv, PerlIO* fp, I32 append)
+Perl_sv_gets(pTHXo_ SV* sv, PerlIO* fp, I32 append)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_gets(sv, fp, append);
 }
 
 #undef  Perl_sv_grow
 char*
-Perl_sv_grow(void *pPerl, SV* sv, STRLEN newlen)
+Perl_sv_grow(pTHXo_ SV* sv, STRLEN newlen)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_grow(sv, newlen);
 }
 
 #undef  Perl_sv_inc
 void
-Perl_sv_inc(void *pPerl, SV* sv)
+Perl_sv_inc(pTHXo_ SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_sv_inc(sv);
 }
 
 #undef  Perl_sv_insert
 void
-Perl_sv_insert(void *pPerl, SV* bigsv, STRLEN offset, STRLEN len, char* little, STRLEN littlelen)
+Perl_sv_insert(pTHXo_ SV* bigsv, STRLEN offset, STRLEN len, char* little, STRLEN littlelen)
 {
     ((CPerlObj*)pPerl)->Perl_sv_insert(bigsv, offset, len, little, littlelen);
 }
 
 #undef  Perl_sv_isa
 int
-Perl_sv_isa(void *pPerl, SV* sv, const char* name)
+Perl_sv_isa(pTHXo_ SV* sv, const char* name)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_isa(sv, name);
 }
 
 #undef  Perl_sv_isobject
 int
-Perl_sv_isobject(void *pPerl, SV* sv)
+Perl_sv_isobject(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_isobject(sv);
 }
 
 #undef  Perl_sv_len
 STRLEN
-Perl_sv_len(void *pPerl, SV* sv)
+Perl_sv_len(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_len(sv);
 }
 
 #undef  Perl_sv_len_utf8
 STRLEN
-Perl_sv_len_utf8(void *pPerl, SV* sv)
+Perl_sv_len_utf8(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_len_utf8(sv);
 }
 
 #undef  Perl_sv_magic
 void
-Perl_sv_magic(void *pPerl, SV* sv, SV* obj, int how, const char* name, I32 namlen)
+Perl_sv_magic(pTHXo_ SV* sv, SV* obj, int how, const char* name, I32 namlen)
 {
     ((CPerlObj*)pPerl)->Perl_sv_magic(sv, obj, how, name, namlen);
 }
 
 #undef  Perl_sv_mortalcopy
 SV*
-Perl_sv_mortalcopy(void *pPerl, SV* oldsv)
+Perl_sv_mortalcopy(pTHXo_ SV* oldsv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_mortalcopy(oldsv);
 }
 
 #undef  Perl_sv_newmortal
 SV*
-Perl_sv_newmortal(void *pPerl)
+Perl_sv_newmortal(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_newmortal();
 }
 
 #undef  Perl_sv_newref
 SV*
-Perl_sv_newref(void *pPerl, SV* sv)
+Perl_sv_newref(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_newref(sv);
 }
 
 #undef  Perl_sv_peek
 char*
-Perl_sv_peek(void *pPerl, SV* sv)
+Perl_sv_peek(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_peek(sv);
 }
 
 #undef  Perl_sv_pos_u2b
 void
-Perl_sv_pos_u2b(void *pPerl, SV* sv, I32* offsetp, I32* lenp)
+Perl_sv_pos_u2b(pTHXo_ SV* sv, I32* offsetp, I32* lenp)
 {
     ((CPerlObj*)pPerl)->Perl_sv_pos_u2b(sv, offsetp, lenp);
 }
 
 #undef  Perl_sv_pos_b2u
 void
-Perl_sv_pos_b2u(void *pPerl, SV* sv, I32* offsetp)
+Perl_sv_pos_b2u(pTHXo_ SV* sv, I32* offsetp)
 {
     ((CPerlObj*)pPerl)->Perl_sv_pos_b2u(sv, offsetp);
 }
 
 #undef  Perl_sv_pvn_force
 char*
-Perl_sv_pvn_force(void *pPerl, SV* sv, STRLEN* lp)
+Perl_sv_pvn_force(pTHXo_ SV* sv, STRLEN* lp)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_pvn_force(sv, lp);
 }
 
 #undef  Perl_sv_reftype
 char*
-Perl_sv_reftype(void *pPerl, SV* sv, int ob)
+Perl_sv_reftype(pTHXo_ SV* sv, int ob)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_reftype(sv, ob);
 }
 
 #undef  Perl_sv_replace
 void
-Perl_sv_replace(void *pPerl, SV* sv, SV* nsv)
+Perl_sv_replace(pTHXo_ SV* sv, SV* nsv)
 {
     ((CPerlObj*)pPerl)->Perl_sv_replace(sv, nsv);
 }
 
 #undef  Perl_sv_report_used
 void
-Perl_sv_report_used(void *pPerl)
+Perl_sv_report_used(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_sv_report_used();
 }
 
 #undef  Perl_sv_reset
 void
-Perl_sv_reset(void *pPerl, char* s, HV* stash)
+Perl_sv_reset(pTHXo_ char* s, HV* stash)
 {
     ((CPerlObj*)pPerl)->Perl_sv_reset(s, stash);
 }
 
+#undef  Perl_sv_setpvf
+void
+Perl_sv_setpvf(pTHXo_ SV* sv, const char* pat)
+{
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_sv_vsetpvf(sv, pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_sv_vsetpvf
+void
+Perl_sv_vsetpvf(pTHXo_ SV* sv, const char* pat, va_list* args)
+{
+    ((CPerlObj*)pPerl)->Perl_sv_vsetpvf(sv, pat, args);
+}
+
 #undef  Perl_sv_setiv
 void
-Perl_sv_setiv(void *pPerl, SV* sv, IV num)
+Perl_sv_setiv(pTHXo_ SV* sv, IV num)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setiv(sv, num);
 }
 
 #undef  Perl_sv_setpviv
 void
-Perl_sv_setpviv(void *pPerl, SV* sv, IV num)
+Perl_sv_setpviv(pTHXo_ SV* sv, IV num)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setpviv(sv, num);
 }
 
 #undef  Perl_sv_setuv
 void
-Perl_sv_setuv(void *pPerl, SV* sv, UV num)
+Perl_sv_setuv(pTHXo_ SV* sv, UV num)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setuv(sv, num);
 }
 
 #undef  Perl_sv_setnv
 void
-Perl_sv_setnv(void *pPerl, SV* sv, NV num)
+Perl_sv_setnv(pTHXo_ SV* sv, NV num)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setnv(sv, num);
 }
 
 #undef  Perl_sv_setref_iv
 SV*
-Perl_sv_setref_iv(void *pPerl, SV* rv, const char* classname, IV iv)
+Perl_sv_setref_iv(pTHXo_ SV* rv, const char* classname, IV iv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_setref_iv(rv, classname, iv);
 }
 
 #undef  Perl_sv_setref_nv
 SV*
-Perl_sv_setref_nv(void *pPerl, SV* rv, const char* classname, NV nv)
+Perl_sv_setref_nv(pTHXo_ SV* rv, const char* classname, NV nv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_setref_nv(rv, classname, nv);
 }
 
 #undef  Perl_sv_setref_pv
 SV*
-Perl_sv_setref_pv(void *pPerl, SV* rv, const char* classname, void* pv)
+Perl_sv_setref_pv(pTHXo_ SV* rv, const char* classname, void* pv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_setref_pv(rv, classname, pv);
 }
 
 #undef  Perl_sv_setref_pvn
 SV*
-Perl_sv_setref_pvn(void *pPerl, SV* rv, const char* classname, char* pv, STRLEN n)
+Perl_sv_setref_pvn(pTHXo_ SV* rv, const char* classname, char* pv, STRLEN n)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_setref_pvn(rv, classname, pv, n);
 }
 
 #undef  Perl_sv_setpv
 void
-Perl_sv_setpv(void *pPerl, SV* sv, const char* ptr)
+Perl_sv_setpv(pTHXo_ SV* sv, const char* ptr)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setpv(sv, ptr);
 }
 
 #undef  Perl_sv_setpvn
 void
-Perl_sv_setpvn(void *pPerl, SV* sv, const char* ptr, STRLEN len)
+Perl_sv_setpvn(pTHXo_ SV* sv, const char* ptr, STRLEN len)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setpvn(sv, ptr, len);
 }
 
 #undef  Perl_sv_setsv
 void
-Perl_sv_setsv(void *pPerl, SV* dsv, SV* ssv)
+Perl_sv_setsv(pTHXo_ SV* dsv, SV* ssv)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setsv(dsv, ssv);
 }
 
 #undef  Perl_sv_taint
 void
-Perl_sv_taint(void *pPerl, SV* sv)
+Perl_sv_taint(pTHXo_ SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_sv_taint(sv);
 }
 
 #undef  Perl_sv_tainted
 bool
-Perl_sv_tainted(void *pPerl, SV* sv)
+Perl_sv_tainted(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_tainted(sv);
 }
 
 #undef  Perl_sv_unmagic
 int
-Perl_sv_unmagic(void *pPerl, SV* sv, int type)
+Perl_sv_unmagic(pTHXo_ SV* sv, int type)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_unmagic(sv, type);
 }
 
 #undef  Perl_sv_unref
 void
-Perl_sv_unref(void *pPerl, SV* sv)
+Perl_sv_unref(pTHXo_ SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_sv_unref(sv);
 }
 
 #undef  Perl_sv_untaint
 void
-Perl_sv_untaint(void *pPerl, SV* sv)
+Perl_sv_untaint(pTHXo_ SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_sv_untaint(sv);
 }
 
 #undef  Perl_sv_upgrade
 bool
-Perl_sv_upgrade(void *pPerl, SV* sv, U32 mt)
+Perl_sv_upgrade(pTHXo_ SV* sv, U32 mt)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_upgrade(sv, mt);
 }
 
 #undef  Perl_sv_usepvn
 void
-Perl_sv_usepvn(void *pPerl, SV* sv, char* ptr, STRLEN len)
+Perl_sv_usepvn(pTHXo_ SV* sv, char* ptr, STRLEN len)
 {
     ((CPerlObj*)pPerl)->Perl_sv_usepvn(sv, ptr, len);
 }
 
 #undef  Perl_sv_vcatpvfn
 void
-Perl_sv_vcatpvfn(void *pPerl, SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *used_locale)
+Perl_sv_vcatpvfn(pTHXo_ SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *used_locale)
 {
     ((CPerlObj*)pPerl)->Perl_sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, used_locale);
 }
 
 #undef  Perl_sv_vsetpvfn
 void
-Perl_sv_vsetpvfn(void *pPerl, SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *used_locale)
+Perl_sv_vsetpvfn(pTHXo_ SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *used_locale)
 {
     ((CPerlObj*)pPerl)->Perl_sv_vsetpvfn(sv, pat, patlen, args, svargs, svmax, used_locale);
 }
 
 #undef  Perl_swash_init
 SV*
-Perl_swash_init(void *pPerl, char* pkg, char* name, SV* listsv, I32 minbits, I32 none)
+Perl_swash_init(pTHXo_ char* pkg, char* name, SV* listsv, I32 minbits, I32 none)
 {
     return ((CPerlObj*)pPerl)->Perl_swash_init(pkg, name, listsv, minbits, none);
 }
 
 #undef  Perl_swash_fetch
 UV
-Perl_swash_fetch(void *pPerl, SV *sv, U8 *ptr)
+Perl_swash_fetch(pTHXo_ SV *sv, U8 *ptr)
 {
     return ((CPerlObj*)pPerl)->Perl_swash_fetch(sv, ptr);
 }
 
 #undef  Perl_taint_env
 void
-Perl_taint_env(void *pPerl)
+Perl_taint_env(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_taint_env();
 }
 
 #undef  Perl_taint_proper
 void
-Perl_taint_proper(void *pPerl, const char* f, char* s)
+Perl_taint_proper(pTHXo_ const char* f, char* s)
 {
     ((CPerlObj*)pPerl)->Perl_taint_proper(f, s);
 }
 
 #undef  Perl_to_utf8_lower
 UV
-Perl_to_utf8_lower(void *pPerl, U8 *p)
+Perl_to_utf8_lower(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_to_utf8_lower(p);
 }
 
 #undef  Perl_to_utf8_upper
 UV
-Perl_to_utf8_upper(void *pPerl, U8 *p)
+Perl_to_utf8_upper(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_to_utf8_upper(p);
 }
 
 #undef  Perl_to_utf8_title
 UV
-Perl_to_utf8_title(void *pPerl, U8 *p)
+Perl_to_utf8_title(pTHXo_ U8 *p)
 {
     return ((CPerlObj*)pPerl)->Perl_to_utf8_title(p);
 }
@@ -3907,7 +4177,7 @@ Perl_to_utf8_title(void *pPerl, U8 *p)
 
 #undef  Perl_unlnk
 I32
-Perl_unlnk(void *pPerl, char* f)
+Perl_unlnk(pTHXo_ char* f)
 {
     return ((CPerlObj*)pPerl)->Perl_unlnk(f);
 }
@@ -3916,7 +4186,7 @@ Perl_unlnk(void *pPerl, char* f)
 
 #undef  Perl_unlock_condpair
 void
-Perl_unlock_condpair(void *pPerl, void* svv)
+Perl_unlock_condpair(pTHXo_ void* svv)
 {
     ((CPerlObj*)pPerl)->Perl_unlock_condpair(svv);
 }
@@ -3924,105 +4194,139 @@ Perl_unlock_condpair(void *pPerl, void* svv)
 
 #undef  Perl_unsharepvn
 void
-Perl_unsharepvn(void *pPerl, const char* sv, I32 len, U32 hash)
+Perl_unsharepvn(pTHXo_ const char* sv, I32 len, U32 hash)
 {
     ((CPerlObj*)pPerl)->Perl_unsharepvn(sv, len, hash);
 }
 
 #undef  Perl_unshare_hek
 void
-Perl_unshare_hek(void *pPerl, HEK* hek)
+Perl_unshare_hek(pTHXo_ HEK* hek)
 {
     ((CPerlObj*)pPerl)->Perl_unshare_hek(hek);
 }
 
 #undef  Perl_utilize
 void
-Perl_utilize(void *pPerl, int aver, I32 floor, OP* version, OP* id, OP* arg)
+Perl_utilize(pTHXo_ int aver, I32 floor, OP* version, OP* id, OP* arg)
 {
     ((CPerlObj*)pPerl)->Perl_utilize(aver, floor, version, id, arg);
 }
 
 #undef  Perl_utf16_to_utf8
 U8*
-Perl_utf16_to_utf8(void *pPerl, U16* p, U8 *d, I32 bytelen)
+Perl_utf16_to_utf8(pTHXo_ U16* p, U8 *d, I32 bytelen)
 {
     return ((CPerlObj*)pPerl)->Perl_utf16_to_utf8(p, d, bytelen);
 }
 
 #undef  Perl_utf16_to_utf8_reversed
 U8*
-Perl_utf16_to_utf8_reversed(void *pPerl, U16* p, U8 *d, I32 bytelen)
+Perl_utf16_to_utf8_reversed(pTHXo_ U16* p, U8 *d, I32 bytelen)
 {
     return ((CPerlObj*)pPerl)->Perl_utf16_to_utf8_reversed(p, d, bytelen);
 }
 
 #undef  Perl_utf8_distance
 I32
-Perl_utf8_distance(void *pPerl, U8 *a, U8 *b)
+Perl_utf8_distance(pTHXo_ U8 *a, U8 *b)
 {
     return ((CPerlObj*)pPerl)->Perl_utf8_distance(a, b);
 }
 
 #undef  Perl_utf8_hop
 U8*
-Perl_utf8_hop(void *pPerl, U8 *s, I32 off)
+Perl_utf8_hop(pTHXo_ U8 *s, I32 off)
 {
     return ((CPerlObj*)pPerl)->Perl_utf8_hop(s, off);
 }
 
 #undef  Perl_utf8_to_uv
 UV
-Perl_utf8_to_uv(void *pPerl, U8 *s, I32* retlen)
+Perl_utf8_to_uv(pTHXo_ U8 *s, I32* retlen)
 {
     return ((CPerlObj*)pPerl)->Perl_utf8_to_uv(s, retlen);
 }
 
 #undef  Perl_uv_to_utf8
 U8*
-Perl_uv_to_utf8(void *pPerl, U8 *d, UV uv)
+Perl_uv_to_utf8(pTHXo_ U8 *d, UV uv)
 {
     return ((CPerlObj*)pPerl)->Perl_uv_to_utf8(d, uv);
 }
 
 #undef  Perl_vivify_defelem
 void
-Perl_vivify_defelem(void *pPerl, SV* sv)
+Perl_vivify_defelem(pTHXo_ SV* sv)
 {
     ((CPerlObj*)pPerl)->Perl_vivify_defelem(sv);
 }
 
 #undef  Perl_vivify_ref
 void
-Perl_vivify_ref(void *pPerl, SV* sv, U32 to_what)
+Perl_vivify_ref(pTHXo_ SV* sv, U32 to_what)
 {
     ((CPerlObj*)pPerl)->Perl_vivify_ref(sv, to_what);
 }
 
 #undef  Perl_wait4pid
 I32
-Perl_wait4pid(void *pPerl, int pid, int* statusp, int flags)
+Perl_wait4pid(pTHXo_ int pid, int* statusp, int flags)
 {
     return ((CPerlObj*)pPerl)->Perl_wait4pid(pid, statusp, flags);
 }
 
+#undef  Perl_warn
+void
+Perl_warn(pTHXo_ const char* pat)
+{
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_vwarn(pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_vwarn
+void
+Perl_vwarn(pTHXo_ const char* pat, va_list* args)
+{
+    ((CPerlObj*)pPerl)->Perl_vwarn(pat, args);
+}
+
+#undef  Perl_warner
+void
+Perl_warner(pTHXo_ U32 err, const char* pat)
+{
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_vwarner(err, pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_vwarner
+void
+Perl_vwarner(pTHXo_ U32 err, const char* pat, va_list* args)
+{
+    ((CPerlObj*)pPerl)->Perl_vwarner(err, pat, args);
+}
+
 #undef  Perl_watch
 void
-Perl_watch(void *pPerl, char** addr)
+Perl_watch(pTHXo_ char** addr)
 {
     ((CPerlObj*)pPerl)->Perl_watch(addr);
 }
 
 #undef  Perl_whichsig
 I32
-Perl_whichsig(void *pPerl, char* sig)
+Perl_whichsig(pTHXo_ char* sig)
 {
     return ((CPerlObj*)pPerl)->Perl_whichsig(sig);
 }
 
 #undef  Perl_yyerror
 int
-Perl_yyerror(void *pPerl, char* s)
+Perl_yyerror(pTHXo_ char* s)
 {
     return ((CPerlObj*)pPerl)->Perl_yyerror(s);
 }
@@ -4030,7 +4334,7 @@ Perl_yyerror(void *pPerl, char* s)
 
 #undef  Perl_yylex
 int
-Perl_yylex(void *pPerl, YYSTYPE *lvalp, int *lcharp)
+Perl_yylex(pTHXo_ YYSTYPE *lvalp, int *lcharp)
 {
     return ((CPerlObj*)pPerl)->Perl_yylex(lvalp, lcharp);
 }
@@ -4038,7 +4342,7 @@ Perl_yylex(void *pPerl, YYSTYPE *lvalp, int *lcharp)
 
 #undef  Perl_yylex
 int
-Perl_yylex(void *pPerl)
+Perl_yylex(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_yylex();
 }
@@ -4046,14 +4350,14 @@ Perl_yylex(void *pPerl)
 
 #undef  Perl_yyparse
 int
-Perl_yyparse(void *pPerl)
+Perl_yyparse(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_yyparse();
 }
 
 #undef  Perl_yywarn
 int
-Perl_yywarn(void *pPerl, char* s)
+Perl_yywarn(pTHXo_ char* s)
 {
     return ((CPerlObj*)pPerl)->Perl_yywarn(s);
 }
@@ -4061,94 +4365,106 @@ Perl_yywarn(void *pPerl, char* s)
 
 #undef  Perl_dump_mstats
 void
-Perl_dump_mstats(void *pPerl, char* s)
+Perl_dump_mstats(pTHXo_ char* s)
 {
     ((CPerlObj*)pPerl)->Perl_dump_mstats(s);
 }
 
 #undef  Perl_malloc
 Malloc_t
-Perl_malloc(void *pPerl, MEM_SIZE nbytes)
+Perl_malloc(MEM_SIZE nbytes)
 {
+    dTHXo;
     return ((CPerlObj*)pPerl)->Perl_malloc(nbytes);
 }
 
 #undef  Perl_calloc
 Malloc_t
-Perl_calloc(void *pPerl, MEM_SIZE elements, MEM_SIZE size)
+Perl_calloc(MEM_SIZE elements, MEM_SIZE size)
 {
+    dTHXo;
     return ((CPerlObj*)pPerl)->Perl_calloc(elements, size);
 }
 
 #undef  Perl_realloc
 Malloc_t
-Perl_realloc(void *pPerl, Malloc_t where, MEM_SIZE nbytes)
+Perl_realloc(Malloc_t where, MEM_SIZE nbytes)
 {
+    dTHXo;
     return ((CPerlObj*)pPerl)->Perl_realloc(where, nbytes);
 }
 
 #undef  Perl_mfree
 Free_t
-Perl_mfree(void *pPerl, Malloc_t where)
+Perl_mfree(Malloc_t where)
 {
+    dTHXo;
     ((CPerlObj*)pPerl)->Perl_mfree(where);
 }
 #endif
 
 #undef  Perl_safesysmalloc
 Malloc_t
-Perl_safesysmalloc(void *pPerl, MEM_SIZE nbytes)
+Perl_safesysmalloc(MEM_SIZE nbytes)
 {
+    dTHXo;
     return ((CPerlObj*)pPerl)->Perl_safesysmalloc(nbytes);
 }
 
 #undef  Perl_safesyscalloc
 Malloc_t
-Perl_safesyscalloc(void *pPerl, MEM_SIZE elements, MEM_SIZE size)
+Perl_safesyscalloc(MEM_SIZE elements, MEM_SIZE size)
 {
+    dTHXo;
     return ((CPerlObj*)pPerl)->Perl_safesyscalloc(elements, size);
 }
 
 #undef  Perl_safesysrealloc
 Malloc_t
-Perl_safesysrealloc(void *pPerl, Malloc_t where, MEM_SIZE nbytes)
+Perl_safesysrealloc(Malloc_t where, MEM_SIZE nbytes)
 {
+    dTHXo;
     return ((CPerlObj*)pPerl)->Perl_safesysrealloc(where, nbytes);
 }
 
 #undef  Perl_safesysfree
 Free_t
-Perl_safesysfree(void *pPerl, Malloc_t where)
+Perl_safesysfree(Malloc_t where)
 {
+    dTHXo;
     ((CPerlObj*)pPerl)->Perl_safesysfree(where);
 }
 #if defined(LEAKTEST)
 
 #undef  Perl_safexmalloc
 Malloc_t
-Perl_safexmalloc(void *pPerl, I32 x, MEM_SIZE size)
+Perl_safexmalloc(I32 x, MEM_SIZE size)
 {
+    dTHXo;
     return ((CPerlObj*)pPerl)->Perl_safexmalloc(x, size);
 }
 
 #undef  Perl_safexcalloc
 Malloc_t
-Perl_safexcalloc(void *pPerl, I32 x, MEM_SIZE elements, MEM_SIZE size)
+Perl_safexcalloc(I32 x, MEM_SIZE elements, MEM_SIZE size)
 {
+    dTHXo;
     return ((CPerlObj*)pPerl)->Perl_safexcalloc(x, elements, size);
 }
 
 #undef  Perl_safexrealloc
 Malloc_t
-Perl_safexrealloc(void *pPerl, Malloc_t where, MEM_SIZE size)
+Perl_safexrealloc(Malloc_t where, MEM_SIZE size)
 {
+    dTHXo;
     return ((CPerlObj*)pPerl)->Perl_safexrealloc(where, size);
 }
 
 #undef  Perl_safexfree
 void
-Perl_safexfree(void *pPerl, Malloc_t where)
+Perl_safexfree(Malloc_t where)
 {
+    dTHXo;
     ((CPerlObj*)pPerl)->Perl_safexfree(where);
 }
 #endif
@@ -4156,7 +4472,7 @@ Perl_safexfree(void *pPerl, Malloc_t where)
 
 #undef  Perl_GetVars
 struct perl_vars *
-Perl_GetVars(void *pPerl)
+Perl_GetVars(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_GetVars();
 }
@@ -4164,210 +4480,281 @@ Perl_GetVars(void *pPerl)
 
 #undef  Perl_runops_standard
 int
-Perl_runops_standard(void *pPerl)
+Perl_runops_standard(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_runops_standard();
 }
 
 #undef  Perl_runops_debug
 int
-Perl_runops_debug(void *pPerl)
+Perl_runops_debug(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_runops_debug();
 }
 
+#undef  Perl_sv_catpvf_mg
+void
+Perl_sv_catpvf_mg(pTHXo_ SV *sv, const char* pat)
+{
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_sv_vcatpvf_mg(sv, pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_sv_vcatpvf_mg
+void
+Perl_sv_vcatpvf_mg(pTHXo_ SV* sv, const char* pat, va_list* args)
+{
+    ((CPerlObj*)pPerl)->Perl_sv_vcatpvf_mg(sv, pat, args);
+}
+
 #undef  Perl_sv_catpv_mg
 void
-Perl_sv_catpv_mg(void *pPerl, SV *sv, const char *ptr)
+Perl_sv_catpv_mg(pTHXo_ SV *sv, const char *ptr)
 {
     ((CPerlObj*)pPerl)->Perl_sv_catpv_mg(sv, ptr);
 }
 
 #undef  Perl_sv_catpvn_mg
 void
-Perl_sv_catpvn_mg(void *pPerl, SV *sv, const char *ptr, STRLEN len)
+Perl_sv_catpvn_mg(pTHXo_ SV *sv, const char *ptr, STRLEN len)
 {
     ((CPerlObj*)pPerl)->Perl_sv_catpvn_mg(sv, ptr, len);
 }
 
 #undef  Perl_sv_catsv_mg
 void
-Perl_sv_catsv_mg(void *pPerl, SV *dstr, SV *sstr)
+Perl_sv_catsv_mg(pTHXo_ SV *dstr, SV *sstr)
 {
     ((CPerlObj*)pPerl)->Perl_sv_catsv_mg(dstr, sstr);
 }
 
+#undef  Perl_sv_setpvf_mg
+void
+Perl_sv_setpvf_mg(pTHXo_ SV *sv, const char* pat)
+{
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_sv_vsetpvf_mg(sv, pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_sv_vsetpvf_mg
+void
+Perl_sv_vsetpvf_mg(pTHXo_ SV* sv, const char* pat, va_list* args)
+{
+    ((CPerlObj*)pPerl)->Perl_sv_vsetpvf_mg(sv, pat, args);
+}
+
 #undef  Perl_sv_setiv_mg
 void
-Perl_sv_setiv_mg(void *pPerl, SV *sv, IV i)
+Perl_sv_setiv_mg(pTHXo_ SV *sv, IV i)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setiv_mg(sv, i);
 }
 
 #undef  Perl_sv_setpviv_mg
 void
-Perl_sv_setpviv_mg(void *pPerl, SV *sv, IV iv)
+Perl_sv_setpviv_mg(pTHXo_ SV *sv, IV iv)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setpviv_mg(sv, iv);
 }
 
 #undef  Perl_sv_setuv_mg
 void
-Perl_sv_setuv_mg(void *pPerl, SV *sv, UV u)
+Perl_sv_setuv_mg(pTHXo_ SV *sv, UV u)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setuv_mg(sv, u);
 }
 
 #undef  Perl_sv_setnv_mg
 void
-Perl_sv_setnv_mg(void *pPerl, SV *sv, NV num)
+Perl_sv_setnv_mg(pTHXo_ SV *sv, NV num)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setnv_mg(sv, num);
 }
 
 #undef  Perl_sv_setpv_mg
 void
-Perl_sv_setpv_mg(void *pPerl, SV *sv, const char *ptr)
+Perl_sv_setpv_mg(pTHXo_ SV *sv, const char *ptr)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setpv_mg(sv, ptr);
 }
 
 #undef  Perl_sv_setpvn_mg
 void
-Perl_sv_setpvn_mg(void *pPerl, SV *sv, const char *ptr, STRLEN len)
+Perl_sv_setpvn_mg(pTHXo_ SV *sv, const char *ptr, STRLEN len)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setpvn_mg(sv, ptr, len);
 }
 
 #undef  Perl_sv_setsv_mg
 void
-Perl_sv_setsv_mg(void *pPerl, SV *dstr, SV *sstr)
+Perl_sv_setsv_mg(pTHXo_ SV *dstr, SV *sstr)
 {
     ((CPerlObj*)pPerl)->Perl_sv_setsv_mg(dstr, sstr);
 }
 
 #undef  Perl_sv_usepvn_mg
 void
-Perl_sv_usepvn_mg(void *pPerl, SV *sv, char *ptr, STRLEN len)
+Perl_sv_usepvn_mg(pTHXo_ SV *sv, char *ptr, STRLEN len)
 {
     ((CPerlObj*)pPerl)->Perl_sv_usepvn_mg(sv, ptr, len);
 }
 
 #undef  Perl_get_vtbl
 MGVTBL*
-Perl_get_vtbl(void *pPerl, int vtbl_id)
+Perl_get_vtbl(pTHXo_ int vtbl_id)
 {
     return ((CPerlObj*)pPerl)->Perl_get_vtbl(vtbl_id);
 }
 
 #undef  Perl_pv_display
 char*
-Perl_pv_display(void *pPerl, SV *sv, char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
+Perl_pv_display(pTHXo_ SV *sv, char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
 {
     return ((CPerlObj*)pPerl)->Perl_pv_display(sv, pv, cur, len, pvlim);
 }
 
+#undef  Perl_dump_indent
+void
+Perl_dump_indent(pTHXo_ I32 level, PerlIO *file, const char* pat)
+{
+    va_list args;
+    va_start(args, pat);
+    ((CPerlObj*)pPerl)->Perl_dump_vindent(level, file, pat, &args);
+    va_end(args);
+}
+
+#undef  Perl_dump_vindent
+void
+Perl_dump_vindent(pTHXo_ I32 level, PerlIO *file, const char* pat, va_list *args)
+{
+    ((CPerlObj*)pPerl)->Perl_dump_vindent(level, file, pat, args);
+}
+
 #undef  Perl_do_gv_dump
 void
-Perl_do_gv_dump(void *pPerl, I32 level, PerlIO *file, char *name, GV *sv)
+Perl_do_gv_dump(pTHXo_ I32 level, PerlIO *file, char *name, GV *sv)
 {
     ((CPerlObj*)pPerl)->Perl_do_gv_dump(level, file, name, sv);
 }
 
 #undef  Perl_do_gvgv_dump
 void
-Perl_do_gvgv_dump(void *pPerl, I32 level, PerlIO *file, char *name, GV *sv)
+Perl_do_gvgv_dump(pTHXo_ I32 level, PerlIO *file, char *name, GV *sv)
 {
     ((CPerlObj*)pPerl)->Perl_do_gvgv_dump(level, file, name, sv);
 }
 
 #undef  Perl_do_hv_dump
 void
-Perl_do_hv_dump(void *pPerl, I32 level, PerlIO *file, char *name, HV *sv)
+Perl_do_hv_dump(pTHXo_ I32 level, PerlIO *file, char *name, HV *sv)
 {
     ((CPerlObj*)pPerl)->Perl_do_hv_dump(level, file, name, sv);
 }
 
 #undef  Perl_do_magic_dump
 void
-Perl_do_magic_dump(void *pPerl, I32 level, PerlIO *file, MAGIC *mg, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim)
+Perl_do_magic_dump(pTHXo_ I32 level, PerlIO *file, MAGIC *mg, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim)
 {
     ((CPerlObj*)pPerl)->Perl_do_magic_dump(level, file, mg, nest, maxnest, dumpops, pvlim);
 }
 
 #undef  Perl_do_op_dump
 void
-Perl_do_op_dump(void *pPerl, I32 level, PerlIO *file, OP *o)
+Perl_do_op_dump(pTHXo_ I32 level, PerlIO *file, OP *o)
 {
     ((CPerlObj*)pPerl)->Perl_do_op_dump(level, file, o);
 }
 
 #undef  Perl_do_pmop_dump
 void
-Perl_do_pmop_dump(void *pPerl, I32 level, PerlIO *file, PMOP *pm)
+Perl_do_pmop_dump(pTHXo_ I32 level, PerlIO *file, PMOP *pm)
 {
     ((CPerlObj*)pPerl)->Perl_do_pmop_dump(level, file, pm);
 }
 
 #undef  Perl_do_sv_dump
 void
-Perl_do_sv_dump(void *pPerl, I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim)
+Perl_do_sv_dump(pTHXo_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim)
 {
     ((CPerlObj*)pPerl)->Perl_do_sv_dump(level, file, sv, nest, maxnest, dumpops, pvlim);
 }
 
 #undef  Perl_magic_dump
 void
-Perl_magic_dump(void *pPerl, MAGIC *mg)
+Perl_magic_dump(pTHXo_ MAGIC *mg)
 {
     ((CPerlObj*)pPerl)->Perl_magic_dump(mg);
 }
 
+#undef  Perl_default_protect
+void*
+Perl_default_protect(pTHXo_ int *excpt, protect_body_t body)
+{
+    void* retval;
+    va_list args;
+    va_start(args, body);
+    retval = ((CPerlObj*)pPerl)->Perl_vdefault_protect(excpt, body, &args);
+    va_end(args);
+    return retval;
+
+}
+
+#undef  Perl_vdefault_protect
+void*
+Perl_vdefault_protect(pTHXo_ int *excpt, protect_body_t body, va_list *args)
+{
+    return ((CPerlObj*)pPerl)->Perl_vdefault_protect(excpt, body, args);
+}
+
 #undef  Perl_reginitcolors
 void
-Perl_reginitcolors(void *pPerl)
+Perl_reginitcolors(pTHXo)
 {
     ((CPerlObj*)pPerl)->Perl_reginitcolors();
 }
 
 #undef  Perl_sv_2pv_nolen
 char*
-Perl_sv_2pv_nolen(void *pPerl, SV* sv)
+Perl_sv_2pv_nolen(pTHXo_ SV* sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_2pv_nolen(sv);
 }
 
 #undef  Perl_sv_pv
 char*
-Perl_sv_pv(void *pPerl, SV *sv)
+Perl_sv_pv(pTHXo_ SV *sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_pv(sv);
 }
 
 #undef  Perl_sv_force_normal
 void
-Perl_sv_force_normal(void *pPerl, SV *sv)
+Perl_sv_force_normal(pTHXo_ SV *sv)
 {
     ((CPerlObj*)pPerl)->Perl_sv_force_normal(sv);
 }
 
 #undef  Perl_tmps_grow
 void
-Perl_tmps_grow(void *pPerl, I32 n)
+Perl_tmps_grow(pTHXo_ I32 n)
 {
     ((CPerlObj*)pPerl)->Perl_tmps_grow(n);
 }
 
 #undef  Perl_sv_rvweaken
 SV*
-Perl_sv_rvweaken(void *pPerl, SV *sv)
+Perl_sv_rvweaken(pTHXo_ SV *sv)
 {
     return ((CPerlObj*)pPerl)->Perl_sv_rvweaken(sv);
 }
 
 #undef  Perl_magic_killbackrefs
 int
-Perl_magic_killbackrefs(void *pPerl, SV *sv, MAGIC *mg)
+Perl_magic_killbackrefs(pTHXo_ SV *sv, MAGIC *mg)
 {
     return ((CPerlObj*)pPerl)->Perl_magic_killbackrefs(sv, mg);
 }
@@ -4433,2650 +4820,2660 @@ Perl_magic_killbackrefs(void *pPerl, SV *sv, MAGIC *mg)
 
 #undef  Perl_ck_anoncode
 OP *
-Perl_ck_anoncode(void *pPerl, OP *o)
+Perl_ck_anoncode(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_anoncode(o);
 }
 
 #undef  Perl_ck_bitop
 OP *
-Perl_ck_bitop(void *pPerl, OP *o)
+Perl_ck_bitop(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_bitop(o);
 }
 
 #undef  Perl_ck_concat
 OP *
-Perl_ck_concat(void *pPerl, OP *o)
+Perl_ck_concat(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_concat(o);
 }
 
 #undef  Perl_ck_defined
 OP *
-Perl_ck_defined(void *pPerl, OP *o)
+Perl_ck_defined(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_defined(o);
 }
 
 #undef  Perl_ck_delete
 OP *
-Perl_ck_delete(void *pPerl, OP *o)
+Perl_ck_delete(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_delete(o);
 }
 
 #undef  Perl_ck_eof
 OP *
-Perl_ck_eof(void *pPerl, OP *o)
+Perl_ck_eof(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_eof(o);
 }
 
 #undef  Perl_ck_eval
 OP *
-Perl_ck_eval(void *pPerl, OP *o)
+Perl_ck_eval(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_eval(o);
 }
 
 #undef  Perl_ck_exec
 OP *
-Perl_ck_exec(void *pPerl, OP *o)
+Perl_ck_exec(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_exec(o);
 }
 
 #undef  Perl_ck_exists
 OP *
-Perl_ck_exists(void *pPerl, OP *o)
+Perl_ck_exists(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_exists(o);
 }
 
 #undef  Perl_ck_ftst
 OP *
-Perl_ck_ftst(void *pPerl, OP *o)
+Perl_ck_ftst(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_ftst(o);
 }
 
 #undef  Perl_ck_fun
 OP *
-Perl_ck_fun(void *pPerl, OP *o)
+Perl_ck_fun(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_fun(o);
 }
 
 #undef  Perl_ck_fun_locale
 OP *
-Perl_ck_fun_locale(void *pPerl, OP *o)
+Perl_ck_fun_locale(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_fun_locale(o);
 }
 
 #undef  Perl_ck_glob
 OP *
-Perl_ck_glob(void *pPerl, OP *o)
+Perl_ck_glob(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_glob(o);
 }
 
 #undef  Perl_ck_grep
 OP *
-Perl_ck_grep(void *pPerl, OP *o)
+Perl_ck_grep(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_grep(o);
 }
 
 #undef  Perl_ck_index
 OP *
-Perl_ck_index(void *pPerl, OP *o)
+Perl_ck_index(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_index(o);
 }
 
 #undef  Perl_ck_lengthconst
 OP *
-Perl_ck_lengthconst(void *pPerl, OP *o)
+Perl_ck_lengthconst(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_lengthconst(o);
 }
 
 #undef  Perl_ck_lfun
 OP *
-Perl_ck_lfun(void *pPerl, OP *o)
+Perl_ck_lfun(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_lfun(o);
 }
 
 #undef  Perl_ck_listiob
 OP *
-Perl_ck_listiob(void *pPerl, OP *o)
+Perl_ck_listiob(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_listiob(o);
 }
 
 #undef  Perl_ck_match
 OP *
-Perl_ck_match(void *pPerl, OP *o)
+Perl_ck_match(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_match(o);
 }
 
 #undef  Perl_ck_null
 OP *
-Perl_ck_null(void *pPerl, OP *o)
+Perl_ck_null(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_null(o);
 }
 
 #undef  Perl_ck_repeat
 OP *
-Perl_ck_repeat(void *pPerl, OP *o)
+Perl_ck_repeat(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_repeat(o);
 }
 
 #undef  Perl_ck_require
 OP *
-Perl_ck_require(void *pPerl, OP *o)
+Perl_ck_require(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_require(o);
 }
 
 #undef  Perl_ck_rfun
 OP *
-Perl_ck_rfun(void *pPerl, OP *o)
+Perl_ck_rfun(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_rfun(o);
 }
 
 #undef  Perl_ck_rvconst
 OP *
-Perl_ck_rvconst(void *pPerl, OP *o)
+Perl_ck_rvconst(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_rvconst(o);
 }
 
 #undef  Perl_ck_sassign
 OP *
-Perl_ck_sassign(void *pPerl, OP *o)
+Perl_ck_sassign(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_sassign(o);
 }
 
 #undef  Perl_ck_scmp
 OP *
-Perl_ck_scmp(void *pPerl, OP *o)
+Perl_ck_scmp(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_scmp(o);
 }
 
 #undef  Perl_ck_select
 OP *
-Perl_ck_select(void *pPerl, OP *o)
+Perl_ck_select(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_select(o);
 }
 
 #undef  Perl_ck_shift
 OP *
-Perl_ck_shift(void *pPerl, OP *o)
+Perl_ck_shift(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_shift(o);
 }
 
 #undef  Perl_ck_sort
 OP *
-Perl_ck_sort(void *pPerl, OP *o)
+Perl_ck_sort(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_sort(o);
 }
 
 #undef  Perl_ck_spair
 OP *
-Perl_ck_spair(void *pPerl, OP *o)
+Perl_ck_spair(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_spair(o);
 }
 
 #undef  Perl_ck_split
 OP *
-Perl_ck_split(void *pPerl, OP *o)
+Perl_ck_split(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_split(o);
 }
 
 #undef  Perl_ck_subr
 OP *
-Perl_ck_subr(void *pPerl, OP *o)
+Perl_ck_subr(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_subr(o);
 }
 
 #undef  Perl_ck_svconst
 OP *
-Perl_ck_svconst(void *pPerl, OP *o)
+Perl_ck_svconst(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_svconst(o);
 }
 
 #undef  Perl_ck_trunc
 OP *
-Perl_ck_trunc(void *pPerl, OP *o)
+Perl_ck_trunc(pTHXo_ OP *o)
 {
     return ((CPerlObj*)pPerl)->Perl_ck_trunc(o);
 }
 
 #undef  Perl_pp_aassign
 OP *
-Perl_pp_aassign(void *pPerl)
+Perl_pp_aassign(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_aassign();
 }
 
 #undef  Perl_pp_abs
 OP *
-Perl_pp_abs(void *pPerl)
+Perl_pp_abs(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_abs();
 }
 
 #undef  Perl_pp_accept
 OP *
-Perl_pp_accept(void *pPerl)
+Perl_pp_accept(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_accept();
 }
 
 #undef  Perl_pp_add
 OP *
-Perl_pp_add(void *pPerl)
+Perl_pp_add(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_add();
 }
 
 #undef  Perl_pp_aelem
 OP *
-Perl_pp_aelem(void *pPerl)
+Perl_pp_aelem(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_aelem();
 }
 
 #undef  Perl_pp_aelemfast
 OP *
-Perl_pp_aelemfast(void *pPerl)
+Perl_pp_aelemfast(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_aelemfast();
 }
 
 #undef  Perl_pp_alarm
 OP *
-Perl_pp_alarm(void *pPerl)
+Perl_pp_alarm(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_alarm();
 }
 
 #undef  Perl_pp_and
 OP *
-Perl_pp_and(void *pPerl)
+Perl_pp_and(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_and();
 }
 
 #undef  Perl_pp_andassign
 OP *
-Perl_pp_andassign(void *pPerl)
+Perl_pp_andassign(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_andassign();
 }
 
 #undef  Perl_pp_anoncode
 OP *
-Perl_pp_anoncode(void *pPerl)
+Perl_pp_anoncode(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_anoncode();
 }
 
 #undef  Perl_pp_anonhash
 OP *
-Perl_pp_anonhash(void *pPerl)
+Perl_pp_anonhash(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_anonhash();
 }
 
 #undef  Perl_pp_anonlist
 OP *
-Perl_pp_anonlist(void *pPerl)
+Perl_pp_anonlist(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_anonlist();
 }
 
 #undef  Perl_pp_aslice
 OP *
-Perl_pp_aslice(void *pPerl)
+Perl_pp_aslice(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_aslice();
 }
 
 #undef  Perl_pp_atan2
 OP *
-Perl_pp_atan2(void *pPerl)
+Perl_pp_atan2(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_atan2();
 }
 
 #undef  Perl_pp_av2arylen
 OP *
-Perl_pp_av2arylen(void *pPerl)
+Perl_pp_av2arylen(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_av2arylen();
 }
 
 #undef  Perl_pp_backtick
 OP *
-Perl_pp_backtick(void *pPerl)
+Perl_pp_backtick(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_backtick();
 }
 
 #undef  Perl_pp_bind
 OP *
-Perl_pp_bind(void *pPerl)
+Perl_pp_bind(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_bind();
 }
 
 #undef  Perl_pp_binmode
 OP *
-Perl_pp_binmode(void *pPerl)
+Perl_pp_binmode(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_binmode();
 }
 
 #undef  Perl_pp_bit_and
 OP *
-Perl_pp_bit_and(void *pPerl)
+Perl_pp_bit_and(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_bit_and();
 }
 
 #undef  Perl_pp_bit_or
 OP *
-Perl_pp_bit_or(void *pPerl)
+Perl_pp_bit_or(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_bit_or();
 }
 
 #undef  Perl_pp_bit_xor
 OP *
-Perl_pp_bit_xor(void *pPerl)
+Perl_pp_bit_xor(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_bit_xor();
 }
 
 #undef  Perl_pp_bless
 OP *
-Perl_pp_bless(void *pPerl)
+Perl_pp_bless(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_bless();
 }
 
 #undef  Perl_pp_caller
 OP *
-Perl_pp_caller(void *pPerl)
+Perl_pp_caller(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_caller();
 }
 
 #undef  Perl_pp_chdir
 OP *
-Perl_pp_chdir(void *pPerl)
+Perl_pp_chdir(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_chdir();
 }
 
 #undef  Perl_pp_chmod
 OP *
-Perl_pp_chmod(void *pPerl)
+Perl_pp_chmod(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_chmod();
 }
 
 #undef  Perl_pp_chomp
 OP *
-Perl_pp_chomp(void *pPerl)
+Perl_pp_chomp(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_chomp();
 }
 
 #undef  Perl_pp_chop
 OP *
-Perl_pp_chop(void *pPerl)
+Perl_pp_chop(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_chop();
 }
 
 #undef  Perl_pp_chown
 OP *
-Perl_pp_chown(void *pPerl)
+Perl_pp_chown(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_chown();
 }
 
 #undef  Perl_pp_chr
 OP *
-Perl_pp_chr(void *pPerl)
+Perl_pp_chr(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_chr();
 }
 
 #undef  Perl_pp_chroot
 OP *
-Perl_pp_chroot(void *pPerl)
+Perl_pp_chroot(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_chroot();
 }
 
 #undef  Perl_pp_close
 OP *
-Perl_pp_close(void *pPerl)
+Perl_pp_close(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_close();
 }
 
 #undef  Perl_pp_closedir
 OP *
-Perl_pp_closedir(void *pPerl)
+Perl_pp_closedir(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_closedir();
 }
 
 #undef  Perl_pp_complement
 OP *
-Perl_pp_complement(void *pPerl)
+Perl_pp_complement(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_complement();
 }
 
 #undef  Perl_pp_concat
 OP *
-Perl_pp_concat(void *pPerl)
+Perl_pp_concat(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_concat();
 }
 
 #undef  Perl_pp_cond_expr
 OP *
-Perl_pp_cond_expr(void *pPerl)
+Perl_pp_cond_expr(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_cond_expr();
 }
 
 #undef  Perl_pp_connect
 OP *
-Perl_pp_connect(void *pPerl)
+Perl_pp_connect(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_connect();
 }
 
 #undef  Perl_pp_const
 OP *
-Perl_pp_const(void *pPerl)
+Perl_pp_const(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_const();
 }
 
 #undef  Perl_pp_cos
 OP *
-Perl_pp_cos(void *pPerl)
+Perl_pp_cos(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_cos();
 }
 
 #undef  Perl_pp_crypt
 OP *
-Perl_pp_crypt(void *pPerl)
+Perl_pp_crypt(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_crypt();
 }
 
 #undef  Perl_pp_dbmclose
 OP *
-Perl_pp_dbmclose(void *pPerl)
+Perl_pp_dbmclose(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_dbmclose();
 }
 
 #undef  Perl_pp_dbmopen
 OP *
-Perl_pp_dbmopen(void *pPerl)
+Perl_pp_dbmopen(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_dbmopen();
 }
 
 #undef  Perl_pp_dbstate
 OP *
-Perl_pp_dbstate(void *pPerl)
+Perl_pp_dbstate(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_dbstate();
 }
 
 #undef  Perl_pp_defined
 OP *
-Perl_pp_defined(void *pPerl)
+Perl_pp_defined(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_defined();
 }
 
 #undef  Perl_pp_delete
 OP *
-Perl_pp_delete(void *pPerl)
+Perl_pp_delete(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_delete();
 }
 
 #undef  Perl_pp_die
 OP *
-Perl_pp_die(void *pPerl)
+Perl_pp_die(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_die();
 }
 
 #undef  Perl_pp_divide
 OP *
-Perl_pp_divide(void *pPerl)
+Perl_pp_divide(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_divide();
 }
 
 #undef  Perl_pp_dofile
 OP *
-Perl_pp_dofile(void *pPerl)
+Perl_pp_dofile(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_dofile();
 }
 
 #undef  Perl_pp_dump
 OP *
-Perl_pp_dump(void *pPerl)
+Perl_pp_dump(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_dump();
 }
 
 #undef  Perl_pp_each
 OP *
-Perl_pp_each(void *pPerl)
+Perl_pp_each(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_each();
 }
 
 #undef  Perl_pp_egrent
 OP *
-Perl_pp_egrent(void *pPerl)
+Perl_pp_egrent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_egrent();
 }
 
 #undef  Perl_pp_ehostent
 OP *
-Perl_pp_ehostent(void *pPerl)
+Perl_pp_ehostent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ehostent();
 }
 
 #undef  Perl_pp_enetent
 OP *
-Perl_pp_enetent(void *pPerl)
+Perl_pp_enetent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_enetent();
 }
 
 #undef  Perl_pp_enter
 OP *
-Perl_pp_enter(void *pPerl)
+Perl_pp_enter(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_enter();
 }
 
 #undef  Perl_pp_entereval
 OP *
-Perl_pp_entereval(void *pPerl)
+Perl_pp_entereval(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_entereval();
 }
 
 #undef  Perl_pp_enteriter
 OP *
-Perl_pp_enteriter(void *pPerl)
+Perl_pp_enteriter(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_enteriter();
 }
 
 #undef  Perl_pp_enterloop
 OP *
-Perl_pp_enterloop(void *pPerl)
+Perl_pp_enterloop(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_enterloop();
 }
 
 #undef  Perl_pp_entersub
 OP *
-Perl_pp_entersub(void *pPerl)
+Perl_pp_entersub(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_entersub();
 }
 
 #undef  Perl_pp_entertry
 OP *
-Perl_pp_entertry(void *pPerl)
+Perl_pp_entertry(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_entertry();
 }
 
 #undef  Perl_pp_enterwrite
 OP *
-Perl_pp_enterwrite(void *pPerl)
+Perl_pp_enterwrite(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_enterwrite();
 }
 
 #undef  Perl_pp_eof
 OP *
-Perl_pp_eof(void *pPerl)
+Perl_pp_eof(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_eof();
 }
 
 #undef  Perl_pp_eprotoent
 OP *
-Perl_pp_eprotoent(void *pPerl)
+Perl_pp_eprotoent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_eprotoent();
 }
 
 #undef  Perl_pp_epwent
 OP *
-Perl_pp_epwent(void *pPerl)
+Perl_pp_epwent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_epwent();
 }
 
 #undef  Perl_pp_eq
 OP *
-Perl_pp_eq(void *pPerl)
+Perl_pp_eq(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_eq();
 }
 
 #undef  Perl_pp_eservent
 OP *
-Perl_pp_eservent(void *pPerl)
+Perl_pp_eservent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_eservent();
 }
 
 #undef  Perl_pp_exec
 OP *
-Perl_pp_exec(void *pPerl)
+Perl_pp_exec(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_exec();
 }
 
 #undef  Perl_pp_exists
 OP *
-Perl_pp_exists(void *pPerl)
+Perl_pp_exists(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_exists();
 }
 
 #undef  Perl_pp_exit
 OP *
-Perl_pp_exit(void *pPerl)
+Perl_pp_exit(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_exit();
 }
 
 #undef  Perl_pp_exp
 OP *
-Perl_pp_exp(void *pPerl)
+Perl_pp_exp(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_exp();
 }
 
 #undef  Perl_pp_fcntl
 OP *
-Perl_pp_fcntl(void *pPerl)
+Perl_pp_fcntl(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_fcntl();
 }
 
 #undef  Perl_pp_fileno
 OP *
-Perl_pp_fileno(void *pPerl)
+Perl_pp_fileno(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_fileno();
 }
 
 #undef  Perl_pp_flip
 OP *
-Perl_pp_flip(void *pPerl)
+Perl_pp_flip(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_flip();
 }
 
 #undef  Perl_pp_flock
 OP *
-Perl_pp_flock(void *pPerl)
+Perl_pp_flock(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_flock();
 }
 
 #undef  Perl_pp_flop
 OP *
-Perl_pp_flop(void *pPerl)
+Perl_pp_flop(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_flop();
 }
 
 #undef  Perl_pp_fork
 OP *
-Perl_pp_fork(void *pPerl)
+Perl_pp_fork(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_fork();
 }
 
 #undef  Perl_pp_formline
 OP *
-Perl_pp_formline(void *pPerl)
+Perl_pp_formline(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_formline();
 }
 
 #undef  Perl_pp_ftatime
 OP *
-Perl_pp_ftatime(void *pPerl)
+Perl_pp_ftatime(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftatime();
 }
 
 #undef  Perl_pp_ftbinary
 OP *
-Perl_pp_ftbinary(void *pPerl)
+Perl_pp_ftbinary(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftbinary();
 }
 
 #undef  Perl_pp_ftblk
 OP *
-Perl_pp_ftblk(void *pPerl)
+Perl_pp_ftblk(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftblk();
 }
 
 #undef  Perl_pp_ftchr
 OP *
-Perl_pp_ftchr(void *pPerl)
+Perl_pp_ftchr(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftchr();
 }
 
 #undef  Perl_pp_ftctime
 OP *
-Perl_pp_ftctime(void *pPerl)
+Perl_pp_ftctime(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftctime();
 }
 
 #undef  Perl_pp_ftdir
 OP *
-Perl_pp_ftdir(void *pPerl)
+Perl_pp_ftdir(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftdir();
 }
 
 #undef  Perl_pp_fteexec
 OP *
-Perl_pp_fteexec(void *pPerl)
+Perl_pp_fteexec(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_fteexec();
 }
 
 #undef  Perl_pp_fteowned
 OP *
-Perl_pp_fteowned(void *pPerl)
+Perl_pp_fteowned(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_fteowned();
 }
 
 #undef  Perl_pp_fteread
 OP *
-Perl_pp_fteread(void *pPerl)
+Perl_pp_fteread(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_fteread();
 }
 
 #undef  Perl_pp_ftewrite
 OP *
-Perl_pp_ftewrite(void *pPerl)
+Perl_pp_ftewrite(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftewrite();
 }
 
 #undef  Perl_pp_ftfile
 OP *
-Perl_pp_ftfile(void *pPerl)
+Perl_pp_ftfile(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftfile();
 }
 
 #undef  Perl_pp_ftis
 OP *
-Perl_pp_ftis(void *pPerl)
+Perl_pp_ftis(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftis();
 }
 
 #undef  Perl_pp_ftlink
 OP *
-Perl_pp_ftlink(void *pPerl)
+Perl_pp_ftlink(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftlink();
 }
 
 #undef  Perl_pp_ftmtime
 OP *
-Perl_pp_ftmtime(void *pPerl)
+Perl_pp_ftmtime(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftmtime();
 }
 
 #undef  Perl_pp_ftpipe
 OP *
-Perl_pp_ftpipe(void *pPerl)
+Perl_pp_ftpipe(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftpipe();
 }
 
 #undef  Perl_pp_ftrexec
 OP *
-Perl_pp_ftrexec(void *pPerl)
+Perl_pp_ftrexec(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftrexec();
 }
 
 #undef  Perl_pp_ftrowned
 OP *
-Perl_pp_ftrowned(void *pPerl)
+Perl_pp_ftrowned(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftrowned();
 }
 
 #undef  Perl_pp_ftrread
 OP *
-Perl_pp_ftrread(void *pPerl)
+Perl_pp_ftrread(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftrread();
 }
 
 #undef  Perl_pp_ftrwrite
 OP *
-Perl_pp_ftrwrite(void *pPerl)
+Perl_pp_ftrwrite(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftrwrite();
 }
 
 #undef  Perl_pp_ftsgid
 OP *
-Perl_pp_ftsgid(void *pPerl)
+Perl_pp_ftsgid(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftsgid();
 }
 
 #undef  Perl_pp_ftsize
 OP *
-Perl_pp_ftsize(void *pPerl)
+Perl_pp_ftsize(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftsize();
 }
 
 #undef  Perl_pp_ftsock
 OP *
-Perl_pp_ftsock(void *pPerl)
+Perl_pp_ftsock(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftsock();
 }
 
 #undef  Perl_pp_ftsuid
 OP *
-Perl_pp_ftsuid(void *pPerl)
+Perl_pp_ftsuid(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftsuid();
 }
 
 #undef  Perl_pp_ftsvtx
 OP *
-Perl_pp_ftsvtx(void *pPerl)
+Perl_pp_ftsvtx(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftsvtx();
 }
 
 #undef  Perl_pp_fttext
 OP *
-Perl_pp_fttext(void *pPerl)
+Perl_pp_fttext(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_fttext();
 }
 
 #undef  Perl_pp_fttty
 OP *
-Perl_pp_fttty(void *pPerl)
+Perl_pp_fttty(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_fttty();
 }
 
 #undef  Perl_pp_ftzero
 OP *
-Perl_pp_ftzero(void *pPerl)
+Perl_pp_ftzero(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ftzero();
 }
 
 #undef  Perl_pp_ge
 OP *
-Perl_pp_ge(void *pPerl)
+Perl_pp_ge(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ge();
 }
 
 #undef  Perl_pp_gelem
 OP *
-Perl_pp_gelem(void *pPerl)
+Perl_pp_gelem(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gelem();
 }
 
 #undef  Perl_pp_getc
 OP *
-Perl_pp_getc(void *pPerl)
+Perl_pp_getc(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_getc();
 }
 
 #undef  Perl_pp_getlogin
 OP *
-Perl_pp_getlogin(void *pPerl)
+Perl_pp_getlogin(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_getlogin();
 }
 
 #undef  Perl_pp_getpeername
 OP *
-Perl_pp_getpeername(void *pPerl)
+Perl_pp_getpeername(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_getpeername();
 }
 
 #undef  Perl_pp_getpgrp
 OP *
-Perl_pp_getpgrp(void *pPerl)
+Perl_pp_getpgrp(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_getpgrp();
 }
 
 #undef  Perl_pp_getppid
 OP *
-Perl_pp_getppid(void *pPerl)
+Perl_pp_getppid(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_getppid();
 }
 
 #undef  Perl_pp_getpriority
 OP *
-Perl_pp_getpriority(void *pPerl)
+Perl_pp_getpriority(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_getpriority();
 }
 
 #undef  Perl_pp_getsockname
 OP *
-Perl_pp_getsockname(void *pPerl)
+Perl_pp_getsockname(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_getsockname();
 }
 
 #undef  Perl_pp_ggrent
 OP *
-Perl_pp_ggrent(void *pPerl)
+Perl_pp_ggrent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ggrent();
 }
 
 #undef  Perl_pp_ggrgid
 OP *
-Perl_pp_ggrgid(void *pPerl)
+Perl_pp_ggrgid(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ggrgid();
 }
 
 #undef  Perl_pp_ggrnam
 OP *
-Perl_pp_ggrnam(void *pPerl)
+Perl_pp_ggrnam(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ggrnam();
 }
 
 #undef  Perl_pp_ghbyaddr
 OP *
-Perl_pp_ghbyaddr(void *pPerl)
+Perl_pp_ghbyaddr(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ghbyaddr();
 }
 
 #undef  Perl_pp_ghbyname
 OP *
-Perl_pp_ghbyname(void *pPerl)
+Perl_pp_ghbyname(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ghbyname();
 }
 
 #undef  Perl_pp_ghostent
 OP *
-Perl_pp_ghostent(void *pPerl)
+Perl_pp_ghostent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ghostent();
 }
 
 #undef  Perl_pp_glob
 OP *
-Perl_pp_glob(void *pPerl)
+Perl_pp_glob(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_glob();
 }
 
 #undef  Perl_pp_gmtime
 OP *
-Perl_pp_gmtime(void *pPerl)
+Perl_pp_gmtime(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gmtime();
 }
 
 #undef  Perl_pp_gnbyaddr
 OP *
-Perl_pp_gnbyaddr(void *pPerl)
+Perl_pp_gnbyaddr(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gnbyaddr();
 }
 
 #undef  Perl_pp_gnbyname
 OP *
-Perl_pp_gnbyname(void *pPerl)
+Perl_pp_gnbyname(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gnbyname();
 }
 
 #undef  Perl_pp_gnetent
 OP *
-Perl_pp_gnetent(void *pPerl)
+Perl_pp_gnetent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gnetent();
 }
 
 #undef  Perl_pp_goto
 OP *
-Perl_pp_goto(void *pPerl)
+Perl_pp_goto(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_goto();
 }
 
 #undef  Perl_pp_gpbyname
 OP *
-Perl_pp_gpbyname(void *pPerl)
+Perl_pp_gpbyname(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gpbyname();
 }
 
 #undef  Perl_pp_gpbynumber
 OP *
-Perl_pp_gpbynumber(void *pPerl)
+Perl_pp_gpbynumber(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gpbynumber();
 }
 
 #undef  Perl_pp_gprotoent
 OP *
-Perl_pp_gprotoent(void *pPerl)
+Perl_pp_gprotoent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gprotoent();
 }
 
 #undef  Perl_pp_gpwent
 OP *
-Perl_pp_gpwent(void *pPerl)
+Perl_pp_gpwent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gpwent();
 }
 
 #undef  Perl_pp_gpwnam
 OP *
-Perl_pp_gpwnam(void *pPerl)
+Perl_pp_gpwnam(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gpwnam();
 }
 
 #undef  Perl_pp_gpwuid
 OP *
-Perl_pp_gpwuid(void *pPerl)
+Perl_pp_gpwuid(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gpwuid();
 }
 
 #undef  Perl_pp_grepstart
 OP *
-Perl_pp_grepstart(void *pPerl)
+Perl_pp_grepstart(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_grepstart();
 }
 
 #undef  Perl_pp_grepwhile
 OP *
-Perl_pp_grepwhile(void *pPerl)
+Perl_pp_grepwhile(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_grepwhile();
 }
 
 #undef  Perl_pp_gsbyname
 OP *
-Perl_pp_gsbyname(void *pPerl)
+Perl_pp_gsbyname(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gsbyname();
 }
 
 #undef  Perl_pp_gsbyport
 OP *
-Perl_pp_gsbyport(void *pPerl)
+Perl_pp_gsbyport(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gsbyport();
 }
 
 #undef  Perl_pp_gservent
 OP *
-Perl_pp_gservent(void *pPerl)
+Perl_pp_gservent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gservent();
 }
 
 #undef  Perl_pp_gsockopt
 OP *
-Perl_pp_gsockopt(void *pPerl)
+Perl_pp_gsockopt(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gsockopt();
 }
 
 #undef  Perl_pp_gt
 OP *
-Perl_pp_gt(void *pPerl)
+Perl_pp_gt(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gt();
 }
 
 #undef  Perl_pp_gv
 OP *
-Perl_pp_gv(void *pPerl)
+Perl_pp_gv(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gv();
 }
 
 #undef  Perl_pp_gvsv
 OP *
-Perl_pp_gvsv(void *pPerl)
+Perl_pp_gvsv(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_gvsv();
 }
 
 #undef  Perl_pp_helem
 OP *
-Perl_pp_helem(void *pPerl)
+Perl_pp_helem(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_helem();
 }
 
 #undef  Perl_pp_hex
 OP *
-Perl_pp_hex(void *pPerl)
+Perl_pp_hex(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_hex();
 }
 
 #undef  Perl_pp_hslice
 OP *
-Perl_pp_hslice(void *pPerl)
+Perl_pp_hslice(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_hslice();
 }
 
 #undef  Perl_pp_i_add
 OP *
-Perl_pp_i_add(void *pPerl)
+Perl_pp_i_add(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_i_add();
 }
 
 #undef  Perl_pp_i_divide
 OP *
-Perl_pp_i_divide(void *pPerl)
+Perl_pp_i_divide(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_i_divide();
 }
 
 #undef  Perl_pp_i_eq
 OP *
-Perl_pp_i_eq(void *pPerl)
+Perl_pp_i_eq(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_i_eq();
 }
 
 #undef  Perl_pp_i_ge
 OP *
-Perl_pp_i_ge(void *pPerl)
+Perl_pp_i_ge(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_i_ge();
 }
 
 #undef  Perl_pp_i_gt
 OP *
-Perl_pp_i_gt(void *pPerl)
+Perl_pp_i_gt(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_i_gt();
 }
 
 #undef  Perl_pp_i_le
 OP *
-Perl_pp_i_le(void *pPerl)
+Perl_pp_i_le(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_i_le();
 }
 
 #undef  Perl_pp_i_lt
 OP *
-Perl_pp_i_lt(void *pPerl)
+Perl_pp_i_lt(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_i_lt();
 }
 
 #undef  Perl_pp_i_modulo
 OP *
-Perl_pp_i_modulo(void *pPerl)
+Perl_pp_i_modulo(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_i_modulo();
 }
 
 #undef  Perl_pp_i_multiply
 OP *
-Perl_pp_i_multiply(void *pPerl)
+Perl_pp_i_multiply(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_i_multiply();
 }
 
 #undef  Perl_pp_i_ncmp
 OP *
-Perl_pp_i_ncmp(void *pPerl)
+Perl_pp_i_ncmp(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_i_ncmp();
 }
 
 #undef  Perl_pp_i_ne
 OP *
-Perl_pp_i_ne(void *pPerl)
+Perl_pp_i_ne(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_i_ne();
 }
 
 #undef  Perl_pp_i_negate
 OP *
-Perl_pp_i_negate(void *pPerl)
+Perl_pp_i_negate(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_i_negate();
 }
 
 #undef  Perl_pp_i_subtract
 OP *
-Perl_pp_i_subtract(void *pPerl)
+Perl_pp_i_subtract(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_i_subtract();
 }
 
 #undef  Perl_pp_index
 OP *
-Perl_pp_index(void *pPerl)
+Perl_pp_index(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_index();
 }
 
 #undef  Perl_pp_int
 OP *
-Perl_pp_int(void *pPerl)
+Perl_pp_int(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_int();
 }
 
 #undef  Perl_pp_ioctl
 OP *
-Perl_pp_ioctl(void *pPerl)
+Perl_pp_ioctl(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ioctl();
 }
 
 #undef  Perl_pp_iter
 OP *
-Perl_pp_iter(void *pPerl)
+Perl_pp_iter(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_iter();
 }
 
 #undef  Perl_pp_join
 OP *
-Perl_pp_join(void *pPerl)
+Perl_pp_join(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_join();
 }
 
 #undef  Perl_pp_keys
 OP *
-Perl_pp_keys(void *pPerl)
+Perl_pp_keys(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_keys();
 }
 
 #undef  Perl_pp_kill
 OP *
-Perl_pp_kill(void *pPerl)
+Perl_pp_kill(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_kill();
 }
 
 #undef  Perl_pp_last
 OP *
-Perl_pp_last(void *pPerl)
+Perl_pp_last(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_last();
 }
 
 #undef  Perl_pp_lc
 OP *
-Perl_pp_lc(void *pPerl)
+Perl_pp_lc(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_lc();
 }
 
 #undef  Perl_pp_lcfirst
 OP *
-Perl_pp_lcfirst(void *pPerl)
+Perl_pp_lcfirst(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_lcfirst();
 }
 
 #undef  Perl_pp_le
 OP *
-Perl_pp_le(void *pPerl)
+Perl_pp_le(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_le();
 }
 
 #undef  Perl_pp_leave
 OP *
-Perl_pp_leave(void *pPerl)
+Perl_pp_leave(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_leave();
 }
 
 #undef  Perl_pp_leaveeval
 OP *
-Perl_pp_leaveeval(void *pPerl)
+Perl_pp_leaveeval(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_leaveeval();
 }
 
 #undef  Perl_pp_leaveloop
 OP *
-Perl_pp_leaveloop(void *pPerl)
+Perl_pp_leaveloop(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_leaveloop();
 }
 
 #undef  Perl_pp_leavesub
 OP *
-Perl_pp_leavesub(void *pPerl)
+Perl_pp_leavesub(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_leavesub();
 }
 
 #undef  Perl_pp_leavetry
 OP *
-Perl_pp_leavetry(void *pPerl)
+Perl_pp_leavetry(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_leavetry();
 }
 
 #undef  Perl_pp_leavewrite
 OP *
-Perl_pp_leavewrite(void *pPerl)
+Perl_pp_leavewrite(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_leavewrite();
 }
 
 #undef  Perl_pp_left_shift
 OP *
-Perl_pp_left_shift(void *pPerl)
+Perl_pp_left_shift(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_left_shift();
 }
 
 #undef  Perl_pp_length
 OP *
-Perl_pp_length(void *pPerl)
+Perl_pp_length(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_length();
 }
 
 #undef  Perl_pp_lineseq
 OP *
-Perl_pp_lineseq(void *pPerl)
+Perl_pp_lineseq(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_lineseq();
 }
 
 #undef  Perl_pp_link
 OP *
-Perl_pp_link(void *pPerl)
+Perl_pp_link(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_link();
 }
 
 #undef  Perl_pp_list
 OP *
-Perl_pp_list(void *pPerl)
+Perl_pp_list(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_list();
 }
 
 #undef  Perl_pp_listen
 OP *
-Perl_pp_listen(void *pPerl)
+Perl_pp_listen(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_listen();
 }
 
 #undef  Perl_pp_localtime
 OP *
-Perl_pp_localtime(void *pPerl)
+Perl_pp_localtime(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_localtime();
 }
 
 #undef  Perl_pp_lock
 OP *
-Perl_pp_lock(void *pPerl)
+Perl_pp_lock(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_lock();
 }
 
 #undef  Perl_pp_log
 OP *
-Perl_pp_log(void *pPerl)
+Perl_pp_log(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_log();
 }
 
 #undef  Perl_pp_lslice
 OP *
-Perl_pp_lslice(void *pPerl)
+Perl_pp_lslice(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_lslice();
 }
 
 #undef  Perl_pp_lstat
 OP *
-Perl_pp_lstat(void *pPerl)
+Perl_pp_lstat(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_lstat();
 }
 
 #undef  Perl_pp_lt
 OP *
-Perl_pp_lt(void *pPerl)
+Perl_pp_lt(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_lt();
 }
 
 #undef  Perl_pp_mapstart
 OP *
-Perl_pp_mapstart(void *pPerl)
+Perl_pp_mapstart(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_mapstart();
 }
 
 #undef  Perl_pp_mapwhile
 OP *
-Perl_pp_mapwhile(void *pPerl)
+Perl_pp_mapwhile(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_mapwhile();
 }
 
 #undef  Perl_pp_match
 OP *
-Perl_pp_match(void *pPerl)
+Perl_pp_match(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_match();
 }
 
 #undef  Perl_pp_method
 OP *
-Perl_pp_method(void *pPerl)
+Perl_pp_method(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_method();
 }
 
 #undef  Perl_pp_mkdir
 OP *
-Perl_pp_mkdir(void *pPerl)
+Perl_pp_mkdir(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_mkdir();
 }
 
 #undef  Perl_pp_modulo
 OP *
-Perl_pp_modulo(void *pPerl)
+Perl_pp_modulo(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_modulo();
 }
 
 #undef  Perl_pp_msgctl
 OP *
-Perl_pp_msgctl(void *pPerl)
+Perl_pp_msgctl(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_msgctl();
 }
 
 #undef  Perl_pp_msgget
 OP *
-Perl_pp_msgget(void *pPerl)
+Perl_pp_msgget(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_msgget();
 }
 
 #undef  Perl_pp_msgrcv
 OP *
-Perl_pp_msgrcv(void *pPerl)
+Perl_pp_msgrcv(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_msgrcv();
 }
 
 #undef  Perl_pp_msgsnd
 OP *
-Perl_pp_msgsnd(void *pPerl)
+Perl_pp_msgsnd(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_msgsnd();
 }
 
 #undef  Perl_pp_multiply
 OP *
-Perl_pp_multiply(void *pPerl)
+Perl_pp_multiply(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_multiply();
 }
 
 #undef  Perl_pp_ncmp
 OP *
-Perl_pp_ncmp(void *pPerl)
+Perl_pp_ncmp(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ncmp();
 }
 
 #undef  Perl_pp_ne
 OP *
-Perl_pp_ne(void *pPerl)
+Perl_pp_ne(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ne();
 }
 
 #undef  Perl_pp_negate
 OP *
-Perl_pp_negate(void *pPerl)
+Perl_pp_negate(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_negate();
 }
 
 #undef  Perl_pp_next
 OP *
-Perl_pp_next(void *pPerl)
+Perl_pp_next(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_next();
 }
 
 #undef  Perl_pp_nextstate
 OP *
-Perl_pp_nextstate(void *pPerl)
+Perl_pp_nextstate(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_nextstate();
 }
 
 #undef  Perl_pp_not
 OP *
-Perl_pp_not(void *pPerl)
+Perl_pp_not(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_not();
 }
 
 #undef  Perl_pp_null
 OP *
-Perl_pp_null(void *pPerl)
+Perl_pp_null(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_null();
 }
 
 #undef  Perl_pp_oct
 OP *
-Perl_pp_oct(void *pPerl)
+Perl_pp_oct(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_oct();
 }
 
 #undef  Perl_pp_open
 OP *
-Perl_pp_open(void *pPerl)
+Perl_pp_open(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_open();
 }
 
 #undef  Perl_pp_open_dir
 OP *
-Perl_pp_open_dir(void *pPerl)
+Perl_pp_open_dir(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_open_dir();
 }
 
 #undef  Perl_pp_or
 OP *
-Perl_pp_or(void *pPerl)
+Perl_pp_or(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_or();
 }
 
 #undef  Perl_pp_orassign
 OP *
-Perl_pp_orassign(void *pPerl)
+Perl_pp_orassign(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_orassign();
 }
 
 #undef  Perl_pp_ord
 OP *
-Perl_pp_ord(void *pPerl)
+Perl_pp_ord(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ord();
 }
 
 #undef  Perl_pp_pack
 OP *
-Perl_pp_pack(void *pPerl)
+Perl_pp_pack(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_pack();
 }
 
 #undef  Perl_pp_padany
 OP *
-Perl_pp_padany(void *pPerl)
+Perl_pp_padany(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_padany();
 }
 
 #undef  Perl_pp_padav
 OP *
-Perl_pp_padav(void *pPerl)
+Perl_pp_padav(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_padav();
 }
 
 #undef  Perl_pp_padhv
 OP *
-Perl_pp_padhv(void *pPerl)
+Perl_pp_padhv(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_padhv();
 }
 
 #undef  Perl_pp_padsv
 OP *
-Perl_pp_padsv(void *pPerl)
+Perl_pp_padsv(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_padsv();
 }
 
 #undef  Perl_pp_pipe_op
 OP *
-Perl_pp_pipe_op(void *pPerl)
+Perl_pp_pipe_op(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_pipe_op();
 }
 
 #undef  Perl_pp_pop
 OP *
-Perl_pp_pop(void *pPerl)
+Perl_pp_pop(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_pop();
 }
 
 #undef  Perl_pp_pos
 OP *
-Perl_pp_pos(void *pPerl)
+Perl_pp_pos(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_pos();
 }
 
 #undef  Perl_pp_postdec
 OP *
-Perl_pp_postdec(void *pPerl)
+Perl_pp_postdec(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_postdec();
 }
 
 #undef  Perl_pp_postinc
 OP *
-Perl_pp_postinc(void *pPerl)
+Perl_pp_postinc(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_postinc();
 }
 
 #undef  Perl_pp_pow
 OP *
-Perl_pp_pow(void *pPerl)
+Perl_pp_pow(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_pow();
 }
 
 #undef  Perl_pp_predec
 OP *
-Perl_pp_predec(void *pPerl)
+Perl_pp_predec(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_predec();
 }
 
 #undef  Perl_pp_preinc
 OP *
-Perl_pp_preinc(void *pPerl)
+Perl_pp_preinc(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_preinc();
 }
 
 #undef  Perl_pp_print
 OP *
-Perl_pp_print(void *pPerl)
+Perl_pp_print(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_print();
 }
 
 #undef  Perl_pp_prototype
 OP *
-Perl_pp_prototype(void *pPerl)
+Perl_pp_prototype(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_prototype();
 }
 
 #undef  Perl_pp_prtf
 OP *
-Perl_pp_prtf(void *pPerl)
+Perl_pp_prtf(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_prtf();
 }
 
 #undef  Perl_pp_push
 OP *
-Perl_pp_push(void *pPerl)
+Perl_pp_push(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_push();
 }
 
 #undef  Perl_pp_pushmark
 OP *
-Perl_pp_pushmark(void *pPerl)
+Perl_pp_pushmark(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_pushmark();
 }
 
 #undef  Perl_pp_pushre
 OP *
-Perl_pp_pushre(void *pPerl)
+Perl_pp_pushre(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_pushre();
 }
 
 #undef  Perl_pp_qr
 OP *
-Perl_pp_qr(void *pPerl)
+Perl_pp_qr(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_qr();
 }
 
 #undef  Perl_pp_quotemeta
 OP *
-Perl_pp_quotemeta(void *pPerl)
+Perl_pp_quotemeta(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_quotemeta();
 }
 
 #undef  Perl_pp_rand
 OP *
-Perl_pp_rand(void *pPerl)
+Perl_pp_rand(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_rand();
 }
 
 #undef  Perl_pp_range
 OP *
-Perl_pp_range(void *pPerl)
+Perl_pp_range(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_range();
 }
 
 #undef  Perl_pp_rcatline
 OP *
-Perl_pp_rcatline(void *pPerl)
+Perl_pp_rcatline(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_rcatline();
 }
 
 #undef  Perl_pp_read
 OP *
-Perl_pp_read(void *pPerl)
+Perl_pp_read(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_read();
 }
 
 #undef  Perl_pp_readdir
 OP *
-Perl_pp_readdir(void *pPerl)
+Perl_pp_readdir(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_readdir();
 }
 
 #undef  Perl_pp_readline
 OP *
-Perl_pp_readline(void *pPerl)
+Perl_pp_readline(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_readline();
 }
 
 #undef  Perl_pp_readlink
 OP *
-Perl_pp_readlink(void *pPerl)
+Perl_pp_readlink(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_readlink();
 }
 
 #undef  Perl_pp_recv
 OP *
-Perl_pp_recv(void *pPerl)
+Perl_pp_recv(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_recv();
 }
 
 #undef  Perl_pp_redo
 OP *
-Perl_pp_redo(void *pPerl)
+Perl_pp_redo(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_redo();
 }
 
 #undef  Perl_pp_ref
 OP *
-Perl_pp_ref(void *pPerl)
+Perl_pp_ref(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ref();
 }
 
 #undef  Perl_pp_refgen
 OP *
-Perl_pp_refgen(void *pPerl)
+Perl_pp_refgen(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_refgen();
 }
 
 #undef  Perl_pp_regcmaybe
 OP *
-Perl_pp_regcmaybe(void *pPerl)
+Perl_pp_regcmaybe(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_regcmaybe();
 }
 
 #undef  Perl_pp_regcomp
 OP *
-Perl_pp_regcomp(void *pPerl)
+Perl_pp_regcomp(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_regcomp();
 }
 
 #undef  Perl_pp_regcreset
 OP *
-Perl_pp_regcreset(void *pPerl)
+Perl_pp_regcreset(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_regcreset();
 }
 
 #undef  Perl_pp_rename
 OP *
-Perl_pp_rename(void *pPerl)
+Perl_pp_rename(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_rename();
 }
 
 #undef  Perl_pp_repeat
 OP *
-Perl_pp_repeat(void *pPerl)
+Perl_pp_repeat(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_repeat();
 }
 
 #undef  Perl_pp_require
 OP *
-Perl_pp_require(void *pPerl)
+Perl_pp_require(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_require();
 }
 
 #undef  Perl_pp_reset
 OP *
-Perl_pp_reset(void *pPerl)
+Perl_pp_reset(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_reset();
 }
 
 #undef  Perl_pp_return
 OP *
-Perl_pp_return(void *pPerl)
+Perl_pp_return(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_return();
 }
 
 #undef  Perl_pp_reverse
 OP *
-Perl_pp_reverse(void *pPerl)
+Perl_pp_reverse(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_reverse();
 }
 
 #undef  Perl_pp_rewinddir
 OP *
-Perl_pp_rewinddir(void *pPerl)
+Perl_pp_rewinddir(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_rewinddir();
 }
 
 #undef  Perl_pp_right_shift
 OP *
-Perl_pp_right_shift(void *pPerl)
+Perl_pp_right_shift(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_right_shift();
 }
 
 #undef  Perl_pp_rindex
 OP *
-Perl_pp_rindex(void *pPerl)
+Perl_pp_rindex(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_rindex();
 }
 
 #undef  Perl_pp_rmdir
 OP *
-Perl_pp_rmdir(void *pPerl)
+Perl_pp_rmdir(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_rmdir();
 }
 
 #undef  Perl_pp_rv2av
 OP *
-Perl_pp_rv2av(void *pPerl)
+Perl_pp_rv2av(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_rv2av();
 }
 
 #undef  Perl_pp_rv2cv
 OP *
-Perl_pp_rv2cv(void *pPerl)
+Perl_pp_rv2cv(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_rv2cv();
 }
 
 #undef  Perl_pp_rv2gv
 OP *
-Perl_pp_rv2gv(void *pPerl)
+Perl_pp_rv2gv(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_rv2gv();
 }
 
 #undef  Perl_pp_rv2hv
 OP *
-Perl_pp_rv2hv(void *pPerl)
+Perl_pp_rv2hv(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_rv2hv();
 }
 
 #undef  Perl_pp_rv2sv
 OP *
-Perl_pp_rv2sv(void *pPerl)
+Perl_pp_rv2sv(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_rv2sv();
 }
 
 #undef  Perl_pp_sassign
 OP *
-Perl_pp_sassign(void *pPerl)
+Perl_pp_sassign(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sassign();
 }
 
 #undef  Perl_pp_scalar
 OP *
-Perl_pp_scalar(void *pPerl)
+Perl_pp_scalar(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_scalar();
 }
 
 #undef  Perl_pp_schomp
 OP *
-Perl_pp_schomp(void *pPerl)
+Perl_pp_schomp(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_schomp();
 }
 
 #undef  Perl_pp_schop
 OP *
-Perl_pp_schop(void *pPerl)
+Perl_pp_schop(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_schop();
 }
 
 #undef  Perl_pp_scmp
 OP *
-Perl_pp_scmp(void *pPerl)
+Perl_pp_scmp(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_scmp();
 }
 
 #undef  Perl_pp_scope
 OP *
-Perl_pp_scope(void *pPerl)
+Perl_pp_scope(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_scope();
 }
 
 #undef  Perl_pp_seek
 OP *
-Perl_pp_seek(void *pPerl)
+Perl_pp_seek(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_seek();
 }
 
 #undef  Perl_pp_seekdir
 OP *
-Perl_pp_seekdir(void *pPerl)
+Perl_pp_seekdir(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_seekdir();
 }
 
 #undef  Perl_pp_select
 OP *
-Perl_pp_select(void *pPerl)
+Perl_pp_select(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_select();
 }
 
 #undef  Perl_pp_semctl
 OP *
-Perl_pp_semctl(void *pPerl)
+Perl_pp_semctl(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_semctl();
 }
 
 #undef  Perl_pp_semget
 OP *
-Perl_pp_semget(void *pPerl)
+Perl_pp_semget(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_semget();
 }
 
 #undef  Perl_pp_semop
 OP *
-Perl_pp_semop(void *pPerl)
+Perl_pp_semop(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_semop();
 }
 
 #undef  Perl_pp_send
 OP *
-Perl_pp_send(void *pPerl)
+Perl_pp_send(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_send();
 }
 
 #undef  Perl_pp_seq
 OP *
-Perl_pp_seq(void *pPerl)
+Perl_pp_seq(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_seq();
 }
 
 #undef  Perl_pp_setpgrp
 OP *
-Perl_pp_setpgrp(void *pPerl)
+Perl_pp_setpgrp(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_setpgrp();
 }
 
 #undef  Perl_pp_setpriority
 OP *
-Perl_pp_setpriority(void *pPerl)
+Perl_pp_setpriority(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_setpriority();
 }
 
 #undef  Perl_pp_sge
 OP *
-Perl_pp_sge(void *pPerl)
+Perl_pp_sge(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sge();
 }
 
 #undef  Perl_pp_sgrent
 OP *
-Perl_pp_sgrent(void *pPerl)
+Perl_pp_sgrent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sgrent();
 }
 
 #undef  Perl_pp_sgt
 OP *
-Perl_pp_sgt(void *pPerl)
+Perl_pp_sgt(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sgt();
 }
 
 #undef  Perl_pp_shift
 OP *
-Perl_pp_shift(void *pPerl)
+Perl_pp_shift(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_shift();
 }
 
 #undef  Perl_pp_shmctl
 OP *
-Perl_pp_shmctl(void *pPerl)
+Perl_pp_shmctl(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_shmctl();
 }
 
 #undef  Perl_pp_shmget
 OP *
-Perl_pp_shmget(void *pPerl)
+Perl_pp_shmget(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_shmget();
 }
 
 #undef  Perl_pp_shmread
 OP *
-Perl_pp_shmread(void *pPerl)
+Perl_pp_shmread(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_shmread();
 }
 
 #undef  Perl_pp_shmwrite
 OP *
-Perl_pp_shmwrite(void *pPerl)
+Perl_pp_shmwrite(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_shmwrite();
 }
 
 #undef  Perl_pp_shostent
 OP *
-Perl_pp_shostent(void *pPerl)
+Perl_pp_shostent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_shostent();
 }
 
 #undef  Perl_pp_shutdown
 OP *
-Perl_pp_shutdown(void *pPerl)
+Perl_pp_shutdown(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_shutdown();
 }
 
 #undef  Perl_pp_sin
 OP *
-Perl_pp_sin(void *pPerl)
+Perl_pp_sin(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sin();
 }
 
 #undef  Perl_pp_sle
 OP *
-Perl_pp_sle(void *pPerl)
+Perl_pp_sle(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sle();
 }
 
 #undef  Perl_pp_sleep
 OP *
-Perl_pp_sleep(void *pPerl)
+Perl_pp_sleep(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sleep();
 }
 
 #undef  Perl_pp_slt
 OP *
-Perl_pp_slt(void *pPerl)
+Perl_pp_slt(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_slt();
 }
 
 #undef  Perl_pp_sne
 OP *
-Perl_pp_sne(void *pPerl)
+Perl_pp_sne(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sne();
 }
 
 #undef  Perl_pp_snetent
 OP *
-Perl_pp_snetent(void *pPerl)
+Perl_pp_snetent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_snetent();
 }
 
 #undef  Perl_pp_socket
 OP *
-Perl_pp_socket(void *pPerl)
+Perl_pp_socket(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_socket();
 }
 
 #undef  Perl_pp_sockpair
 OP *
-Perl_pp_sockpair(void *pPerl)
+Perl_pp_sockpair(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sockpair();
 }
 
 #undef  Perl_pp_sort
 OP *
-Perl_pp_sort(void *pPerl)
+Perl_pp_sort(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sort();
 }
 
 #undef  Perl_pp_splice
 OP *
-Perl_pp_splice(void *pPerl)
+Perl_pp_splice(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_splice();
 }
 
 #undef  Perl_pp_split
 OP *
-Perl_pp_split(void *pPerl)
+Perl_pp_split(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_split();
 }
 
 #undef  Perl_pp_sprintf
 OP *
-Perl_pp_sprintf(void *pPerl)
+Perl_pp_sprintf(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sprintf();
 }
 
 #undef  Perl_pp_sprotoent
 OP *
-Perl_pp_sprotoent(void *pPerl)
+Perl_pp_sprotoent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sprotoent();
 }
 
 #undef  Perl_pp_spwent
 OP *
-Perl_pp_spwent(void *pPerl)
+Perl_pp_spwent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_spwent();
 }
 
 #undef  Perl_pp_sqrt
 OP *
-Perl_pp_sqrt(void *pPerl)
+Perl_pp_sqrt(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sqrt();
 }
 
 #undef  Perl_pp_srand
 OP *
-Perl_pp_srand(void *pPerl)
+Perl_pp_srand(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_srand();
 }
 
 #undef  Perl_pp_srefgen
 OP *
-Perl_pp_srefgen(void *pPerl)
+Perl_pp_srefgen(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_srefgen();
 }
 
 #undef  Perl_pp_sselect
 OP *
-Perl_pp_sselect(void *pPerl)
+Perl_pp_sselect(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sselect();
 }
 
 #undef  Perl_pp_sservent
 OP *
-Perl_pp_sservent(void *pPerl)
+Perl_pp_sservent(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sservent();
 }
 
 #undef  Perl_pp_ssockopt
 OP *
-Perl_pp_ssockopt(void *pPerl)
+Perl_pp_ssockopt(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ssockopt();
 }
 
 #undef  Perl_pp_stat
 OP *
-Perl_pp_stat(void *pPerl)
+Perl_pp_stat(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_stat();
 }
 
 #undef  Perl_pp_stringify
 OP *
-Perl_pp_stringify(void *pPerl)
+Perl_pp_stringify(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_stringify();
 }
 
 #undef  Perl_pp_stub
 OP *
-Perl_pp_stub(void *pPerl)
+Perl_pp_stub(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_stub();
 }
 
 #undef  Perl_pp_study
 OP *
-Perl_pp_study(void *pPerl)
+Perl_pp_study(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_study();
 }
 
 #undef  Perl_pp_subst
 OP *
-Perl_pp_subst(void *pPerl)
+Perl_pp_subst(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_subst();
 }
 
 #undef  Perl_pp_substcont
 OP *
-Perl_pp_substcont(void *pPerl)
+Perl_pp_substcont(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_substcont();
 }
 
 #undef  Perl_pp_substr
 OP *
-Perl_pp_substr(void *pPerl)
+Perl_pp_substr(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_substr();
 }
 
 #undef  Perl_pp_subtract
 OP *
-Perl_pp_subtract(void *pPerl)
+Perl_pp_subtract(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_subtract();
 }
 
 #undef  Perl_pp_symlink
 OP *
-Perl_pp_symlink(void *pPerl)
+Perl_pp_symlink(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_symlink();
 }
 
 #undef  Perl_pp_syscall
 OP *
-Perl_pp_syscall(void *pPerl)
+Perl_pp_syscall(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_syscall();
 }
 
 #undef  Perl_pp_sysopen
 OP *
-Perl_pp_sysopen(void *pPerl)
+Perl_pp_sysopen(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sysopen();
 }
 
 #undef  Perl_pp_sysread
 OP *
-Perl_pp_sysread(void *pPerl)
+Perl_pp_sysread(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sysread();
 }
 
 #undef  Perl_pp_sysseek
 OP *
-Perl_pp_sysseek(void *pPerl)
+Perl_pp_sysseek(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_sysseek();
 }
 
 #undef  Perl_pp_system
 OP *
-Perl_pp_system(void *pPerl)
+Perl_pp_system(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_system();
 }
 
 #undef  Perl_pp_syswrite
 OP *
-Perl_pp_syswrite(void *pPerl)
+Perl_pp_syswrite(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_syswrite();
 }
 
 #undef  Perl_pp_tell
 OP *
-Perl_pp_tell(void *pPerl)
+Perl_pp_tell(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_tell();
 }
 
 #undef  Perl_pp_telldir
 OP *
-Perl_pp_telldir(void *pPerl)
+Perl_pp_telldir(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_telldir();
 }
 
 #undef  Perl_pp_threadsv
 OP *
-Perl_pp_threadsv(void *pPerl)
+Perl_pp_threadsv(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_threadsv();
 }
 
 #undef  Perl_pp_tie
 OP *
-Perl_pp_tie(void *pPerl)
+Perl_pp_tie(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_tie();
 }
 
 #undef  Perl_pp_tied
 OP *
-Perl_pp_tied(void *pPerl)
+Perl_pp_tied(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_tied();
 }
 
 #undef  Perl_pp_time
 OP *
-Perl_pp_time(void *pPerl)
+Perl_pp_time(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_time();
 }
 
 #undef  Perl_pp_tms
 OP *
-Perl_pp_tms(void *pPerl)
+Perl_pp_tms(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_tms();
 }
 
 #undef  Perl_pp_trans
 OP *
-Perl_pp_trans(void *pPerl)
+Perl_pp_trans(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_trans();
 }
 
 #undef  Perl_pp_truncate
 OP *
-Perl_pp_truncate(void *pPerl)
+Perl_pp_truncate(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_truncate();
 }
 
 #undef  Perl_pp_uc
 OP *
-Perl_pp_uc(void *pPerl)
+Perl_pp_uc(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_uc();
 }
 
 #undef  Perl_pp_ucfirst
 OP *
-Perl_pp_ucfirst(void *pPerl)
+Perl_pp_ucfirst(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_ucfirst();
 }
 
 #undef  Perl_pp_umask
 OP *
-Perl_pp_umask(void *pPerl)
+Perl_pp_umask(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_umask();
 }
 
 #undef  Perl_pp_undef
 OP *
-Perl_pp_undef(void *pPerl)
+Perl_pp_undef(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_undef();
 }
 
 #undef  Perl_pp_unlink
 OP *
-Perl_pp_unlink(void *pPerl)
+Perl_pp_unlink(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_unlink();
 }
 
 #undef  Perl_pp_unpack
 OP *
-Perl_pp_unpack(void *pPerl)
+Perl_pp_unpack(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_unpack();
 }
 
 #undef  Perl_pp_unshift
 OP *
-Perl_pp_unshift(void *pPerl)
+Perl_pp_unshift(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_unshift();
 }
 
 #undef  Perl_pp_unstack
 OP *
-Perl_pp_unstack(void *pPerl)
+Perl_pp_unstack(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_unstack();
 }
 
 #undef  Perl_pp_untie
 OP *
-Perl_pp_untie(void *pPerl)
+Perl_pp_untie(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_untie();
 }
 
 #undef  Perl_pp_utime
 OP *
-Perl_pp_utime(void *pPerl)
+Perl_pp_utime(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_utime();
 }
 
 #undef  Perl_pp_values
 OP *
-Perl_pp_values(void *pPerl)
+Perl_pp_values(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_values();
 }
 
 #undef  Perl_pp_vec
 OP *
-Perl_pp_vec(void *pPerl)
+Perl_pp_vec(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_vec();
 }
 
 #undef  Perl_pp_wait
 OP *
-Perl_pp_wait(void *pPerl)
+Perl_pp_wait(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_wait();
 }
 
 #undef  Perl_pp_waitpid
 OP *
-Perl_pp_waitpid(void *pPerl)
+Perl_pp_waitpid(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_waitpid();
 }
 
 #undef  Perl_pp_wantarray
 OP *
-Perl_pp_wantarray(void *pPerl)
+Perl_pp_wantarray(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_wantarray();
 }
 
 #undef  Perl_pp_warn
 OP *
-Perl_pp_warn(void *pPerl)
+Perl_pp_warn(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_warn();
 }
 
 #undef  Perl_pp_xor
 OP *
-Perl_pp_xor(void *pPerl)
+Perl_pp_xor(pTHXo)
 {
     return ((CPerlObj*)pPerl)->Perl_pp_xor();
 }
 
+#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 */
index d1d8dd5..6b931cc 100755 (executable)
--- a/perlapi.h
+++ b/perlapi.h
@@ -3,21 +3,30 @@
    perlvars.h and thrdvar.h.  Any changes made here will be lost!
 */
 
-#if defined(PERL_OBJECT)
-
 /* 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,
+#  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(void *p);
+#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(void *p);
+                       EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHXo);
 #define PERLVARI(v,t,i)        PERLVAR(v,t)
-#define PERLVARIC(v,t,i) PERLVAR(v,t)
+#define PERLVARIC(v,t,i) PERLVAR(v, const t)
 
 #include "thrdvar.h"
 #include "intrpvar.h"
@@ -30,5 +39,5 @@ START_EXTERN_C
 
 END_EXTERN_C
 
-#endif /* PERL_OBJECT */
+#endif /* PERL_OBJECT || PERL_CAPI */
 
index 505548a..9230b0c 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -7,6 +7,8 @@
  *
  */
 
+#if !defined(PERL_IMPLICIT_SYS)
+
 #define VOIDUSED 1
 #include "config.h"
 
@@ -560,3 +562,5 @@ PerlIO_sprintf(char *s, int n, const char *fmt,...)
 }
 #endif
 
+#endif /* !PERL_IMPLICIT_SYS */
+
index c608ab5..b216b62 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -3623,12 +3623,12 @@ PP(pp_system)
 #else /* ! FORK or VMS or OS/2 */
     if (PL_op->op_flags & OPf_STACKED) {
        SV *really = *++MARK;
-       value = (I32)do_aspawn(aTHX_ really, (void **)MARK, (void **)SP);
+       value = (I32)do_aspawn(really, (void **)MARK, (void **)SP);
     }
     else if (SP - MARK != 1)
-       value = (I32)do_aspawn(aTHX_ Nullsv, (void **)MARK, (void **)SP);
+       value = (I32)do_aspawn(Nullsv, (void **)MARK, (void **)SP);
     else {
-       value = (I32)do_spawn(aTHX_ SvPVx(sv_mortalcopy(*SP), n_a));
+       value = (I32)do_spawn(SvPVx(sv_mortalcopy(*SP), n_a));
     }
     STATUS_NATIVE_SET(value);
     do_execfree();
@@ -3655,7 +3655,7 @@ PP(pp_exec)
 #else
 #  ifdef __OPEN_VM
        {
-          (void ) do_aspawn(aTHX_ Nullsv, MARK, SP);
+          (void ) do_aspawn(Nullsv, MARK, SP);
           value = 0;
        }
 #  else
@@ -3672,7 +3672,7 @@ PP(pp_exec)
        value = (I32)vms_do_exec(SvPVx(sv_mortalcopy(*SP), n_a));
 #else
 #  ifdef __OPEN_VM
-       (void) do_spawn(aTHX_ SvPVx(sv_mortalcopy(*SP), n_a));
+       (void) do_spawn(SvPVx(sv_mortalcopy(*SP), n_a));
        value = 0;
 #  else
        value = (I32)do_exec(SvPVx(sv_mortalcopy(*SP), n_a));
diff --git a/proto.h b/proto.h
index b02eb43..fe399f0 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -51,16 +51,20 @@ VIRTUAL MAGIC*      Perl_condpair_magic(pTHX_ SV *sv);
 #endif
 VIRTUAL OP*    Perl_convert(pTHX_ I32 optype, I32 flags, OP* o);
 VIRTUAL void   Perl_croak(pTHX_ const char* pat, ...) __attribute__((noreturn));
+VIRTUAL void   Perl_vcroak(pTHX_ const char* pat, va_list* args) __attribute__((noreturn));
 #if defined(PERL_IMPLICIT_CONTEXT)
 VIRTUAL void   Perl_croak_nocontext(const char* pat, ...) __attribute__((noreturn));
 VIRTUAL OP*    Perl_die_nocontext(const char* pat, ...);
+VIRTUAL void   Perl_deb_nocontext(const char* pat, ...);
 VIRTUAL char*  Perl_form_nocontext(const char* pat, ...);
 VIRTUAL void   Perl_warn_nocontext(const char* pat, ...);
+VIRTUAL void   Perl_warner_nocontext(U32 err, const char* pat, ...);
 VIRTUAL SV*    Perl_newSVpvf_nocontext(const char* pat, ...);
 VIRTUAL void   Perl_sv_catpvf_nocontext(SV* sv, const char* pat, ...);
 VIRTUAL void   Perl_sv_setpvf_nocontext(SV* sv, const char* pat, ...);
 VIRTUAL void   Perl_sv_catpvf_mg_nocontext(SV* sv, const char* pat, ...);
 VIRTUAL void   Perl_sv_setpvf_mg_nocontext(SV* sv, const char* pat, ...);
+VIRTUAL int    Perl_fprintf_nocontext(PerlIO* stream, const char* fmt, ...);
 #endif
 VIRTUAL void   Perl_cv_ckproto(pTHX_ CV* cv, GV* gv, char* p);
 VIRTUAL CV*    Perl_cv_clone(pTHX_ CV* proto);
@@ -78,6 +82,7 @@ VIRTUAL U32*  Perl_get_opargs(pTHX);
 VIRTUAL PPADDR_t*      Perl_get_ppaddr(pTHX);
 VIRTUAL I32    Perl_cxinc(pTHX);
 VIRTUAL void   Perl_deb(pTHX_ const char* pat, ...);
+VIRTUAL void   Perl_vdeb(pTHX_ const char* pat, va_list* args);
 VIRTUAL void   Perl_deb_growlevel(pTHX);
 VIRTUAL void   Perl_debprofdump(pTHX);
 VIRTUAL I32    Perl_debop(pTHX_ OP* o);
@@ -86,6 +91,7 @@ VIRTUAL I32   Perl_debstackptrs(pTHX);
 VIRTUAL char*  Perl_delimcpy(pTHX_ char* to, char* toend, char* from, char* fromend, int delim, I32* retlen);
 VIRTUAL void   Perl_deprecate(pTHX_ char* s);
 VIRTUAL OP*    Perl_die(pTHX_ const char* pat, ...);
+VIRTUAL OP*    Perl_vdie(pTHX_ const char* pat, va_list* args);
 VIRTUAL OP*    Perl_die_where(pTHX_ char* message, STRLEN msglen);
 VIRTUAL void   Perl_dounwind(pTHX_ I32 cxix);
 VIRTUAL bool   Perl_do_aexec(pTHX_ SV* really, SV** mark, SV** sp);
@@ -142,6 +148,7 @@ VIRTUAL PADOFFSET   Perl_find_threadsv(pTHX_ const char *name);
 VIRTUAL OP*    Perl_force_list(pTHX_ OP* arg);
 VIRTUAL OP*    Perl_fold_constants(pTHX_ OP* arg);
 VIRTUAL char*  Perl_form(pTHX_ const char* pat, ...);
+VIRTUAL char*  Perl_vform(pTHX_ const char* pat, va_list* args);
 VIRTUAL void   Perl_free_tmps(pTHX);
 VIRTUAL OP*    Perl_gen_constant_list(pTHX_ OP* o);
 #if !defined(HAS_GETENV_LEN)
@@ -397,13 +404,11 @@ VIRTUAL SV*       Perl_newSVnv(pTHX_ NV n);
 VIRTUAL SV*    Perl_newSVpv(pTHX_ const char* s, STRLEN len);
 VIRTUAL SV*    Perl_newSVpvn(pTHX_ const char* s, STRLEN len);
 VIRTUAL SV*    Perl_newSVpvf(pTHX_ const char* pat, ...);
+VIRTUAL SV*    Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args);
 VIRTUAL SV*    Perl_newSVrv(pTHX_ SV* rv, const char* classname);
 VIRTUAL SV*    Perl_newSVsv(pTHX_ SV* old);
 VIRTUAL OP*    Perl_newUNOP(pTHX_ I32 type, I32 flags, OP* first);
 VIRTUAL OP*    Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP* loop, I32 whileline, OP* expr, OP* block, OP* cont);
-#if defined(USE_THREADS)
-VIRTUAL struct perl_thread*    Perl_new_struct_thread(pTHX_ struct perl_thread *t);
-#endif
 VIRTUAL PERL_SI*       Perl_new_stackinfo(pTHX_ I32 stitems, I32 cxitems);
 VIRTUAL PerlIO*        Perl_nextargv(pTHX_ GV* gv);
 VIRTUAL char*  Perl_ninstr(pTHX_ const char* big, const char* bigend, const char* little, const char* lend);
@@ -434,6 +439,9 @@ VIRTUAL void        perl_destruct(PerlInterpreter* sv_interp);
 VIRTUAL void   perl_free(PerlInterpreter* sv_interp);
 VIRTUAL int    perl_run(PerlInterpreter* sv_interp);
 VIRTUAL int    perl_parse(PerlInterpreter* sv_interp, XSINIT_t xsinit, int argc, char** argv, char** env);
+#if defined(USE_THREADS)
+VIRTUAL struct perl_thread*    Perl_new_struct_thread(pTHX_ struct perl_thread *t);
+#endif
 #endif
 VIRTUAL void   Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr);
 VIRTUAL I32    Perl_call_argv(pTHX_ const char* sub_name, I32 flags, char** argv);
@@ -559,6 +567,7 @@ VIRTUAL void        Perl_sv_add_arena(pTHX_ char* ptr, U32 size, U32 flags);
 VIRTUAL int    Perl_sv_backoff(pTHX_ SV* sv);
 VIRTUAL SV*    Perl_sv_bless(pTHX_ SV* sv, HV* stash);
 VIRTUAL void   Perl_sv_catpvf(pTHX_ SV* sv, const char* pat, ...);
+VIRTUAL void   Perl_sv_vcatpvf(pTHX_ SV* sv, const char* pat, va_list* args);
 VIRTUAL void   Perl_sv_catpv(pTHX_ SV* sv, const char* ptr);
 VIRTUAL void   Perl_sv_catpvn(pTHX_ SV* sv, const char* ptr, STRLEN len);
 VIRTUAL void   Perl_sv_catsv(pTHX_ SV* dsv, SV* ssv);
@@ -599,6 +608,7 @@ VIRTUAL void        Perl_sv_replace(pTHX_ SV* sv, SV* nsv);
 VIRTUAL void   Perl_sv_report_used(pTHX);
 VIRTUAL void   Perl_sv_reset(pTHX_ char* s, HV* stash);
 VIRTUAL void   Perl_sv_setpvf(pTHX_ SV* sv, const char* pat, ...);
+VIRTUAL void   Perl_sv_vsetpvf(pTHX_ SV* sv, const char* pat, va_list* args);
 VIRTUAL void   Perl_sv_setiv(pTHX_ SV* sv, IV num);
 VIRTUAL void   Perl_sv_setpviv(pTHX_ SV* sv, IV num);
 VIRTUAL void   Perl_sv_setuv(pTHX_ SV* sv, UV num);
@@ -645,7 +655,9 @@ VIRTUAL void        Perl_vivify_defelem(pTHX_ SV* sv);
 VIRTUAL void   Perl_vivify_ref(pTHX_ SV* sv, U32 to_what);
 VIRTUAL I32    Perl_wait4pid(pTHX_ int pid, int* statusp, int flags);
 VIRTUAL void   Perl_warn(pTHX_ const char* pat, ...);
+VIRTUAL void   Perl_vwarn(pTHX_ const char* pat, va_list* args);
 VIRTUAL void   Perl_warner(pTHX_ U32 err, const char* pat, ...);
+VIRTUAL void   Perl_vwarner(pTHX_ U32 err, const char* pat, va_list* args);
 VIRTUAL void   Perl_watch(pTHX_ char** addr);
 VIRTUAL I32    Perl_whichsig(pTHX_ char* sig);
 VIRTUAL int    Perl_yyerror(pTHX_ char* s);
@@ -679,10 +691,12 @@ VIRTUAL struct perl_vars *        Perl_GetVars(pTHX);
 VIRTUAL int    Perl_runops_standard(pTHX);
 VIRTUAL int    Perl_runops_debug(pTHX);
 VIRTUAL void   Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...);
+VIRTUAL void   Perl_sv_vcatpvf_mg(pTHX_ SV* sv, const char* pat, va_list* args);
 VIRTUAL void   Perl_sv_catpv_mg(pTHX_ SV *sv, const char *ptr);
 VIRTUAL void   Perl_sv_catpvn_mg(pTHX_ SV *sv, const char *ptr, STRLEN len);
 VIRTUAL void   Perl_sv_catsv_mg(pTHX_ SV *dstr, SV *sstr);
 VIRTUAL void   Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...);
+VIRTUAL void   Perl_sv_vsetpvf_mg(pTHX_ SV* sv, const char* pat, va_list* args);
 VIRTUAL void   Perl_sv_setiv_mg(pTHX_ SV *sv, IV i);
 VIRTUAL void   Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv);
 VIRTUAL void   Perl_sv_setuv_mg(pTHX_ SV *sv, UV u);
@@ -694,6 +708,7 @@ VIRTUAL void        Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len);
 VIRTUAL MGVTBL*        Perl_get_vtbl(pTHX_ int vtbl_id);
 VIRTUAL char*  Perl_pv_display(pTHX_ SV *sv, char *pv, STRLEN cur, STRLEN len, STRLEN pvlim);
 VIRTUAL void   Perl_dump_indent(pTHX_ I32 level, PerlIO *file, const char* pat, ...);
+VIRTUAL void   Perl_dump_vindent(pTHX_ I32 level, PerlIO *file, const char* pat, va_list *args);
 VIRTUAL void   Perl_do_gv_dump(pTHX_ I32 level, PerlIO *file, char *name, GV *sv);
 VIRTUAL void   Perl_do_gvgv_dump(pTHX_ I32 level, PerlIO *file, char *name, GV *sv);
 VIRTUAL void   Perl_do_hv_dump(pTHX_ I32 level, PerlIO *file, char *name, HV *sv);
@@ -703,6 +718,7 @@ VIRTUAL void        Perl_do_pmop_dump(pTHX_ I32 level, PerlIO *file, PMOP *pm);
 VIRTUAL void   Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim);
 VIRTUAL void   Perl_magic_dump(pTHX_ MAGIC *mg);
 VIRTUAL void*  Perl_default_protect(pTHX_ int *excpt, protect_body_t body, ...);
+VIRTUAL void*  Perl_vdefault_protect(pTHX_ int *excpt, protect_body_t body, va_list *args);
 VIRTUAL void   Perl_reginitcolors(pTHX);
 VIRTUAL char*  Perl_sv_2pv_nolen(pTHX_ SV* sv);
 VIRTUAL char*  Perl_sv_pv(pTHX_ SV *sv);
@@ -955,9 +971,6 @@ STATIC SV*  S_isa_lookup(pTHX_ HV *stash, const char *name, int len, int level);
 #endif
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
 STATIC SV*     S_mess_alloc(pTHX);
-STATIC void    S_do_croak(pTHX_ const char *pat, va_list *args) __attribute__((noreturn));
-STATIC void    S_do_warn(pTHX_ const char *pat, va_list *args);
-STATIC OP*     S_do_die(pTHX_ const char *pat, va_list *args);
 #  if defined(LEAKTEST)
 STATIC void    S_xstat(pTHX_ int);
 #  endif
index d2717e1..c6fb7fe 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -41,6 +41,8 @@
 #  define Perl_regnext my_regnext
 #  define Perl_save_re_context my_save_re_context
 #  define Perl_reginitcolors my_reginitcolors 
+
+#  define PERL_NO_GET_CONTEXT
 #endif 
 
 /*SUPPRESS 112*/
 #define PERL_IN_REGCOMP_C
 #include "perl.h"
 
-#ifndef PERL_IN_XSUB_RE
+#ifdef PERL_IN_XSUB_RE
+#  if defined(PERL_CAPI) || defined(PERL_OBJECT)
+#    include "XSUB.h"
+#  endif
+#else
 #  include "INTERN.h"
 #endif
 
@@ -461,7 +467,8 @@ S_study_chunk(pTHX_ regnode **scanp, I32 *deltap, regnode *last, scan_data_t *da
                if (ckWARN(WARN_UNSAFE) && (minnext + deltanext == 0) 
                    && !(data->flags & (SF_HAS_PAR|SF_IN_PAR))
                    && maxcount <= REG_INFTY/3) /* Complement check for big count */
-                   Perl_warner(aTHX_ WARN_UNSAFE, "Strange *+?{} on zero-length expression");
+                   Perl_warner(aTHX_ WARN_UNSAFE,
+                               "Strange *+?{} on zero-length expression");
                min += minnext * mincount;
                is_inf_internal |= (maxcount == REG_INFTY 
                                    && (minnext + deltanext) > 0
index 286131a..4df60ac 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -39,6 +39,8 @@
 /* *These* symbols are masked to allow static link. */
 #  define Perl_pregexec my_pregexec
 #  define Perl_reginitcolors my_reginitcolors 
+
+#  define PERL_NO_GET_CONTEXT
 #endif 
 
 /*SUPPRESS 112*/
 #define PERL_IN_REGEXEC_C
 #include "perl.h"
 
+#ifdef PERL_IN_XSUB_RE
+#  if defined(PERL_CAPI) || defined(PERL_OBJECT)
+#    include "XSUB.h"
+#  endif
+#endif
+
 #include "regcomp.h"
 
 #define RF_tainted     1               /* tainted information used? */
diff --git a/scope.c b/scope.c
index 3da5e63..44c3d92 100644 (file)
--- a/scope.c
+++ b/scope.c
 void *
 Perl_default_protect(pTHX_ int *excpt, protect_body_t body, ...)
 {
+    void *ret;
+    va_list args;
+    va_start(args, body);
+    ret = vdefault_protect(excpt, body, &args);
+    va_end(args);
+    return ret;
+}
+
+void *
+Perl_vdefault_protect(pTHX_ int *excpt, protect_body_t body, va_list *args)
+{
     dTHR;
     dJMPENV;
-    va_list args;
     int ex;
     void *ret;
 
@@ -30,11 +40,8 @@ Perl_default_protect(pTHX_ int *excpt, protect_body_t body, ...)
     JMPENV_PUSH(ex);
     if (ex)
        ret = NULL;
-    else {
-       va_start(args, body);
-       ret = CALL_FPTR(body)(aTHX_ args);
-       va_end(args);
-    }
+    else
+       ret = CALL_FPTR(body)(aTHX_ *args);
     *excpt = ex;
     JMPENV_POP;
     return ret;
diff --git a/sv.c b/sv.c
index 5bb9a87..6392f54 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -3949,10 +3949,8 @@ Perl_newSVpvf_nocontext(const char* pat, ...)
     dTHX;
     register SV *sv;
     va_list args;
-
-    new_SV(sv);
     va_start(args, pat);
-    sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+    sv = vnewSVpvf(pat, &args);
     va_end(args);
     return sv;
 }
@@ -3963,15 +3961,22 @@ Perl_newSVpvf(pTHX_ const char* pat, ...)
 {
     register SV *sv;
     va_list args;
-
-    new_SV(sv);
     va_start(args, pat);
-    sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+    sv = vnewSVpvf(pat, &args);
     va_end(args);
     return sv;
 }
 
 SV *
+Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
+{
+    register SV *sv;
+    new_SV(sv);
+    sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
+    return sv;
+}
+
+SV *
 Perl_newSVnv(pTHX_ NV n)
 {
     register SV *sv;
@@ -4579,7 +4584,7 @@ Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
     dTHX;
     va_list args;
     va_start(args, pat);
-    sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+    sv_vsetpvf(sv, pat, &args);
     va_end(args);
 }
 
@@ -4590,9 +4595,8 @@ Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
     dTHX;
     va_list args;
     va_start(args, pat);
-    sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+    sv_vsetpvf_mg(sv, pat, &args);
     va_end(args);
-    SvSETMAGIC(sv);
 }
 #endif
 
@@ -4601,18 +4605,29 @@ Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
 {
     va_list args;
     va_start(args, pat);
-    sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+    sv_vsetpvf(sv, pat, &args);
     va_end(args);
 }
 
+void
+Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
+{
+    sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
+}
 
 void
 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
 {
     va_list args;
     va_start(args, pat);
-    sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+    sv_vsetpvf_mg(sv, pat, &args);
     va_end(args);
+}
+
+void
+Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
+{
+    sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
     SvSETMAGIC(sv);
 }
 
@@ -4623,7 +4638,7 @@ Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
     dTHX;
     va_list args;
     va_start(args, pat);
-    sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+    sv_vcatpvf(sv, pat, &args);
     va_end(args);
 }
 
@@ -4633,9 +4648,8 @@ Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
     dTHX;
     va_list args;
     va_start(args, pat);
-    sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+    sv_vcatpvf_mg(sv, pat, &args);
     va_end(args);
-    SvSETMAGIC(sv);
 }
 #endif
 
@@ -4644,17 +4658,29 @@ Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
 {
     va_list args;
     va_start(args, pat);
-    sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+    sv_vcatpvf(sv, pat, &args);
     va_end(args);
 }
 
 void
+Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
+{
+    sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
+}
+
+void
 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
 {
     va_list args;
     va_start(args, pat);
-    sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+    sv_vcatpvf_mg(sv, pat, &args);
     va_end(args);
+}
+
+void
+Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
+{
+    sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
     SvSETMAGIC(sv);
 }
 
index 5406085..b3f3be5 100644 (file)
--- a/thrdvar.h
+++ b/thrdvar.h
 
 /* Important ones in the first cache line (if alignment is done right) */
 
+#ifdef USE_THREADS
+PERLVAR(interp,                PerlInterpreter*)       /* thread owner */
+#endif
+
 PERLVAR(Tstack_sp,     SV **)          /* top of the stack */
 #ifdef OP_IN_REGISTER
 PERLVAR(Topsave,       OP *)
diff --git a/util.c b/util.c
index 64580f6..960bdb5 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1363,28 +1363,36 @@ S_mess_alloc(pTHX)
     return sv;
 }
 
-#ifdef PERL_IMPLICIT_CONTEXT
+#if defined(PERL_IMPLICIT_CONTEXT)
 char *
 Perl_form_nocontext(const char* pat, ...)
 {
     dTHX;
-    SV *sv = mess_alloc();
+    char *retval;
     va_list args;
     va_start(args, pat);
-    sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+    retval = vform(pat, &args);
     va_end(args);
-    return SvPVX(sv);
+    return retval;
 }
-#endif
+#endif /* PERL_IMPLICIT_CONTEXT */
 
 char *
 Perl_form(pTHX_ const char* pat, ...)
 {
-    SV *sv = mess_alloc();
+    char *retval;
     va_list args;
     va_start(args, pat);
-    sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+    retval = vform(pat, &args);
     va_end(args);
+    return retval;
+}
+
+char *
+Perl_vform(pTHX_ const char *pat, va_list *args)
+{
+    SV *sv = mess_alloc();
+    sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
     return SvPVX(sv);
 }
 
@@ -1413,8 +1421,8 @@ Perl_mess(pTHX_ const char *pat, va_list *args)
     return sv;
 }
 
-STATIC OP *
-S_do_die(pTHX_ const char* pat, va_list *args)
+OP *
+Perl_vdie(pTHX_ const char* pat, va_list *args)
 {
     dTHR;
     char *message;
@@ -1481,7 +1489,7 @@ S_do_die(pTHX_ const char* pat, va_list *args)
     return PL_restartop;
 }
 
-#ifdef PERL_IMPLICIT_CONTEXT
+#if defined(PERL_IMPLICIT_CONTEXT)
 OP *
 Perl_die_nocontext(const char* pat, ...)
 {
@@ -1489,11 +1497,11 @@ Perl_die_nocontext(const char* pat, ...)
     OP *o;
     va_list args;
     va_start(args, pat);
-    o = do_die(pat, &args);
+    o = vdie(pat, &args);
     va_end(args);
     return o;
 }
-#endif
+#endif /* PERL_IMPLICIT_CONTEXT */
 
 OP *
 Perl_die(pTHX_ const char* pat, ...)
@@ -1501,13 +1509,13 @@ Perl_die(pTHX_ const char* pat, ...)
     OP *o;
     va_list args;
     va_start(args, pat);
-    o = do_die(pat, &args);
+    o = vdie(pat, &args);
     va_end(args);
     return o;
 }
 
-STATIC void
-S_do_croak(pTHX_ const char* pat, va_list *args)
+void
+Perl_vcroak(pTHX_ const char* pat, va_list *args)
 {
     dTHR;
     char *message;
@@ -1564,14 +1572,14 @@ S_do_croak(pTHX_ const char* pat, va_list *args)
     my_failure_exit();
 }
 
-#ifdef PERL_IMPLICIT_CONTEXT
+#if defined(PERL_IMPLICIT_CONTEXT)
 void
 Perl_croak_nocontext(const char *pat, ...)
 {
     dTHX;
     va_list args;
     va_start(args, pat);
-    do_croak(pat, &args);
+    vcroak(pat, &args);
     /* NOTREACHED */
     va_end(args);
 }
@@ -1582,13 +1590,13 @@ Perl_croak(pTHX_ const char *pat, ...)
 {
     va_list args;
     va_start(args, pat);
-    do_croak(pat, &args);
+    vcroak(pat, &args);
     /* NOTREACHED */
     va_end(args);
 }
 
-STATIC void
-S_do_warn(pTHX_ const char* pat, va_list *args)
+void
+Perl_vwarn(pTHX_ const char* pat, va_list *args)
 {
     char *message;
     HV *stash;
@@ -1640,14 +1648,14 @@ S_do_warn(pTHX_ const char* pat, va_list *args)
     (void)PerlIO_flush(PerlIO_stderr());
 }
 
-#ifdef PERL_IMPLICIT_CONTEXT
+#if defined(PERL_IMPLICIT_CONTEXT)
 void
 Perl_warn_nocontext(const char *pat, ...)
 {
     dTHX;
     va_list args;
     va_start(args, pat);
-    do_warn(pat, &args);
+    vwarn(pat, &args);
     va_end(args);
 }
 #endif /* PERL_IMPLICIT_CONTEXT */
@@ -1657,15 +1665,35 @@ Perl_warn(pTHX_ const char *pat, ...)
 {
     va_list args;
     va_start(args, pat);
-    do_warn(pat, &args);
+    vwarn(pat, &args);
     va_end(args);
 }
 
+#if defined(PERL_IMPLICIT_CONTEXT)
+void
+Perl_warner_nocontext(U32 err, const char *pat, ...)
+{
+    dTHX;
+    va_list args;
+    va_start(args, pat);
+    vwarner(err, pat, &args);
+    va_end(args);
+}
+#endif /* PERL_IMPLICIT_CONTEXT */
+
 void
 Perl_warner(pTHX_ U32  err, const char* pat,...)
 {
-    dTHR;
     va_list args;
+    va_start(args, pat);
+    vwarner(err, pat, &args);
+    va_end(args);
+}
+
+void
+Perl_vwarner(pTHX_ U32  err, const char* pat, va_list* args)
+{
+    dTHR;
     char *message;
     HV *stash;
     GV *gv;
@@ -1673,10 +1701,8 @@ Perl_warner(pTHX_ U32  err, const char* pat,...)
     SV *msv;
     STRLEN msglen;
 
-    va_start(args, pat);
-    msv = mess(pat, &args);
+    msv = mess(pat, args);
     message = SvPV(msv, msglen);
-    va_end(args);
 
     if (ckDEAD(err)) {
 #ifdef USE_THREADS
@@ -3183,7 +3209,7 @@ Perl_condpair_magic(pTHX_ SV *sv)
 struct perl_thread *
 Perl_new_struct_thread(pTHX_ struct perl_thread *t)
 {
-#ifndef PERL_IMPLICIT_CONTEXT
+#if !defined(PERL_IMPLICIT_CONTEXT)
     struct perl_thread *thr;
 #endif
     SV *sv;
@@ -3213,6 +3239,7 @@ Perl_new_struct_thread(pTHX_ struct perl_thread *t)
     init_stacks();
 
     PL_curcop = &PL_compiling;
+    thr->interp = t->interp;
     thr->cvcache = newHV();
     thr->threadsv = newAV();
     thr->specific = newAV();
diff --git a/win32/GenCAPI.pl b/win32/GenCAPI.pl
deleted file mode 100644 (file)
index 703a156..0000000
+++ /dev/null
@@ -1,1674 +0,0 @@
-
-# creates a C API file from proto.h
-# takes one argument, the path to lib/CORE directory.
-# creates 2 files: "perlCAPI.cpp" and "perlCAPI.h".
-
-my $hdrfile = "$ARGV[0]/perlCAPI.h";
-my $infile = '../proto.h';
-my @embedsyms = ('../global.sym', '../pp.sym');
-my $separateObj = 0;
-
-my %skip_list;
-my %embed;
-
-sub readsyms(\%@) {
-    my ($syms, @files) = @_;
-    my ($line, @words);
-    %$syms = ();
-    foreach my $file (@files) {
-       local (*FILE, $_);
-       open(FILE, "< $file")
-           or die "$0: Can't open $file: $!\n";
-       while (<FILE>) {
-           s/[ \t]*#.*$//;     # delete comments
-           if (/^\s*(\S+)\s*$/) {
-               my $sym = $1;
-               $$syms{$sym} = $sym;
-           }
-       }
-       close(FILE);
-    }
-}
-
-readsyms %embed, @embedsyms;
-
-sub skip_these {
-    my $list = shift;
-    foreach my $symbol (@$list) {
-       $skip_list{$symbol} = 1;
-    }
-}
-
-skip_these [qw(
-Perl_yylex
-Perl_cando
-Perl_cast_ulong
-Perl_my_chsize
-Perl_condpair_magic
-Perl_deb
-Perl_deb_growlevel
-Perl_debprofdump
-Perl_debop
-Perl_debstack
-Perl_debstackptrs
-Perl_dump_fds
-Perl_dump_mstats
-fprintf
-Perl_find_threadsv
-Perl_magic_mutexfree
-Perl_my_memcmp
-Perl_my_memset
-Perl_my_pclose
-Perl_my_popen
-Perl_my_swap
-Perl_my_htonl
-Perl_my_ntohl
-Perl_new_struct_thread
-Perl_same_dirent
-Perl_unlnk
-Perl_unlock_condpair
-Perl_safexmalloc
-Perl_safexcalloc
-Perl_safexrealloc
-Perl_safexfree
-Perl_GetVars
-Perl_malloced_size
-Perl_do_exec3
-Perl_getenv_len
-Perl_dump_indent
-Perl_default_protect
-Perl_croak_nocontext
-Perl_die_nocontext
-Perl_form_nocontext
-Perl_warn_nocontext
-Perl_newSVpvf_nocontext
-Perl_sv_catpvf_nocontext
-Perl_sv_catpvf_mg_nocontext
-Perl_sv_setpvf_nocontext
-Perl_sv_setpvf_mg_nocontext
-Perl_do_ipcctl
-Perl_do_ipcget
-Perl_do_msgrcv
-Perl_do_msgsnd
-Perl_do_semop
-Perl_do_shmio
-Perl_my_bzero
-perl_parse
-perl_alloc
-Perl_call_atexit
-Perl_malloc
-Perl_calloc
-Perl_realloc
-Perl_mfree
-)];
-
-
-
-if (!open(INFILE, "<$infile")) {
-    print "open of $infile failed: $!\n";
-    return 1;
-}
-
-if (!open(OUTFILE, ">perlCAPI.cpp")) {
-    print "open of perlCAPI.cpp failed: $!\n";
-    return 1;
-}
-
-print OUTFILE <<ENDCODE;
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-  
-/*#define DESTRUCTORFUNC (void (*)(void*))*/
-
-#undef Perl_sv_2mortal
-#undef Perl_newSVsv
-#undef Perl_mess
-#undef Perl_sv_2pv
-#undef Perl_sv_vcatpvfn
-#undef Perl_sv_vsetpvfn
-#undef Perl_newSV
-ENDCODE
-
-print OUTFILE "#ifdef SetCPerlObj_defined\n" unless ($separateObj == 0);
-
-print OUTFILE <<ENDCODE;
-extern "C" void SetCPerlObj(CPerlObj* pP)
-{
-    pPerl = pP;
-}
-  
-ENDCODE
-
-print OUTFILE "#endif\n" unless ($separateObj == 0); 
-
-my %done;
-
-while () {
-    last unless defined ($_ = <INFILE>);
-    if (/^VIRTUAL\s+/) {
-        while (!/;$/) {
-            chomp;
-            $_ .= <INFILE>;
-        }
-        $_ =~ s/^VIRTUAL\s*//;
-        $_ =~ s/\s*__attribute__.*$/;/;
-        if ( /^(.+)\t(\w+)\((.*)\);/ ) {
-            $type = $1;
-            $name = $2;
-            $args = $3;
-            $name =~ s/\s*$//;
-            $type =~ s/\s*$//;
-           next if (defined $skip_list{$name});
-           next if $name =~ /^S_/;
-           next if exists $done{$name};
-
-           $done{$name}++;
-           if($args eq "ARGSproto" or $args eq "pTHX") {
-               $args = "void";
-           }
-           $args =~ s/^pTHX_ //;
-
-            $return = ($type eq "void" or $type eq "Free_t") ? "\t" : "\treturn";
-
-           if(defined $embed{$name}) {
-               $funcName = $embed{$name};
-           } else {
-               $funcName = $name;
-           }
-
-            @args = split(',', $args);
-            if ($args[$#args] =~ /\s*\.\.\.\s*/) {
-                if ($name =~ /^Perl_(croak|deb|die|warn|form|warner)$/) {
-                    print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
-                    for (@args) { $_ = $1 if /(\w+)\W*$/; }
-                    $arg = $args[$#args-1];
-                   my $start = '';
-                   $start = join(', ',@args[0 .. ($#args - 2)]) if @args > 2;
-                   $start .= ', ' if $start;
-                    print OUTFILE <<ENDCODE;
-
-#undef $name
-extern "C" $type $funcName ($args)
-{
-    SV *pmsg;
-    va_list args;
-    va_start(args, $arg);
-    pmsg = pPerl->Perl_sv_2mortal(pPerl->Perl_newSVsv(pPerl->Perl_mess($arg, &args)));
-$return pPerl->$name($start SvPV_nolen(pmsg));
-    va_end(args);
-}
-ENDCODE
-                    print OUTFILE "#endif\n" unless ($separateObj == 0);
-                }
-                elsif($name =~ /^Perl_newSVpvf/) {
-                    print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
-                    $args[0] =~ /(\w+)\W*$/; 
-                    $arg = $1;
-                    print OUTFILE <<ENDCODE;
-
-#undef $name
-extern "C" $type $funcName ($args)
-{
-    SV *sv;
-    va_list args;
-    va_start(args, $arg);
-    sv = pPerl->Perl_newSV(0);
-    pPerl->Perl_sv_vcatpvfn(sv, $arg, strlen($arg), &args, NULL, 0, NULL);
-    va_end(args);
-    return sv;
-}
-ENDCODE
-                    print OUTFILE "#endif\n" unless ($separateObj == 0);
-                }
-                elsif($name =~ /^Perl_sv_catpvf/) {
-                    print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
-                    $args[0] =~ /(\w+)\W*$/; 
-                    $arg0 = $1;
-                    $args[1] =~ /(\w+)\W*$/; 
-                    $arg1 = $1;
-                    print OUTFILE <<ENDCODE;
-
-#undef $name
-extern "C" $type $funcName ($args)
-{
-    va_list args;
-    va_start(args, $arg1);
-    pPerl->Perl_sv_vcatpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
-    va_end(args);
-}
-ENDCODE
-                    print OUTFILE "#endif\n" unless ($separateObj == 0);
-                }
-                elsif($name =~ /^Perl_sv_catpvf_mg/) {
-                    print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
-                    $args[0] =~ /(\w+)\W*$/; 
-                    $arg0 = $1;
-                    $args[1] =~ /(\w+)\W*$/; 
-                    $arg1 = $1;
-                    print OUTFILE <<ENDCODE;
-
-#undef $name
-#ifndef mg_set
-#define mg_set pPerl->Perl_mg_set
-#endif
-extern "C" $type $funcName ($args)
-{
-    va_list args;
-    va_start(args, $arg1);
-    pPerl->Perl_sv_vcatpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
-    va_end(args);
-    SvSETMAGIC(sv);
-}
-ENDCODE
-                    print OUTFILE "#endif\n" unless ($separateObj == 0);
-                }
-                elsif($name =~ /^Perl_sv_setpvf/) {
-                    print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
-                    $args[0] =~ /(\w+)\W*$/; 
-                    $arg0 = $1;
-                    $args[1] =~ /(\w+)\W*$/; 
-                    $arg1 = $1;
-                    print OUTFILE <<ENDCODE;
-
-#undef $name
-extern "C" $type $funcName ($args)
-{
-    va_list args;
-    va_start(args, $arg1);
-    pPerl->Perl_sv_vsetpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
-    va_end(args);
-}
-ENDCODE
-                    print OUTFILE "#endif\n" unless ($separateObj == 0);
-                }
-                elsif($name =~ /^Perl_sv_setpvf_mg/) {
-                    print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
-                    $args[0] =~ /(\w+)\W*$/; 
-                    $arg0 = $1;
-                    $args[1] =~ /(\w+)\W*$/; 
-                    $arg1 = $1;
-                    print OUTFILE <<ENDCODE;
-
-#undef $name
-#ifndef mg_set
-#define mg_set pPerl->Perl_mg_set
-#endif
-extern "C" $type $funcName ($args)
-{
-    va_list args;
-    va_start(args, $arg1);
-    pPerl->Perl_sv_vsetpvfn($arg0, $arg1, strlen($arg1), &args, NULL, 0, NULL);
-    va_end(args);
-    SvSETMAGIC(sv);
-}
-ENDCODE
-                    print OUTFILE "#endif\n" unless ($separateObj == 0);
-                }
-                elsif($name eq "fprintf") {
-                    print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
-                    $args[0] =~ /(\w+)\W*$/; 
-                    $arg0 = $1;
-                    $args[1] =~ /(\w+)\W*$/; 
-                    $arg1 = $1;
-                    print OUTFILE <<ENDCODE;
-
-#undef $name
-extern "C" $type $name ($args)
-{
-    int nRet;
-    va_list args;
-    va_start(args, $arg1);
-    nRet = PerlIO_vprintf($arg0, $arg1, args);
-    va_end(args);
-    return nRet;
-}
-ENDCODE
-                    print OUTFILE "#endif\n" unless ($separateObj == 0);
-                } else {
-                    print "Warning: can't handle varargs function '$name'\n";
-                }
-                next;
-            }
-
-           # newXS special case
-           if ($name eq "Perl_newXS") {
-               next;
-           }
-            
-            print OUTFILE "\n#ifdef $name" . "defined" unless ($separateObj == 0);
-
-           # handle specical case for save_destructor
-           if ($name eq "Perl_save_destructor") {
-               next;
-           }
-           # handle specical case for sighandler
-           if ($name eq "Perl_sighandler") {
-               next;
-           }
-           # handle special case for sv_grow
-           if ($name eq "Perl_sv_grow" and $args eq "SV* sv, unsigned long newlen") {
-               next;
-           }
-           # handle special case for newSV
-           if ($name eq "Perl_newSV" and $args eq "I32 x, STRLEN len") {
-               next;
-           }
-           # handle special case for perl_parse
-           if ($name eq "perl_parse") {
-               print OUTFILE <<ENDCODE;
-
-#undef $name
-extern "C" $type $name ($args)
-{
-    return pPerl->perl_parse(xsinit, argc, argv, env);
-}
-ENDCODE
-                print OUTFILE "#endif\n" unless ($separateObj == 0);
-               next;
-           }
-           # handle special case for perl_atexit
-           if ($name eq "Perl_call_atexit") {
-               print OUTFILE <<ENDCODE;
-
-#undef $name
-extern "C" $type $name ($args)
-{
-    pPerl->perl_call_atexit(fn, ptr);
-}
-ENDCODE
-                print OUTFILE "#endif\n" unless ($separateObj == 0);
-               next;
-           }
-
-
-           if($name eq "Perl_byterun" and $args eq "struct bytestream bs") {
-               next;
-           }
-
-            # foo(void);
-            if ($args eq "void") {
-                print OUTFILE <<ENDCODE;
-
-#undef $name
-extern "C" $type $funcName ()
-{
-$return pPerl->$funcName();
-}
-
-ENDCODE
-                print OUTFILE "#endif\n" unless ($separateObj == 0);
-                next;
-            }
-
-            # foo(char *s, const int bar);
-            print OUTFILE <<ENDCODE;
-
-#undef $name
-extern "C" $type $funcName ($args)
-{
-ENDCODE
-           print OUTFILE "$return pPerl->$funcName";
-            $doneone = 0;
-            foreach $arg (@args) {
-                if ($arg =~ /(\w+)\W*$/) {
-                    if ($doneone) {
-                        print OUTFILE ", $1";
-                    }
-                    else {
-                        print OUTFILE "($1";
-                        $doneone++;
-                    }
-                }
-            }
-            print OUTFILE ");\n}\n";
-            print OUTFILE "#endif\n" unless ($separateObj == 0);
-        }
-        else {
-            print "failed to match $_";
-        }
-    }
-}
-
-close INFILE;
-
-%skip_list = ();
-
-skip_these [qw(
-strchop
-filemode
-lastfd
-oldname
-curinterp
-Argv
-Cmd
-sortcop
-sortstash
-firstgv
-secondgv
-sortstack
-signalstack
-mystrk
-oldlastpm
-gensym
-preambled
-preambleav
-Ilaststatval
-Ilaststype
-mess_sv
-ors
-opsave
-eval_mutex
-strtab_mutex
-orslen
-ofmt
-modcount
-generation
-DBcv
-archpat_auto
-sortcxix
-lastgotoprobe
-regdummy
-regcomp_parse
-regxend
-regcode
-regnaughty
-regsawback
-regprecomp
-regnpar
-regsize
-regflags
-regseen
-seen_zerolen
-regcomp_rx
-extralen
-colorset
-colors
-reginput
-regbol
-regeol
-regstartp
-regendp
-reglastparen
-regtill
-regprev
-reg_start_tmp
-reg_start_tmpl
-regdata
-bostr
-reg_flags
-reg_eval_set
-regnarrate
-regprogram
-regindent
-regcc
-in_clean_objs
-in_clean_all
-linestart
-pending_ident
-statusvalue_vms
-sublex_info
-thrsv
-threadnum
-PL_Mem
-PL_Env
-PL_StdIO
-PL_LIO
-PL_Dir
-PL_Sock
-PL_Proc
-cshname
-threadsv_names
-thread
-nthreads
-thr_key
-threads_mutex
-malloc_mutex
-svref_mutex
-sv_mutex
-cred_mutex
-nthreads_cond
-eval_cond
-cryptseen
-cshlen
-watchaddr
-watchok
-)];
-
-sub readvars(\%$$) {
-    my ($syms, $file, $pre) = @_;
-    %$syms = ();
-    local (*FILE, $_);
-    open(FILE, "< $file")
-       or die "$0: Can't open $file: $!\n";
-    while (<FILE>) {
-       s/[ \t]*#.*//;          # Delete comments.
-       if (/PERLVARA?I?C?\($pre(\w+),\s*([^,)]+)/) {
-           $$syms{$1} = $2;
-       }
-    }
-    close(FILE);
-}
-
-my %intrp;
-my %thread;
-my %globvar;
-
-readvars %intrp,  '..\intrpvar.h','I';
-readvars %thread, '..\thrdvar.h','T';
-readvars %globvar, '..\perlvars.h','G';
-
-open(HDRFILE, ">$hdrfile") or die "$0: Can't open $hdrfile: $!\n";
-print HDRFILE <<ENDCODE;
-void SetCPerlObj(void* pP);
-void boot_CAPI_handler(CV *cv, void (*subaddr)(CV *c), void *pP);
-CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename);
-
-ENDCODE
-
-sub DoVariable($$) {
-    my $name = shift;
-    my $type = shift;
-
-    return if (defined $skip_list{$name});
-    return if ($type eq 'struct perl_thread *');
-
-    print OUTFILE "\n#ifdef $name" . "_defined" unless ($separateObj == 0);
-    print OUTFILE <<ENDCODE;
-#undef PL_$name
-extern "C" $type * _PL_$name ()
-{
-    return (($type *)&pPerl->PL_$name);
-}
-
-ENDCODE
-
-    print OUTFILE "#endif\n" unless ($separateObj == 0);
-
-    print HDRFILE <<ENDCODE;
-
-#undef PL_$name
-$type * _PL_$name ();
-#define PL_$name (*_PL_$name())
-
-ENDCODE
-
-}
-
-foreach $key (keys %intrp) {
-    DoVariable ($key, $intrp{$key});
-}
-
-foreach $key (keys %thread) {
-    DoVariable ($key, $thread{$key});
-}
-
-foreach $key (keys %globvar) {
-    DoVariable ($key, $globvar{$key});
-}
-
-print OUTFILE <<EOCODE;
-
-
-extern "C" {
-
-
-char **        _Perl_op_desc(void)
-{
-    return pPerl->Perl_get_op_descs();
-}
-
-char **        _Perl_op_name(void)
-{
-    return pPerl->Perl_get_op_names();
-}
-
-char * _Perl_no_modify(void)
-{
-    return pPerl->Perl_get_no_modify();
-}
-
-U32 *  _Perl_opargs(void)
-{
-    return pPerl->Perl_get_opargs();
-}
-
-void boot_CAPI_handler(CV *cv, void (*subaddr)(CV *c), void *pP)
-{
-#ifndef NO_XSLOCKS
-    XSLock localLock((CPerlObj*)pP);
-#endif
-    subaddr(cv);
-}
-
-void xs_handler(CPerlObj* p, CV* cv)
-{
-    void(*func)(CV*);
-    SV* sv;
-    MAGIC* m = pPerl->Perl_mg_find((SV*)cv, '~');
-    if(m != NULL)
-    {
-       sv = m->mg_obj;
-       if(SvIOK(sv))
-       {
-           func = (void(*)(CV*))SvIVX(sv);
-       }
-       else
-       {
-           func = (void(*)(CV*))pPerl->Perl_sv_2iv(sv);
-       }
-       func(cv);
-    }
-}
-
-#undef Perl_newXS
-CV* Perl_newXS(char* name, void (*subaddr)(CV* cv), char* filename)
-{
-    CV* cv = pPerl->Perl_newXS(name, xs_handler, filename);
-    pPerl->Perl_sv_magic((SV*)cv, pPerl->Perl_sv_2mortal(pPerl->Perl_newSViv((IV)subaddr)), '~', "CAPI", 4);
-    return cv;
-}
-
-#undef Perl_deb
-void Perl_deb(const char pat, ...)
-{
-}
-
-#undef PL_Mem
-#undef PL_Env
-#undef PL_StdIO
-#undef PL_LIO
-#undef PL_Dir
-#undef PL_Sock
-#undef PL_Proc
-
-int *        _win32_errno(void)
-{
-    return &pPerl->ErrorNo();
-}
-
-FILE*        _win32_stdin(void)
-{
-    return (FILE*)pPerl->PL_StdIO->Stdin();
-}
-
-FILE*        _win32_stdout(void)
-{
-    return (FILE*)pPerl->PL_StdIO->Stdout();
-}
-
-FILE*        _win32_stderr(void)
-{
-    return (FILE*)pPerl->PL_StdIO->Stderr();
-}
-
-int          _win32_ferror(FILE *fp)
-{
-    return pPerl->PL_StdIO->Error((PerlIO*)fp, ErrorNo());
-}
-
-int          _win32_feof(FILE *fp)
-{
-    return pPerl->PL_StdIO->Eof((PerlIO*)fp, ErrorNo());
-}
-
-char*       _win32_strerror(int e)
-{
-    return strerror(e);
-}
-
-void        _win32_perror(const char *str)
-{
-    perror(str);
-}
-
-int          _win32_vfprintf(FILE *pf, const char *format, va_list arg)
-{
-    return pPerl->PL_StdIO->Vprintf((PerlIO*)pf, ErrorNo(), format, arg);
-}
-
-int          _win32_vprintf(const char *format, va_list arg)
-{
-    return pPerl->PL_StdIO->Vprintf(pPerl->PL_StdIO->Stdout(), ErrorNo(), format, arg);
-}
-
-int          _win32_fprintf(FILE *pf, const char *format, ...)
-{
-    int ret;
-    va_list args;
-    va_start(args, format);
-    ret = _win32_vfprintf(pf, format, args);
-    va_end(args);
-    return ret;
-}
-
-int          _win32_printf(const char *format, ...)
-{
-    int ret;
-    va_list args;
-    va_start(args, format);
-    ret = _win32_vprintf(format, args);
-    va_end(args);
-    return ret;
-}
-
-size_t       _win32_fread(void *buf, size_t size, size_t count, FILE *pf)
-{
-    return pPerl->PL_StdIO->Read((PerlIO*)pf, buf, (size*count), ErrorNo());
-}
-
-size_t       _win32_fwrite(const void *buf, size_t size, size_t count, FILE *pf)
-{
-    return pPerl->PL_StdIO->Write((PerlIO*)pf, buf, (size*count), ErrorNo());
-}
-
-FILE*        _win32_fopen(const char *path, const char *mode)
-{
-    return (FILE*)pPerl->PL_StdIO->Open(path, mode, ErrorNo());
-}
-
-FILE*        _win32_fdopen(int fh, const char *mode)
-{
-    return (FILE*)pPerl->PL_StdIO->Fdopen(fh, mode, ErrorNo());
-}
-
-FILE*        _win32_freopen(const char *path, const char *mode, FILE *pf)
-{
-    return (FILE*)pPerl->PL_StdIO->Reopen(path, mode, (PerlIO*)pf, ErrorNo());
-}
-
-int          _win32_fclose(FILE *pf)
-{
-    return pPerl->PL_StdIO->Close((PerlIO*)pf, ErrorNo());
-}
-
-int          _win32_fputs(const char *s,FILE *pf)
-{
-    return pPerl->PL_StdIO->Puts((PerlIO*)pf, s, ErrorNo());
-}
-
-int          _win32_fputc(int c,FILE *pf)
-{
-    return pPerl->PL_StdIO->Putc((PerlIO*)pf, c, ErrorNo());
-}
-
-int          _win32_ungetc(int c,FILE *pf)
-{
-    return pPerl->PL_StdIO->Ungetc((PerlIO*)pf, c, ErrorNo());
-}
-
-int          _win32_getc(FILE *pf)
-{
-    return pPerl->PL_StdIO->Getc((PerlIO*)pf, ErrorNo());
-}
-
-int          _win32_fileno(FILE *pf)
-{
-    return pPerl->PL_StdIO->Fileno((PerlIO*)pf, ErrorNo());
-}
-
-void         _win32_clearerr(FILE *pf)
-{
-    pPerl->PL_StdIO->Clearerr((PerlIO*)pf, ErrorNo());
-}
-
-int          _win32_fflush(FILE *pf)
-{
-    return pPerl->PL_StdIO->Flush((PerlIO*)pf, ErrorNo());
-}
-
-long         _win32_ftell(FILE *pf)
-{
-    return pPerl->PL_StdIO->Tell((PerlIO*)pf, ErrorNo());
-}
-
-int          _win32_fseek(FILE *pf,long offset,int origin)
-{
-    return pPerl->PL_StdIO->Seek((PerlIO*)pf, offset, origin, ErrorNo());
-}
-
-int          _win32_fgetpos(FILE *pf,fpos_t *p)
-{
-    return pPerl->PL_StdIO->Getpos((PerlIO*)pf, p, ErrorNo());
-}
-
-int          _win32_fsetpos(FILE *pf,const fpos_t *p)
-{
-    return pPerl->PL_StdIO->Setpos((PerlIO*)pf, p, ErrorNo());
-}
-
-void         _win32_rewind(FILE *pf)
-{
-    pPerl->PL_StdIO->Rewind((PerlIO*)pf, ErrorNo());
-}
-
-FILE*        _win32_tmpfile(void)
-{
-    return (FILE*)pPerl->PL_StdIO->Tmpfile(ErrorNo());
-}
-
-void         _win32_setbuf(FILE *pf, char *buf)
-{
-    pPerl->PL_StdIO->SetBuf((PerlIO*)pf, buf, ErrorNo());
-}
-
-int          _win32_setvbuf(FILE *pf, char *buf, int type, size_t size)
-{
-    return pPerl->PL_StdIO->SetVBuf((PerlIO*)pf, buf, type, size, ErrorNo());
-}
-
-char*          _win32_fgets(char *s, int n, FILE *pf)
-{
-    return pPerl->PL_StdIO->Gets((PerlIO*)pf, s, n, ErrorNo());
-}
-
-char*          _win32_gets(char *s)
-{
-    return _win32_fgets(s, 80, (FILE*)pPerl->PL_StdIO->Stdin());
-}
-
-int          _win32_fgetc(FILE *pf)
-{
-    return pPerl->PL_StdIO->Getc((PerlIO*)pf, ErrorNo());
-}
-
-int          _win32_putc(int c, FILE *pf)
-{
-    return pPerl->PL_StdIO->Putc((PerlIO*)pf, c, ErrorNo());
-}
-
-int          _win32_puts(const char *s)
-{
-    return pPerl->PL_StdIO->Puts(pPerl->PL_StdIO->Stdout(), s, ErrorNo());
-}
-
-int          _win32_getchar(void)
-{
-    return pPerl->PL_StdIO->Getc(pPerl->PL_StdIO->Stdin(), ErrorNo());
-}
-
-int          _win32_putchar(int c)
-{
-    return pPerl->PL_StdIO->Putc(pPerl->PL_StdIO->Stdout(), c, ErrorNo());
-}
-
-void*        _win32_malloc(size_t size)
-{
-    return pPerl->PL_Mem->Malloc(size);
-}
-
-void*        _win32_calloc(size_t numitems, size_t size)
-{
-    return pPerl->PL_Mem->Malloc(numitems*size);
-}
-
-void*        _win32_realloc(void *block, size_t size)
-{
-    return pPerl->PL_Mem->Realloc(block, size);
-}
-
-void         _win32_free(void *block)
-{
-    pPerl->PL_Mem->Free(block);
-}
-
-void         _win32_abort(void)
-{
-    pPerl->PL_Proc->Abort();
-}
-
-int          _win32_pipe(int *phandles, unsigned int psize, int textmode)
-{
-    return pPerl->PL_Proc->Pipe(phandles);
-}
-
-FILE*        _win32_popen(const char *command, const char *mode)
-{
-    return (FILE*)pPerl->PL_Proc->Popen(command, mode);
-}
-
-int          _win32_pclose(FILE *pf)
-{
-    return pPerl->PL_Proc->Pclose((PerlIO*)pf);
-}
-
-unsigned     _win32_sleep(unsigned int t)
-{
-    return pPerl->PL_Proc->Sleep(t);
-}
-
-int    _win32_spawnvp(int mode, const char *cmdname, const char *const *argv)
-{
-    return pPerl->PL_Proc->Spawnvp(mode, cmdname, argv);
-}
-
-int          _win32_mkdir(const char *dir, int mode)
-{
-    return pPerl->PL_Dir->Makedir(dir, mode, ErrorNo());
-}
-
-int          _win32_rmdir(const char *dir)
-{
-    return pPerl->PL_Dir->Rmdir(dir, ErrorNo());
-}
-
-int          _win32_chdir(const char *dir)
-{
-    return pPerl->PL_Dir->Chdir(dir, ErrorNo());
-}
-
-#undef stat
-int          _win32_fstat(int fd,struct stat *sbufptr)
-{
-    return pPerl->PL_LIO->FileStat(fd, sbufptr, ErrorNo());
-}
-
-int          _win32_stat(const char *name,struct stat *sbufptr)
-{
-    return pPerl->PL_LIO->NameStat(name, sbufptr, ErrorNo());
-}
-
-int          _win32_rename(const char *oname, const char *newname)
-{
-    return pPerl->PL_LIO->Rename(oname, newname, ErrorNo());
-}
-
-int          _win32_setmode(int fd, int mode)
-{
-    return pPerl->PL_LIO->Setmode(fd, mode, ErrorNo());
-}
-
-long         _win32_lseek(int fd, long offset, int origin)
-{
-    return pPerl->PL_LIO->Lseek(fd, offset, origin, ErrorNo());
-}
-
-long         _win32_tell(int fd)
-{
-    return pPerl->PL_StdIO->Tell((PerlIO*)fd, ErrorNo());
-}
-
-int          _win32_dup(int fd)
-{
-    return pPerl->PL_LIO->Dup(fd, ErrorNo());
-}
-
-int          _win32_dup2(int h1, int h2)
-{
-    return pPerl->PL_LIO->Dup2(h1, h2, ErrorNo());
-}
-
-int          _win32_open(const char *path, int oflag,...)
-{
-    return pPerl->PL_LIO->Open(path, oflag, ErrorNo());
-}
-
-int          _win32_close(int fd)
-{
-    return pPerl->PL_LIO->Close(fd, ErrorNo());
-}
-
-int          _win32_read(int fd, void *buf, unsigned int cnt)
-{
-    return pPerl->PL_LIO->Read(fd, buf, cnt, ErrorNo());
-}
-
-int          _win32_write(int fd, const void *buf, unsigned int cnt)
-{
-    return pPerl->PL_LIO->Write(fd, buf, cnt, ErrorNo());
-}
-
-int          _win32_times(struct tms *timebuf)
-{
-    return pPerl->PL_Proc->Times(timebuf);
-}
-
-int          _win32_ioctl(int i, unsigned int u, char *data)
-{
-    return pPerl->PL_LIO->IOCtl(i, u, data, ErrorNo());
-}
-
-int          _win32_utime(const char *f, struct utimbuf *t)
-{
-    return pPerl->PL_LIO->Utime((char*)f, t, ErrorNo());
-}
-
-int          _win32_uname(struct utsname *name)
-{
-    return pPerl->PL_Env->Uname(name, ErrorNo());
-}
-
-unsigned long _win32_os_id(void)
-{
-    return pPerl->PL_Env->OsID();
-}
-
-char*   _win32_getenv(const char *name)
-{
-    return pPerl->PL_Env->Getenv(name, ErrorNo());
-}
-
-int   _win32_putenv(const char *name)
-{
-    return pPerl->PL_Env->Putenv(name, ErrorNo());
-}
-
-int          _win32_open_osfhandle(long handle, int flags)
-{
-    return pPerl->PL_StdIO->OpenOSfhandle(handle, flags);
-}
-
-long         _win32_get_osfhandle(int fd)
-{
-    return pPerl->PL_StdIO->GetOSfhandle(fd);
-}
-
-u_long _win32_htonl (u_long hostlong)
-{
-    return pPerl->PL_Sock->Htonl(hostlong);
-}
-
-u_short _win32_htons (u_short hostshort)
-{
-    return pPerl->PL_Sock->Htons(hostshort);
-}
-
-u_long _win32_ntohl (u_long netlong)
-{
-    return pPerl->PL_Sock->Ntohl(netlong);
-}
-
-u_short _win32_ntohs (u_short netshort)
-{
-    return pPerl->PL_Sock->Ntohs(netshort);
-}
-
-unsigned long _win32_inet_addr (const char * cp)
-{
-    return pPerl->PL_Sock->InetAddr(cp, ErrorNo());
-}
-
-char * _win32_inet_ntoa (struct in_addr in)
-{
-    return pPerl->PL_Sock->InetNtoa(in, ErrorNo());
-}
-
-SOCKET _win32_socket (int af, int type, int protocol)
-{
-    return pPerl->PL_Sock->Socket(af, type, protocol, ErrorNo());
-}
-
-int _win32_bind (SOCKET s, const struct sockaddr *addr, int namelen)
-{
-    return pPerl->PL_Sock->Bind(s, addr, namelen, ErrorNo());
-}
-
-int _win32_listen (SOCKET s, int backlog)
-{
-    return pPerl->PL_Sock->Listen(s, backlog, ErrorNo());
-}
-
-SOCKET _win32_accept (SOCKET s, struct sockaddr *addr, int *addrlen)
-{
-    return pPerl->PL_Sock->Accept(s, addr, addrlen, ErrorNo());
-}
-
-int _win32_connect (SOCKET s, const struct sockaddr *name, int namelen)
-{
-    return pPerl->PL_Sock->Connect(s, name, namelen, ErrorNo());
-}
-
-int _win32_send (SOCKET s, const char * buf, int len, int flags)
-{
-    return pPerl->PL_Sock->Send(s, buf, len, flags, ErrorNo());
-}
-
-int _win32_sendto (SOCKET s, const char * buf, int len, int flags,
-                       const struct sockaddr *to, int tolen)
-{
-    return pPerl->PL_Sock->Sendto(s, buf, len, flags, to, tolen, ErrorNo());
-}
-
-int _win32_recv (SOCKET s, char * buf, int len, int flags)
-{
-    return pPerl->PL_Sock->Recv(s, buf, len, flags, ErrorNo());
-}
-
-int _win32_recvfrom (SOCKET s, char * buf, int len, int flags,
-                         struct sockaddr *from, int * fromlen)
-{
-    return pPerl->PL_Sock->Recvfrom(s, buf, len, flags, from, fromlen, ErrorNo());
-}
-
-int _win32_shutdown (SOCKET s, int how)
-{
-    return pPerl->PL_Sock->Shutdown(s, how, ErrorNo());
-}
-
-int _win32_closesocket (SOCKET s)
-{
-    return pPerl->PL_Sock->Closesocket(s, ErrorNo());
-}
-
-int _win32_ioctlsocket (SOCKET s, long cmd, u_long *argp)
-{
-    return pPerl->PL_Sock->Ioctlsocket(s, cmd, argp, ErrorNo());
-}
-
-int _win32_setsockopt (SOCKET s, int level, int optname,
-                           const char * optval, int optlen)
-{
-    return pPerl->PL_Sock->Setsockopt(s, level, optname, optval, optlen, ErrorNo());
-}
-
-int _win32_getsockopt (SOCKET s, int level, int optname, char * optval, int *optlen)
-{
-    return pPerl->PL_Sock->Getsockopt(s, level, optname, optval, optlen, ErrorNo());
-}
-
-int _win32_getpeername (SOCKET s, struct sockaddr *name, int * namelen)
-{
-    return pPerl->PL_Sock->Getpeername(s, name, namelen, ErrorNo());
-}
-
-int _win32_getsockname (SOCKET s, struct sockaddr *name, int * namelen)
-{
-    return pPerl->PL_Sock->Getsockname(s, name, namelen, ErrorNo());
-}
-
-int _win32_gethostname (char * name, int namelen)
-{
-    return pPerl->PL_Sock->Gethostname(name, namelen, ErrorNo());
-}
-
-struct hostent * _win32_gethostbyname(const char * name)
-{
-    return pPerl->PL_Sock->Gethostbyname(name, ErrorNo());
-}
-
-struct hostent * _win32_gethostbyaddr(const char * addr, int len, int type)
-{
-    return pPerl->PL_Sock->Gethostbyaddr(addr, len, type, ErrorNo());
-}
-
-struct protoent * _win32_getprotobyname(const char * name)
-{
-    return pPerl->PL_Sock->Getprotobyname(name, ErrorNo());
-}
-
-struct protoent * _win32_getprotobynumber(int proto)
-{
-    return pPerl->PL_Sock->Getprotobynumber(proto, ErrorNo());
-}
-
-struct servent * _win32_getservbyname(const char * name, const char * proto)
-{
-    return pPerl->PL_Sock->Getservbyname(name, proto, ErrorNo());
-}
-
-struct servent * _win32_getservbyport(int port, const char * proto)
-{
-    return pPerl->PL_Sock->Getservbyport(port, proto, ErrorNo());
-}
-
-int _win32_select (int nfds, Perl_fd_set *rfds, Perl_fd_set *wfds, Perl_fd_set *xfds,
-                 const struct timeval *timeout)
-{
-    return pPerl->PL_Sock->Select(nfds, (char*)rfds, (char*)wfds, (char*)xfds, timeout, ErrorNo());
-}
-
-void _win32_endnetent(void)
-{
-    pPerl->PL_Sock->Endnetent(ErrorNo());
-}
-
-void _win32_endhostent(void)
-{
-    pPerl->PL_Sock->Endhostent(ErrorNo());
-}
-
-void _win32_endprotoent(void)
-{
-    pPerl->PL_Sock->Endprotoent(ErrorNo());
-}
-
-void _win32_endservent(void)
-{
-    pPerl->PL_Sock->Endservent(ErrorNo());
-}
-
-struct netent * _win32_getnetent(void)
-{
-    return pPerl->PL_Sock->Getnetent(ErrorNo());
-}
-
-struct netent * _win32_getnetbyname(char *name)
-{
-    return pPerl->PL_Sock->Getnetbyname(name, ErrorNo());
-}
-
-struct netent * _win32_getnetbyaddr(long net, int type)
-{
-    return pPerl->PL_Sock->Getnetbyaddr(net, type, ErrorNo());
-}
-
-struct protoent *_win32_getprotoent(void)
-{
-    return pPerl->PL_Sock->Getprotoent(ErrorNo());
-}
-
-struct servent *_win32_getservent(void)
-{
-    return pPerl->PL_Sock->Getservent(ErrorNo());
-}
-
-void _win32_sethostent(int stayopen)
-{
-    pPerl->PL_Sock->Sethostent(stayopen, ErrorNo());
-}
-
-void _win32_setnetent(int stayopen)
-{
-    pPerl->PL_Sock->Setnetent(stayopen, ErrorNo());
-}
-
-void _win32_setprotoent(int stayopen)
-{
-    pPerl->PL_Sock->Setprotoent(stayopen, ErrorNo());
-}
-
-void _win32_setservent(int stayopen)
-{
-    pPerl->PL_Sock->Setservent(stayopen, ErrorNo());
-}
-} /* extern "C" */
-EOCODE
-
-
-print HDRFILE <<EOCODE;
-#undef Perl_op_desc
-char ** _Perl_op_desc ();
-#define Perl_op_desc (_Perl_op_desc())
-
-#undef Perl_op_name
-char ** _Perl_op_name ();
-#define Perl_op_name (_Perl_op_name())
-
-#undef Perl_no_modify
-char * _Perl_no_modify ();
-#define Perl_no_modify (_Perl_no_modify())
-
-#undef Perl_opargs
-U32 * _Perl_opargs ();
-#define Perl_opargs (_Perl_opargs())
-
-
-#undef win32_errno
-#undef win32_stdin
-#undef win32_stdout
-#undef win32_stderr
-#undef win32_ferror
-#undef win32_feof
-#undef win32_fprintf
-#undef win32_printf
-#undef win32_vfprintf
-#undef win32_vprintf
-#undef win32_fread
-#undef win32_fwrite
-#undef win32_fopen
-#undef win32_fdopen
-#undef win32_freopen
-#undef win32_fclose
-#undef win32_fputs
-#undef win32_fputc
-#undef win32_ungetc
-#undef win32_getc
-#undef win32_fileno
-#undef win32_clearerr
-#undef win32_fflush
-#undef win32_ftell
-#undef win32_fseek
-#undef win32_fgetpos
-#undef win32_fsetpos
-#undef win32_rewind
-#undef win32_tmpfile
-#undef win32_abort
-#undef win32_fstat
-#undef win32_stat
-#undef win32_pipe
-#undef win32_popen
-#undef win32_pclose
-#undef win32_rename
-#undef win32_setmode
-#undef win32_lseek
-#undef win32_tell
-#undef win32_dup
-#undef win32_dup2
-#undef win32_open
-#undef win32_close
-#undef win32_eof
-#undef win32_read
-#undef win32_write
-#undef win32_mkdir
-#undef win32_rmdir
-#undef win32_chdir
-#undef win32_setbuf
-#undef win32_setvbuf
-#undef win32_fgetc
-#undef win32_fgets
-#undef win32_gets
-#undef win32_putc
-#undef win32_puts
-#undef win32_getchar
-#undef win32_putchar
-#undef win32_malloc
-#undef win32_calloc
-#undef win32_realloc
-#undef win32_free
-#undef win32_sleep
-#undef win32_times
-#undef win32_stat
-#undef win32_ioctl
-#undef win32_utime
-#undef win32_uname
-#undef win32_os_id
-#undef win32_getenv
-
-#undef win32_htonl
-#undef win32_htons
-#undef win32_ntohl
-#undef win32_ntohs
-#undef win32_inet_addr
-#undef win32_inet_ntoa
-
-#undef win32_socket
-#undef win32_bind
-#undef win32_listen
-#undef win32_accept
-#undef win32_connect
-#undef win32_send
-#undef win32_sendto
-#undef win32_recv
-#undef win32_recvfrom
-#undef win32_shutdown
-#undef win32_closesocket
-#undef win32_ioctlsocket
-#undef win32_setsockopt
-#undef win32_getsockopt
-#undef win32_getpeername
-#undef win32_getsockname
-#undef win32_gethostname
-#undef win32_gethostbyname
-#undef win32_gethostbyaddr
-#undef win32_getprotobyname
-#undef win32_getprotobynumber
-#undef win32_getservbyname
-#undef win32_getservbyport
-#undef win32_select
-#undef win32_endhostent
-#undef win32_endnetent
-#undef win32_endprotoent
-#undef win32_endservent
-#undef win32_getnetent
-#undef win32_getnetbyname
-#undef win32_getnetbyaddr
-#undef win32_getprotoent
-#undef win32_getservent
-#undef win32_sethostent
-#undef win32_setnetent
-#undef win32_setprotoent
-#undef win32_setservent
-
-#define win32_errno    _win32_errno
-#define win32_stdin    _win32_stdin
-#define win32_stdout   _win32_stdout
-#define win32_stderr   _win32_stderr
-#define win32_ferror   _win32_ferror
-#define win32_feof     _win32_feof
-#define win32_strerror _win32_strerror
-#define win32_perror   _win32_perror
-#define win32_fprintf  _win32_fprintf
-#define win32_printf   _win32_printf
-#define win32_vfprintf _win32_vfprintf
-#define win32_vprintf  _win32_vprintf
-#define win32_fread    _win32_fread
-#define win32_fwrite   _win32_fwrite
-#define win32_fopen    _win32_fopen
-#define win32_fdopen   _win32_fdopen
-#define win32_freopen  _win32_freopen
-#define win32_fclose   _win32_fclose
-#define win32_fputs    _win32_fputs
-#define win32_fputc    _win32_fputc
-#define win32_ungetc   _win32_ungetc
-#define win32_getc     _win32_getc
-#define win32_fileno   _win32_fileno
-#define win32_clearerr _win32_clearerr
-#define win32_fflush   _win32_fflush
-#define win32_ftell    _win32_ftell
-#define win32_fseek    _win32_fseek
-#define win32_fgetpos  _win32_fgetpos
-#define win32_fsetpos  _win32_fsetpos
-#define win32_rewind   _win32_rewind
-#define win32_tmpfile  _win32_tmpfile
-#define win32_abort    _win32_abort
-#define win32_fstat    _win32_fstat
-#define win32_stat     _win32_stat
-#define win32_pipe     _win32_pipe
-#define win32_popen    _win32_popen
-#define win32_pclose   _win32_pclose
-#define win32_rename   _win32_rename
-#define win32_setmode  _win32_setmode
-#define win32_lseek    _win32_lseek
-#define win32_tell     _win32_tell
-#define win32_dup      _win32_dup
-#define win32_dup2     _win32_dup2
-#define win32_open     _win32_open
-#define win32_close    _win32_close
-#define win32_eof      _win32_eof
-#define win32_read     _win32_read
-#define win32_write    _win32_write
-#define win32_mkdir    _win32_mkdir
-#define win32_rmdir    _win32_rmdir
-#define win32_chdir    _win32_chdir
-#define win32_setbuf   _win32_setbuf
-#define win32_setvbuf  _win32_setvbuf
-#define win32_fgetc    _win32_fgetc
-#define win32_fgets    _win32_fgets
-#define win32_gets     _win32_gets
-#define win32_putc     _win32_putc
-#define win32_puts     _win32_puts
-#define win32_getchar  _win32_getchar
-#define win32_putchar  _win32_putchar
-#define win32_malloc   _win32_malloc
-#define win32_calloc   _win32_calloc
-#define win32_realloc  _win32_realloc
-#define win32_free     _win32_free
-#define win32_sleep    _win32_sleep
-#define win32_spawnvp  _win32_spawnvp
-#define win32_times    _win32_times
-#define win32_stat     _win32_stat
-#define win32_ioctl    _win32_ioctl
-#define win32_utime    _win32_utime
-#define win32_uname    _win32_uname
-#define win32_os_id    _win32_os_id
-#define win32_getenv   _win32_getenv
-#define win32_open_osfhandle _win32_open_osfhandle
-#define win32_get_osfhandle  _win32_get_osfhandle
-
-#define win32_htonl              _win32_htonl
-#define win32_htons              _win32_htons
-#define win32_ntohl              _win32_ntohl
-#define win32_ntohs              _win32_ntohs
-#define win32_inet_addr          _win32_inet_addr
-#define win32_inet_ntoa          _win32_inet_ntoa
-
-#define win32_socket             _win32_socket
-#define win32_bind               _win32_bind
-#define win32_listen             _win32_listen
-#define win32_accept             _win32_accept
-#define win32_connect            _win32_connect
-#define win32_send               _win32_send
-#define win32_sendto             _win32_sendto
-#define win32_recv               _win32_recv
-#define win32_recvfrom           _win32_recvfrom
-#define win32_shutdown           _win32_shutdown
-#define win32_closesocket        _win32_closesocket
-#define win32_ioctlsocket        _win32_ioctlsocket
-#define win32_setsockopt         _win32_setsockopt
-#define win32_getsockopt         _win32_getsockopt
-#define win32_getpeername        _win32_getpeername
-#define win32_getsockname        _win32_getsockname
-#define win32_gethostname        _win32_gethostname
-#define win32_gethostbyname      _win32_gethostbyname
-#define win32_gethostbyaddr      _win32_gethostbyaddr
-#define win32_getprotobyname     _win32_getprotobyname
-#define win32_getprotobynumber   _win32_getprotobynumber
-#define win32_getservbyname      _win32_getservbyname
-#define win32_getservbyport      _win32_getservbyport
-#define win32_select             _win32_select
-#define win32_endhostent         _win32_endhostent
-#define win32_endnetent          _win32_endnetent
-#define win32_endprotoent        _win32_endprotoent
-#define win32_endservent         _win32_endservent
-#define win32_getnetent          _win32_getnetent
-#define win32_getnetbyname       _win32_getnetbyname
-#define win32_getnetbyaddr       _win32_getnetbyaddr
-#define win32_getprotoent        _win32_getprotoent
-#define win32_getservent         _win32_getservent
-#define win32_sethostent         _win32_sethostent
-#define win32_setnetent          _win32_setnetent
-#define win32_setprotoent        _win32_setprotoent
-#define win32_setservent         _win32_setservent
-
-int *  _win32_errno(void);
-FILE*  _win32_stdin(void);
-FILE*  _win32_stdout(void);
-FILE*  _win32_stderr(void);
-int    _win32_ferror(FILE *fp);
-int    _win32_feof(FILE *fp);
-char*  _win32_strerror(int e);
-void    _win32_perror(const char *str);
-int    _win32_fprintf(FILE *pf, const char *format, ...);
-int    _win32_printf(const char *format, ...);
-int    _win32_vfprintf(FILE *pf, const char *format, va_list arg);
-int    _win32_vprintf(const char *format, va_list arg);
-size_t _win32_fread(void *buf, size_t size, size_t count, FILE *pf);
-size_t _win32_fwrite(const void *buf, size_t size, size_t count, FILE *pf);
-FILE*  _win32_fopen(const char *path, const char *mode);
-FILE*  _win32_fdopen(int fh, const char *mode);
-FILE*  _win32_freopen(const char *path, const char *mode, FILE *pf);
-int    _win32_fclose(FILE *pf);
-int    _win32_fputs(const char *s,FILE *pf);
-int    _win32_fputc(int c,FILE *pf);
-int    _win32_ungetc(int c,FILE *pf);
-int    _win32_getc(FILE *pf);
-int    _win32_fileno(FILE *pf);
-void   _win32_clearerr(FILE *pf);
-int    _win32_fflush(FILE *pf);
-long   _win32_ftell(FILE *pf);
-int    _win32_fseek(FILE *pf,long offset,int origin);
-int    _win32_fgetpos(FILE *pf,fpos_t *p);
-int    _win32_fsetpos(FILE *pf,const fpos_t *p);
-void   _win32_rewind(FILE *pf);
-FILE*  _win32_tmpfile(void);
-void   _win32_abort(void);
-int    _win32_fstat(int fd,struct stat *sbufptr);
-int    _win32_stat(const char *name,struct stat *sbufptr);
-int    _win32_pipe( int *phandles, unsigned int psize, int textmode );
-FILE*  _win32_popen( const char *command, const char *mode );
-int    _win32_pclose( FILE *pf);
-int    _win32_rename( const char *oldname, const char *newname);
-int    _win32_setmode( int fd, int mode);
-long   _win32_lseek( int fd, long offset, int origin);
-long   _win32_tell( int fd);
-int    _win32_dup( int fd);
-int    _win32_dup2(int h1, int h2);
-int    _win32_open(const char *path, int oflag,...);
-int    _win32_close(int fd);
-int    _win32_eof(int fd);
-int    _win32_read(int fd, void *buf, unsigned int cnt);
-int    _win32_write(int fd, const void *buf, unsigned int cnt);
-int    _win32_mkdir(const char *dir, int mode);
-int    _win32_rmdir(const char *dir);
-int    _win32_chdir(const char *dir);
-void   _win32_setbuf(FILE *pf, char *buf);
-int    _win32_setvbuf(FILE *pf, char *buf, int type, size_t size);
-char*  _win32_fgets(char *s, int n, FILE *pf);
-char*  _win32_gets(char *s);
-int    _win32_fgetc(FILE *pf);
-int    _win32_putc(int c, FILE *pf);
-int    _win32_puts(const char *s);
-int    _win32_getchar(void);
-int    _win32_putchar(int c);
-void*  _win32_malloc(size_t size);
-void*  _win32_calloc(size_t numitems, size_t size);
-void*  _win32_realloc(void *block, size_t size);
-void   _win32_free(void *block);
-unsigned _win32_sleep(unsigned int);
-int    _win32_spawnvp(int mode, const char *cmdname, const char *const *argv);
-int    _win32_times(struct tms *timebuf);
-int    _win32_stat(const char *path, struct stat *buf);
-int    _win32_ioctl(int i, unsigned int u, char *data);
-int    _win32_utime(const char *f, struct utimbuf *t);
-int    _win32_uname(struct utsname *n);
-unsigned long  _win32_os_id(void);
-char*   _win32_getenv(const char *name);
-int     _win32_open_osfhandle(long handle, int flags);
-long    _win32_get_osfhandle(int fd);
-
-u_long _win32_htonl (u_long hostlong);
-u_short _win32_htons (u_short hostshort);
-u_long _win32_ntohl (u_long netlong);
-u_short _win32_ntohs (u_short netshort);
-unsigned long _win32_inet_addr (const char * cp);
-char * _win32_inet_ntoa (struct in_addr in);
-
-SOCKET _win32_socket (int af, int type, int protocol);
-int _win32_bind (SOCKET s, const struct sockaddr *addr, int namelen);
-int _win32_listen (SOCKET s, int backlog);
-SOCKET _win32_accept (SOCKET s, struct sockaddr *addr, int *addrlen);
-int _win32_connect (SOCKET s, const struct sockaddr *name, int namelen);
-int _win32_send (SOCKET s, const char * buf, int len, int flags);
-int _win32_sendto (SOCKET s, const char * buf, int len, int flags,
-                       const struct sockaddr *to, int tolen);
-int _win32_recv (SOCKET s, char * buf, int len, int flags);
-int _win32_recvfrom (SOCKET s, char * buf, int len, int flags,
-                         struct sockaddr *from, int * fromlen);
-int _win32_shutdown (SOCKET s, int how);
-int _win32_closesocket (SOCKET s);
-int _win32_ioctlsocket (SOCKET s, long cmd, u_long *argp);
-int _win32_setsockopt (SOCKET s, int level, int optname,
-                           const char * optval, int optlen);
-int _win32_getsockopt (SOCKET s, int level, int optname, char * optval, int *optlen);
-int _win32_getpeername (SOCKET s, struct sockaddr *name, int * namelen);
-int _win32_getsockname (SOCKET s, struct sockaddr *name, int * namelen);
-int _win32_gethostname (char * name, int namelen);
-struct hostent * _win32_gethostbyname(const char * name);
-struct hostent * _win32_gethostbyaddr(const char * addr, int len, int type);
-struct protoent * _win32_getprotobyname(const char * name);
-struct protoent * _win32_getprotobynumber(int proto);
-struct servent * _win32_getservbyname(const char * name, const char * proto);
-struct servent * _win32_getservbyport(int port, const char * proto);
-int _win32_select (int nfds, Perl_fd_set *rfds, Perl_fd_set *wfds, Perl_fd_set *xfds,
-                 const struct timeval *timeout);
-void _win32_endnetent(void);
-void _win32_endhostent(void);
-void _win32_endprotoent(void);
-void _win32_endservent(void);
-struct netent * _win32_getnetent(void);
-struct netent * _win32_getnetbyname(char *name);
-struct netent * _win32_getnetbyaddr(long net, int type);
-struct protoent *_win32_getprotoent(void);
-struct servent *_win32_getservent(void);
-void _win32_sethostent(int stayopen);
-void _win32_setnetent(int stayopen);
-void _win32_setprotoent(int stayopen);
-void _win32_setservent(int stayopen);
-
-#pragma warning(once : 4113)
-EOCODE
-
-
-close HDRFILE;
-close OUTFILE;
index 608d37e..3139be6 100644 (file)
@@ -43,16 +43,28 @@ INST_VER    = \5.00557
 INST_ARCH      = \$(ARCHNAME)
 
 #
+# XXX WARNING! This option currently undergoing changes.  May be broken.
+#
 # uncomment to enable threads-capabilities
 #
 #USE_THREADS   = define
 
 #
+# XXX WARNING! This option currently undergoing changes.  May be broken.
+#
 # uncomment to enable multiple interpreters
 #
 #USE_MULTI     = define
 
 #
+# XXX WARNING! This option currently undergoing changes.  May be broken.
+#
+# uncomment next line if you want to use the perl object
+# Currently, this cannot be enabled if you ask for threads above
+#
+#USE_OBJECT    = define
+
+#
 # uncomment one of the following lines if you are using either
 # Visual C++ 2.x or Visual C++ 6.x (aka Visual Studio 98)
 #
@@ -60,14 +72,6 @@ INST_ARCH    = \$(ARCHNAME)
 #CCTYPE                = MSVC60
 
 #
-# XXX Do not enable.  This is currently undergoing a rewrite and will
-# NOT work.
-# uncomment next line if you want to use the perl object
-# Currently, this cannot be enabled if you ask for threads above
-#
-#OBJECT                = -DPERL_OBJECT
-
-#
 # uncomment next line if you want debug version of perl (big,slow)
 #
 #CFG           = Debug
@@ -75,7 +79,7 @@ INST_ARCH     = \$(ARCHNAME)
 #
 # uncomment to enable use of PerlCRT.DLL when using the Visual C compiler.
 # Highly recommended.  It has patches that fix known bugs in MSVCRT.DLL.
-# This currently requires VC 5.0 with Service Pack 3.
+# This currently requires VC 5.0 with Service Pack 3 or later.
 # Get it from CPAN at http://www.perl.com/CPAN/authors/id/D/DO/DOUGL/
 # and follow the directions in the package to install.
 #
@@ -109,7 +113,7 @@ INST_ARCH   = \$(ARCHNAME)
 # WARNING: Turning this on/off WILL break binary compatibility with extensions
 # you may have compiled with/without it.  Be prepared to recompile all
 # extensions if you change the default.  Currently, this cannot be enabled
-# if you ask for PERL_OBJECT above.
+# if you ask for USE_OBJECT above.
 #
 #PERL_MALLOC   = define
 
@@ -134,8 +138,10 @@ CCLIBDIR   = $(CCHOME)\lib
 # We don't enable this by default because we want the modules to get fixed
 # instead of clinging to shortcuts like this one.
 #
-#BUILDOPT      = -DPERL_POLLUTE
-#BUILDOPT      = -DPERL_IMPLICIT_CONTEXT
+# Don't enable -DPERL_IMPLICIT_CONTEXT if you don't know what it is. :-)
+#
+#BUILDOPT      = $(BUILDOPT) -DPERL_POLLUTE
+#BUILDOPT      = $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT
 
 #
 # specify semicolon-separated list of extra directories that modules will
@@ -162,7 +168,7 @@ D_CRYPT             = define
 CRYPT_FLAG     = -DHAVE_DES_FCRYPT
 !ENDIF
 
-!IF "$(OBJECT)" != ""
+!IF "$(USE_OBJECT)" == "define"
 PERL_MALLOC    = undef
 USE_THREADS    = undef
 USE_MULTI      = undef
@@ -184,15 +190,19 @@ USE_MULTI = undef
 PROCESSOR_ARCHITECTURE = x86
 !ENDIF
 
-!IF "$(OBJECT)" != ""
+!IF "$(USE_OBJECT)" == "define"
 ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-object
 !ELSE
 !IF "$(USE_THREADS)" == "define"
 ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-thread
 !ELSE
+!IF "$(USE_MULTI)" == "define"
+ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-multi
+!ELSE
 ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)
 !ENDIF
 !ENDIF
+!ENDIF
 
 # Visual Studio 98 specific
 !IF "$(CCTYPE)" == "MSVC60"
@@ -226,7 +236,7 @@ LIB32               = $(LINK32) -lib
 RUNTIME                = -MD
 INCLUDES       = -I$(COREDIR) -I.\include -I. -I..
 #PCHFLAGS      = -Fpc:\temp\vcmoduls.pch -YX 
-DEFINES                = -DWIN32 -D_CONSOLE -DNO_STRICT $(BUILDOPT) $(CRYPT_FLAG)
+DEFINES                = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG)
 LOCDEFS                = -DPERLDLL -DPERL_CORE
 SUBSYS         = console
 CXX_FLAG       = -TP -GX
@@ -260,15 +270,18 @@ OPTIMIZE  = -Od $(RUNTIME)d -Zi -D_DEBUG -DDEBUGGING
 LINK_DBG       = -debug -pdb:none
 !ELSE
 !  IF  "$(CFG)" == "Optimize"
-OPTIMIZE       = -O2 $(RUNTIME) -DNDEBUG
+# -O1 yields smaller code, which turns out to be faster than -O2
+#OPTIMIZE      = -O2 $(RUNTIME) -DNDEBUG
+OPTIMIZE       = -O1 $(RUNTIME) -DNDEBUG
 !  ELSE
 OPTIMIZE       = -Od $(RUNTIME) -DNDEBUG
 !  ENDIF
 LINK_DBG       = -release
 !ENDIF
 
-!IF "$(OBJECT)" != ""
+!IF "$(USE_OBJECT)" == "define"
 OPTIMIZE       = $(OPTIMIZE) $(CXX_FLAG)
+BUILDOPT       = $(BUILDOPT) -DPERL_OBJECT
 !ENDIF
 
 LIBBASEFILES   = $(DELAYLOAD) $(CRYPT_LIB) \
@@ -286,7 +299,7 @@ LINK_FLAGS  = -nologo -nodefaultlib $(LINK_DBG) -machine:$(PROCESSOR_ARCHITECTURE
 OBJOUT_FLAG    = -Fo
 EXEOUT_FLAG    = -Fe
 
-CFLAGS_O       = $(CFLAGS) $(OBJECT)
+CFLAGS_O       = $(CFLAGS) $(BUILDOPT)
 
 #################### do not edit below this line #######################
 ############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
@@ -322,14 +335,12 @@ EXTUTILSDIR       = $(LIBDIR)\extutils
 
 #
 # various targets
-!IF "$(OBJECT)" == "-DPERL_OBJECT"
+!IF "$(USE_OBJECT)" == "define"
 PERLIMPLIB     = ..\perlcore.lib
 PERLDLL                = ..\perlcore.dll
-#CAPILIB               = $(COREDIR)\perlapi.lib
 !ELSE
 PERLIMPLIB     = ..\perl.lib
 PERLDLL                = ..\perl.dll
-CAPILIB                =
 !ENDIF
 
 MINIPERL       = ..\miniperl.exe
@@ -423,7 +434,7 @@ EXTRACORE_SRC       = $(EXTRACORE_SRC) perllib.c
 EXTRACORE_SRC  = $(EXTRACORE_SRC) ..\malloc.c
 !ENDIF
 
-!IF "$(OBJECT)" == ""
+!IF "$(USE_OBJECT)" != "define"
 EXTRACORE_SRC  = $(EXTRACORE_SRC) ..\perlio.c
 !ENDIF
 
@@ -450,11 +461,6 @@ PERL95_SRC = $(PERL95_SRC) .\$(CRYPT_SRC)
 
 DLL_SRC                = $(DYNALOADER).c
 
-
-#!IF "$(OBJECT)" == ""
-#DLL_SRC               = $(DLL_SRC) perllib.c
-#!ENDIF
-
 X2P_SRC                =               \
                ..\x2p\a2p.c    \
                ..\x2p\hash.c   \
@@ -590,18 +596,13 @@ EXTENSION_DLL     =               \
                $(DUMPER_DLL)   \
                $(PEEK_DLL)     \
                $(B_DLL)        \
+               $(RE_DLL)       \
+               $(THREAD_DLL)   \
                $(BYTELOADER_DLL)
 
 EXTENSION_PM   =               \
                $(ERRNO_PM)
 
-!IF "$(OBJECT)" == ""
-EXTENSION_DLL  =               \
-               $(EXTENSION_DLL)\
-               $(THREAD_DLL)   \
-               $(RE_DLL)
-!ENDIF
-
 POD2HTML       = $(PODDIR)\pod2html
 POD2MAN                = $(PODDIR)\pod2man
 POD2LATEX      = $(PODDIR)\pod2latex
@@ -614,7 +615,7 @@ CFG_VARS    =                                       \
                "INST_ARCH=$(INST_ARCH)"                \
                "archname=$(ARCHNAME)"                  \
                "cc=$(CC)"                              \
-               "ccflags=$(OPTIMIZE:"=\") $(DEFINES) $(OBJECT)" \
+               "ccflags=$(OPTIMIZE:"=\") $(DEFINES) $(BUILDOPT)"       \
                "cf_email=$(EMAIL)"                     \
                "d_crypt=$(D_CRYPT)"                    \
                "d_mymalloc=$(PERL_MALLOC)"             \
@@ -637,7 +638,7 @@ CFG_VARS    =                                       \
 #
 
 all : .\config.h $(GLOBEXE) $(MINIMOD) $(CONFIGPM) $(PERLEXE) $(PERL95EXE) \
-       $(CAPILIB) $(X2P) $(EXTENSION_DLL) $(EXTENSION_PM)
+       $(X2P) $(EXTENSION_DLL) $(EXTENSION_PM)
 
 $(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c
 
@@ -708,7 +709,7 @@ $(PERL95_OBJ)       : $(CORE_H)
 $(X2P_OBJ)     : $(CORE_H)
 
 perldll.def : $(MINIPERL) $(CONFIGPM) ..\global.sym ..\pp.sym makedef.pl
-       $(MINIPERL) -w makedef.pl $(OPTIMIZE) $(DEFINES) $(OBJECT) \
+       $(MINIPERL) -w makedef.pl $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \
            CCTYPE=$(CCTYPE) > perldll.def
 
 $(PERLDLL): perldll.def $(PERLDLL_OBJ)
@@ -717,9 +718,6 @@ $(PERLDLL): perldll.def $(PERLDLL_OBJ)
 <<
        $(XCOPY) $(PERLIMPLIB) $(COREDIR)
 
-perl.def  : $(MINIPERL) makeperldef.pl
-       $(MINIPERL) -I..\lib makeperldef.pl $(NULL) > perl.def
-
 $(MINIMOD) : $(MINIPERL) ..\minimod.pl
        cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm
 
@@ -794,15 +792,6 @@ $(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)
        $(XSUBPP) dl_win32.xs > $(*B).c
        cd ..\..\win32
 
-#!IF "$(OBJECT)" == "-DPERL_OBJECT"
-#perlapi$(o) : ..\perlapi.c
-#      $(CC) $(CFLAGS_O) $(RUNTIME) -UPERLDLL -c \
-#          $(OBJOUT_FLAG)perlapi$(o) ..\perlapi.c
-#
-#$(CAPILIB) : ..\perlapi.c ..\perlapi$(o)
-#      lib /OUT:$(CAPILIB) ..\perlapi$(o)
-#!ENDIF
-
 $(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
        copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
 
@@ -996,12 +985,11 @@ clean :
        -@erase $(PERLEXE)
        -@erase $(PERLDLL)
        -@erase $(CORE_OBJ)
-       -@erase $(CAPILIB)
        -rmdir /s /q $(MINIDIR) || rmdir /s $(MINIDIR)
        -@erase $(WIN32_OBJ)
        -@erase $(DLL_OBJ)
        -@erase $(X2P_OBJ)
-       -@erase ..\*$(o) ..\*.lib ..\*.exp *$(o) *.lib *.exp
+       -@erase ..\*$(o) ..\*.lib ..\*.exp *$(o) *.lib *.exp *.res
        -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat
        -@erase ..\x2p\*.exe ..\x2p\*.bat
        -@erase *.ilk
diff --git a/win32/TEST b/win32/TEST
deleted file mode 100644 (file)
index 1bda4ef..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-#!./perl
-
-# Last change: Fri Jan 10 09:57:03 WET 1997
-
-# This is written in a peculiar style, since we're trying to avoid
-# most of the constructs we'll be testing for.
-
-$| = 1;
-
-if ($ARGV[0] eq '-v') {
-    $verbose = 1;
-    shift;
-}
-
-chdir 't' if -f 't/TEST';
-
-die "You need to run \"make test\" first to set things up.\n" 
-  unless -e 'perl' or -e 'perl.exe';
-
-$ENV{EMXSHELL} = 'sh';        # For OS/2
-
-if ($ARGV[0] eq '') {
-    push( @ARGV, `dir/s/b base` );
-    push( @ARGV, `dir/s/b comp` );
-    push( @ARGV, `dir/s/b cmd` );
-    push( @ARGV, `dir/s/b io` );
-    push( @ARGV, `dir/s/b op` );
-    push( @ARGV, `dir/s/b pragma` );
-    push( @ARGV, `dir/s/b lib` );
-
-    grep( chomp, @ARGV );
-    @ARGV = grep( /\.t$/, @ARGV );
-    grep( s/.*t\\//, @ARGV );
-#    @ARGV = split(/[ \n]/,
-#      `echo base/*.t comp/*.t cmd/*.t io/*.t; echo op/*.t pragma/*.t lib/*.t`);
-} else {
-
-@ARGV = map(glob($_),@ARGV);
-
-}
-
-if ($^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'qnx' || 1) {
-    $sharpbang = 0;
-}
-else {
-    open(CONFIG, "../config.sh");
-    while (<CONFIG>) {
-       if (/sharpbang='(.*)'/) {
-           $sharpbang = ($1 eq '#!');
-           last;
-       }
-    }
-    close(CONFIG);
-}
-
-$bad = 0;
-$good = 0;
-$total = @ARGV;
-while ($test = shift) {
-    if ($test =~ /^$/) {
-       next;
-    }
-    $te = $test;
-    chop($te);
-    print "$te" . '.' x (18 - length($te));
-    if ($sharpbang) {
-       open(results,"./$test |") || (print "can't run.\n");
-    } else {
-       open(script,"$test") || die "Can't run $test.\n";
-       $_ = <script>;
-       close(script);
-       if (/#!..perl(.*)/) {
-           $switch = $1;
-           if ($^O eq 'VMS') {
-               # Must protect uppercase switches with "" on command line
-               $switch =~ s/-([A-Z]\S*)/"-$1"/g;
-           }
-       } else {
-           $switch = '';
-       }
-       open(results,"perl$switch $test |") || (print "can't run.\n");
-    }
-    $ok = 0;
-    $next = 0;
-    while (<results>) {
-       if (/^$/) { next;};
-       if ($verbose) {
-           print $_;
-       }
-       unless (/^#/) {
-           if (/^1\.\.([0-9]+)/) {
-               $max = $1;
-               $totmax += $max;
-               $files += 1;
-               $next = 1;
-               $ok = 1;
-           } else {
-               $next = $1, $ok = 0, last if /^not ok ([0-9]*)/;
-               if (/^ok (.*)/ && $1 == $next) {
-                   $next = $next + 1;
-               } else {
-                   $ok = 0;
-               }
-           }
-       }
-    }
-    $next = $next - 1;
-    if ($ok && $next == $max) {
-       if ($max) {
-           print "ok\n";
-           $good = $good + 1;
-       } else {
-           print "skipping test on this platform\n";
-           $files -= 1;
-       }
-    } else {
-       $next += 1;
-       print "FAILED on test $next\n";
-       $bad = $bad + 1;
-       $_ = $test;
-       if (/^base/) {
-           die "Failed a basic test--cannot continue.\n";
-       }
-    }
-}
-
-if ($bad == 0) {
-    if ($ok) {
-       print "All tests successful.\n";
-    } else {
-       die "FAILED--no tests were run for some reason.\n";
-    }
-} else {
-    $pct = sprintf("%.2f", $good / $total * 100);
-    if ($bad == 1) {
-       warn "Failed 1 test script out of $total, $pct% okay.\n";
-    } else {
-       warn "Failed $bad test scripts out of $total, $pct% okay.\n";
-    }
-       warn <<'SHRDLU';
-   ### Since not all tests were successful, you may want to run some
-   ### of them individually and examine any diagnostic messages they
-   ### produce.  See the INSTALL document's section on "make test".
-SHRDLU
-}
-($user,$sys,$cuser,$csys) = times;
-print sprintf("u=%g  s=%g  cu=%g  cs=%g  scripts=%d  tests=%d\n",
-    $user,$sys,$cuser,$csys,$files,$totmax);
-exit $bad != 0;
diff --git a/win32/autosplit.pl b/win32/autosplit.pl
deleted file mode 100644 (file)
index 26ce2c3..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-use AutoSplit;
-
-autosplit($ARGV[0], $ARGV[1], 0, 1, 1);
index 5b795f5..955a1de 100644 (file)
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
 #define PRIVLIB "c:\\perl\\5.00557\\lib"               /**/
-#define PRIVLIB_EXP (win32_get_privlib(aTHX_ "5.00557"))       /**/
+#define PRIVLIB_EXP (win32_get_privlib("5.00557"))     /**/
 
 /* SELECT_MIN_BITS:
  *     This symbol holds the minimum number of bits operated by select.
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
 #define SITELIB "c:\\perl\\site\\5.00557\\lib"         /**/
-#define SITELIB_EXP (win32_get_sitelib(aTHX_ "5.00557"))       /**/
+#define SITELIB_EXP (win32_get_sitelib("5.00557"))     /**/
 
 /* STARTPERL:
  *     This variable contains the string to put in front of a perl
index 783f4e2..dfa1c7c 100644 (file)
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
 #define PRIVLIB "c:\\perl\\5.00557\\lib"               /**/
-#define PRIVLIB_EXP (win32_get_privlib(aTHX_ "5.00557"))       /**/
+#define PRIVLIB_EXP (win32_get_privlib("5.00557"))     /**/
 
 /* SELECT_MIN_BITS:
  *     This symbol holds the minimum number of bits operated by select.
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
 #define SITELIB "c:\\perl\\site\\5.00557\\lib"         /**/
-#define SITELIB_EXP (win32_get_sitelib(aTHX_ "5.00557"))       /**/
+#define SITELIB_EXP (win32_get_sitelib("5.00557"))     /**/
 
 /* STARTPERL:
  *     This variable contains the string to put in front of a perl
index 4f858d7..cbe6265 100644 (file)
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
 #define PRIVLIB "c:\\perl\\5.00557\\lib"               /**/
-#define PRIVLIB_EXP (win32_get_privlib(aTHX_ "5.00557"))       /**/
+#define PRIVLIB_EXP (win32_get_privlib("5.00557"))     /**/
 
 /* SELECT_MIN_BITS:
  *     This symbol holds the minimum number of bits operated by select.
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
 #define SITELIB "c:\\perl\\site\\5.00557\\lib"         /**/
-#define SITELIB_EXP (win32_get_sitelib(aTHX_ "5.00557"))       /**/
+#define SITELIB_EXP (win32_get_sitelib("5.00557"))     /**/
 
 /* STARTPERL:
  *     This variable contains the string to put in front of a perl
index 850b134..16e467e 100644 (file)
@@ -51,7 +51,7 @@ while (<SH>)
   s#/[ *\*]*\*/#/**/#;
   if (/^\s*#define\s+(PRIVLIB|SITELIB)_EXP/)
    {
-     $_ = "#define ". $1 . "_EXP (win32_get_". lc($1) . "(aTHX_ $patchlevel))\t/**/\n";
+     $_ = "#define ". $1 . "_EXP (win32_get_". lc($1) . "($patchlevel))\t/**/\n";
    }
   # incpush() handles archlibs, so disable them
   elsif (/^\s*#define\s+(ARCHLIB|SITEARCH)_EXP/)
index 3e7fdd4..34dbb4e 100644 (file)
@@ -24,6 +24,8 @@ calls.
 #include <windows.h>
 #include <string.h>
 
+#define PERL_NO_GET_CONTEXT
+
 #include "EXTERN.h"
 #include "perl.h"
 #include "win32.h"
diff --git a/win32/genxsdef.pl b/win32/genxsdef.pl
deleted file mode 100644 (file)
index b00a57e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-print "LIBRARY $ARGV[0]\n";
-print "CODE LOADONCALL\n";
-print "DATA LOADONCALL NONSHARED MULTIPLE\n";
-print "EXPORTS\n";
-print "\tboot_$ARGV[0]\n"
index be363ce..d2ef6d5 100644 (file)
@@ -38,12 +38,13 @@ typedef struct _dir_struc
        struct direct dirstr;           // Directory structure to return
 } DIR;
 
+#if 0          /* these have moved to win32iop.h */
 DIR *          win32_opendir(char *filename);
 struct direct *        win32_readdir(DIR *dirp);
 long           win32_telldir(DIR *dirp);
 void           win32_seekdir(DIR *dirp,long loc);
 void           win32_rewinddir(DIR *dirp);
 int            win32_closedir(DIR *dirp);
-
+#endif
 
 #endif //_INC_DIRENT
index 87506fb..194de95 100644 (file)
@@ -142,7 +142,6 @@ void win32_endprotoent(void);
 void win32_endservent(void);
 
 #ifndef WIN32SCK_IS_STDSCK
-#ifndef PERL_OBJECT
 //
 // direct to our version
 //
@@ -204,7 +203,6 @@ void win32_endservent(void);
 #define FD_ZERO(p)     PERL_FD_ZERO(p)
 #endif /* USE_SOCKETS_AS_HANDLES */
 
-#endif  /* PERL_OBJECT */
 #endif /* WIN32SCK_IS_STDSCK */
 
 #ifdef __cplusplus
index dc0869a..96b540b 100644 (file)
@@ -37,7 +37,6 @@ if ($define{PERL_OBJECT}) {
 #    output_symbol("perl_parse");
 #    output_symbol("perl_run");
 #    output_symbol("RunPerl");
-    output_symbol("GetPerlInterpreter");
 #    exit(0);
 }
 else {
@@ -188,13 +187,16 @@ Perl_unlock_condpair
 Perl_magic_mutexfree
 )];
  }
-unless ($define{'USE_THREADS'} or $define{'PERL_IMPLICIT_CONTEXT'})
- {
+unless ($define{'USE_THREADS'} or $define{'PERL_IMPLICIT_CONTEXT'}
+       or $define{'PERL_OBJECT'})
+{
   skip_symbols [qw(
                   Perl_croak_nocontext
                   Perl_die_nocontext
+                  Perl_deb_nocontext
                   Perl_form_nocontext
                   Perl_warn_nocontext
+                  Perl_warner_nocontext
                   Perl_newSVpvf_nocontext
                   Perl_sv_catpvf_nocontext
                   Perl_sv_setpvf_nocontext
@@ -507,4 +509,6 @@ Perl_init_os_extras
 Perl_getTHR
 Perl_setTHR
 RunPerl
+GetPerlInterpreter
+SetPerlInterpreter
 
index 22b1d0a..f69f04d 100644 (file)
@@ -47,16 +47,29 @@ INST_VER    *= \5.00557
 INST_ARCH      *= \$(ARCHNAME)
 
 #
+# XXX WARNING! This option currently undergoing changes.  May be broken.
+#
 # uncomment to enable threads-capabilities
 #
 #USE_THREADS   *= define
 
 #
+# XXX WARNING! This option currently undergoing changes.  May be broken.
+#
 # uncomment to enable multiple interpreters
 #
 #USE_MULTI     *= define
 
 #
+# XXX WARNING! This option currently undergoing changes.  May be broken.
+#
+# uncomment next line if you want to use the perl object
+# Currently, this cannot be enabled if you ask for threads above, or
+# if you are using GCC or EGCS.
+#
+#USE_OBJECT    *= define
+
+#
 # uncomment exactly one of the following
 # 
 # Visual C++ 2.x
@@ -71,15 +84,6 @@ CCTYPE               *= BORLAND
 #CCTYPE                *= GCC
 
 #
-# XXX Do not enable.  This is currently undergoing a rewrite and will
-# NOT work.
-# uncomment next line if you want to use the perl object
-# Currently, this cannot be enabled if you ask for threads above, or
-# if you are using GCC or EGCS.
-#
-#OBJECT                *= -DPERL_OBJECT
-
-#
 # uncomment next line if you want debug version of perl (big,slow)
 # If not enabled, we automatically try to use maximum optimization
 # with all compilers that are known to have a working optimizer.
@@ -123,7 +127,7 @@ CCTYPE              *= BORLAND
 # WARNING: Turning this on/off WILL break binary compatibility with extensions
 # you may have compiled with/without it.  Be prepared to recompile all
 # extensions if you change the default.  Currently, this cannot be enabled
-# if you ask for PERL_OBJECT above.
+# if you ask for USE_OBJECT above.
 #
 #PERL_MALLOC   *= define
 
@@ -149,8 +153,10 @@ CCLIBDIR   *= $(CCHOME)\lib
 # We don't enable this by default because we want the modules to get fixed
 # instead of clinging to shortcuts like this one.
 #
-#BUILDOPT      *= -DPERL_POLLUTE
-#BUILDOPT      *= -DPERL_IMPLICIT_CONTEXT
+# Don't enable -DPERL_IMPLICIT_CONTEXT if you don't know what it is. :-)
+#
+#BUILDOPT      += -DPERL_POLLUTE
+#BUILDOPT      += -DPERL_IMPLICIT_CONTEXT
 
 #
 # specify semicolon-separated list of extra directories that modules will
@@ -168,7 +174,7 @@ EXTRALIBDIRS        *=
 # set this to your email address (perl will guess a value from
 # from your loginname and your hostname, which may not be right)
 #
-#EMAIL         *= 
+EMAIL          *= support@activestate.com
 
 ##
 ## Build configuration ends.
@@ -183,7 +189,7 @@ D_CRYPT             = define
 CRYPT_FLAG     = -DHAVE_DES_FCRYPT
 .ENDIF
 
-.IF "$(OBJECT)" != ""
+.IF "$(USE_OBJECT)" == "define"
 PERL_MALLOC    != undef
 USE_THREADS    != undef
 USE_MULTI      != undef
@@ -198,10 +204,12 @@ USE_MULTI *= undef
 
 PROCESSOR_ARCHITECTURE *= x86
 
-.IF "$(OBJECT)" != ""
+.IF "$(USE_OBJECT)" == "define"
 ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-object
 .ELIF "$(USE_THREADS)" == "define"
 ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-thread
+.ELIF "$(USE_MULTI)" == "define"
+ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-multi
 .ELSE
 ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)
 .ENDIF
@@ -240,7 +248,7 @@ IMPLIB              = implib -c
 RUNTIME                = -D_RTLDLL
 INCLUDES       = -I$(COREDIR) -I.\include -I. -I.. -I"$(CCINCDIR)"
 #PCHFLAGS      = -H -Hc -H=c:\temp\bcmoduls.pch 
-DEFINES                = -DWIN32 $(BUILDOPT) $(CRYPT_FLAG)
+DEFINES                = -DWIN32 $(CRYPT_FLAG)
 LOCDEFS                = -DPERLDLL -DPERL_CORE
 SUBSYS         = console
 CXX_FLAG       = -P
@@ -256,7 +264,7 @@ OPTIMIZE    = -O2 $(RUNTIME)
 LINK_DBG       = 
 .ENDIF
 
-CFLAGS         = -w -g0 -tWM -tWD $(INCLUDES) $(DEFINES) $(LOCDEFS) \
+CFLAGS         = -w -g0 -tWM -tWD $(INCLUDES) $(LOCDEFS) \
                $(PCHFLAGS) $(OPTIMIZE)
 LINK_FLAGS     = $(LINK_DBG) -L"$(CCLIBDIR)"
 OBJOUT_FLAG    = -o
@@ -278,7 +286,7 @@ a = .a
 #
 RUNTIME                =
 INCLUDES       = -I$(COREDIR) -I.\include -I. -I..
-DEFINES                = -DWIN32 $(BUILDOPT) $(CRYPT_FLAG)
+DEFINES                = -DWIN32 $(CRYPT_FLAG)
 LOCDEFS                = -DPERLDLL -DPERL_CORE
 SUBSYS         = console
 CXX_FLAG       = -xc++
@@ -314,7 +322,7 @@ LIB32               = $(LINK32) -lib
 RUNTIME                = -MD
 INCLUDES       = -I$(COREDIR) -I.\include -I. -I..
 #PCHFLAGS      = -Fpc:\temp\vcmoduls.pch -YX 
-DEFINES                = -DWIN32 -D_CONSOLE -DNO_STRICT $(BUILDOPT) $(CRYPT_FLAG)
+DEFINES                = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG)
 LOCDEFS                = -DPERLDLL -DPERL_CORE
 SUBSYS         = console
 CXX_FLAG       = -TP -GX
@@ -348,7 +356,9 @@ OPTIMIZE    = -Od $(RUNTIME)d -Zi -D_DEBUG -DDEBUGGING
 LINK_DBG       = -debug -pdb:none
 .ELSE
 .IF "$(CFG)" == "Optimize"
-OPTIMIZE       = -O2 $(RUNTIME) -DNDEBUG
+# -O1 yields smaller code, which turns out to be faster than -O2
+#OPTIMIZE      = -O2 $(RUNTIME) -DNDEBUG
+OPTIMIZE       = -O1 $(RUNTIME) -DNDEBUG
 .ELSE
 OPTIMIZE       = -Od $(RUNTIME) -DNDEBUG
 .ENDIF
@@ -373,11 +383,12 @@ LIBOUT_FLAG       = /out:
 
 .ENDIF
 
-.IF "$(OBJECT)" != ""
+.IF "$(USE_OBJECT)" == "define"
 OPTIMIZE       += $(CXX_FLAG)
+BUILDOPT       += -DPERL_OBJECT
 .ENDIF
 
-CFLAGS_O       = $(CFLAGS) $(OBJECT)
+CFLAGS_O       = $(CFLAGS) $(BUILDOPT)
 
 #################### do not edit below this line #######################
 ############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
@@ -470,7 +481,7 @@ CFGH_TMPL   = config_H.bc
 
 CFGSH_TMPL     = config.gc
 CFGH_TMPL      = config_H.gc
-.IF "$(OBJECT)" == "-DPERL_OBJECT"
+.IF "$(USE_OBJECT)" == "define"
 PERLIMPLIB     = ..\libperlcore$(a)
 .ELSE
 PERLIMPLIB     = ..\libperl$(a)
@@ -486,14 +497,12 @@ PERL95EXE = ..\perl95.exe
 
 .ENDIF
 
-.IF "$(OBJECT)" == "-DPERL_OBJECT"
+.IF "$(USE_OBJECT)" == "define"
 PERLIMPLIB     *= ..\perlcore$(a)
 PERLDLL                = ..\perlcore.dll
-CAPILIB                = $(COREDIR)\perlCAPI$(a)
 .ELSE
 PERLIMPLIB     *= ..\perl$(a)
 PERLDLL                = ..\perl.dll
-CAPILIB                =
 .ENDIF
 
 XCOPY          = xcopy /f /r /i /d
@@ -518,6 +527,7 @@ MICROCORE_SRC       =               \
                ..\mg.c         \
                ..\op.c         \
                ..\perl.c       \
+               ..\perlapi.c    \
                ..\perly.c      \
                ..\pp.c         \
                ..\pp_ctl.c     \
@@ -534,11 +544,13 @@ MICROCORE_SRC     =               \
                ..\utf8.c       \
                ..\util.c
 
+EXTRACORE_SRC  += perllib.c
+
 .IF "$(PERL_MALLOC)" == "define"
 EXTRACORE_SRC  += ..\malloc.c
 .ENDIF
 
-.IF "$(OBJECT)" == ""
+.IF "$(USE_OBJECT)" != "define"
 EXTRACORE_SRC  += ..\perlio.c
 .ENDIF
 
@@ -565,11 +577,6 @@ PERL95_SRC += .\$(CRYPT_SRC)
 
 DLL_SRC                = $(DYNALOADER).c
 
-
-.IF "$(OBJECT)" == ""
-DLL_SRC                += perllib.c
-.ENDIF
-
 X2P_SRC                =               \
                ..\x2p\a2p.c    \
                ..\x2p\hash.c   \
@@ -593,6 +600,7 @@ CORE_NOCFG_H        =               \
                ..\op.h         \
                ..\opcode.h     \
                ..\perl.h       \
+               ..\perlapi.h    \
                ..\perlsdio.h   \
                ..\perlsfio.h   \
                ..\perly.h      \
@@ -631,7 +639,7 @@ X2P_OBJ             = $(X2P_SRC:db:+$(o))
 PERLDLL_OBJ    = $(CORE_OBJ)
 PERLEXE_OBJ    = perlmain$(o)
 
-.IF "$(OBJECT)" == ""
+.IF "$(USE_OBJECT)" != "define"
 PERLDLL_OBJ    += $(WIN32_OBJ) $(DLL_OBJ)
 .ELSE
 PERLEXE_OBJ    += $(WIN32_OBJ) $(DLL_OBJ)
@@ -705,18 +713,13 @@ EXTENSION_DLL     =               \
                $(DUMPER_DLL)   \
                $(PEEK_DLL)     \
                $(B_DLL)        \
+               $(RE_DLL)       \
+               $(THREAD_DLL)   \
                $(BYTELOADER_DLL)
 
 EXTENSION_PM   =               \
                $(ERRNO_PM)
 
-# re.dll doesn't build with PERL_OBJECT yet
-.IF "$(OBJECT)" == ""
-EXTENSION_DLL  +=              \
-               $(THREAD_DLL)   \
-               $(RE_DLL)
-.ENDIF
-
 POD2HTML       = $(PODDIR)\pod2html
 POD2MAN                = $(PODDIR)\pod2man
 POD2LATEX      = $(PODDIR)\pod2latex
@@ -729,7 +732,7 @@ CFG_VARS    =                                       \
                "INST_ARCH=$(INST_ARCH)"                \
                "archname=$(ARCHNAME)"                  \
                "cc=$(CC)"                              \
-               "ccflags=$(OPTIMIZE:s/"/\"/) $(DEFINES) $(OBJECT)"      \
+               "ccflags=$(OPTIMIZE:s/"/\"/) $(DEFINES) $(BUILDOPT)"    \
                "cf_email=$(EMAIL)"                     \
                "d_crypt=$(D_CRYPT)"                    \
                "d_mymalloc=$(PERL_MALLOC)"             \
@@ -754,7 +757,7 @@ CFG_VARS    =                                       \
 #
 
 all : .\config.h $(GLOBEXE) $(MINIMOD) $(CONFIGPM) $(PERLEXE) $(PERL95EXE) \
-       $(CAPILIB) $(X2P) $(EXTENSION_DLL) $(EXTENSION_PM)
+       $(X2P) $(EXTENSION_DLL) $(EXTENSION_PM)
 
 $(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c
 
@@ -838,7 +841,7 @@ $(PERL95_OBJ)       : $(CORE_H)
 $(X2P_OBJ)     : $(CORE_H)
 
 perldll.def : $(MINIPERL) $(CONFIGPM) ..\global.sym ..\pp.sym makedef.pl
-       $(MINIPERL) -w makedef.pl $(OPTIMIZE) $(DEFINES) $(OBJECT) \
+       $(MINIPERL) -w makedef.pl $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \
            CCTYPE=$(CCTYPE) > perldll.def
 
 $(PERLDLL): perldll.def $(PERLDLL_OBJ)
@@ -866,9 +869,6 @@ $(PERLDLL): perldll.def $(PERLDLL_OBJ)
 .ENDIF
        $(XCOPY) $(PERLIMPLIB) $(COREDIR)
 
-perl.def  : $(MINIPERL) makeperldef.pl
-       $(MINIPERL) -I..\lib makeperldef.pl $(NULL) > perl.def
-
 $(MINIMOD) : $(MINIPERL) ..\minimod.pl
        cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm
 
@@ -961,30 +961,6 @@ $(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)
        cd $(EXTDIR)\$(*B) && $(XSUBPP) dl_win32.xs > $(*B).c
        $(XCOPY) $(EXTDIR)\$(*B)\dlutils.c .
 
-.IF "$(OBJECT)" == "-DPERL_OBJECT"
-
-perlCAPI.cpp : $(MINIPERL)
-       $(MINIPERL) GenCAPI.pl $(COREDIR)
-
-perlCAPI$(o) : perlCAPI.cpp
-.IF "$(CCTYPE)" == "BORLAND"
-       $(CC) $(CFLAGS_O) -c $(OBJOUT_FLAG)perlCAPI$(o) perlCAPI.cpp
-.ELIF "$(CCTYPE)" == "GCC"
-       $(CC) $(CFLAGS_O) -c $(OBJOUT_FLAG)perlCAPI$(o) perlCAPI.cpp
-.ELSE
-       $(CC) $(CFLAGS_O) $(RUNTIME) -UPERLDLL -c \
-           $(OBJOUT_FLAG)perlCAPI$(o) perlCAPI.cpp
-.ENDIF
-
-$(CAPILIB) : perlCAPI.cpp perlCAPI$(o)
-.IF "$(CCTYPE)" == "BORLAND"
-       $(LIB32) $(LIBOUT_FLAG)$(CAPILIB) +perlCAPI$(o)
-.ELSE
-       $(LIB32) $(LIBOUT_FLAG)$(CAPILIB) perlCAPI$(o)
-.ENDIF
-
-.ENDIF
-
 $(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
        copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
 
@@ -1154,7 +1130,6 @@ clean :
        -@erase $(MINIPERL)
        -@erase perlglob$(o)
        -@erase perlmain$(o)
-       -@erase perlCAPI.cpp
        -@erase config.w32
        -@erase /f config.h
        -@erase $(GLOBEXE)
@@ -1165,7 +1140,7 @@ clean :
        -@erase $(WIN32_OBJ)
        -@erase $(DLL_OBJ)
        -@erase $(X2P_OBJ)
-       -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp
+       -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp *.res
        -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat
        -@erase ..\x2p\*.exe ..\x2p\*.bat
        -@erase *.ilk
diff --git a/win32/makemain.pl b/win32/makemain.pl
deleted file mode 100644 (file)
index b230f58..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-open (MINIMAIN, "<../miniperlmain.c") || die "failed to open miniperlmain.c" . $!;
-
-while (<MINIMAIN>) {
-       if (/Do not delete this line--writemain depends on it/) {
-               last;
-               }
-       else {
-               print $_;
-               }
-       };
-
-close(MINIMAIN);
-
-print "char *staticlinkmodules[]={\n";
-foreach (@ARGV) {
-       print "\t\"".$_."\",\n";
-       }
-print "\tNULL,\n";
-print "\t};\n";
-print "\n";
-foreach (@ARGV) {
-       print "EXTERN_C void boot_$_ (CV* cv);\n"
-       }
-
-print <<EOP;
-
-static void
-xs_init()
-{
-       dXSUB_SYS;
-       char *file = __FILE__;
-EOP
-
-foreach (@ARGV) {
-       if (/DynaLoader/) {
-           print "\tnewXS(\"$_\:\:boot_$_\", boot_$_, file);\n";
-               }
-       else {
-           print "\tnewXS(\"$_\:\:bootstrap\", boot_$_, file);\n";
-               };
-       }
-
-print <<EOP;
-}
-EOP
diff --git a/win32/makeperldef.pl b/win32/makeperldef.pl
deleted file mode 100644 (file)
index 620d2eb..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-my $CCTYPE = "";
-print "EXPORTS\n";
-foreach (@ARGV) {
-       if (/CCTYPE=(.*)$/) {
-               $CCTYPE = $1;
-               next;
-       }
-       emit_symbol("boot_$_");
-}
-
-sub emit_symbol {
-       my $symbol = shift;
-       if ($CCTYPE eq "BORLAND") {
-               # workaround Borland quirk by export both the straight
-               # name and a name with leading underscore
-               print "\t$symbol=_$symbol\n";
-               print "\t_$symbol\n";
-       }
-       else {
-               print "\t$symbol\n";
-       }
-}
-
index 8682f77..cba7e41 100644 (file)
@@ -771,7 +771,7 @@ PerlSockGethostbyname(struct IPerlSock*, const char* name)
 struct hostent*
 PerlSockGethostent(struct IPerlSock*)
 {
-    dPERLOBJ;
+    dTHXo;
     croak("gethostent not implemented!\n");
     return NULL;
 }
@@ -946,7 +946,7 @@ PerlSockSocket(struct IPerlSock*, int af, int type, int protocol)
 int
 PerlSockSocketpair(struct IPerlSock*, int domain, int type, int protocol, int* fds)
 {
-    dPERLOBJ;
+    dTHXo;
     croak("socketpair not implemented!\n");
     return 0;
 }
@@ -1102,7 +1102,7 @@ PerlProcKill(struct IPerlProc*, int pid, int sig)
 int
 PerlProcKillpg(struct IPerlProc*, int pid, int sig)
 {
-    dPERLOBJ;
+    dTHXo;
     croak("killpg not implemented!\n");
     return 0;
 }
@@ -1249,24 +1249,6 @@ struct IPerlProc perlProc =
 
 //#include "perlhost.h"
 
-static DWORD g_TlsAllocIndex;
-BOOL SetPerlInterpreter(CPerlObj* pPerl)
-{
-    return TlsSetValue(g_TlsAllocIndex, pPerl);
-}
-
-EXTERN_C CPerlObj* GetPerlInterpreter(PerlInterpreter* sv_interp)
-{
-    if(GetCurrentThreadId() == (DWORD)sv_interp)
-       return (CPerlObj*)TlsGetValue(g_TlsAllocIndex);
-    return NULL;
-}
-
-CPerlObj* GetPerlInter(void)
-{
-    return (CPerlObj*)TlsGetValue(g_TlsAllocIndex);
-}
-
 
 EXTERN_C void perl_get_host_info(IPerlMemInfo* perlMemInfo,
                        IPerlEnvInfo* perlEnvInfo, IPerlStdIOInfo* perlStdIOInfo,
@@ -1321,7 +1303,7 @@ EXTERN_C PerlInterpreter* perl_alloc_using(IPerlMem* pMem,
     if(pPerl)
     {
        SetPerlInterpreter(pPerl);
-       return (PerlInterpreter*)GetCurrentThreadId();
+       return (PerlInterpreter*)pPerl;
     }
     SetPerlInterpreter(NULL);
     return NULL;
@@ -1349,7 +1331,7 @@ EXTERN_C PerlInterpreter* perl_alloc(void)
     if(pPerl)
     {
        SetPerlInterpreter(pPerl);
-       return (PerlInterpreter*)GetCurrentThreadId();
+       return (PerlInterpreter*)pPerl;
     }
     SetPerlInterpreter(NULL);
     return NULL;
@@ -1357,7 +1339,7 @@ EXTERN_C PerlInterpreter* perl_alloc(void)
 
 EXTERN_C void perl_construct(PerlInterpreter* sv_interp)
 {
-    CPerlObj* pPerl = GetPerlInterpreter(sv_interp);
+    CPerlObj* pPerl = (CPerlObj*)sv_interp;
     try
     {
        pPerl->perl_construct();
@@ -1373,7 +1355,7 @@ EXTERN_C void perl_construct(PerlInterpreter* sv_interp)
 
 EXTERN_C void perl_destruct(PerlInterpreter* sv_interp)
 {
-    CPerlObj* pPerl = GetPerlInterpreter(sv_interp);
+    CPerlObj* pPerl = (CPerlObj*)sv_interp;
     try
     {
        pPerl->perl_destruct();
@@ -1385,7 +1367,7 @@ EXTERN_C void perl_destruct(PerlInterpreter* sv_interp)
 
 EXTERN_C void perl_free(PerlInterpreter* sv_interp)
 {
-    CPerlObj* pPerl = GetPerlInterpreter(sv_interp);
+    CPerlObj* pPerl = (CPerlObj*)sv_interp;
     try
     {
        pPerl->perl_free();
@@ -1398,7 +1380,7 @@ EXTERN_C void perl_free(PerlInterpreter* sv_interp)
 
 EXTERN_C int perl_run(PerlInterpreter* sv_interp)
 {
-    CPerlObj* pPerl = GetPerlInterpreter(sv_interp);
+    CPerlObj* pPerl = (CPerlObj*)sv_interp;
     int retVal;
     try
     {
@@ -1422,7 +1404,7 @@ EXTERN_C int perl_run(PerlInterpreter* sv_interp)
 EXTERN_C int perl_parse(PerlInterpreter* sv_interp, void (*xsinit)(CPerlObj*), int argc, char** argv, char** env)
 {
     int retVal;
-    CPerlObj* pPerl = GetPerlInterpreter(sv_interp);
+    CPerlObj* pPerl = (CPerlObj*)sv_interp;
     try
     {
        retVal = pPerl->perl_parse(xs_init, argc, argv, env);
@@ -1452,7 +1434,21 @@ HANDLE g_w32_perldll_handle;
 extern HANDLE w32_perldll_handle;
 #endif /* PERL_OBJECT */
 
-DllExport int
+static DWORD g_TlsAllocIndex;
+
+EXTERN_C DllExport bool
+SetPerlInterpreter(void *interp)
+{
+    return TlsSetValue(g_TlsAllocIndex, interp);
+}
+
+EXTERN_C DllExport void*
+GetPerlInterpreter(void)
+{
+    return TlsGetValue(g_TlsAllocIndex);
+}
+
+EXTERN_C DllExport int
 RunPerl(int argc, char **argv, char **env)
 {
     int exitstatus;
@@ -1520,10 +1516,9 @@ DllMain(HANDLE hModule,          /* DLL module handle */
        setmode( fileno( stderr ), O_BINARY );
        _fmode = O_BINARY;
 #endif
-#ifdef PERL_OBJECT
        g_TlsAllocIndex = TlsAlloc();
        DisableThreadLibraryCalls(hModule);
-#else
+#ifndef PERL_OBJECT
        w32_perldll_handle = hModule;
 #endif
        break;
@@ -1532,9 +1527,7 @@ DllMain(HANDLE hModule,           /* DLL module handle */
         * process termination or call to FreeLibrary.
         */
     case DLL_PROCESS_DETACH:
-#ifdef PERL_OBJECT
        TlsFree(g_TlsAllocIndex);
-#endif
        break;
 
        /* The attached process creates a new thread. */
index ef44531..8e6b249 100644 (file)
@@ -16,9 +16,6 @@ int _CRT_glob = 0;
 
 #endif
 
-
-__declspec(dllimport) int RunPerl(int argc, char **argv, char **env);
-
 int
 main(int argc, char **argv, char **env)
 {
index cbe50c2..a011573 100644 (file)
@@ -40,6 +40,7 @@
 #include "perl.h"
 
 #define NO_XSLOCKS
+#define PERL_NO_GET_CONTEXT
 #include "XSUB.h"
 
 #include "Win32iop.h"
@@ -86,11 +87,11 @@ int _CRT_glob = 0;
 
 static void            get_shell(void);
 static long            tokenize(char *str, char **dest, char ***destv);
-       int             do_spawn2(pTHX_ char *cmd, int exectype);
+       int             do_spawn2(char *cmd, int exectype);
 static BOOL            has_shell_metachars(char *ptr);
 static long            filetime_to_clock(PFILETIME ft);
 static BOOL            filetime_from_time(PFILETIME ft, time_t t);
-static char *          get_emd_part(SV *leading, char *trailing, ...);
+static char *          get_emd_part(SV **leading, char *trailing, ...);
 static void            remove_dead_process(long deceased);
 static long            find_pid(int pid);
 static char *          qualified_path(const char *cmd);
@@ -134,9 +135,9 @@ IsWinNT(void)
     return (win32_os_id() == VER_PLATFORM_WIN32_NT);
 }
 
-/* sv (if non-NULL) is expected to be POK (valid allocated SvPVX(sv)) */
+/* *svp (if non-NULL) is expected to be POK (valid allocated SvPVX(*svp)) */
 static char*
-get_regstr_from(HKEY hkey, const char *valuename, SV *sv)
+get_regstr_from(HKEY hkey, const char *valuename, SV **svp)
 {
     /* Retrieve a REG_SZ or REG_EXPAND_SZ from the registry */
     HKEY handle;
@@ -150,15 +151,15 @@ get_regstr_from(HKEY hkey, const char *valuename, SV *sv)
        DWORD datalen;
        retval = RegQueryValueEx(handle, valuename, 0, &type, NULL, &datalen);
        if (retval == ERROR_SUCCESS && type == REG_SZ) {
-           dPERLOBJ;
-           if (!sv)
-               sv = sv_2mortal(newSVpvn("",0));
-           SvGROW(sv, datalen);
+           dTHXo;
+           if (!*svp)
+               *svp = sv_2mortal(newSVpvn("",0));
+           SvGROW(*svp, datalen);
            retval = RegQueryValueEx(handle, valuename, 0, NULL,
-                                    (PBYTE)SvPVX(sv), &datalen);
+                                    (PBYTE)SvPVX(*svp), &datalen);
            if (retval == ERROR_SUCCESS) {
-               str = SvPVX(sv);
-               SvCUR_set(sv,datalen-1);
+               str = SvPVX(*svp);
+               SvCUR_set(*svp,datalen-1);
            }
        }
        RegCloseKey(handle);
@@ -166,19 +167,19 @@ get_regstr_from(HKEY hkey, const char *valuename, SV *sv)
     return str;
 }
 
-/* sv (if non-NULL) is expected to be POK (valid allocated SvPVX(sv)) */
+/* *svp (if non-NULL) is expected to be POK (valid allocated SvPVX(*svp)) */
 static char*
-get_regstr(const char *valuename, SV *sv)
+get_regstr(const char *valuename, SV **svp)
 {
-    char *str = get_regstr_from(HKEY_CURRENT_USER, valuename, sv);
+    char *str = get_regstr_from(HKEY_CURRENT_USER, valuename, svp);
     if (!str)
-       str = get_regstr_from(HKEY_LOCAL_MACHINE, valuename, sv);
+       str = get_regstr_from(HKEY_LOCAL_MACHINE, valuename, svp);
     return str;
 }
 
-/* prev_path (if non-NULL) is expected to be POK (valid allocated SvPVX(sv)) */
+/* *prev_pathp (if non-NULL) is expected to be POK (valid allocated SvPVX(sv)) */
 static char *
-get_emd_part(SV *prev_path, char *trailing_path, ...)
+get_emd_part(SV **prev_pathp, char *trailing_path, ...)
 {
     char base[10];
     va_list ap;
@@ -246,38 +247,38 @@ get_emd_part(SV *prev_path, char *trailing_path, ...)
     /* only add directory if it exists */
     if (GetFileAttributes(mod_name) != (DWORD) -1) {
        /* directory exists */
-       dPERLOBJ;
-       if (!prev_path)
-           prev_path = sv_2mortal(newSVpvn("",0));
-       sv_catpvn(prev_path, ";", 1);
-       sv_catpv(prev_path, mod_name);
-       return SvPVX(prev_path);
+       dTHXo;
+       if (!*prev_pathp)
+           *prev_pathp = sv_2mortal(newSVpvn("",0));
+       sv_catpvn(*prev_pathp, ";", 1);
+       sv_catpv(*prev_pathp, mod_name);
+       return SvPVX(*prev_pathp);
     }
 
     return Nullch;
 }
 
 char *
-win32_get_privlib(pTHX_ char *pl)
+win32_get_privlib(char *pl)
 {
-    dPERLOBJ;
+    dTHXo;
     char *stdlib = "lib";
     char buffer[MAX_PATH+1];
     SV *sv = Nullsv;
 
     /* $stdlib = $HKCU{"lib-$]"} || $HKLM{"lib-$]"} || $HKCU{"lib"} || $HKLM{"lib"} || "";  */
     sprintf(buffer, "%s-%s", stdlib, pl);
-    if (!get_regstr(buffer, sv))
-       (void)get_regstr(stdlib, sv);
+    if (!get_regstr(buffer, &sv))
+       (void)get_regstr(stdlib, &sv);
 
     /* $stdlib .= ";$EMD/../../lib" */
-    return get_emd_part(sv, stdlib, ARCHNAME, "bin", Nullch);
+    return get_emd_part(&sv, stdlib, ARCHNAME, "bin", Nullch);
 }
 
 char *
-win32_get_sitelib(pTHX_ char *pl)
+win32_get_sitelib(char *pl)
 {
-    dPERLOBJ;
+    dTHXo;
     char *sitelib = "sitelib";
     char regstr[40];
     char pathstr[MAX_PATH+1];
@@ -288,25 +289,25 @@ win32_get_sitelib(pTHX_ char *pl)
 
     /* $HKCU{"sitelib-$]"} || $HKLM{"sitelib-$]"} . ---; */
     sprintf(regstr, "%s-%s", sitelib, pl);
-    (void)get_regstr(regstr, sv1);
+    (void)get_regstr(regstr, &sv1);
 
     /* $sitelib .=
      * ";$EMD/" . ((-d $EMD/../../../$]) ? "../../.." : "../.."). "/site/$]/lib";  */
     sprintf(pathstr, "site/%s/lib", pl);
-    (void)get_emd_part(sv1, pathstr, ARCHNAME, "bin", pl, Nullch);
+    (void)get_emd_part(&sv1, pathstr, ARCHNAME, "bin", pl, Nullch);
     if (!sv1 && strlen(pl) == 7) {
        /* pl may have been SUBVERSION-specific; try again without
         * SUBVERSION */
        sprintf(pathstr, "site/%.5s/lib", pl);
-       (void)get_emd_part(sv1, pathstr, ARCHNAME, "bin", pl, Nullch);
+       (void)get_emd_part(&sv1, pathstr, ARCHNAME, "bin", pl, Nullch);
     }
 
     /* $HKCU{'sitelib'} || $HKLM{'sitelib'} . ---; */
-    (void)get_regstr(sitelib, sv2);
+    (void)get_regstr(sitelib, &sv2);
 
     /* $sitelib .=
      * ";$EMD/" . ((-d $EMD/../../../$]) ? "../../.." : "../.."). "/site/lib";  */
-    (void)get_emd_part(sv2, "site/lib", ARCHNAME, "bin", pl, Nullch);
+    (void)get_emd_part(&sv2, "site/lib", ARCHNAME, "bin", pl, Nullch);
 
     if (!sv1 && !sv2)
        return Nullch;
@@ -424,7 +425,7 @@ tokenize(char *str, char **dest, char ***destv)
     char **retvstart = 0;
     int items = -1;
     if (str) {
-       dPERLOBJ;
+       dTHXo;
        int slen = strlen(str);
        register char *ret;
        register char **retv;
@@ -467,7 +468,7 @@ tokenize(char *str, char **dest, char ***destv)
 static void
 get_shell(void)
 {
-    dPERLOBJ;
+    dTHXo;
     if (!w32_perlshell_tokens) {
        /* we don't use COMSPEC here for two reasons:
         *  1. the same reason perl on UNIX doesn't use SHELL--rampant and
@@ -485,9 +486,9 @@ get_shell(void)
 }
 
 int
-do_aspawn(pTHX_ void *vreally, void **vmark, void **vsp)
+do_aspawn(void *vreally, void **vmark, void **vsp)
 {
-    dPERLOBJ;
+    dTHXo;
     SV *really = (SV*)vreally;
     SV **mark = (SV**)vmark;
     SV **sp = (SV**)vsp;
@@ -550,9 +551,9 @@ do_aspawn(pTHX_ void *vreally, void **vmark, void **vsp)
 }
 
 int
-do_spawn2(pTHX_ char *cmd, int exectype)
+do_spawn2(char *cmd, int exectype)
 {
-    dPERLOBJ;
+    dTHXo;
     char **a;
     char *s;
     char **argv;
@@ -640,21 +641,21 @@ do_spawn2(pTHX_ char *cmd, int exectype)
 }
 
 int
-do_spawn(pTHX_ char *cmd)
+do_spawn(char *cmd)
 {
-    return do_spawn2(aTHX_ cmd, EXECF_SPAWN);
+    return do_spawn2(cmd, EXECF_SPAWN);
 }
 
 int
-do_spawn_nowait(pTHX_ char *cmd)
+do_spawn_nowait(char *cmd)
 {
-    return do_spawn2(aTHX_ cmd, EXECF_SPAWN_NOWAIT);
+    return do_spawn2(cmd, EXECF_SPAWN_NOWAIT);
 }
 
 bool
 Perl_do_exec(pTHX_ char *cmd)
 {
-    do_spawn2(aTHX_ cmd, EXECF_EXEC);
+    do_spawn2(cmd, EXECF_EXEC);
     return FALSE;
 }
 
@@ -662,11 +663,10 @@ Perl_do_exec(pTHX_ char *cmd)
  * (separated by nulls) and when one of the other dir functions is called
  * return the pointer to the current file name.
  */
-DIR *
+DllExport DIR *
 win32_opendir(char *filename)
 {
-    dTHX;
-    dPERLOBJ;
+    dTHXo;
     DIR                        *p;
     long               len;
     long               idx;
@@ -748,7 +748,7 @@ win32_opendir(char *filename)
            ? FindNextFileW(fh, &wFindData)
            : FindNextFileA(fh, &aFindData)) {
        if (USING_WIDE()) {
-       W2AHELPER(wFindData.cFileName, buffer, sizeof(buffer));
+           W2AHELPER(wFindData.cFileName, buffer, sizeof(buffer));
        }
        /* ptr is set above to the correct area */
        len = strlen(ptr);
@@ -772,7 +772,7 @@ win32_opendir(char *filename)
 /* Readdir just returns the current string pointer and bumps the
  * string pointer to the nDllExport entry.
  */
-struct direct *
+DllExport struct direct *
 win32_readdir(DIR *dirp)
 {
     int         len;
@@ -800,7 +800,7 @@ win32_readdir(DIR *dirp)
 }
 
 /* Telldir returns the current string pointer position */
-long
+DllExport long
 win32_telldir(DIR *dirp)
 {
     return (long) dirp->curr;
@@ -810,24 +810,24 @@ win32_telldir(DIR *dirp)
 /* Seekdir moves the string pointer to a previously saved position
  *(Saved by telldir).
  */
-void
+DllExport void
 win32_seekdir(DIR *dirp, long loc)
 {
     dirp->curr = (char *)loc;
 }
 
 /* Rewinddir resets the string pointer to the start */
-void
+DllExport void
 win32_rewinddir(DIR *dirp)
 {
     dirp->curr = dirp->start;
 }
 
 /* free the memory allocated by opendir */
-int
+DllExport int
 win32_closedir(DIR *dirp)
 {
-    dPERLOBJ;
+    dTHXo;
     Safefree(dirp->start);
     Safefree(dirp);
     return 1;
@@ -887,7 +887,7 @@ setgid(gid_t agid)
 char *
 getlogin(void)
 {
-    dTHX;
+    dTHXo;
     char *buf = getlogin_buffer;
     DWORD size = sizeof(getlogin_buffer);
     if (GetUserName(buf,&size))
@@ -905,7 +905,7 @@ chown(const char *path, uid_t owner, gid_t group)
 static long
 find_pid(int pid)
 {
-    dPERLOBJ;
+    dTHXo;
     long child;
     for (child = 0 ; child < w32_num_children ; ++child) {
        if (w32_child_pids[child] == pid)
@@ -918,7 +918,7 @@ static void
 remove_dead_process(long child)
 {
     if (child >= 0) {
-       dPERLOBJ;
+       dTHXo;
        CloseHandle(w32_child_handles[child]);
        Copy(&w32_child_handles[child+1], &w32_child_handles[child],
             (w32_num_children-child-1), HANDLE);
@@ -956,7 +956,7 @@ win32_sleep(unsigned int t)
 DllExport int
 win32_stat(const char *path, struct stat *buffer)
 {
-    dPERLOBJ;
+    dTHXo;
     char       t[MAX_PATH+1]; 
     int                l = strlen(path);
     int                res;
@@ -983,7 +983,6 @@ win32_stat(const char *path, struct stat *buffer)
        }
     }
     if (USING_WIDE()) {
-       dTHX;
        A2WHELPER(path, wbuffer, sizeof(wbuffer));
        res = _wstat(wbuffer, (struct _stat *)buffer);
     }
@@ -1128,8 +1127,7 @@ win32_longpath(char *path)
 DllExport char *
 win32_getenv(const char *name)
 {
-    dTHX;
-    dPERLOBJ;
+    dTHXo;
     WCHAR wBuffer[MAX_PATH];
     DWORD needlen;
     SV *curitem = Nullsv;
@@ -1150,7 +1148,7 @@ win32_getenv(const char *name)
                                                  (WCHAR*)SvPVX(curitem),
                                                  needlen);
            } while (needlen >= SvLEN(curitem)/sizeof(WCHAR));
-           SvCUR_set(curitem, needlen*sizeof(WCHAR));
+           SvCUR_set(curitem, (needlen*sizeof(WCHAR))+1);
            acuritem = sv_2mortal(newSVsv(curitem));
            W2AHELPER((WCHAR*)SvPVX(acuritem), SvPVX(curitem), SvCUR(curitem));
        }
@@ -1167,7 +1165,7 @@ win32_getenv(const char *name)
        /* allow any environment variables that begin with 'PERL'
           to be stored in the registry */
        if (strncmp(name, "PERL", 4) == 0)
-           (void)get_regstr(name, curitem);
+           (void)get_regstr(name, &curitem);
     }
     if (curitem && SvCUR(curitem))
        return SvPVX(curitem);
@@ -1178,7 +1176,7 @@ win32_getenv(const char *name)
 DllExport int
 win32_putenv(const char *name)
 {
-    dPERLOBJ;
+    dTHXo;
     char* curitem;
     char* val;
     WCHAR* wCuritem;
@@ -1187,10 +1185,9 @@ win32_putenv(const char *name)
 
     if (name) {
        if (USING_WIDE()) {
-           dTHX;
            length = strlen(name)+1;
            New(1309,wCuritem,length,WCHAR);
-           A2WHELPER(name, wCuritem, length*2);
+           A2WHELPER(name, wCuritem, length*sizeof(WCHAR));
            wVal = wcschr(wCuritem, '=');
            if(wVal) {
                *wVal++ = '\0';
@@ -1290,7 +1287,7 @@ filetime_from_time(PFILETIME pFileTime, time_t Time)
 DllExport int
 win32_utime(const char *filename, struct utimbuf *times)
 {
-    dPERLOBJ;
+    dTHXo;
     HANDLE handle;
     FILETIME ftCreate;
     FILETIME ftAccess;
@@ -1300,7 +1297,6 @@ win32_utime(const char *filename, struct utimbuf *times)
 
     int rc;
     if (USING_WIDE()) {
-       dTHX;
        A2WHELPER(filename, wbuffer, sizeof(wbuffer));
        rc = _wutime(wbuffer, (struct _utimbuf*)times);
     }
@@ -1436,7 +1432,7 @@ win32_uname(struct utsname *name)
 DllExport int
 win32_waitpid(int pid, int *status, int flags)
 {
-    dPERLOBJ;
+    dTHXo;
     int retval = -1;
     if (pid == -1) 
        return win32_wait(status);
@@ -1474,7 +1470,7 @@ win32_wait(int *status)
     /* XXX this wait emulation only knows about processes
      * spawned via win32_spawnvp(P_NOWAIT, ...).
      */
-    dPERLOBJ;
+    dTHXo;
     int i, retval;
     DWORD exitcode, waitcode;
 
@@ -1511,7 +1507,7 @@ static UINT timerid = 0;
 
 static VOID CALLBACK TimerProc(HWND win, UINT msg, UINT id, DWORD time)
 {
-    dPERLOBJ;
+    dTHXo;
     KillTimer(NULL,timerid);
     timerid=0;  
     sighandler(14);
@@ -1529,7 +1525,7 @@ win32_alarm(unsigned int sec)
      * Snag is unless something is looking at the message queue
      * nothing happens :-(
      */ 
-    dPERLOBJ;
+    dTHXo;
     if (sec)
      {
       timerid = SetTimer(NULL,timerid,sec*1000,(TIMERPROC)TimerProc);
@@ -1557,7 +1553,7 @@ win32_crypt(const char *txt, const char *salt)
 {
 #ifdef HAVE_DES_FCRYPT
     dTHR;
-    dPERLOBJ;
+    dTHXo;
     return des_fcrypt(txt, salt, crypt_buffer);
 #else
     die("The crypt() function is unimplemented due to excessive paranoia.");
@@ -1680,7 +1676,7 @@ win32_flock(int fd, int oper)
     HANDLE fh;
 
     if (!IsWinNT()) {
-       dPERLOBJ;
+       dTHXo;
        Perl_croak_nocontext("flock() unimplemented on this platform");
        return -1;
     }
@@ -1779,7 +1775,7 @@ win32_strerror(int e)
     DWORD source = 0;
 
     if (e < 0 || e > sys_nerr) {
-        dTHX;
+        dTHXo;
        if (e < 0)
            e = GetLastError();
 
@@ -1793,7 +1789,7 @@ win32_strerror(int e)
 }
 
 DllExport void
-win32_str_os_error(pTHX_ void *sv, DWORD dwErr)
+win32_str_os_error(void *sv, DWORD dwErr)
 {
     DWORD dwLen;
     char *sMsg;
@@ -1816,7 +1812,7 @@ win32_str_os_error(pTHX_ void *sv, DWORD dwErr)
                            dwErr, GetLastError());
     }
     if (sMsg) {
-       dPERLOBJ;
+       dTHXo;
        sv_setpvn((SV*)sv, sMsg, dwLen);
        LocalFree(sMsg);
     }
@@ -1870,13 +1866,16 @@ win32_fwrite(const void *buf, size_t size, size_t count, FILE *fp)
 DllExport FILE *
 win32_fopen(const char *filename, const char *mode)
 {
-    dPERLOBJ;
+    dTHXo;
     WCHAR wMode[MODE_SIZE], wBuffer[MAX_PATH];
+    
+    if (!*filename)
+       return NULL;
+
     if (stricmp(filename, "/dev/null")==0)
        filename = "NUL";
 
     if (USING_WIDE()) {
-       dTHX;
        A2WHELPER(mode, wMode, sizeof(wMode));
        A2WHELPER(filename, wBuffer, sizeof(wBuffer));
        return _wfopen(wBuffer, wMode);
@@ -1892,10 +1891,9 @@ win32_fopen(const char *filename, const char *mode)
 DllExport FILE *
 win32_fdopen(int handle, const char *mode)
 {
-    dPERLOBJ;
+    dTHXo;
     WCHAR wMode[MODE_SIZE];
     if (USING_WIDE()) {
-       dTHX;
        A2WHELPER(mode, wMode, sizeof(wMode));
        return _wfdopen(handle, wMode);
     }
@@ -1905,13 +1903,12 @@ win32_fdopen(int handle, const char *mode)
 DllExport FILE *
 win32_freopen(const char *path, const char *mode, FILE *stream)
 {
-    dPERLOBJ;
+    dTHXo;
     WCHAR wMode[MODE_SIZE], wBuffer[MAX_PATH];
     if (stricmp(path, "/dev/null")==0)
        path = "NUL";
 
     if (USING_WIDE()) {
-       dTHX;
        A2WHELPER(mode, wMode, sizeof(wMode));
        A2WHELPER(path, wBuffer, sizeof(wBuffer));
        return _wfreopen(wBuffer, wMode, stream);
@@ -2082,9 +2079,8 @@ win32_popen(const char *command, const char *mode)
 
     /* start the child */
     {
-       dTHX;
-       dPERLOBJ;
-       if ((childpid = do_spawn_nowait(aTHX_ (char*)command)) == -1)
+       dTHXo;
+       if ((childpid = do_spawn_nowait((char*)command)) == -1)
            goto cleanup;
 
        /* revert stdfd to whatever it was before */
@@ -2126,8 +2122,7 @@ win32_pclose(FILE *pf)
 #ifdef USE_RTL_POPEN
     return _pclose(pf);
 #else
-    dTHX;
-    dPERLOBJ;
+    dTHXo;
     int childpid, status;
     SV *sv;
 
@@ -2163,9 +2158,8 @@ win32_rename(const char *oname, const char *newname)
      * it doesn't work under Windows95!
      */
     if (IsWinNT()) {
-       dPERLOBJ;
+       dTHXo;
        if (USING_WIDE()) {
-           dTHX;
            A2WHELPER(oname, wOldName, sizeof(wOldName));
            A2WHELPER(newname, wNewName, sizeof(wNewName));
            bResult = MoveFileExW(wOldName,wNewName,
@@ -2289,7 +2283,7 @@ win32_tell(int fd)
 DllExport int
 win32_open(const char *path, int flag, ...)
 {
-    dPERLOBJ;
+    dTHXo;
     va_list ap;
     int pmode;
     WCHAR wBuffer[MAX_PATH];
@@ -2302,7 +2296,6 @@ win32_open(const char *path, int flag, ...)
        path = "NUL";
 
     if (USING_WIDE()) {
-       dTHX;
        A2WHELPER(path, wBuffer, sizeof(wBuffer));
        return _wopen(wBuffer, flag, pmode);
     }
@@ -2366,7 +2359,7 @@ win32_chdir(const char *dir)
 static char *
 create_command_line(const char* command, const char * const *args)
 {
-    dPERLOBJ;
+    dTHXo;
     int index;
     char *cmd, *ptr, *arg;
     STRLEN len = strlen(command) + 1;
@@ -2390,7 +2383,7 @@ create_command_line(const char* command, const char * const *args)
 static char *
 qualified_path(const char *cmd)
 {
-    dPERLOBJ;
+    dTHXo;
     char *pathstr;
     char *fullcmd, *curfullcmd;
     STRLEN cmdlen = 0;
@@ -2492,7 +2485,7 @@ win32_spawnvp(int mode, const char *cmdname, const char *const *argv)
 #ifdef USE_RTL_SPAWNVP
     return spawnvp(mode, cmdname, (char * const *)argv);
 #else
-    dPERLOBJ;
+    dTHXo;
     DWORD ret;
     STARTUPINFO StartupInfo;
     PROCESS_INFORMATION ProcessInformation;
@@ -2788,9 +2781,9 @@ win32_get_osfhandle(int fd)
 }
 
 DllExport void*
-win32_dynaload(aTHX_ const char*filename)
+win32_dynaload(const char* filename)
 {
-    dPERLOBJ;
+    dTHXo;
     HMODULE hModule;
     if (USING_WIDE()) {
        WCHAR wfilename[MAX_PATH];
@@ -2810,8 +2803,7 @@ win32_add_host(char *nameId, void *data)
      * This must be called before the script is parsed,
      * therefore no locking of threads is needed
      */
-    dTHX;
-    dPERLOBJ;
+    dTHXo;
     struct host_link *link;
     New(1314, link, 1, struct host_link);
     link->host_data = data;
@@ -2824,8 +2816,7 @@ win32_add_host(char *nameId, void *data)
 DllExport void *
 win32_get_host_data(char *nameId)
 {
-    dTHX;
-    dPERLOBJ;
+    dTHXo;
     struct host_link *link = w32_host_link;
     while(link) {
        if(strEQ(link->nameId, nameId))
@@ -3216,9 +3207,9 @@ XS(w32_CopyFile)
 }
 
 void
-Perl_init_os_extras(pTHX)
+Perl_init_os_extras(void)
 {
-    dPERLOBJ;
+    dTHXo;
     char *file = __FILE__;
     dXSUB_SYS;
 
index 38d8688..1110f7e 100644 (file)
@@ -9,12 +9,13 @@
 #ifndef  _INC_WIN32_PERL5
 #define  _INC_WIN32_PERL5
 
-#ifdef PERL_OBJECT
+#if defined(PERL_OBJECT) || defined(PERL_CAPI)
 #  define DYNAMIC_ENV_FETCH
 #  define ENV_HV_NAME "___ENV_HV_NAME___"
 #  define HAS_GETENV_LEN
 #  define prime_env_iter()
 #  define WIN32IO_IS_STDIO             /* don't pull in custom stdio layer */
+#  define WIN32SCK_IS_STDSCK           /* don't pull in custom wsock layer */
 #  ifdef PERL_GLOBAL_STRUCT
 #    error PERL_GLOBAL_STRUCT cannot be defined with PERL_OBJECT
 #  endif
 #  define win32_get_sitelib PerlEnv_sitelib_path
 #endif
 
+#if defined(PERL_IMPLICIT_CONTEXT)
+#  define PERL_GET_INTERP      ((PerlInterpreter*)GetPerlInterpreter())
+#  define PERL_SET_INTERP(i)   (SetPerlInterpreter(i))
+#endif
+
 #ifdef __GNUC__
 typedef long long __int64;
 #  define Win32_Winsock
@@ -188,10 +194,7 @@ typedef long               gid_t;
 typedef unsigned short mode_t;
 #pragma  warning(disable: 4018 4035 4101 4102 4244 4245 4761)
 
-#ifdef PERL_OBJECT
-extern CPerlObj* GetPerlInter(void);
-#define dPERLOBJ CPerlObj* pPerl = GetPerlInter()
-#else /* PERL_OBJECT */
+#ifndef PERL_OBJECT
 
 /* Visual C thinks that a pointer to a member variable is 16 bytes in size. */
 #define STRUCT_MGVTBL_DEFINITION                                       \
@@ -238,8 +241,6 @@ struct mgvtbl {                                                             \
     char       handle_VC_problem[16];                  \
 }
 
-
-#define dPERLOBJ dNOOP
 #endif /* PERL_OBJECT */
 
 #endif /* _MSC_VER */
@@ -299,18 +300,21 @@ extern    int     chown(const char *p, uid_t o, gid_t g);
 #define  init_os_extras Perl_init_os_extras
 
 DllExport void         Perl_win32_init(int *argcp, char ***argvp);
-DllExport void         Perl_init_os_extras(pTHX);
-DllExport void         win32_str_os_error(pTHX_ void *sv, DWORD err);
+DllExport void         Perl_init_os_extras();
+DllExport void         win32_str_os_error(void *sv, DWORD err);
+DllExport int          RunPerl(int argc, char **argv, char **env);
+DllExport bool         SetPerlInterpreter(void* interp);
+DllExport void*                GetPerlInterpreter(void);
 
 #ifndef USE_SOCKETS_AS_HANDLES
 extern FILE *          my_fdopen(int, char *);
 #endif
 extern int             my_fclose(FILE *);
-extern int             do_aspawn(pTHX_ void *really, void **mark, void **sp);
-extern int             do_spawn(pTHX_ char *cmd);
-extern int             do_spawn_nowait(pTHX_ char *cmd);
-extern char *          win32_get_privlib(pTHX_ char *pl);
-extern char *          win32_get_sitelib(pTHX_ char *pl);
+extern int             do_aspawn(void *really, void **mark, void **sp);
+extern int             do_spawn(char *cmd);
+extern int             do_spawn_nowait(char *cmd);
+extern char *          win32_get_privlib(char *pl);
+extern char *          win32_get_sitelib(char *pl);
 extern int             IsWin95(void);
 extern int             IsWinNT(void);
 
@@ -408,8 +412,8 @@ struct thread_intern {
 /* Use CP_ACP when mode is ANSI */
 /* Use CP_UTF8 when mode is UTF8 */
 
-#define A2WHELPER(lpa, lpw, nChars)\
-    lpw[0] = 0, MultiByteToWideChar((IN_UTF8) ? CP_UTF8 : CP_ACP, 0, lpa, -1, lpw, nChars)
+#define A2WHELPER(lpa, lpw, nBytes)\
+    lpw[0] = 0, MultiByteToWideChar((IN_UTF8) ? CP_UTF8 : CP_ACP, 0, lpa, -1, lpw, (nBytes/sizeof(WCHAR)))
 
 #define W2AHELPER(lpw, lpa, nChars)\
     lpa[0] = '\0', WideCharToMultiByte((IN_UTF8) ? CP_UTF8 : CP_ACP, 0, lpw, -1, (LPSTR)lpa, nChars, NULL, NULL)
index e294e73..9abb05f 100644 (file)
@@ -113,6 +113,13 @@ DllExport  void            win32_free(void *block);
 DllExport  int         win32_open_osfhandle(long handle, int flags);
 DllExport  long                win32_get_osfhandle(int fd);
 
+DllExport  DIR*                win32_opendir(char *filename);
+DllExport  struct direct*      win32_readdir(DIR *dirp);
+DllExport  long                win32_telldir(DIR *dirp);
+DllExport  void                win32_seekdir(DIR *dirp, long loc);
+DllExport  void                win32_rewinddir(DIR *dirp);
+DllExport  int         win32_closedir(DIR *dirp);
+
 #ifndef USE_WIN32_RTL_ENV
 DllExport  char*       win32_getenv(const char *name);
 DllExport  int         win32_putenv(const char *name);
index abc6334..49d38f3 100644 (file)
@@ -92,10 +92,10 @@ static int wsock_started = 0;
 void
 start_sockets(void) 
 {
+    dTHXo;
     unsigned short version;
     WSADATA retdata;
     int ret;
-    dPERLOBJ;
 
     /*
      * initalize the winsock interface and insure that it is
@@ -495,8 +495,8 @@ win32_getprotobynumber(int num)
 struct servent *
 win32_getservbyname(const char *name, const char *proto)
 {
+    dTHXo;    
     struct servent *r;
-    dTHX;    
 
     SOCKET_TEST(r = getservbyname(name, proto), NULL);
     if (r) {
@@ -508,8 +508,8 @@ win32_getservbyname(const char *name, const char *proto)
 struct servent *
 win32_getservbyport(int port, const char *proto)
 {
+    dTHXo; 
     struct servent *r;
-    dTHX; 
 
     SOCKET_TEST(r = getservbyport(port, proto), NULL);
     if (r) {
@@ -521,9 +521,9 @@ win32_getservbyport(int port, const char *proto)
 int
 win32_ioctl(int i, unsigned int u, char *data)
 {
+    dTHXo;
     u_long argp = (u_long)data;
     int retval;
-    dPERLOBJ;
 
     if (!wsock_started) {
        Perl_croak_nocontext("ioctl implemented only on sockets");
@@ -562,28 +562,28 @@ win32_inet_addr(const char FAR *cp)
 void
 win32_endhostent() 
 {
-    dPERLOBJ;
+    dTHXo;
     Perl_croak_nocontext("endhostent not implemented!\n");
 }
 
 void
 win32_endnetent()
 {
-    dPERLOBJ;
+    dTHXo;
     Perl_croak_nocontext("endnetent not implemented!\n");
 }
 
 void
 win32_endprotoent()
 {
-    dPERLOBJ;
+    dTHXo;
     Perl_croak_nocontext("endprotoent not implemented!\n");
 }
 
 void
 win32_endservent()
 {
-    dPERLOBJ;
+    dTHXo;
     Perl_croak_nocontext("endservent not implemented!\n");
 }
 
@@ -591,7 +591,7 @@ win32_endservent()
 struct netent *
 win32_getnetent(void) 
 {
-    dPERLOBJ;
+    dTHXo;
     Perl_croak_nocontext("getnetent not implemented!\n");
     return (struct netent *) NULL;
 }
@@ -599,7 +599,7 @@ win32_getnetent(void)
 struct netent *
 win32_getnetbyname(char *name) 
 {
-    dPERLOBJ;
+    dTHXo;
     Perl_croak_nocontext("getnetbyname not implemented!\n");
     return (struct netent *)NULL;
 }
@@ -607,7 +607,7 @@ win32_getnetbyname(char *name)
 struct netent *
 win32_getnetbyaddr(long net, int type) 
 {
-    dPERLOBJ;
+    dTHXo;
     Perl_croak_nocontext("getnetbyaddr not implemented!\n");
     return (struct netent *)NULL;
 }
@@ -615,7 +615,7 @@ win32_getnetbyaddr(long net, int type)
 struct protoent *
 win32_getprotoent(void) 
 {
-    dPERLOBJ;
+    dTHXo;
     Perl_croak_nocontext("getprotoent not implemented!\n");
     return (struct protoent *) NULL;
 }
@@ -623,7 +623,7 @@ win32_getprotoent(void)
 struct servent *
 win32_getservent(void) 
 {
-    dPERLOBJ;
+    dTHXo;
     Perl_croak_nocontext("getservent not implemented!\n");
     return (struct servent *) NULL;
 }
@@ -631,7 +631,7 @@ win32_getservent(void)
 void
 win32_sethostent(int stayopen)
 {
-    dPERLOBJ;
+    dTHXo;
     Perl_croak_nocontext("sethostent not implemented!\n");
 }
 
@@ -639,7 +639,7 @@ win32_sethostent(int stayopen)
 void
 win32_setnetent(int stayopen)
 {
-    dPERLOBJ;
+    dTHXo;
     Perl_croak_nocontext("setnetent not implemented!\n");
 }
 
@@ -647,7 +647,7 @@ win32_setnetent(int stayopen)
 void
 win32_setprotoent(int stayopen)
 {
-    dPERLOBJ;
+    dTHXo;
     Perl_croak_nocontext("setprotoent not implemented!\n");
 }
 
@@ -655,7 +655,7 @@ win32_setprotoent(int stayopen)
 void
 win32_setservent(int stayopen)
 {
-    dPERLOBJ;
+    dTHXo;
     Perl_croak_nocontext("setservent not implemented!\n");
 }