X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/f5cf236ddbe8e24ed7acd5f0f961253d1500fac3..c708944da37fda4c2faf03aeddc9c9e5983ec407:/regen_perly.pl diff --git a/regen_perly.pl b/regen_perly.pl index 7907c20..33cb3b7 100644 --- a/regen_perly.pl +++ b/regen_perly.pl @@ -73,16 +73,21 @@ unless ($version) { die < 99; + die "Unexpectedly large bison subversion '$v2'" if $v2 > 9999; + + printf $h_fh "#define PERL_BISON_VERSION %2d%04d\n\n", $v1, $v2; +} + my $endcore_done = 0; # Token macros need to be generated manually from bison 2.4 on -my $gather_tokens = ($version =~ /\b2\.[456]\b/ ? undef : 0); +my $gather_tokens = $version >= 2.4 ? undef : 0; my $tokens; while (<$tmph_fh>) { # bison 2.6 adds header guards, which break things because of where we @@ -170,18 +187,21 @@ foreach ($act_fh, $tab_fh, $h_fh) { exit 0; +# extract the tables and actions from the generated .c file + sub extract { my $clines = shift; my $tablines; my $actlines; + my $last_table = $version >= 3 ? 'yyr2' : 'yystos'; $clines =~ m@ (?: ^/* YYFINAL[^\n]+\n #optional comment )? \# \s* define \s* YYFINAL # first #define .*? # other defines + most tables - yystos\[\]\s*= # start of last table + $last_table\[\]\s*= # start of last table .*? }\s*; # end of last table @xms @@ -189,27 +209,12 @@ sub extract { $tablines = $&; + # extract all the cases in the big action switch statement + $clines =~ m@ - switch \s* \( \s* \w+ \s* \) \s* { \s* - ( - case \s* \d+ \s* : - \s* - (?: \s* /\* .*? \*/ \s* )* # optional C-comments - \s* - \#line [^\n]+"\Q$y_file\E" - .*? - ) - } - \s* - (?: \s* /\* .*? \*/ \s* )* # optional C-comments - \s* - ( - \#line[^\n]+\.c" - | - \#line[^\n]+\.simple" - | - YY_SYMBOL_PRINT - ) + switch \s* \( \s* yyn \s* \) \s* { \s* + ( .*? default: \s* break; \s* ) + } @xms or die "Can't extract actions from $tmpc_file\n"; $actlines = $1; @@ -267,7 +272,7 @@ sub make_type_tab { my $default_token; open my $fh, '<', $y_file or die "Can't open $y_file: $!\n"; while (<$fh>) { - if (/(\$\d+)\s*=/) { + if (/(\$\d+)\s*=[^=]/) { warn "$y_file:$.: dangerous assignment to $1: $_"; } @@ -306,7 +311,7 @@ sub make_type_tab { { "toketype_" . (defined $tokens{$1} ? $tokens{$1} : $default_token) }ge; - $fields =~ s/, \s* (?:0|YY_NULL) \s* $//x + $fields =~ s/, \s* (?:0|YY_NULL|YY_NULLPTR) \s* $//x or die "make_type_tab: couldn't delete trailing ',0'\n"; return @@ -321,6 +326,9 @@ sub make_type_tab { sub my_system { + if ($Verbose) { + print "executing: @_\n"; + } system(@_); if ($? == -1) { die "failed to execute command '@_': $!\n";