uninitialized warnings in regcomp
[p5sagit/p5-mst-13.2.git] / embed.pl
index 4ba0eb9..612e19c 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -19,21 +19,7 @@ sub do_not_edit ($)
 {
     my $file = shift;
     
-    my $years;
-
-    if ($file eq 'embed.h') {
-        $years = '1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003';
-    } elsif ($file eq 'embedvar.h') {
-        $years = '1999, 2000, 2001, 2002, 2003';
-    } elsif ($file eq 'global.sym') {
-        $years = '1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003';
-    } elsif ($file eq 'perlapi.c') {
-        $years = '1999, 2000, 2001';
-    } elsif ($file eq 'perlapi.h') {
-        $years = '1999, 2000, 2001, 2002, 2003';
-    } elsif ($file eq 'proto.h') {
-        $years = '1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003';
-    }
+    my $years = '1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005';
 
     $years =~ s/1999,/1999,\n  / if length $years > 40;
 
@@ -55,6 +41,15 @@ Edit those files and run 'make regen_headers' to effect changes.
 
 EOW
 
+    $warning .= <<EOW if $file eq 'perlapi.c';
+
+Up to the threshold of the door there mounted a flight of twenty-seven
+broad stairs, hewn by some unknown art of the same black stone.  This
+was the only entrance to the tower.
+
+
+EOW
+
     if ($file =~ m:\.[ch]$:) {
        $warning =~ s:^: * :gm;
        $warning =~ s: +$::gm;
@@ -86,6 +81,7 @@ sub walk_table (&@) {
     else {
        safer_unlink $filename;
        open F, ">$filename" or die "Can't open $filename: $!";
+       binmode F;
        $F = \*F;
     }
     print $F $leader if $leader;
@@ -97,6 +93,7 @@ sub walk_table (&@) {
            $_ .= <IN>;
            chomp;
        }
+       s/\s+$//;
        my @args;
        if (/^\s*(#|$)/) {
            @args = $_;
@@ -202,11 +199,8 @@ sub write_protos {
        if( $flags =~ /f/ ) {
            my $prefix = $flags =~ /n/ ? '' : 'pTHX_';
            my $args = scalar @args;
-           $ret .= "\n#ifdef CHECK_FORMAT\n";
-           $ret .=
-               sprintf " __attribute__((__format__(__printf__,%s%d,%s%d)))",
+           $ret .= sprintf "\n\t__attribute__format__(__printf__,%s%d,%s%d)",
                                    $prefix, $args - 1, $prefix, $args;
-           $ret .= "\n#endif\n";
        }
        $ret .= ";";
        $ret .= ' */' if $flags =~ /m/;
@@ -280,7 +274,7 @@ sub readvars(\%$$@) {
        or die "embed.pl: Can't open $file: $!\n";
     while (<FILE>) {
        s/[ \t]*#.*//;          # Delete comments.
-       if (/PERLVARA?I?C?\($pre(\w+)/) {
+       if (/PERLVARA?I?S?C?\($pre(\w+)/) {
            my $sym = $1;
            $sym = $pre . $sym if $keep_pre;
            warn "duplicate symbol $sym while processing $file\n"
@@ -332,6 +326,7 @@ sub multoff ($$) {
 
 safer_unlink 'embed.h';
 open(EM, '> embed.h') or die "Can't create embed.h: $!\n";
+binmode EM;
 
 print EM do_not_edit ("embed.h"), <<'END';
 
@@ -349,8 +344,19 @@ print EM do_not_edit ("embed.h"), <<'END';
 
 END
 
+# Try to elimiate lots of repeated
+# #ifdef PERL_CORE
+# foo
+# #endif
+# #ifdef PERL_CORE
+# bar
+# #endif
+# by tracking state and merging foo and bar into one block.
+my $ifdef_state = '';
+
 walk_table {
     my $ret = "";
+    my $new_ifdef_state = '';
     if (@_ == 1) {
        my $arg = shift;
        $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
@@ -367,15 +373,31 @@ walk_table {
        }
        if ($ret ne '' && $flags !~ /A/) {
            if ($flags =~ /E/) {
-               $ret = "#if defined(PERL_CORE) || defined(PERL_EXT)\n$ret#endif\n";
-           } else {
-               $ret = "#ifdef PERL_CORE\n$ret#endif\n";
+               $new_ifdef_state
+                   = "#if defined(PERL_CORE) || defined(PERL_EXT)\n";
+           }
+           else {
+               $new_ifdef_state = "#ifdef PERL_CORE\n";
+           }
+
+           if ($new_ifdef_state ne $ifdef_state) {
+               $ret = $new_ifdef_state . $ret;
            }
         }
     }
+    if ($ifdef_state && $new_ifdef_state ne $ifdef_state) {
+       # Close the old one ahead of opening the new one.
+       $ret = "#endif\n$ret";
+    }
+    # Remember the new state.
+    $ifdef_state = $new_ifdef_state;
     $ret;
 } \*EM, "";
 
+if ($ifdef_state) {
+    print EM "#endif\n";
+}
+
 for $sym (sort keys %ppsym) {
     $sym =~ s/^Perl_//;
     print EM hide($sym, "Perl_$sym");
@@ -389,8 +411,10 @@ END
 
 my @az = ('a'..'z');
 
+$ifdef_state = '';
 walk_table {
     my $ret = "";
+    my $new_ifdef_state = '';
     if (@_ == 1) {
        my $arg = shift;
        $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
@@ -425,17 +449,33 @@ walk_table {
                $ret .= $alist . ")\n";
            }
        }
-         unless ($flags =~ /A/) {
+       unless ($flags =~ /A/) {
            if ($flags =~ /E/) {
-               $ret = "#if defined(PERL_CORE) || defined(PERL_EXT)\n$ret#endif\n";
-           } else {
-               $ret = "#ifdef PERL_CORE\n$ret#endif\n";
+               $new_ifdef_state
+                   = "#if defined(PERL_CORE) || defined(PERL_EXT)\n";
+           }
+           else {
+               $new_ifdef_state = "#ifdef PERL_CORE\n";
+           }
+
+           if ($new_ifdef_state ne $ifdef_state) {
+               $ret = $new_ifdef_state . $ret;
            }
         }
     }
+    if ($ifdef_state && $new_ifdef_state ne $ifdef_state) {
+       # Close the old one ahead of opening the new one.
+       $ret = "#endif\n$ret";
+    }
+    # Remember the new state.
+    $ifdef_state = $new_ifdef_state;
     $ret;
 } \*EM, "";
 
+if ($ifdef_state) {
+    print EM "#endif\n";
+}
+
 for $sym (sort keys %ppsym) {
     $sym =~ s/^Perl_//;
     if ($sym =~ /^ck_/) {
@@ -541,6 +581,7 @@ close(EM) or die "Error closing EM: $!";
 safer_unlink 'embedvar.h';
 open(EM, '> embedvar.h')
     or die "Can't create embedvar.h: $!\n";
+binmode EM;
 
 print EM do_not_edit ("embedvar.h"), <<'END';
 
@@ -613,7 +654,8 @@ print EM <<'END';
 END
 
 for $sym (sort keys %globvar) {
-    print EM multon($sym,'G','PL_Vars.');
+    print EM multon($sym,   'G','my_vars->');
+    print EM multon("G$sym",'', 'my_vars->');
 }
 
 print EM <<'END';
@@ -648,7 +690,9 @@ close(EM) or die "Error closing EM: $!";
 safer_unlink 'perlapi.h';
 safer_unlink 'perlapi.c';
 open(CAPI, '> perlapi.c') or die "Can't create perlapi.c: $!\n";
+binmode CAPI;
 open(CAPIH, '> perlapi.h') or die "Can't create perlapi.h: $!\n";
+binmode CAPIH;
 
 print CAPIH do_not_edit ("perlapi.h"), <<'EOT';
 
@@ -664,11 +708,14 @@ START_EXTERN_C
 #undef PERLVARA
 #undef PERLVARI
 #undef PERLVARIC
+#undef PERLVARISC
 #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(pTHX);
 #define PERLVARI(v,t,i)        PERLVAR(v,t)
 #define PERLVARIC(v,t,i) PERLVAR(v, const t)
+#define PERLVARISC(v,i)        typedef const char PL_##v##_t[sizeof(i)];       \
+                       EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX);
 
 #include "thrdvar.h"
 #include "intrpvar.h"
@@ -678,6 +725,16 @@ START_EXTERN_C
 #undef PERLVARA
 #undef PERLVARI
 #undef PERLVARIC
+#undef PERLVARISC
+
+#ifndef PERL_GLOBAL_STRUCT
+EXTERN_C Perl_ppaddr_t** Perl_Gppaddr_ptr(pTHX);
+EXTERN_C Perl_check_t**  Perl_Gcheck_ptr(pTHX);
+EXTERN_C unsigned char** Perl_Gfold_locale_ptr(pTHX);
+#define Perl_ppaddr_ptr      Perl_Gppaddr_ptr
+#define Perl_check_ptr       Perl_Gcheck_ptr
+#define Perl_fold_locale_ptr Perl_Gfold_locale_ptr
+#endif
 
 END_EXTERN_C
 
@@ -693,9 +750,9 @@ END_EXTERN_C
 START_EXTERN_C
 
 #ifndef DOINIT
-EXT void *PL_force_link_funcs[];
+EXTCONST void * const PL_force_link_funcs[];
 #else
-EXT void *PL_force_link_funcs[] = {
+EXTCONST void * const PL_force_link_funcs[] = {
 #undef PERLVAR
 #undef PERLVARA
 #undef PERLVARI
@@ -704,6 +761,7 @@ EXT void *PL_force_link_funcs[] = {
 #define PERLVARA(v,n,t)        PERLVAR(v,t)
 #define PERLVARI(v,t,i)        PERLVAR(v,t)
 #define PERLVARIC(v,t,i) PERLVAR(v,t)
+#define PERLVARISC(v,i) PERLVAR(v,char)
 
 #include "thrdvar.h"
 #include "intrpvar.h"
@@ -713,6 +771,7 @@ EXT void *PL_force_link_funcs[] = {
 #undef PERLVARA
 #undef PERLVARI
 #undef PERLVARIC
+#undef PERLVARISC
 };
 #endif /* DOINIT */
 
@@ -761,14 +820,17 @@ START_EXTERN_C
 #undef PERLVARA
 #undef PERLVARI
 #undef PERLVARIC
+#undef PERLVARISC
 
 #define PERLVAR(v,t)   t* Perl_##v##_ptr(pTHX)                         \
-                       { return &(aTHX->v); }
+                       { dVAR; return &(aTHX->v); }
 #define PERLVARA(v,n,t)        PL_##v##_t* Perl_##v##_ptr(pTHX)                \
-                       { return &(aTHX->v); }
+                       { dVAR; return &(aTHX->v); }
 
 #define PERLVARI(v,t,i)        PERLVAR(v,t)
 #define PERLVARIC(v,t,i) PERLVAR(v, const t)
+#define PERLVARISC(v,i)        PL_##v##_t* Perl_##v##_ptr(pTHX)                \
+                       { dVAR; return &(aTHX->v); }
 
 #include "thrdvar.h"
 #include "intrpvar.h"
@@ -776,18 +838,42 @@ START_EXTERN_C
 #undef PERLVAR
 #undef PERLVARA
 #define PERLVAR(v,t)   t* Perl_##v##_ptr(pTHX)                         \
-                       { return &(PL_##v); }
+                       { dVAR; return &(PL_##v); }
 #define PERLVARA(v,n,t)        PL_##v##_t* Perl_##v##_ptr(pTHX)                \
-                       { return &(PL_##v); }
+                       { dVAR; return &(PL_##v); }
 #undef PERLVARIC
-#define PERLVARIC(v,t,i)       const t* Perl_##v##_ptr(pTHX)           \
+#undef PERLVARISC
+#define PERLVARIC(v,t,i)       \
+                       const t* Perl_##v##_ptr(pTHX)           \
                        { return (const t *)&(PL_##v); }
+#define PERLVARISC(v,i)        PL_##v##_t* Perl_##v##_ptr(pTHX)        \
+                       { dVAR; return &(PL_##v); }
 #include "perlvars.h"
 
 #undef PERLVAR
 #undef PERLVARA
 #undef PERLVARI
 #undef PERLVARIC
+#undef PERLVARISC
+
+#ifndef PERL_GLOBAL_STRUCT
+/* A few evil special cases.  Could probably macrofy this. */
+#undef PL_ppaddr
+#undef PL_check
+#undef PL_fold_locale
+Perl_ppaddr_t** Perl_Gppaddr_ptr(pTHX) {
+    static const Perl_ppaddr_t* ppaddr_ptr = PL_ppaddr;
+    return (Perl_ppaddr_t**)&ppaddr_ptr;
+}
+Perl_check_t**  Perl_Gcheck_ptr(pTHX) {
+    static const Perl_check_t* check_ptr  = PL_check;
+    return (Perl_check_t**)&check_ptr;
+}
+unsigned char** Perl_Gfold_locale_ptr(pTHX) {
+    static const unsigned char* fold_locale_ptr = PL_fold_locale;
+    return (unsigned char**)&fold_locale_ptr;
+}
+#endif
 
 END_EXTERN_C