X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/6c7ae946aa60721f014be4f2a95bdd91470cf3d9..c81d4d83678f0325c3e898dc4fd8e5a10a28da62:/regen_perly.pl diff --git a/regen_perly.pl b/regen_perly.pl index 124b031..b8fb5d7 100644 --- a/regen_perly.pl +++ b/regen_perly.pl @@ -35,7 +35,7 @@ sub usage { die "usage: $0 [ -b bison_executable ] [ file.y ]\n" } use warnings; use strict; -BEGIN { require 'regen/regen_lib.pl'; } +BEGIN { require './regen/regen_lib.pl'; } my $bison = 'bison'; @@ -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\.[45]\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 + # insert #ifdef PERL_CORE, so strip them because they aren't important + next if /YY_PERLYTMP_H/; + print $h_fh "#ifdef PERL_CORE\n" if $. == 1; if (!$endcore_done and /YYSTYPE_IS_DECLARED/) { print $h_fh <= 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 @@ -185,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; @@ -263,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: $_"; } @@ -302,7 +311,7 @@ sub make_type_tab { { "toketype_" . (defined $tokens{$1} ? $tokens{$1} : $default_token) }ge; - $fields =~ s/, \s* 0 \s* $//x + $fields =~ s/, \s* (?:0|YY_NULL|YY_NULLPTR) \s* $//x or die "make_type_tab: couldn't delete trailing ',0'\n"; return @@ -317,6 +326,9 @@ sub make_type_tab { sub my_system { + if ($Verbose) { + print "executing: @_\n"; + } system(@_); if ($? == -1) { die "failed to execute command '@_': $!\n";