X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/6d58c632025cb6928a90e4176577982bfb9c3981..cc8962bdde81b04aa728aef21e53b4a08a0debfe:/etc/bench.pl.in diff --git a/etc/bench.pl.in b/etc/bench.pl.in index 6b1e87dd..30d0a996 100755 --- a/etc/bench.pl.in +++ b/etc/bench.pl.in @@ -1,6 +1,6 @@ #! /usr/bin/perl -w -# Copyright (C) 2006, 2008-2012 Free Software Foundation, Inc. +# Copyright (C) 2006, 2008-2013 Free Software Foundation, Inc. # # This file is part of Bison, the GNU Compiler Compiler. # @@ -35,6 +35,7 @@ I: | directives & directives -- Concatenation | [ directives> ] -- Optional | ( directives> ) -- Parentheses + | %b PATH -- Use bison at PATH for this bench | #d NAME[=VALUE] -- %code { #define NAME [VALUE] } | %d NAME[=VALUE] -- %define NAME ["VALUE"] | %s skeleton -- %skeleton "skeleton" @@ -203,9 +204,9 @@ Format the list of directives for Bison for bench named C<$bench>. sub directives($@) { my ($bench, @directive) = @_; - my $res = "/* Directives for bench `$bench'. */\n"; + my $res = "/* Directives for bench '$bench'. */\n"; $res .= join ("\n", @directive) . "\n"; - $res .= "/* End of directives for bench `$bench'. */\n"; + $res .= "/* End of directives for bench '$bench'. */\n"; return $res; } @@ -609,8 +610,8 @@ $directives #if USE_TOKEN_CTOR yy::parser::symbol_type yylex(); #else - yy::parser::token_type yylex(yy::parser::semantic_type* yylval, - yy::parser::location_type* yylloc); + yy::parser::token_type yylex(yy::parser::semantic_type* yylvalp, + yy::parser::location_type* yyllocp); #endif // Conversion to string. @@ -681,8 +682,8 @@ static #if USE_TOKEN_CTOR yy::parser::symbol_type yylex() #else -yy::parser::token_type yylex(yy::parser::semantic_type* yylval, - yy::parser::location_type* yylloc) +yy::parser::token_type yylex(yy::parser::semantic_type* yylvalp, + yy::parser::location_type* yyllocp) #endif { typedef yy::parser::location_type location_type; @@ -694,7 +695,7 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval, #if USE_TOKEN_CTOR return yy::parser::make_END_OF_FILE (location_type ()); #else - *yylloc = location_type (); + *yyllocp = location_type (); return token::END_OF_FILE; #endif } @@ -704,13 +705,13 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval, return yy::parser::make_NUMBER (stage, location_type ()); #else # if defined ONE_STAGE_BUILD - yylval->build(stage); + yylvalp->build(stage); # elif USE_VARIANTS - yylval->build() = stage; + yylvalp->build() = stage; # else - yylval->ival = stage; + yylvalp->ival = stage; # endif - *yylloc = location_type (); + *yyllocp = location_type (); return token::NUMBER; #endif } @@ -720,13 +721,13 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval, return yy::parser::make_TEXT ("A string.", location_type ()); #else # if defined ONE_STAGE_BUILD - yylval->build(std::string("A string.")); + yylvalp->build(std::string("A string.")); # elif USE_VARIANTS - yylval->build() = std::string("A string."); + yylvalp->build() = std::string("A string."); # else - yylval->sval = new std::string("A string."); + yylvalp->sval = new std::string("A string."); # endif - *yylloc = location_type (); + *yyllocp = location_type (); return token::TEXT; #endif } @@ -806,7 +807,8 @@ sub compile ($) my $compiler = $language eq 'C++' ? $cxx : $cc; - run "$bison $base.y -o $base.c"; + my $my_bison = `sed -ne '/%bison "\\(.*\\)"/{s//\\1/;p;q;}' $base.y`; + run ((length $my_bison ? $my_bison : $bison) . " $base.y -o $base.c"); run "$compiler -o $base $cflags $base.c"; } @@ -1048,6 +1050,12 @@ sub parse_dirs () @res = ("%skeleton \"$token[0]\""); shift @token; } + elsif ($token[0] eq '%b') + { + shift @token; + @res = ("/*\n%bison \"$token[0]\"\\\n*/"); + shift @token; + } else { @res = $token[0];