Introduce Perl_utf8_length(). Use it.
[p5sagit/p5-mst-13.2.git] / embed.pl
index c8eb0a5..b8abef3 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -135,12 +135,12 @@ sub write_protos {
        }
        $ret .= ")";
        $ret .= " __attribute__((noreturn))" if $flags =~ /r/;
-       if( $flags =~ /f/ ) { 
+       if( $flags =~ /f/ ) {
            my $prefix = $flags =~ /n/ ? '' : 'pTHX_';
-           my $args = scalar @args; 
+           my $args = scalar @args;
            $ret .= "\n#ifdef CHECK_FORMAT\n";
            $ret .= sprintf " __attribute__((format(printf,%s%d,%s%d)))",
-                                   $prefix, $args - 1, $prefix, $args; 
+                                   $prefix, $args - 1, $prefix, $args;
            $ret .= "\n#endif\n";
        }
        $ret .= ";\n";
@@ -185,11 +185,11 @@ EOT
 #       hints
 #       copline
 my @extvars = qw(sv_undef sv_yes sv_no na dowarn
-                 curcop compiling 
+                 curcop compiling
                  tainting tainted stack_base stack_sp sv_arenaroot
                 no_modify
                  curstash DBsub DBsingle debstash
-                 rsfp 
+                 rsfp
                  stdingv
                 defgv
                 errgv
@@ -280,7 +280,7 @@ unlink 'embed.h';
 open(EM, '> embed.h') or die "Can't create embed.h: $!\n";
 
 print EM <<'END';
-/* !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+/* !!!!!!!   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!
 */
@@ -542,7 +542,7 @@ open(EM, '> embedvar.h')
     or die "Can't create embedvar.h: $!\n";
 
 print EM <<'END';
-/* !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+/* !!!!!!!   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!
 */
@@ -688,7 +688,7 @@ print EM <<'END';
 
 #endif /* PERL_GLOBAL_STRUCT */
 
-#ifdef PERL_POLLUTE            /* disabled by default in 5.006 */
+#ifdef PERL_POLLUTE            /* disabled by default in 5.6.0 */
 
 END
 
@@ -708,7 +708,7 @@ open(OBX, '> objXSUB.h')
     or die "Can't create objXSUB.h: $!\n";
 
 print OBX <<'EOT';
-/* !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+/* !!!!!!!   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!
 */
@@ -766,7 +766,7 @@ open(CAPI, '> perlapi.c') or die "Can't create perlapi.c: $!\n";
 open(CAPIH, '> perlapi.h') or die "Can't create perlapi.h: $!\n";
 
 print CAPIH <<'EOT';
-/* !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+/* !!!!!!!   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!
 */
@@ -873,7 +873,7 @@ EOT
 close CAPIH;
 
 print CAPI <<'EOT';
-/* !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+/* !!!!!!!   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!
 */
@@ -916,6 +916,9 @@ START_EXTERN_C
                        { return &(PL_##v); }
 #define PERLVARA(v,n,t)        PL_##v##_t* Perl_##v##_ptr(pTHXo)               \
                        { return &(PL_##v); }
+#undef PERLVARIC
+#define PERLVARIC(v,t,i)       const t* Perl_##v##_ptr(pTHXo)          \
+                       { return (const t *)&(PL_##v); }
 #include "perlvars.h"
 
 #undef PERLVAR
@@ -1078,12 +1081,12 @@ my %apidocs;
 my %gutsdocs;
 my %docfuncs;
 
-sub autodoc ($) { # parse a file and extract documentation info
-    my($fh) = @_;
-    my($in, $doc);
-
+sub autodoc ($$) { # parse a file and extract documentation info
+    my($fh,$file) = @_;
+    my($in, $doc, $line);
 FUNC:
     while (defined($in = <$fh>)) {
+       $line++;
        if ($in =~ /^=for\s+apidoc\s+(.*)\n/) {
            my $proto = $1;
            $proto = "||$proto" unless $proto =~ /\|/;
@@ -1091,24 +1094,33 @@ FUNC:
            my $docs = "";
 DOC:
            while (defined($doc = <$fh>)) {
+               $line++;
                last DOC if $doc =~ /^=\w+/;
+               if ($doc =~ m:^\*/$:) {
+                   warn "=cut missing? $file:$line:$doc";;
+                   last DOC;
+               }
                $docs .= $doc;
            }
            $docs = "\n$docs" if $docs and $docs !~ /^\n/;
            if ($flags =~ /m/) {
                if ($flags =~ /A/) {
-                   $apidocs{$name} = [$flags, $docs, $ret, @args];
+                   $apidocs{$name} = [$flags, $docs, $ret, $file, @args];
                }
                else {
-                   $gutsdocs{$name} = [$flags, $docs, $ret, @args];
+                   $gutsdocs{$name} = [$flags, $docs, $ret, $file, @args];
                }
            }
            else {
-               $docfuncs{$name} = [$flags, $docs, $ret, @args];
+               $docfuncs{$name} = [$flags, $docs, $ret, $file, @args];
            }
-           if ($doc =~ /^=for/) {
-               $in = $doc;
-               redo FUNC;
+           if (defined $doc) {
+               if ($doc =~ /^=for/) {
+                   $in = $doc;
+                   redo FUNC;
+               }
+           } else {
+               warn "$file:$line:$in";
            }
        }
     }
@@ -1116,9 +1128,11 @@ DOC:
 
 sub docout ($$$) { # output the docs for one function
     my($fh, $name, $docref) = @_;
-    my($flags, $docs, $ret, @args) = @$docref;
+    my($flags, $docs, $ret, $file, @args) = @$docref;
 
-    $docs .= "NOTE: the perl_ form of this function is deprecated.\n\n" 
+    $docs .= "NOTE: this function is experimental and may change or be
+removed without notice.\n\n" if $flags =~ /x/;
+    $docs .= "NOTE: the perl_ form of this function is deprecated.\n\n"
        if $flags =~ /p/;
 
     print $fh "=item $name\n$docs";
@@ -1134,17 +1148,18 @@ sub docout ($$$) { # output the docs for one function
        print $fh "(" . join(", ", @args) . ")";
        print $fh "\n\n";
     }
+    print $fh "=for hackers\nFound in file $file\n\n";
 }
 
 my $file;
 for $file (glob('*.c'), glob('*.h')) {
     open F, "< $file" or die "Cannot open $file for docs: $!\n";
-    autodoc(\*F);
+    autodoc(\*F,$file);
     close F or die "Error closing $file: $!\n";
 }
 
 unlink "pod/perlapi.pod";
-open (DOC, ">pod/perlapi.pod") or 
+open (DOC, ">pod/perlapi.pod") or
        die "Can't create pod/perlapi.pod: $!\n";
 
 walk_table {   # load documented functions into approriate hash
@@ -1156,16 +1171,21 @@ walk_table {    # load documented functions into approriate hash
        if ($flags =~ /A/) {
            my $docref = delete $docfuncs{$func};
            warn "no docs for $func\n" unless $docref and @$docref;
-           $apidocs{$func} = [$docref->[0] . 'A', $docref->[1], $retval, @args];
+        $docref->[0].="x" if $flags =~ /M/;
+           $apidocs{$func} = [$docref->[0] . 'A', $docref->[1], $retval,
+                              $docref->[3], @args];
        } else {
            my $docref = delete $docfuncs{$func};
-           $gutsdocs{$func} = [$docref->[0], $docref->[1], $retval, @args];
+           $gutsdocs{$func} = [$docref->[0], $docref->[1], $retval,
+                               $docref->[3], @args];
        }
     }
     return "";
 } \*DOC;
 
 for (sort keys %docfuncs) {
+    # Have you used a full for apidoc or just a func name?
+    # Have you used Ap instead of Am in the for apidoc?
     warn "Unable to place $_!\n";
 }
 
@@ -1176,9 +1196,9 @@ perlapi - autogenerated documentation for the perl public API
 
 =head1 DESCRIPTION
 
-This file contains the documentation of the perl public API generated by 
-embed.pl, specifically a listing of functions, macros, flags, and variables 
-that may be used by extension writers.  The interfaces of any functions that 
+This file contains the documentation of the perl public API generated by
+embed.pl, specifically a listing of functions, macros, flags, and variables
+that may be used by extension writers.  The interfaces of any functions that
 are not listed here are subject to change without notice.  For this reason,
 blindly using functions listed in proto.h is to be avoided when writing
 extensions.
@@ -1224,19 +1244,19 @@ _EOE_
 
 close(DOC);
 
-open(GUTS, ">pod/perlintern.pod") or 
+open(GUTS, ">pod/perlintern.pod") or
                die "Unable to create pod/perlintern.pod: $!\n";
 print GUTS <<'END';
 =head1 NAME
 
-perlintern - autogenerated documentation of purely B<internal> 
+perlintern - autogenerated documentation of purely B<internal>
                 Perl functions
 
 =head1 DESCRIPTION
 
-This file is the autogenerated documentation of functions in the 
-Perl intrepreter that are documented using Perl's internal documentation
-format but are not marked as part of the Perl API. In other words, 
+This file is the autogenerated documentation of functions in the
+Perl interpreter that are documented using Perl's internal documentation
+format but are not marked as part of the Perl API. In other words,
 B<they are not for use in extensions>!
 
 =over 8
@@ -1252,8 +1272,8 @@ print GUTS <<'END';
 
 =head1 AUTHORS
 
-The autodocumentation system was orignally added to the Perl core by 
-Benjamin Stuhl. Documentation is by whoever was kind enough to 
+The autodocumentation system was originally added to the Perl core by
+Benjamin Stuhl. Documentation is by whoever was kind enough to
 document their functions.
 
 =head1 SEE ALSO
@@ -1285,6 +1305,7 @@ __END__
 :       o              has no compatibility macro (#define foo Perl_foo)
 :       j              not a member of CPerlObj
 :       x              not exported
+:       M              may change
 :
 : Individual flags may be separated by whitespace.
 :
@@ -1358,6 +1379,7 @@ Ap        |bool   |Gv_AMupdate    |HV* stash
 p      |OP*    |append_elem    |I32 optype|OP* head|OP* tail
 p      |OP*    |append_list    |I32 optype|LISTOP* first|LISTOP* last
 p      |I32    |apply          |I32 type|SV** mark|SV** sp
+Ap     |void   |apply_attrs_string|char *stashpv|CV *cv|char *attrstr|STRLEN len
 Ap     |SV*    |avhv_delete_ent|AV *ar|SV* keysv|I32 flags|U32 hash
 Ap     |bool   |avhv_exists_ent|AV *ar|SV* keysv|U32 hash
 Ap     |SV**   |avhv_fetch_ent |AV *ar|SV* keysv|I32 lval|U32 hash
@@ -1366,17 +1388,17 @@ Ap      |HE*    |avhv_iternext  |AV *ar
 Ap     |SV*    |avhv_iterval   |AV *ar|HE* entry
 Ap     |HV*    |avhv_keys      |AV *ar
 Apd    |void   |av_clear       |AV* ar
-Ap     |SV*    |av_delete      |AV* ar|I32 key|I32 flags
-Ap     |bool   |av_exists      |AV* ar|I32 key
+Apd    |SV*    |av_delete      |AV* ar|I32 key|I32 flags
+Apd    |bool   |av_exists      |AV* ar|I32 key
 Apd    |void   |av_extend      |AV* ar|I32 key
-Ap     |AV*    |av_fake        |I32 size|SV** svp
+p      |AV*    |av_fake        |I32 size|SV** svp
 Apd    |SV**   |av_fetch       |AV* ar|I32 key|I32 lval
-Ap     |void   |av_fill        |AV* ar|I32 fill
+Apd    |void   |av_fill        |AV* ar|I32 fill
 Apd    |I32    |av_len         |AV* ar
 Apd    |AV*    |av_make        |I32 size|SV** svp
 Apd    |SV*    |av_pop         |AV* ar
 Apd    |void   |av_push        |AV* ar|SV* val
-Ap     |void   |av_reify       |AV* ar
+p      |void   |av_reify       |AV* ar
 Apd    |SV*    |av_shift       |AV* ar
 Apd    |SV**   |av_store       |AV* ar|I32 key|SV* val
 Apd    |void   |av_undef       |AV* ar
@@ -1406,7 +1428,7 @@ Afnrp     |void   |croak_nocontext|const char* pat|...
 Afnp   |OP*    |die_nocontext  |const char* pat|...
 Afnp   |void   |deb_nocontext  |const char* pat|...
 Afnp   |char*  |form_nocontext |const char* pat|...
-Afnp   |void   |load_module_nocontext|U32 flags|SV* name|SV* ver|...
+Anp    |void   |load_module_nocontext|U32 flags|SV* name|SV* ver|...
 Afnp   |SV*    |mess_nocontext |const char* pat|...
 Afnp   |void   |warn_nocontext |const char* pat|...
 Afnp   |void   |warner_nocontext|U32 err|const char* pat|...
@@ -1419,7 +1441,7 @@ Afnp      |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
-Ap     |SV*    |cv_const_sv    |CV* cv
+Apd    |SV*    |cv_const_sv    |CV* cv
 p      |SV*    |op_const_sv    |OP* o|CV* cv
 Ap     |void   |cv_undef       |CV* cv
 Ap     |void   |cx_dump        |PERL_CONTEXT* cs
@@ -1447,7 +1469,7 @@ p |OP*    |die_where      |char* message|STRLEN msglen
 Ap     |void   |dounwind       |I32 cxix
 p      |bool   |do_aexec       |SV* really|SV** mark|SV** sp
 p      |bool   |do_aexec5      |SV* really|SV** mark|SV** sp|int fd|int flag
-Ap     |int    |do_binmode     |PerlIO *fp|int iotype|int flag
+Ap     |int    |do_binmode     |PerlIO *fp|int iotype|int mode
 p      |void   |do_chop        |SV* asv|SV* sv
 Ap     |bool   |do_close       |GV* gv|bool not_implicit
 p      |bool   |do_eof         |GV* gv
@@ -1464,7 +1486,7 @@ p |I32    |do_msgsnd      |SV** mark|SV** sp
 p      |I32    |do_semop       |SV** mark|SV** sp
 p      |I32    |do_shmio       |I32 optype|SV** mark|SV** sp
 #endif
-p      |void   |do_join        |SV* sv|SV* del|SV** mark|SV** sp
+Ap     |void   |do_join        |SV* sv|SV* del|SV** mark|SV** sp
 p      |OP*    |do_kv
 Ap     |bool   |do_open        |GV* gv|char* name|I32 len|int as_raw \
                                |int rawmode|int rawperm|PerlIO* supplied_fp
@@ -1511,7 +1533,7 @@ Ap        |char*  |vform          |const char* pat|va_list* args
 Ap     |void   |free_tmps
 p      |OP*    |gen_constant_list|OP* o
 #if !defined(HAS_GETENV_LEN)
-p      |char*  |getenv_len     |char* key|unsigned long *len
+p      |char*  |getenv_len     |const char* key|unsigned long *len
 #endif
 Ap     |void   |gp_free        |GV* gv
 Ap     |GP*    |gp_ref         |GP* gp
@@ -1523,6 +1545,7 @@ Ap        |GV*    |gv_autoload4   |HV* stash|const char* name|STRLEN len \
 Ap     |void   |gv_check       |HV* stash
 Ap     |void   |gv_efullname   |SV* sv|GV* gv
 Ap     |void   |gv_efullname3  |SV* sv|GV* gv|const char* prefix
+Ap     |void   |gv_efullname4  |SV* sv|GV* gv|const char* prefix|bool keepmain
 Ap     |GV*    |gv_fetchfile   |const char* name
 Apd    |GV*    |gv_fetchmeth   |HV* stash|const char* name|STRLEN len \
                                |I32 level
@@ -1532,6 +1555,7 @@ Apd       |GV*    |gv_fetchmethod_autoload|HV* stash|const char* name \
 Ap     |GV*    |gv_fetchpv     |const char* name|I32 add|I32 sv_type
 Ap     |void   |gv_fullname    |SV* sv|GV* gv
 Ap     |void   |gv_fullname3   |SV* sv|GV* gv|const char* prefix
+Ap     |void   |gv_fullname4   |SV* sv|GV* gv|const char* prefix|bool keepmain
 Ap     |void   |gv_init        |GV* gv|HV* stash|const char* name \
                                |STRLEN len|int multi
 Apd    |HV*    |gv_stashpv     |const char* name|I32 create
@@ -1567,6 +1591,7 @@ p |U32    |intro_my
 Ap     |char*  |instr          |const char* big|const char* little
 p      |bool   |io_close       |IO* io|bool not_implicit
 p      |OP*    |invert         |OP* cmd
+dp     |bool   |is_gv_magical  |char *name|STRLEN len|U32 flags
 Ap     |bool   |is_uni_alnum   |U32 c
 Ap     |bool   |is_uni_alnumc  |U32 c
 Ap     |bool   |is_uni_idfirst |U32 c
@@ -1601,7 +1626,8 @@ Ap        |bool   |is_uni_xdigit_lc|U32 c
 Ap     |U32    |to_uni_upper_lc|U32 c
 Ap     |U32    |to_uni_title_lc|U32 c
 Ap     |U32    |to_uni_lower_lc|U32 c
-Ap     |int    |is_utf8_char   |U8 *p
+Ap     |STRLEN |is_utf8_char   |U8 *p
+Ap     |bool   |is_utf8_string |U8 *s|STRLEN len
 Ap     |bool   |is_utf8_alnum  |U8 *p
 Ap     |bool   |is_utf8_alnumc |U8 *p
 Ap     |bool   |is_utf8_idfirst|U8 *p
@@ -1625,7 +1651,7 @@ p |void   |lex_start      |SV* line
 p      |OP*    |linklist       |OP* o
 p      |OP*    |list           |OP* o
 p      |OP*    |listkids       |OP* o
-Afp    |void   |load_module|U32 flags|SV* name|SV* ver|...
+Ap     |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
@@ -1654,6 +1680,7 @@ p |int    |magic_mutexfree|SV* sv|MAGIC* mg
 p      |int    |magic_nextpack |SV* sv|MAGIC* mg|SV* key
 p      |U32    |magic_regdata_cnt|SV* sv|MAGIC* mg
 p      |int    |magic_regdatum_get|SV* sv|MAGIC* mg
+p      |int    |magic_regdatum_set|SV* sv|MAGIC* mg
 p      |int    |magic_set      |SV* sv|MAGIC* mg
 p      |int    |magic_setamagic|SV* sv|MAGIC* mg
 p      |int    |magic_setarylen|SV* sv|MAGIC* mg
@@ -1734,7 +1761,7 @@ Ap        |OP*    |newANONHASH    |OP* o
 Ap     |OP*    |newANONSUB     |I32 floor|OP* proto|OP* block
 Ap     |OP*    |newASSIGNOP    |I32 flags|OP* left|I32 optype|OP* right
 Ap     |OP*    |newCONDOP      |I32 flags|OP* expr|OP* trueop|OP* falseop
-Apd    |void   |newCONSTSUB    |HV* stash|char* name|SV* sv
+Apd    |CV*    |newCONSTSUB    |HV* stash|char* name|SV* sv
 Ap     |void   |newFORM        |I32 floor|OP* o|OP* block
 Ap     |OP*    |newFOROP       |I32 flags|char* label|line_t forline \
                                |OP* sclr|OP* expr|OP*block|OP*cont
@@ -1770,9 +1797,11 @@ Ap       |SV*    |newSV          |STRLEN len
 Ap     |OP*    |newSVREF       |OP* o
 Ap     |OP*    |newSVOP        |I32 type|I32 flags|SV* sv
 Apd    |SV*    |newSViv        |IV i
+Apd    |SV*    |newSVuv        |UV u
 Apd    |SV*    |newSVnv        |NV n
 Apd    |SV*    |newSVpv        |const char* s|STRLEN len
 Apd    |SV*    |newSVpvn       |const char* s|STRLEN len
+Apd    |SV*    |newSVpvn_share |const char* s|STRLEN len|U32 hash
 Afpd   |SV*    |newSVpvf       |const char* pat|...
 Ap     |SV*    |vnewSVpvf      |const char* pat|va_list* args
 Apd    |SV*    |newSVrv        |SV* rv|const char* classname
@@ -1823,9 +1852,9 @@ Apd       |HV*    |get_hv         |const char* name|I32 create
 Apd    |CV*    |get_cv         |const char* name|I32 create
 Ap     |int    |init_i18nl10n  |int printwarn
 Ap     |int    |init_i18nl14n  |int printwarn
-Ap     |void   |new_collate    |const char* newcoll
-Ap     |void   |new_ctype      |const char* newctype
-Ap     |void   |new_numeric    |const char* newcoll
+Ap     |void   |new_collate    |char* newcoll
+Ap     |void   |new_ctype      |char* newctype
+Ap     |void   |new_numeric    |char* newcoll
 Ap     |void   |set_numeric_local
 Ap     |void   |set_numeric_radix
 Ap     |void   |set_numeric_standard
@@ -1859,7 +1888,7 @@ p |void   |regprop        |SV* sv|regnode* o
 Ap     |void   |repeatcpy      |char* to|const char* from|I32 len|I32 count
 Ap     |char*  |rninstr        |const char* big|const char* bigend \
                                |const char* little|const char* lend
-p      |Sighandler_t|rsignal   |int i|Sighandler_t t
+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
 p      |Sighandler_t|rsignal_state|int i
@@ -1884,6 +1913,7 @@ Ap        |void   |save_freesv    |SV* sv
 p      |void   |save_freeop    |OP* o
 Ap     |void   |save_freepv    |char* pv
 Ap     |void   |save_generic_svref|SV** sptr
+Ap     |void   |save_generic_pvref|char** str
 Ap     |void   |save_gp        |GV* gv|I32 empty
 Ap     |HV*    |save_hash      |GV* gv
 Ap     |void   |save_helem     |HV* hv|SV *key|SV **sptr
@@ -1911,10 +1941,10 @@ p       |OP*    |scalar         |OP* o
 p      |OP*    |scalarkids     |OP* o
 p      |OP*    |scalarseq      |OP* o
 p      |OP*    |scalarvoid     |OP* o
-Ap     |NV     |scan_bin       |char* start|I32 len|I32* retlen
-Ap     |NV     |scan_hex       |char* start|I32 len|I32* retlen
-Ap     |char*  |scan_num       |char* s
-Ap     |NV     |scan_oct       |char* start|I32 len|I32* retlen
+Ap     |NV     |scan_bin       |char* start|STRLEN len|STRLEN* retlen
+Ap     |NV     |scan_hex       |char* start|STRLEN len|STRLEN* retlen
+Ap     |char*  |scan_num       |char* s|YYSTYPE *lvalp
+Ap     |NV     |scan_oct       |char* start|STRLEN len|STRLEN* retlen
 p      |OP*    |scope          |OP* o
 Ap     |char*  |screaminstr    |SV* bigsv|SV* littlesv|I32 start_shift \
                                |I32 end_shift|I32 *state|I32 last
@@ -1944,7 +1974,7 @@ 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
-Ap     |I32    |sv_true        |SV *sv
+Apd    |I32    |sv_true        |SV *sv
 p      |void   |sv_add_arena   |char* ptr|U32 size|U32 flags
 Ap     |int    |sv_backoff     |SV* sv
 Apd    |SV*    |sv_bless       |SV* sv|HV* stash
@@ -1956,9 +1986,9 @@ Apd       |void   |sv_catsv       |SV* dsv|SV* ssv
 Apd    |void   |sv_chop        |SV* sv|char* ptr
 p      |void   |sv_clean_all
 p      |void   |sv_clean_objs
-Ap     |void   |sv_clear       |SV* sv
+Apd    |void   |sv_clear       |SV* sv
 Apd    |I32    |sv_cmp         |SV* sv1|SV* sv2
-Ap     |I32    |sv_cmp_locale  |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
 #endif
@@ -1967,9 +1997,9 @@ 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
-Ap     |void   |sv_free        |SV* sv
+Apd    |void   |sv_free        |SV* sv
 p      |void   |sv_free_arenas
-Ap     |char*  |sv_gets        |SV* sv|PerlIO* fp|I32 append
+Apd    |char*  |sv_gets        |SV* sv|PerlIO* fp|I32 append
 Apd    |char*  |sv_grow        |SV* sv|STRLEN newlen
 Apd    |void   |sv_inc         |SV* sv
 Apd    |void   |sv_insert      |SV* bigsv|STRLEN offset|STRLEN len \
@@ -1977,7 +2007,7 @@ Apd       |void   |sv_insert      |SV* bigsv|STRLEN offset|STRLEN len \
 Apd    |int    |sv_isa         |SV* sv|const char* name
 Apd    |int    |sv_isobject    |SV* sv
 Apd    |STRLEN |sv_len         |SV* sv
-Ap     |STRLEN |sv_len_utf8    |SV* sv
+Apd    |STRLEN |sv_len_utf8    |SV* sv
 Apd    |void   |sv_magic       |SV* sv|SV* obj|int how|const char* name \
                                |I32 namlen
 Apd    |SV*    |sv_mortalcopy  |SV* oldsv
@@ -1986,11 +2016,11 @@ Ap      |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
-Ap     |char*  |sv_pvn_force   |SV* sv|STRLEN* lp
-Ap     |char*  |sv_pvutf8n_force|SV* sv|STRLEN* lp
+Apd    |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
-Ap     |char*  |sv_reftype     |SV* sv|int ob
-Ap     |void   |sv_replace     |SV* sv|SV* nsv
+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
 Afpd   |void   |sv_setpvf      |SV* sv|const char* pat|...
@@ -2009,7 +2039,7 @@ 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
-Ap     |int    |sv_unmagic     |SV* sv|int type
+Apd    |int    |sv_unmagic     |SV* sv|int type
 Apd    |void   |sv_unref       |SV* sv
 Ap     |void   |sv_untaint     |SV* sv
 Apd    |bool   |sv_upgrade     |SV* sv|U32 mt
@@ -2038,25 +2068,30 @@ Ap      |void   |unlock_condpair|void* svv
 Ap     |void   |unsharepvn     |const char* sv|I32 len|U32 hash
 p      |void   |unshare_hek    |HEK* hek
 p      |void   |utilize        |int aver|I32 floor|OP* version|OP* id|OP* arg
-Ap     |U8*    |utf16_to_utf8  |U16* p|U8 *d|I32 bytelen
-Ap     |U8*    |utf16_to_utf8_reversed|U16* p|U8 *d|I32 bytelen
+Ap     |U8*    |utf16_to_utf8  |U8* p|U8 *d|I32 bytelen|I32 *newlen
+Ap     |U8*    |utf16_to_utf8_reversed|U8* p|U8 *d|I32 bytelen|I32 *newlen
+Ap     |STRLEN |utf8_length    |U8* s|U8 *e
 Ap     |I32    |utf8_distance  |U8 *a|U8 *b
 Ap     |U8*    |utf8_hop       |U8 *s|I32 off
-Ap     |UV     |utf8_to_uv     |U8 *s|I32* retlen
-Ap     |U8*    |uv_to_utf8     |U8 *d|UV uv
+ApM    |U8*    |utf8_to_bytes  |U8 *s|STRLEN *len
+ApM    |U8*    |bytes_to_utf8  |U8 *s|STRLEN *len
+Ap     |UV     |utf8_to_uv_simple|U8 *s|STRLEN* retlen
+Ap     |UV     |utf8_to_uv     |U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags
+Ap     |U8*    |uv_to_utf8|U8 *d|UV uv
 p      |void   |vivify_defelem |SV* sv
 p      |void   |vivify_ref     |SV* sv|U32 to_what
 p      |I32    |wait4pid       |Pid_t pid|int* statusp|int flags
-p      |void   |report_closed_fh|GV *gv|IO *io|const char *func|const char *obj
+p      |void   |report_evil_fh |GV *gv|IO *io|I32 op
 p      |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|...
 Ap     |void   |vwarner        |U32 err|const char* pat|va_list* args
 p      |void   |watch          |char** addr
-p      |I32    |whichsig       |char* sig
+Ap     |I32    |whichsig       |char* sig
 p      |int    |yyerror        |char* s
-#if defined(USE_PURE_BISON)
+#ifdef USE_PURE_BISON
+p      |int    |yylex_r        |YYSTYPE *lvalp|int *lcharp
 p      |int    |yylex          |YYSTYPE *lvalp|int *lcharp
 #else
 p      |int    |yylex
@@ -2082,6 +2117,9 @@ Ap        |struct perl_vars *|GetVars
 #endif
 Ap     |int    |runops_standard
 Ap     |int    |runops_debug
+#if defined(USE_THREADS)
+Ap     |SV*    |sv_lock        |SV *sv
+#endif
 Afpd   |void   |sv_catpvf_mg   |SV *sv|const char* pat|...
 Ap     |void   |sv_vcatpvf_mg  |SV* sv|const char* pat|va_list* args
 Apd    |void   |sv_catpv_mg    |SV *sv|const char *ptr
@@ -2126,13 +2164,13 @@ 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
-Ap      |void   |sv_utf8_upgrade|SV *sv
-Ap      |bool   |sv_utf8_downgrade|SV *sv|bool fail_ok
-Ap      |void   |sv_utf8_encode |SV *sv
+Apd      |void   |sv_utf8_upgrade|SV *sv
+ApdM      |bool   |sv_utf8_downgrade|SV *sv|bool fail_ok
+ApdM      |void   |sv_utf8_encode |SV *sv
 Ap      |bool   |sv_utf8_decode |SV *sv
 Ap     |void   |sv_force_normal|SV *sv
 Ap     |void   |tmps_grow      |I32 n
-Ap     |SV*    |sv_rvweaken    |SV *sv
+Apd    |SV*    |sv_rvweaken    |SV *sv
 p      |int    |magic_killbackrefs|SV *sv|MAGIC *mg
 Ap     |OP*    |newANONATTRSUB |I32 floor|OP *proto|OP *attrs|OP *block
 Ap     |CV*    |newATTRSUB     |I32 floor|OP *o|OP *proto|OP *attrs|OP *block
@@ -2160,6 +2198,10 @@ Ap       |void*  |ptr_table_fetch|PTR_TBL_t *tbl|void *sv
 Ap     |void   |ptr_table_store|PTR_TBL_t *tbl|void *oldsv|void *newsv
 Ap     |void   |ptr_table_split|PTR_TBL_t *tbl
 #endif
+#if defined(HAVE_INTERP_INTERN)
+Ap     |void   |sys_intern_clear
+Ap     |void   |sys_intern_init
+#endif
 
 #if defined(PERL_OBJECT)
 protected:
@@ -2173,16 +2215,12 @@ s       |I32    |avhv_index     |AV* av|SV* sv|U32 hash
 #endif
 
 #if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
-s      |I32    |do_trans_CC_simple     |SV *sv
-s      |I32    |do_trans_CC_count      |SV *sv
-s      |I32    |do_trans_CC_complex    |SV *sv
-s      |I32    |do_trans_UU_simple     |SV *sv
-s      |I32    |do_trans_UU_count      |SV *sv
-s      |I32    |do_trans_UU_complex    |SV *sv
-s      |I32    |do_trans_UC_simple     |SV *sv
-s      |I32    |do_trans_CU_simple     |SV *sv
-s      |I32    |do_trans_UC_trivial    |SV *sv
-s      |I32    |do_trans_CU_trivial    |SV *sv
+s      |I32    |do_trans_simple        |SV *sv
+s      |I32    |do_trans_count         |SV *sv
+s      |I32    |do_trans_complex       |SV *sv
+s      |I32    |do_trans_simple_utf8   |SV *sv
+s      |I32    |do_trans_count_utf8    |SV *sv
+s      |I32    |do_trans_complex_utf8  |SV *sv
 #endif
 
 #if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
@@ -2317,40 +2355,40 @@ s       |int    |dooneliner     |char *cmd|char *filename
 #endif
 
 #if defined(PERL_IN_REGCOMP_C) || defined(PERL_DECL_PROT)
-s      |regnode*|reg           |I32|I32 *
-s      |regnode*|reganode      |U8|U32
-s      |regnode*|regatom       |I32 *
-s      |regnode*|regbranch     |I32 *|I32
-s      |void   |reguni         |UV|char *|I32*
-s      |regnode*|regclass
-s      |regnode*|regclassutf8
+s      |regnode*|reg           |struct RExC_state_t*|I32|I32 *
+s      |regnode*|reganode      |struct RExC_state_t*|U8|U32
+s      |regnode*|regatom       |struct RExC_state_t*|I32 *
+s      |regnode*|regbranch     |struct RExC_state_t*|I32 *|I32
+s      |void   |reguni         |struct RExC_state_t*|UV|char *|STRLEN*
+s      |regnode*|regclass      |struct RExC_state_t*
+s      |regnode*|regclassutf8  |struct RExC_state_t*
 s      |I32    |regcurly       |char *
-s      |regnode*|reg_node      |U8
-s      |regnode*|regpiece      |I32 *
-s      |void   |reginsert      |U8|regnode *
-s      |void   |regoptail      |regnode *|regnode *
-s      |void   |regtail        |regnode *|regnode *
+s      |regnode*|reg_node      |struct RExC_state_t*|U8
+s      |regnode*|regpiece      |struct RExC_state_t*|I32 *
+s      |void   |reginsert      |struct RExC_state_t*|U8|regnode *
+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
+s      |char*|nextchar |struct RExC_state_t*
 s      |regnode*|dumpuntil     |regnode *start|regnode *node \
                                |regnode *last|SV* sv|I32 l
 s      |void   |put_byte       |SV* sv|int c
-s      |void   |scan_commit    |struct scan_data_t *data
-s      |void   |cl_anything    |struct regnode_charclass_class *cl
+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
-s      |void   |cl_init        |struct regnode_charclass_class *cl
-s      |void   |cl_init_zero   |struct regnode_charclass_class *cl
+s      |void   |cl_init        |struct RExC_state_t*|struct regnode_charclass_class *cl
+s      |void   |cl_init_zero   |struct RExC_state_t*|struct regnode_charclass_class *cl
 s      |void   |cl_and         |struct regnode_charclass_class *cl \
                                |struct regnode_charclass_class *and_with
-s      |void   |cl_or          |struct regnode_charclass_class *cl \
+s      |void   |cl_or          |struct RExC_state_t*|struct regnode_charclass_class *cl \
                                |struct regnode_charclass_class *or_with
-s      |I32    |study_chunk    |regnode **scanp|I32 *deltap \
+s      |I32    |study_chunk    |struct RExC_state_t*|regnode **scanp|I32 *deltap \
                                |regnode *last|struct scan_data_t *data \
                                |U32 flags
-s      |I32    |add_data       |I32 n|char *s
+s      |I32    |add_data       |struct RExC_state_t*|I32 n|char *s
 rs     |void|re_croak2 |const char* pat1|const char* pat2|...
-s      |I32    |regpposixcc    |I32 value
-s      |void   |checkposixcc
+s      |I32    |regpposixcc    |struct RExC_state_t*|I32 value
+s      |void   |checkposixcc   |struct RExC_state_t*
 #endif
 
 #if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
@@ -2447,6 +2485,7 @@ s |char*  |scan_trans     |char *start
 s      |char*  |scan_word      |char *s|char *dest|STRLEN destlen \
                                |int allow_package|STRLEN *slp
 s      |char*  |skipspace      |char *s
+s      |char*  |swallow_bom    |U8 *s
 s      |void   |checkcomma     |char *s|char *name|char *what
 s      |void   |force_ident    |char *s|int kind
 s      |void   |incline        |char *s
@@ -2460,6 +2499,7 @@ s |I32    |sublex_done
 s      |I32    |sublex_push
 s      |I32    |sublex_start
 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
 s      |int    |ao             |int toketype
@@ -2482,6 +2522,7 @@ s |SV*|isa_lookup |HV *stash|const char *name|int len|int level
 #endif
 
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
+s      |char*  |stdize_locale  |char* locs
 s      |SV*    |mess_alloc
 #  if defined(LEAKTEST)
 s      |void   |xstat          |int