mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-13 06:13:02 +00:00
Update etc/bench.pl. Optimize push mode a little (the yyn change
deserves most of the credit). * Makefile.am (SUBDIRS): Add etc subdirectory. * configure.ac (AC_CONFIG_FILES): Add etc/bench.pl and etc/Makefile. * data/push.c (b4_declare_parser_state_variables): Move yyn, yyresult, yytoken, yyval, and yyloc declarations to... (yyparse or yypush_parse): ... here to improve performance. For yypush_parse invocations after the first, be sure to assign yyn its old value again. (yypstate_new): Don't bother initializing the yyresult field since the initial value isn't used. (yyn, yyresult, yytoken, yyval, yyloc): For each NAME in this list, remove the #define that, in push mode, set it to yyps->NAME. * etc/Makefile.am: New. * etc/bench.pl: Remove and build it instead from... * etc/bench.pl.in: ... this new file. Use @abs_top_builddir@ to invoke "tests/bison" from the build directory by default rather than just invoking "bison" from $PATH. (calc_grammar): Update push parser code: don't declare yylval globally, don't define yyparse_wrapper, and don't #define yyparse. (bench_grammar): Update to check all working combinations of yacc.c, push.c, impure, pure, pull, and push.
This commit is contained in:
18
etc/Makefile.am
Normal file
18
etc/Makefile.am
Normal file
@@ -0,0 +1,18 @@
|
||||
## Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
## This program is free software; you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation; either version 2 of the License, or
|
||||
## (at your option) any later version.
|
||||
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
## 02110-1301 USA
|
||||
|
||||
nodist_noinst_SCRIPTS = bench.pl
|
||||
@@ -22,7 +22,7 @@
|
||||
use IO::File;
|
||||
use Benchmark qw (:all);
|
||||
|
||||
my $bison = $ENV{'BISON'} || 'bison';
|
||||
my $bison = $ENV{'BISON'} || '@abs_top_builddir@/tests/bison';
|
||||
my $cc = $ENV{'CC'} || 'gcc';
|
||||
|
||||
##################################################################
|
||||
@@ -260,12 +260,6 @@ read_signed_integer (void)
|
||||
return sign * n;
|
||||
}
|
||||
|
||||
#if YYPUSH
|
||||
#ifndef HAVE_YYSTYPE
|
||||
static YYSTYPE yylval;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static int
|
||||
#if YYPURE
|
||||
# define yylval (*yylvalp)
|
||||
@@ -310,21 +304,6 @@ power (int base, int exponent)
|
||||
}
|
||||
|
||||
|
||||
#if YYPUSH
|
||||
static int
|
||||
yyparse_wrapper ()
|
||||
{
|
||||
struct yypvars *ctx = yypvarsinit ();
|
||||
do {
|
||||
set_yychar (ctx, yylex ());
|
||||
ctx->yylval = yylval;
|
||||
yyparse (ctx);
|
||||
} while (get_yyresult (ctx) != 0);
|
||||
free (ctx);
|
||||
}
|
||||
#define yyparse yyparse_wrapper
|
||||
#endif
|
||||
|
||||
int
|
||||
main (int argc, const char **argv)
|
||||
{
|
||||
@@ -366,14 +345,12 @@ sub bench_grammar ($)
|
||||
my ($gram) = @_;
|
||||
my %test =
|
||||
(
|
||||
"yacc-yacc" => '',
|
||||
"yacc-pure" => '%pure-parser',
|
||||
"push-yacc" => '%skeleton "push.c"',
|
||||
"push-pure" => '%skeleton "push.c" %pure-parser',
|
||||
"push-push" => '%skeleton "push.c" %push-parser',
|
||||
"popt-yacc" => '%skeleton "push_opt.c"',
|
||||
"popt-pure" => '%skeleton "push_opt.c" %pure-parser',
|
||||
"popt-push" => '%skeleton "push_opt.c" %push-parser',
|
||||
"yacc.c-pull-impure" => '',
|
||||
"yacc.c-pull-pure" => '%pure-parser',
|
||||
"push.c-pull-impure" => '%skeleton "push.c"',
|
||||
"push.c-pull-pure" => '%skeleton "push.c" %pure-parser',
|
||||
"push.c-push-impure" => '%skeleton "push.c" %push-parser',
|
||||
"push.c-push-pure" => '%skeleton "push.c" %push-parser %pure-parser',
|
||||
);
|
||||
|
||||
my %bench;
|
||||
Reference in New Issue
Block a user