/* This file contains the definitions for timing variables used to -*- C -*-
   measure run-time performance of the compiler.
   Copyright (C) 2002 Free Software Foundation, Inc.
   Contributed by Akim Demaille <akim@freefriends.org>.

   This file is part of Bison, the GNU Compiler Compiler.

   Bison 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, or (at your option)
   any later version.

   Bison 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 Bison; see the file COPYING.  If not, write to
   the Free Software Foundation, 51 Franklin Street, Fifth Floor,
   Boston, MA 02110-1301, USA.  */

/* This file contains timing variable definitions, used by timevar.h
   and timevar.c.

   Syntax:

     DEFTIMEVAR (id, name)

   where ID is the enumeral value used to identify the timing
   variable, and NAME is a character string describing its purpose.  */

/* The total execution time.  */
DEFTIMEVAR (TV_TOTAL                 , "total time")

/* Time spent in the reader.  */
DEFTIMEVAR (TV_READER                , "reader")
DEFTIMEVAR (TV_SCANNING              , "scanner")
DEFTIMEVAR (TV_PARSING               , "parser")

/* Time spent handling the grammar.  */
DEFTIMEVAR (TV_REDUCE                , "reducing the grammar")
DEFTIMEVAR (TV_SETS                  , "computing the sets")
DEFTIMEVAR (TV_LR0                   , "LR(0)")
DEFTIMEVAR (TV_LALR                  , "LALR(1)")
DEFTIMEVAR (TV_CONFLICTS             , "conflicts")

/* Time spent outputing results.  */
DEFTIMEVAR (TV_REPORT                , "outputing report")
DEFTIMEVAR (TV_GRAPH                 , "outputing graph")
DEFTIMEVAR (TV_ACTIONS               , "parser action tables")
DEFTIMEVAR (TV_PARSER                , "outputing parser")
DEFTIMEVAR (TV_M4                    , "running m4")

/* Time spent by freeing the memory :).  */
DEFTIMEVAR (TV_FREE                  , "freeing")
