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 5d3254d..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
 
@@ -49,7 +45,8 @@ sub walk_table (&@) {
        else {
            @args = split /\s*\|\s*/, $_;
        }
-       print $F $function->(@args);
+        my @outs = &{$function}(@args);
+        print $F @outs; # $function->(@args) is not 5.003
     }
     print $F $trailer if $trailer;
     close $F unless ref $filename;
@@ -251,7 +248,8 @@ readvars %intrp,  'intrpvar.h','I';
 readvars %thread, 'thrdvar.h','T';
 readvars %globvar, 'perlvars.h','G';
 
-foreach my $sym (sort keys %thread) {
+my $sym;
+foreach $sym (sort keys %thread) {
   warn "$sym in intrpvar.h as well as thrdvar.h\n" if exists $intrp{$sym};
 }
 
@@ -268,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))");
 }
 
@@ -333,7 +331,6 @@ print EM <<'END';
 
 /* Hide global symbols */
 
-#if !defined(PERL_OBJECT)
 #if !defined(PERL_IMPLICIT_CONTEXT)
 
 END
@@ -427,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.
  */
@@ -504,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
@@ -556,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.
 
@@ -588,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
@@ -603,7 +563,7 @@ for $sym (sort keys %intrp) {
 
 print EM <<'END';
 
-#  else                /* !USE_THREADS */
+#  else                /* !USE_5005THREADS */
 /* cases 2 and 3 above */
 
 END
@@ -614,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
@@ -646,7 +588,7 @@ for $sym (sort keys %intrp) {
 
 print EM <<'END';
 
-#    if defined(USE_THREADS)
+#  if defined(USE_5005THREADS)
 /* case 4 above */
 
 END
@@ -657,7 +599,7 @@ for $sym (sort keys %thread) {
 
 print EM <<'END';
 
-#    else      /* !USE_THREADS */
+#  else        /* !USE_5005THREADS */
 /* case 1 above */
 
 END
@@ -668,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)
@@ -709,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";
@@ -781,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
 
@@ -796,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)
 
@@ -848,7 +725,7 @@ EXT void *PL_force_link_funcs[] = {
 };
 #endif /* DOINIT */
 
-START_EXTERN_C
+END_EXTERN_C
 
 #endif /* PERL_NO_FORCE_LINK */
 
@@ -856,22 +733,22 @@ START_EXTERN_C
 
 EOT
 
-foreach my $sym (sort keys %intrp) {
+foreach $sym (sort keys %intrp) {
     print CAPIH bincompat_var('I',$sym);
 }
 
-foreach my $sym (sort keys %thread) {
+foreach $sym (sort keys %thread) {
     print CAPIH bincompat_var('T',$sym);
 }
 
-foreach my $sym (sort keys %globvar) {
+foreach $sym (sort keys %globvar) {
     print CAPIH bincompat_var('G',$sym);
 }
 
 print CAPIH <<'EOT';
 
 #endif /* !PERL_CORE */
-#endif /* PERL_OBJECT || MULTIPLICITY */
+#endif /* MULTIPLICITY */
 
 #endif /* __perlapi_h__ */
 
@@ -888,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
@@ -898,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)
@@ -918,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"
 
@@ -932,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
@@ -958,139 +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
-my $sym;
-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;
@@ -1136,7 +875,7 @@ DOC:
                    redo FUNC;
                }
            } else {
-               warn "$file:$line:$in";
+               warn "$file:$line:$in (=cut missing?)";
            }
        }
     }
@@ -1321,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
 :
@@ -1333,25 +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)
-: XXX: perl_clone needs docs
-Ajno   |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
 
+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)
-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
-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
@@ -1427,6 +1148,7 @@ p |OP*    |block_end      |I32 floor|OP* seq
 Ap     |I32    |block_gimme
 p      |int    |block_start    |int full
 p      |void   |boot_core_UNIVERSAL
+p      |void   |boot_core_PerlIO
 Ap     |void   |call_list      |I32 oldscope|AV* av_list
 p      |bool   |cando          |Mode_t mode|Uid_t effective|Stat_t* statbufp
 Ap     |U32    |cast_ulong     |NV f
@@ -1436,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
@@ -1546,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
@@ -1673,6 +1395,8 @@ p |I32    |keyword        |char* d|I32 len
 Ap     |void   |leave_scope    |I32 base
 p      |void   |lex_end
 p      |void   |lex_start      |SV* line
+Ap |void   |op_null    |OP* o
+p      |void   |op_clear       |OP* o
 p      |OP*    |linklist       |OP* o
 p      |OP*    |list           |OP* o
 p      |OP*    |listkids       |OP* o
@@ -1680,6 +1404,8 @@ Apd       |void   |load_module|U32 flags|SV* name|SV* ver|...
 Ap     |void   |vload_module|U32 flags|SV* name|SV* ver|va_list* args
 p      |OP*    |localize       |OP* arg|I32 lexical
 Apd    |I32    |looks_like_number|SV* sv
+Apd    |int    |grok_number    |const char *pv|STRLEN len|UV *valuep
+Apd    |bool   |grok_numeric_radix|const char **sp|const char *send
 p      |int    |magic_clearenv |SV* sv|MAGIC* mg
 p      |int    |magic_clear_all_env|SV* sv|MAGIC* mg
 p      |int    |magic_clearpack|SV* sv|MAGIC* mg
@@ -1700,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
@@ -1755,7 +1481,7 @@ p |int    |mode_from_discipline|SV* discp
 Ap     |char*  |moreswitches   |char* s
 p      |OP*    |my             |OP* o
 Ap     |NV     |my_atof        |const char *s
-#if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY)
+#if (!defined(HAS_MEMCPY) && !defined(HAS_BCOPY)) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY) && !defined(HAS_SAFE_BCOPY))
 Anp    |char*  |my_bcopy       |const char* from|char* to|I32 len
 #endif
 #if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
@@ -1764,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
@@ -1771,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
@@ -1822,7 +1549,7 @@ Ap        |OP*    |newPMOP        |I32 type|I32 flags
 Ap     |OP*    |newPVOP        |I32 type|I32 flags|char* pv
 Ap     |SV*    |newRV          |SV* pref
 Apd    |SV*    |newRV_noinc    |SV *sv
-Ap     |SV*    |newSV          |STRLEN len
+Apd    |SV*    |newSV          |STRLEN len
 Ap     |OP*    |newSVREF       |OP* o
 Ap     |OP*    |newSVOP        |I32 type|I32 flags|SV* sv
 Apd    |SV*    |newSViv        |IV i
@@ -1858,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
@@ -1923,7 +1642,7 @@ Ap        |char*  |rninstr        |const char* big|const char* bigend \
 Ap     |Sighandler_t|rsignal   |int i|Sighandler_t t
 p      |int    |rsignal_restore|int i|Sigsave_t* t
 p      |int    |rsignal_save   |int i|Sighandler_t t1|Sigsave_t* t2
-     |Sighandler_t|rsignal_state|int i
+Ap     |Sighandler_t|rsignal_state|int i
 p      |void   |rxres_free     |void** rsp
 p      |void   |rxres_restore  |void** rsp|REGEXP* prx
 p      |void   |rxres_save     |void** rsp|REGEXP* prx
@@ -1992,47 +1711,48 @@ np      |Signal_t |sighandler   |int sig
 Ap     |SV**   |stack_grow     |SV** sp|SV**p|int n
 Ap     |I32    |start_subparse |I32 is_format|U32 flags
 p      |void   |sub_crush_depth|CV* cv
-Ap     |bool   |sv_2bool       |SV* sv
-Ap     |CV*    |sv_2cv         |SV* sv|HV** st|GV** gvp|I32 lref
-Ap     |IO*    |sv_2io         |SV* sv
-Ap     |IV     |sv_2iv         |SV* sv
+Apd    |bool   |sv_2bool       |SV* sv
+Apd    |CV*    |sv_2cv         |SV* sv|HV** st|GV** gvp|I32 lref
+Apd    |IO*    |sv_2io         |SV* sv
+Apd    |IV     |sv_2iv         |SV* sv
 Apd    |SV*    |sv_2mortal     |SV* sv
-Ap     |NV     |sv_2nv         |SV* sv
-A    |char*  |sv_2pv         |SV* sv|STRLEN* lp
-Ap     |char*  |sv_2pvutf8     |SV* sv|STRLEN* lp
-Ap     |char*  |sv_2pvbyte     |SV* sv|STRLEN* lp
-Ap     |UV     |sv_2uv         |SV* sv
-Ap     |IV     |sv_iv          |SV* sv
-Ap     |UV     |sv_uv          |SV* sv
-Ap     |NV     |sv_nv          |SV* sv
-Ap     |char*  |sv_pvn         |SV *sv|STRLEN *len
-Ap     |char*  |sv_pvutf8n     |SV *sv|STRLEN *len
-Ap     |char*  |sv_pvbyten     |SV *sv|STRLEN *len
+Apd    |NV     |sv_2nv         |SV* sv
+Aop    |char*  |sv_2pv         |SV* sv|STRLEN* lp
+Apd    |char*  |sv_2pvutf8     |SV* sv|STRLEN* lp
+Apd    |char*  |sv_2pvbyte     |SV* sv|STRLEN* lp
+Apd    |UV     |sv_2uv         |SV* sv
+Apd    |IV     |sv_iv          |SV* sv
+Apd    |UV     |sv_uv          |SV* sv
+Apd    |NV     |sv_nv          |SV* sv
+Apd    |char*  |sv_pvn         |SV *sv|STRLEN *len
+Apd    |char*  |sv_pvutf8n     |SV *sv|STRLEN *len
+Apd    |char*  |sv_pvbyten     |SV *sv|STRLEN *len
 Apd    |I32    |sv_true        |SV *sv
-p      |void   |sv_add_arena   |char* ptr|U32 size|U32 flags
-Ap     |int    |sv_backoff     |SV* sv
+pd     |void   |sv_add_arena   |char* ptr|U32 size|U32 flags
+Apd    |int    |sv_backoff     |SV* sv
 Apd    |SV*    |sv_bless       |SV* sv|HV* stash
 Afpd   |void   |sv_catpvf      |SV* sv|const char* pat|...
 Ap     |void   |sv_vcatpvf     |SV* sv|const char* pat|va_list* args
 Apd    |void   |sv_catpv       |SV* sv|const char* ptr
-Apd    |void   |sv_catpvn      |SV* sv|const char* ptr|STRLEN len
-Apd    |void   |sv_catsv       |SV* dsv|SV* ssv
+Aopd   |void   |sv_catpvn      |SV* sv|const char* ptr|STRLEN len
+Aopd   |void   |sv_catsv       |SV* dsv|SV* ssv
 Apd    |void   |sv_chop        |SV* sv|char* ptr
-p      |I32    |sv_clean_all
-p      |void   |sv_clean_objs
+pd     |I32    |sv_clean_all
+pd     |void   |sv_clean_objs
 Apd    |void   |sv_clear       |SV* sv
 Apd    |I32    |sv_cmp         |SV* sv1|SV* sv2
 Apd    |I32    |sv_cmp_locale  |SV* sv1|SV* sv2
 #if defined(USE_LOCALE_COLLATE)
-Ap     |char*  |sv_collxfrm    |SV* sv|STRLEN* nxp
+Apd    |char*  |sv_collxfrm    |SV* sv|STRLEN* nxp
 #endif
 Ap     |OP*    |sv_compile_2op |SV* sv|OP** startp|char* code|AV** avp
+Apd    |int    |getcwd_sv      |SV* sv
 Apd    |void   |sv_dec         |SV* sv
 Ap     |void   |sv_dump        |SV* sv
 Apd    |bool   |sv_derived_from|SV* sv|const char* name
 Apd    |I32    |sv_eq          |SV* sv1|SV* sv2
 Apd    |void   |sv_free        |SV* sv
-p      |void   |sv_free_arenas
+pd     |void   |sv_free_arenas
 Apd    |char*  |sv_gets        |SV* sv|PerlIO* fp|I32 append
 Apd    |char*  |sv_grow        |SV* sv|STRLEN newlen
 Apd    |void   |sv_inc         |SV* sv
@@ -2046,17 +1766,17 @@ Apd     |void   |sv_magic       |SV* sv|SV* obj|int how|const char* name \
                                |I32 namlen
 Apd    |SV*    |sv_mortalcopy  |SV* oldsv
 Apd    |SV*    |sv_newmortal
-Ap     |SV*    |sv_newref      |SV* sv
+Apd    |SV*    |sv_newref      |SV* sv
 Ap     |char*  |sv_peek        |SV* sv
-Ap     |void   |sv_pos_u2b     |SV* sv|I32* offsetp|I32* lenp
-Ap     |void   |sv_pos_b2u     |SV* sv|I32* offsetp
-Apd    |char*  |sv_pvn_force   |SV* sv|STRLEN* lp
+Apd    |void   |sv_pos_u2b     |SV* sv|I32* offsetp|I32* lenp
+Apd    |void   |sv_pos_b2u     |SV* sv|I32* offsetp
+Aopd   |char*  |sv_pvn_force   |SV* sv|STRLEN* lp
 Apd    |char*  |sv_pvutf8n_force|SV* sv|STRLEN* lp
-Ap     |char*  |sv_pvbyten_force|SV* sv|STRLEN* lp
+Apd    |char*  |sv_pvbyten_force|SV* sv|STRLEN* lp
 Apd    |char*  |sv_reftype     |SV* sv|int ob
 Apd    |void   |sv_replace     |SV* sv|SV* nsv
-Ap     |void   |sv_report_used
-Ap     |void   |sv_reset       |char* s|HV* stash
+Apd    |void   |sv_report_used
+Apd    |void   |sv_reset       |char* s|HV* stash
 Afpd   |void   |sv_setpvf      |SV* sv|const char* pat|...
 Ap     |void   |sv_vsetpvf     |SV* sv|const char* pat|va_list* args
 Apd    |void   |sv_setiv       |SV* sv|IV num
@@ -2071,13 +1791,13 @@ Apd     |SV*    |sv_setref_pvn  |SV* rv|const char* classname|char* pv \
                                |STRLEN n
 Apd    |void   |sv_setpv       |SV* sv|const char* ptr
 Apd    |void   |sv_setpvn      |SV* sv|const char* ptr|STRLEN len
-Apd    |void   |sv_setsv       |SV* dsv|SV* ssv
-Ap     |void   |sv_taint       |SV* sv
-Ap     |bool   |sv_tainted     |SV* sv
+Aopd   |void   |sv_setsv       |SV* dsv|SV* ssv
+Apd    |void   |sv_taint       |SV* sv
+Apd    |bool   |sv_tainted     |SV* sv
 Apd    |int    |sv_unmagic     |SV* sv|int type
 Apd    |void   |sv_unref       |SV* sv
 Apd    |void   |sv_unref_flags |SV* sv|U32 flags
-Ap     |void   |sv_untaint     |SV* sv
+Apd    |void   |sv_untaint     |SV* sv
 Apd    |bool   |sv_upgrade     |SV* sv|U32 mt
 Apd    |void   |sv_usepvn      |SV* sv|char* ptr|STRLEN len
 Apd    |void   |sv_vcatpvfn    |SV* sv|const char* pat|STRLEN patlen \
@@ -2098,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
@@ -2122,7 +1842,7 @@ p |void   |vivify_defelem |SV* sv
 p      |void   |vivify_ref     |SV* sv|U32 to_what
 p      |I32    |wait4pid       |Pid_t pid|int* statusp|int flags
 p      |void   |report_evil_fh |GV *gv|IO *io|I32 op
-p      |void   |report_uninit
+pd     |void   |report_uninit
 Afpd   |void   |warn           |const char* pat|...
 Ap     |void   |vwarn          |const char* pat|va_list* args
 Afp    |void   |warner         |U32 err|const char* pat|...
@@ -2155,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|...
@@ -2196,18 +1916,18 @@ Ap      |void*  |vdefault_protect|volatile JMPENV *je|int *excpt \
                                |protect_body_t body|va_list *args
 #endif
 Ap     |void   |reginitcolors
-Ap     |char*  |sv_2pv_nolen   |SV* sv
-Ap     |char*  |sv_2pvutf8_nolen|SV* sv
-Ap     |char*  |sv_2pvbyte_nolen|SV* sv
-Ap     |char*  |sv_pv          |SV *sv
-Ap     |char*  |sv_pvutf8      |SV *sv
-Ap     |char*  |sv_pvbyte      |SV *sv
-Apd    |STRLEN |sv_utf8_upgrade|SV *sv
+Apd    |char*  |sv_2pv_nolen   |SV* sv
+Apd    |char*  |sv_2pvutf8_nolen|SV* sv
+Apd    |char*  |sv_2pvbyte_nolen|SV* sv
+Apd    |char*  |sv_pv          |SV *sv
+Apd    |char*  |sv_pvutf8      |SV *sv
+Apd    |char*  |sv_pvbyte      |SV *sv
+Aopd   |STRLEN |sv_utf8_upgrade|SV *sv
 ApdM   |bool   |sv_utf8_downgrade|SV *sv|bool fail_ok
 Apd    |void   |sv_utf8_encode |SV *sv
 ApdM   |bool   |sv_utf8_decode |SV *sv
-Ap     |void   |sv_force_normal|SV *sv
-Ap     |void   |sv_force_normal_flags|SV *sv|U32 flags
+Apd    |void   |sv_force_normal|SV *sv
+Apd    |void   |sv_force_normal_flags|SV *sv|U32 flags
 Ap     |void   |tmps_grow      |I32 n
 Apd    |SV*    |sv_rvweaken    |SV *sv
 p      |int    |magic_killbackrefs|SV *sv|MAGIC *mg
@@ -2217,17 +1937,17 @@ Ap      |void   |newMYSUB       |I32 floor|OP *o|OP *proto|OP *attrs|OP *block
 p      |OP *   |my_attrs       |OP *o|OP *attrs
 p      |void   |boot_core_xsutils
 #if defined(USE_ITHREADS)
-Ap     |PERL_CONTEXT*|cx_dup   |PERL_CONTEXT* cx|I32 ix|I32 max
-Ap     |PERL_SI*|si_dup        |PERL_SI* si
-Ap     |ANY*   |ss_dup         |PerlInterpreter* proto_perl
+Ap     |PERL_CONTEXT*|cx_dup   |PERL_CONTEXT* cx|I32 ix|I32 max|clone_params* param
+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
-Ap     |REGEXP*|re_dup         |REGEXP* r
+Ap     |HE*    |he_dup         |HE* e|bool shared|clone_params* param
+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
-Ap     |MAGIC* |mg_dup         |MAGIC* mg
-Ap     |SV*    |sv_dup         |SV* sstr
+Ap     |GP*    |gp_dup         |GP* gp|clone_params* param
+Ap     |MAGIC* |mg_dup         |MAGIC* mg|clone_params* param
+Ap     |SV*    |sv_dup         |SV* sstr|clone_params* param
 #if defined(HAVE_INTERP_INTERN)
 Ap     |void   |sys_intern_dup |struct interp_intern* src \
                                |struct interp_intern* dst
@@ -2243,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
@@ -2296,8 +2016,6 @@ s |OP*    |no_fh_allowed  |OP *o
 s      |OP*    |scalarboolean  |OP *o
 s      |OP*    |too_few_arguments|OP *o|char* name
 s      |OP*    |too_many_arguments|OP *o|char* name
-s      |void   |op_clear       |OP* o
-s      |void   |null           |OP* o
 s      |PADOFFSET|pad_addlex   |SV* name
 s      |PADOFFSET|pad_findlex  |char* name|PADOFFSET newoff|U32 seq \
                                |CV* startcv|I32 cx_ix|I32 saweval|U32 flags
@@ -2348,15 +2066,18 @@ 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
 
 #if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT)
-s      |void   |doencodes      |SV* sv|char* s|I32 len
 s      |SV*    |refto          |SV* sv
 s      |U32    |seed
+#endif
+
+#if defined(PERL_IN_PP_PACK_C) || defined(PERL_DECL_PROT)
+s      |void   |doencodes      |SV* sv|char* s|I32 len
 s      |SV*    |mul128         |SV *sv|U8 m
 s      |SV*    |is_an_int      |char *s|STRLEN l
 s      |int    |div128         |SV *pnum|bool *done
@@ -2412,9 +2133,11 @@ s        |void   |regoptail      |struct RExC_state_t*|regnode *|regnode *
 s      |void   |regtail        |struct RExC_state_t*|regnode *|regnode *
 s      |char*|regwhite |char *|char *
 s      |char*|nextchar |struct RExC_state_t*
+#  ifdef DEBUGGING
 s      |regnode*|dumpuntil     |regnode *start|regnode *node \
                                |regnode *last|SV* sv|I32 l
 s      |void   |put_byte       |SV* sv|int c
+#  endif
 s      |void   |scan_commit    |struct RExC_state_t*|struct scan_data_t *data
 s      |void   |cl_anything    |struct RExC_state_t*|struct regnode_charclass_class *cl
 s      |int    |cl_is_anything |struct regnode_charclass_class *cl
@@ -2451,14 +2174,27 @@ s       |char*  |find_byclass   |regexp * prog|regnode *c|char *s|char *strend|char *star
 #endif
 
 #if defined(PERL_IN_RUN_C) || defined(PERL_DECL_PROT)
+#   ifdef DEBUGGING
 s      |CV*    |deb_curcv      |I32 ix
 s      |void   |debprof        |OP *o
+#   endif
 #endif
 
 #if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
 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
@@ -2504,11 +2240,10 @@ s       |void   |not_a_number   |SV *sv
 s      |I32    |visit          |SVFUNC_t f
 s      |void   |sv_add_backref |SV *tsv|SV *sv
 s      |void   |sv_del_backref |SV *sv
-#  if defined(DEBUGGING)
+#  ifdef DEBUGGING
 s      |void   |del_sv |SV *p
 #  endif
 #  if !defined(NV_PRESERVES_UV)
-s      |int    |sv_2inuv_non_preserve  |SV *sv|I32 numtype
 s      |int    |sv_2iuv_non_preserve   |SV *sv|I32 numtype
 #  endif
 s      |I32    |expect_number  |char** pattern
@@ -2525,6 +2260,7 @@ s |char*  |force_version  |char *start
 s      |char*  |force_word     |char *start|int token|int check_keyword \
                                |int allow_pack|int allow_tick
 s      |SV*    |tokeq          |SV *sv
+s      |int    |pending_ident
 s      |char*  |scan_const     |char *start
 s      |char*  |scan_formline  |char *s
 s      |char*  |scan_heredoc   |char *s
@@ -2555,7 +2291,9 @@ s |char * |filter_gets    |SV *sv|PerlIO *fp|STRLEN append
 s      |HV *   |find_in_my_stash|char *pkgname|I32 len
 s      |SV*    |new_constant   |char *s|STRLEN len|const char *key|SV *sv \
                                |SV *pv|const char *type
+#  if defined(DEBUGGING)
 s      |void   |tokereport     |char *thing|char *s|I32 rv
+#  endif
 s      |int    |ao             |int toketype
 s      |void   |depcom
 s      |char*  |incl_perldb
@@ -2575,14 +2313,27 @@ s       |I32    |cr_textfilter  |int idx|SV *sv|int maxlen
 s      |SV*|isa_lookup |HV *stash|const char *name|int len|int level
 #endif
 
-#if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
+#if defined(PERL_IN_LOCALE_C) || defined(PERL_DECL_PROT)
 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
+Apd    |void   |sv_catpvn_flags|SV* sv|const char* ptr|STRLEN len|I32 flags
+Apd    |void   |sv_catsv_flags |SV* dsv|SV* ssv|I32 flags
+Apd    |STRLEN |sv_utf8_upgrade_flags|SV *sv|I32 flags
+Apd    |char*  |sv_pvn_force_flags|SV* sv|STRLEN* lp|I32 flags
+Apd    |char*  |sv_2pv_flags   |SV* sv|STRLEN* lp|I32 flags
+Ap     |char*  |my_atof2       |const char *s|NV* value
+
+END_EXTERN_C
+