This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Special casing had become a little bit more complex in Unicode 3.1.1.
[perl5.git] / embed.pl
index 82ebfd2..8460561 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -1,9 +1,5 @@
 #!/usr/bin/perl -w
 
-BEGIN {
-    unshift @INC, "./lib";
-}
-
 require 5.003; # keep this compatible, an old perl is all we may have before
                 # we build the new one
 
@@ -270,7 +266,7 @@ sub hide ($$) {
 
 sub bincompat_var ($$) {
     my ($pfx, $sym) = @_;
-    my $arg = ($pfx eq 'G' ? 'NULL' : 'aTHXo');
+    my $arg = ($pfx eq 'G' ? 'NULL' : 'aTHX');
     undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr($arg))");
 }
 
@@ -335,7 +331,6 @@ print EM <<'END';
 
 /* Hide global symbols */
 
-#if !defined(PERL_OBJECT)
 #if !defined(PERL_IMPLICIT_CONTEXT)
 
 END
@@ -429,43 +424,11 @@ for $sym (sort keys %ppsym) {
 print EM <<'END';
 
 #endif /* PERL_IMPLICIT_CONTEXT */
-#else  /* PERL_OBJECT */
 
 END
 
-walk_table {
-    my $ret = "";
-    if (@_ == 1) {
-       my $arg = shift;
-       $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
-    }
-    else {
-       my ($flags,$retval,$func,@args) = @_;
-       if ($flags =~ /s/) {
-           $ret .= hide("S_$func","CPerlObj::S_$func") if $flags !~ /j/;
-           $ret .= hide($func,"S_$func");
-       }
-       elsif ($flags =~ /p/) {
-           $ret .= hide("Perl_$func","CPerlObj::Perl_$func") if $flags !~ /j/;
-           $ret .= hide($func,"Perl_$func");
-       }
-       else {
-           $ret .= hide($func,"CPerlObj::$func") if $flags !~ /j/;
-       }
-    }
-    $ret;
-} \*EM;
-
-for $sym (sort keys %ppsym) {
-    $sym =~ s/^Perl_//;
-    print EM hide("Perl_$sym", "CPerlObj::Perl_$sym");
-    print EM hide($sym, "Perl_$sym");
-}
-
 print EM <<'END';
 
-#endif /* PERL_OBJECT */
-
 /* Compatibility stubs.  Compile extensions with -DPERL_NOCOMPAT to
    disable them.
  */
@@ -506,7 +469,7 @@ print EM <<'END';
    an extra argument but grab the context pointer using the macro
    dTHX.
  */
-#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_OBJECT)
+#if defined(PERL_IMPLICIT_CONTEXT)
 #  define croak                                Perl_croak_nocontext
 #  define deb                          Perl_deb_nocontext
 #  define die                          Perl_die_nocontext
@@ -558,14 +521,13 @@ print EM <<'END';
 /* (Doing namespace management portably in C is really gross.) */
 
 /*
-   The following combinations of MULTIPLICITY, USE_THREADS, PERL_OBJECT
+   The following combinations of MULTIPLICITY, USE_5005THREADS
    and PERL_IMPLICIT_CONTEXT are supported:
      1) none
      2) MULTIPLICITY   # supported for compatibility
      3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT
-     4) USE_THREADS && PERL_IMPLICIT_CONTEXT
-     5) MULTIPLICITY && USE_THREADS && PERL_IMPLICIT_CONTEXT
-     6) PERL_OBJECT && PERL_IMPLICIT_CONTEXT
+     4) USE_5005THREADS && PERL_IMPLICIT_CONTEXT
+     5) MULTIPLICITY && USE_5005THREADS && PERL_IMPLICIT_CONTEXT
 
    All other combinations of these flags are errors.
 
@@ -590,11 +552,7 @@ for $sym (sort keys %thread) {
 
 print EM <<'END';
 
-#  if defined(PERL_OBJECT)
-#    include "error: PERL_OBJECT + MULTIPLICITY don't go together"
-#  endif
-
-#  if defined(USE_THREADS)
+#  if defined(USE_5005THREADS)
 /* case 5 above */
 
 END
@@ -605,7 +563,7 @@ for $sym (sort keys %intrp) {
 
 print EM <<'END';
 
-#  else                /* !USE_THREADS */
+#  else                /* !USE_5005THREADS */
 /* cases 2 and 3 above */
 
 END
@@ -616,28 +574,10 @@ for $sym (sort keys %intrp) {
 
 print EM <<'END';
 
-#  endif       /* USE_THREADS */
+#  endif       /* USE_5005THREADS */
 
 #else  /* !MULTIPLICITY */
 
-#  if defined(PERL_OBJECT)
-/* case 6 above */
-
-END
-
-for $sym (sort keys %thread) {
-    print EM multon($sym,'T','aTHXo->interp.');
-}
-
-
-for $sym (sort keys %intrp) {
-    print EM multon($sym,'I','aTHXo->interp.');
-}
-
-print EM <<'END';
-
-#  else        /* !PERL_OBJECT */
-
 /* cases 1 and 4 above */
 
 END
@@ -648,7 +588,7 @@ for $sym (sort keys %intrp) {
 
 print EM <<'END';
 
-#    if defined(USE_THREADS)
+#  if defined(USE_5005THREADS)
 /* case 4 above */
 
 END
@@ -659,7 +599,7 @@ for $sym (sort keys %thread) {
 
 print EM <<'END';
 
-#    else      /* !USE_THREADS */
+#  else        /* !USE_5005THREADS */
 /* case 1 above */
 
 END
@@ -670,8 +610,7 @@ for $sym (sort keys %thread) {
 
 print EM <<'END';
 
-#    endif     /* USE_THREADS */
-#  endif       /* PERL_OBJECT */
+#  endif       /* USE_5005THREADS */
 #endif /* MULTIPLICITY */
 
 #if defined(PERL_GLOBAL_STRUCT)
@@ -711,63 +650,6 @@ END
 
 close(EM);
 
-unlink 'objXSUB.h';
-open(OBX, '> objXSUB.h')
-    or die "Can't create objXSUB.h: $!\n";
-
-print OBX <<'EOT';
-/* !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
-   This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
-   perlvars.h and thrdvar.h.  Any changes made here will be lost!
-*/
-
-#ifndef __objXSUB_h__
-#define __objXSUB_h__
-
-/* method calls via pPerl (static functions without a "this" pointer need these) */
-
-#if defined(PERL_CORE) && defined(PERL_OBJECT)
-
-/* XXX soon to be eliminated, only a few things in PERLCORE need these now */
-
-EOT
-
-walk_table {
-    my $ret = "";
-    if (@_ == 1) {
-       my $arg = shift;
-       $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
-    }
-    else {
-       my ($flags,$retval,$func,@args) = @_;
-       if ($flags =~ /A/ && $flags !~ /j/) { # API function needing macros
-           if ($flags =~ /p/) {
-               $ret .= undefine("Perl_$func") . hide("Perl_$func","pPerl->Perl_$func");
-               $ret .= undefine($func) . hide($func,"Perl_$func");
-           }
-           else {
-               $ret .= undefine($func) . hide($func,"pPerl->$func");
-           }
-       }
-    }
-    $ret;
-} \*OBX;
-
-# NOTE: not part of API
-#for $sym (sort keys %ppsym) {
-#    $sym =~ s/^Perl_//;
-#    print OBX undefine("Perl_$sym") . hide("Perl_$sym", "pPerl->Perl_$sym");
-#    print OBX undefine($sym) . hide($sym, "Perl_$sym");
-#}
-
-print OBX <<'EOT';
-
-#endif  /* PERL_CORE && PERL_OBJECT */
-#endif /* __objXSUB_h__ */
-EOT
-
-close(OBX);
-
 unlink 'perlapi.h';
 unlink 'perlapi.c';
 open(CAPI, '> perlapi.c') or die "Can't create perlapi.c: $!\n";
@@ -783,14 +665,7 @@ print CAPIH <<'EOT';
 #ifndef __perlapi_h__
 #define __perlapi_h__
 
-#if defined(PERL_OBJECT) || defined (MULTIPLICITY)
-
-#if defined(PERL_OBJECT)
-#  undef  aTHXo
-#  define aTHXo                        pPerl
-#  undef  aTHXo_
-#  define aTHXo_               aTHXo,
-#endif /* PERL_OBJECT */
+#if defined (MULTIPLICITY)
 
 START_EXTERN_C
 
@@ -798,9 +673,9 @@ START_EXTERN_C
 #undef PERLVARA
 #undef PERLVARI
 #undef PERLVARIC
-#define PERLVAR(v,t)   EXTERN_C t* Perl_##v##_ptr(pTHXo);
+#define PERLVAR(v,t)   EXTERN_C t* Perl_##v##_ptr(pTHX);
 #define PERLVARA(v,n,t)        typedef t PL_##v##_t[n];                        \
-                       EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHXo);
+                       EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX);
 #define PERLVARI(v,t,i)        PERLVAR(v,t)
 #define PERLVARIC(v,t,i) PERLVAR(v, const t)
 
@@ -850,7 +725,7 @@ EXT void *PL_force_link_funcs[] = {
 };
 #endif /* DOINIT */
 
-START_EXTERN_C
+END_EXTERN_C
 
 #endif /* PERL_NO_FORCE_LINK */
 
@@ -873,7 +748,7 @@ foreach $sym (sort keys %globvar) {
 print CAPIH <<'EOT';
 
 #endif /* !PERL_CORE */
-#endif /* PERL_OBJECT || MULTIPLICITY */
+#endif /* MULTIPLICITY */
 
 #endif /* __perlapi_h__ */
 
@@ -890,7 +765,7 @@ print CAPI <<'EOT';
 #include "perl.h"
 #include "perlapi.h"
 
-#if defined(PERL_OBJECT) || defined (MULTIPLICITY)
+#if defined (MULTIPLICITY)
 
 /* accessor functions for Perl variables (provides binary compatibility) */
 START_EXTERN_C
@@ -900,17 +775,10 @@ START_EXTERN_C
 #undef PERLVARI
 #undef PERLVARIC
 
-#if defined(PERL_OBJECT)
-#define PERLVAR(v,t)   t* Perl_##v##_ptr(pTHXo)                        \
-                       { return &(aTHXo->interp.v); }
-#define PERLVARA(v,n,t)        PL_##v##_t* Perl_##v##_ptr(pTHXo)               \
-                       { return &(aTHXo->interp.v); }
-#else  /* MULTIPLICITY */
 #define PERLVAR(v,t)   t* Perl_##v##_ptr(pTHX)                         \
                        { return &(aTHX->v); }
 #define PERLVARA(v,n,t)        PL_##v##_t* Perl_##v##_ptr(pTHX)                \
                        { return &(aTHX->v); }
-#endif
 
 #define PERLVARI(v,t,i)        PERLVAR(v,t)
 #define PERLVARIC(v,t,i) PERLVAR(v, const t)
@@ -920,12 +788,12 @@ START_EXTERN_C
 
 #undef PERLVAR
 #undef PERLVARA
-#define PERLVAR(v,t)   t* Perl_##v##_ptr(pTHXo)                        \
+#define PERLVAR(v,t)   t* Perl_##v##_ptr(pTHX                        \
                        { return &(PL_##v); }
-#define PERLVARA(v,n,t)        PL_##v##_t* Perl_##v##_ptr(pTHXo)               \
+#define PERLVARA(v,n,t)        PL_##v##_t* Perl_##v##_ptr(pTHX               \
                        { return &(PL_##v); }
 #undef PERLVARIC
-#define PERLVARIC(v,t,i)       const t* Perl_##v##_ptr(pTHXo)          \
+#define PERLVARIC(v,t,i)       const t* Perl_##v##_ptr(pTHX          \
                        { return (const t *)&(PL_##v); }
 #include "perlvars.h"
 
@@ -934,14 +802,16 @@ START_EXTERN_C
 #undef PERLVARI
 #undef PERLVARIC
 
-#if defined(PERL_OBJECT)
-
-/* C-API layer for PERL_OBJECT */
+END_EXTERN_C
 
+#endif /* MULTIPLICITY */
 EOT
 
+close(CAPI);
+
 # functions that take va_list* for implementing vararg functions
 # NOTE: makedef.pl must be updated if you add symbols to %vfuncs
+# XXX %vfuncs currently unused
 my %vfuncs = qw(
     Perl_croak                 Perl_vcroak
     Perl_warn                  Perl_vwarn
@@ -960,138 +830,6 @@ my %vfuncs = qw(
     Perl_default_protect       Perl_vdefault_protect
 );
 
-sub emit_func {
-    my ($addcontext, $rettype,$func,@args) = @_;
-    my @aargs = @args;
-    my $a;
-    for $a (@aargs) { $a =~ s/^.*\b(\w+)$/$1/ }
-    my $ctxarg = '';
-    if (not $addcontext) {
-       $ctxarg = 'pTHXo';
-       $ctxarg .= '_ ' if @args;
-    }
-    my $decl = '';
-    if ($addcontext) {
-       $decl .= "    dTHXo;\n";
-    }
-    local $" = ', ';
-    my $return = ($rettype =~ /^\s*(void|Free_t|Signal_t)\s*$/
-                 ? '' : 'return ');
-    my $emitval = '';
-    if (@args and $args[$#args] =~ /\.\.\./) {
-       pop @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)
-{
-$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
-for $sym (qw(
-               perl_construct
-               perl_destruct
-               perl_free
-               perl_run
-               perl_parse
-               ))
-{
-    $skipapi_funcs{$sym}++;
-}
-
-walk_table {
-    my $ret = "";
-    if (@_ == 1) {
-       my $arg = shift;
-       $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
-    }
-    else {
-       my ($flags,$retval,$func,@args) = @_;
-       return $ret if exists $skipapi_funcs{$func};
-       if ($flags =~ /A/ && $flags !~ /j/) { # in public API, needed for XSUBS
-           $ret .= "\n";
-           my $addctx = 1 if $flags =~ /n/;
-           if ($flags =~ /p/) {
-               $ret .= undefine("Perl_$func");
-               $ret .= emit_func($addctx,$retval,"Perl_$func",@args);
-           }
-           else {
-               $ret .= undefine($func);
-               $ret .= emit_func($addctx,$retval,$func,@args);
-           }
-       }
-    }
-    $ret;
-} \*CAPI;
-
-# NOTE: not part of the API
-#for $sym (sort keys %ppsym) {
-#    $sym =~ s/^Perl_//;
-#    print CAPI "\n";
-#    print CAPI undefine("Perl_$sym");
-#    if ($sym =~ /^ck_/) {
-#      print CAPI emit_func(0, 'OP *',"Perl_$sym",'OP *o');
-#    }
-#   else {                                     # pp_foo
-#      print CAPI emit_func(0, 'OP *',"Perl_$sym");
-#    }
-#}
-
-print CAPI <<'EOT';
-
-#undef Perl_fprintf_nocontext
-int
-Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...)
-{
-    dTHXo;
-    va_list(arglist);
-    va_start(arglist, format);
-    return (*PL_StdIO->pVprintf)(PL_StdIO, stream, format, arglist);
-}
-
-#undef Perl_printf_nocontext
-int
-Perl_printf_nocontext(const char *format, ...)
-{
-    dTHXo;
-    va_list(arglist);
-    va_start(arglist, format);
-    return (*PL_StdIO->pVprintf)(PL_StdIO, PerlIO_stdout(), format, arglist);
-}
-
-END_EXTERN_C
-
-#endif /* PERL_OBJECT */
-#endif /* PERL_OBJECT || MULTIPLICITY */
-EOT
-
-close(CAPI);
-
 # autogenerate documentation from comments in source files
 
 my %apidocs;
@@ -1322,7 +1060,6 @@ __END__
 :      f               function takes printf style format string, varargs
 :      r               function never returns
 :       o              has no compatibility macro (#define foo Perl_foo)
-:       j              not a member of CPerlObj
 :       x              not exported
 :       M              may change
 :
@@ -1334,24 +1071,24 @@ __END__
 START_EXTERN_C
 
 #if defined(PERL_IMPLICIT_SYS)
-Ajno   |PerlInterpreter*       |perl_alloc_using \
+Ano    |PerlInterpreter*       |perl_alloc_using \
                                |struct IPerlMem* m|struct IPerlMem* ms \
                                |struct IPerlMem* mp|struct IPerlEnv* e \
                                |struct IPerlStdIO* io|struct IPerlLIO* lio \
                                |struct IPerlDir* d|struct IPerlSock* s \
                                |struct IPerlProc* p
 #endif
-Ajnod  |PerlInterpreter*       |perl_alloc
-Ajnod  |void   |perl_construct |PerlInterpreter* interp
-Ajnod  |void   |perl_destruct  |PerlInterpreter* interp
-Ajnod  |void   |perl_free      |PerlInterpreter* interp
-Ajnod  |int    |perl_run       |PerlInterpreter* interp
-Ajnod  |int    |perl_parse     |PerlInterpreter* interp|XSINIT_t xsinit \
+Anod   |PerlInterpreter*       |perl_alloc
+Anod   |void   |perl_construct |PerlInterpreter* interp
+Anod   |int    |perl_destruct  |PerlInterpreter* interp
+Anod   |void   |perl_free      |PerlInterpreter* interp
+Anod   |int    |perl_run       |PerlInterpreter* interp
+Anod   |int    |perl_parse     |PerlInterpreter* interp|XSINIT_t xsinit \
                                |int argc|char** argv|char** env
 #if defined(USE_ITHREADS)
-Ajnod  |PerlInterpreter*|perl_clone|PerlInterpreter* interp, UV flags
+Anod   |PerlInterpreter*|perl_clone|PerlInterpreter* interp, UV flags
 #  if defined(PERL_IMPLICIT_SYS)
-Ajno   |PerlInterpreter*|perl_clone_using|PerlInterpreter *interp|UV flags \
+Ano    |PerlInterpreter*|perl_clone_using|PerlInterpreter *interp|UV flags \
                                |struct IPerlMem* m|struct IPerlMem* ms \
                                |struct IPerlMem* mp|struct IPerlEnv* e \
                                |struct IPerlStdIO* io|struct IPerlLIO* lio \
@@ -1360,37 +1097,21 @@ Ajno    |PerlInterpreter*|perl_clone_using|PerlInterpreter *interp|UV flags \
 #  endif
 #endif
 
-Ajnop  |Malloc_t|malloc        |MEM_SIZE nbytes
-Ajnop  |Malloc_t|calloc        |MEM_SIZE elements|MEM_SIZE size
-Ajnop  |Malloc_t|realloc       |Malloc_t where|MEM_SIZE nbytes
-Ajnop  |Free_t |mfree          |Malloc_t where
+Anop   |Malloc_t|malloc        |MEM_SIZE nbytes
+Anop   |Malloc_t|calloc        |MEM_SIZE elements|MEM_SIZE size
+Anop   |Malloc_t|realloc       |Malloc_t where|MEM_SIZE nbytes
+Anop   |Free_t |mfree          |Malloc_t where
 #if defined(MYMALLOC)
-jnp    |MEM_SIZE|malloced_size |void *p
+np     |MEM_SIZE|malloced_size |void *p
 #endif
 
-Ajnp   |void*  |get_context
-Ajnp   |void   |set_context    |void *thx
+Anp    |void*  |get_context
+Anp    |void   |set_context    |void *thx
 
 END_EXTERN_C
 
 /* functions with flag 'n' should come before here */
-#if defined(PERL_OBJECT)
-class CPerlObj {
-public:
-       struct interpreter interp;
-       CPerlObj(IPerlMem*, IPerlMem*, IPerlMem*, IPerlEnv*, IPerlStdIO*,
-           IPerlLIO*, IPerlDir*, IPerlSock*, IPerlProc*);
-       void* operator new(size_t nSize, IPerlMem *pvtbl);
-#ifndef __BORLANDC__
-       static void operator delete(void* pPerl, IPerlMem *pvtbl);
-#endif
-       int do_aspawn (void *vreally, void **vmark, void **vsp);
-#endif
-#if defined(PERL_OBJECT)
-public:
-#else
 START_EXTERN_C
-#endif
 #  include "pp_proto.h"
 Ap     |SV*    |amagic_call    |SV* left|SV* right|int method|int dir
 Ap     |bool   |Gv_AMupdate    |HV* stash
@@ -1437,7 +1158,7 @@ Ap        |UV     |cast_uv        |NV f
 #if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
 Ap     |I32    |my_chsize      |int fd|Off_t length
 #endif
-#if defined(USE_THREADS)
+#if defined(USE_5005THREADS)
 Ap     |MAGIC* |condpair_magic |SV *sv
 #endif
 p      |OP*    |convert        |I32 optype|I32 flags|OP* o
@@ -1547,7 +1268,7 @@ Apd       |char*  |fbm_instr      |unsigned char* big|unsigned char* bigend \
                                |SV* littlesv|U32 flags
 p      |char*  |find_script    |char *scriptname|bool dosearch \
                                |char **search_ext|I32 flags
-#if defined(USE_THREADS)
+#if defined(USE_5005THREADS)
 p      |PADOFFSET|find_threadsv|const char *name
 #endif
 p      |OP*    |force_list     |OP* arg
@@ -1705,7 +1426,7 @@ p |int    |magic_gettaint |SV* sv|MAGIC* mg
 p      |int    |magic_getuvar  |SV* sv|MAGIC* mg
 p      |int    |magic_getvec   |SV* sv|MAGIC* mg
 p      |U32    |magic_len      |SV* sv|MAGIC* mg
-#if defined(USE_THREADS)
+#if defined(USE_5005THREADS)
 p      |int    |magic_mutexfree|SV* sv|MAGIC* mg
 #endif
 p      |int    |magic_nextpack |SV* sv|MAGIC* mg|SV* key
@@ -1769,6 +1490,9 @@ Anp       |char*  |my_bzero       |char* loc|I32 len
 Apr    |void   |my_exit        |U32 status
 Apr    |void   |my_failure_exit
 Ap     |I32    |my_fflush_all
+Anp    |Pid_t  |my_fork
+Anp    |void   |atfork_lock
+Anp    |void   |atfork_unlock
 Ap     |I32    |my_lstat
 #if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
 Anp    |I32    |my_memcmp      |const char* s1|const char* s2|I32 len
@@ -1776,11 +1500,9 @@ Anp      |I32    |my_memcmp      |const char* s1|const char* s2|I32 len
 #if !defined(HAS_MEMSET)
 Anp    |void*  |my_memset      |char* loc|I32 ch|I32 len
 #endif
-#if !defined(PERL_OBJECT)
 Ap     |I32    |my_pclose      |PerlIO* ptr
 Ap     |PerlIO*|my_popen       |char* cmd|char* mode
 Ap     |PerlIO*|my_popen_list  |char* mode|int n|SV ** args
-#endif
 Ap     |void   |my_setenv      |char* nam|char* val
 Ap     |I32    |my_stat
 Ap     |char * |my_strftime    |char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst
@@ -1863,15 +1585,7 @@ p        |void   |pad_reset
 p      |void   |pad_swipe      |PADOFFSET po
 p      |void   |peep           |OP* o
 dopM   |PerlIO*|start_glob     |SV* pattern|IO *io
-#if defined(PERL_OBJECT)
-Aox    |void   |Perl_construct
-Aox    |void   |Perl_destruct
-Aox    |void   |Perl_free
-Aox    |int    |Perl_run
-Aox    |int    |Perl_parse     |XSINIT_t xsinit \
-                               |int argc|char** argv|char** env
-#endif
-#if defined(USE_THREADS)
+#if defined(USE_5005THREADS)
 Ap     |struct perl_thread*    |new_struct_thread|struct perl_thread *t
 #endif
 Ap     |void   |call_atexit    |ATEXIT_t fn|void *ptr
@@ -2104,7 +1818,7 @@ Ap        |UV     |to_utf8_title  |U8 *p
 #if defined(UNLINK_ALL_VERSIONS)
 Ap     |I32    |unlnk          |char* f
 #endif
-#if defined(USE_THREADS)
+#if defined(USE_5005THREADS)
 Ap     |void   |unlock_condpair|void* svv
 #endif
 Ap     |void   |unsharepvn     |const char* sv|I32 len|U32 hash
@@ -2161,7 +1875,7 @@ Ap        |struct perl_vars *|GetVars
 #endif
 Ap     |int    |runops_standard
 Ap     |int    |runops_debug
-#if defined(USE_THREADS)
+#if defined(USE_5005THREADS)
 Ap     |SV*    |sv_lock        |SV *sv
 #endif
 Afpd   |void   |sv_catpvf_mg   |SV *sv|const char* pat|...
@@ -2228,7 +1942,7 @@ Ap        |PERL_SI*|si_dup        |PERL_SI* si|clone_params* param
 Ap     |ANY*   |ss_dup         |PerlInterpreter* proto_perl|clone_params* param
 Ap     |void*  |any_dup        |void* v|PerlInterpreter* proto_perl
 Ap     |HE*    |he_dup         |HE* e|bool shared|clone_params* param
-Ap     |REGEXP*|re_dup         |REGEXP* r
+Ap     |REGEXP*|re_dup         |REGEXP* r|clone_params* param
 Ap     |PerlIO*|fp_dup         |PerlIO* fp|char type
 Ap     |DIR*   |dirp_dup       |DIR* dp
 Ap     |GP*    |gp_dup         |GP* gp|clone_params* param
@@ -2249,12 +1963,12 @@ Ap      |void   |ptr_table_free|PTR_TBL_t *tbl
 Ap     |void   |sys_intern_clear
 Ap     |void   |sys_intern_init
 #endif
+#if defined(PERL_CUSTOM_OPS)
+Ap |char * |custom_op_name|OP* op
+Ap |char * |custom_op_desc|OP* op
+#endif
 
-#if defined(PERL_OBJECT)
-protected:
-#else
 END_EXTERN_C
-#endif
 
 #if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
 s      |I32    |avhv_index_sv  |SV* sv
@@ -2352,7 +2066,7 @@ s |void*  |vrun_body      |va_list args
 s      |void*  |vcall_body     |va_list args
 s      |void*  |vcall_list_body|va_list args
 #endif
-#  if defined(USE_THREADS)
+#  if defined(USE_5005THREADS)
 s      |struct perl_thread *   |init_main_thread
 #  endif
 #endif
@@ -2470,6 +2184,17 @@ s        |void   |debprof        |OP *o
 s      |SV*    |save_scalar_at |SV **sptr
 #endif
 
+#if defined(USE_ITHREADS) && (defined(PERL_IN_SHAREDSV_C) || defined(PERL_DECL_PROT))
+Adp    |void        |sharedsv_init
+Adp    |shared_sv*    |sharedsv_new
+Adp    |shared_sv*    |sharedsv_find        |SV* sv
+Adp    |void        |sharedsv_lock        |shared_sv* ssv
+Adp    |void        |sharedsv_unlock    |shared_sv* ssv
+p      |void        |sharedsv_unlock_scope    |shared_sv* ssv
+Adp    |void        |sharedsv_thrcnt_inc    |shared_sv* ssv
+Adp    |void        |sharedsv_thrcnt_dec    |shared_sv* ssv
+#endif
+
 #if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT)
 s      |IV     |asIV           |SV* sv
 s      |UV     |asUV           |SV* sv
@@ -2593,16 +2318,13 @@ s       |char*  |stdize_locale  |char* locs
 #endif
 
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
+s      |COP*   |closest_cop    |COP *cop|OP *o
 s      |SV*    |mess_alloc
 #  if defined(LEAKTEST)
 s      |void   |xstat          |int
 #  endif
 #endif
 
-#if defined(PERL_OBJECT)
-};
-#endif
-
 START_EXTERN_C
 
 Apd    |void   |sv_setsv_flags |SV* dsv|SV* ssv|I32 flags