/*
** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2003.
** See ../LICENSE for license information.
*/
# ifndef SYSTEM_CONSTANTS_H
# define SYSTEM_CONSTANTS_H

/*@constant int DEFAULTMAXMODS; @*/
# define DEFAULTMAXMODS 32

/*@constant int NOT_FOUND;@*/
# define NOT_FOUND (-23)

/*
** number of parse errors before quiting
*/

/*@constant int GIVEUPPARSE; @*/
# define GIVEUPPARSE 5

/*
** how many recursive searches to do before bailing!
*/

/*@constant int MAXDEPTH; @*/
# define MAXDEPTH 10

/*
** This limits the number of recursive calls to aliasTable_canAliasAux.
** It is necessary in the presence on recursive nested data structures.
** Note that we don't want to simply detect recursion and quit, since
** aliasing may be apparent only at the deeper level.  It would be better
** to do something in the alias table to confirm that there are no aliases
** recorded below a given depth, but in practice this is much easier!
*/

/*@constant int ALIASSEARCHLIMIT; @*/
# define ALIASSEARCHLIMIT 8

/*
** This one's compilcated.  You probably don't want to change
** it.
**
** lclint maintains a table of ctype's (its representation of
** C types) and represents types internally as an index into
** this table.  This greatly improves performance of type
** checking and saves memory.  For simple derived types, it
** is easy to find if the type is already in the table.  For
** more complicated types (e.g., functions and structures),
** we check if a type is already in the table by looking 
** backwards for matches.  The last DEFAULT_OPTLEVEL types
** entered into the table are checked.  Increasing this value
** may improve memory performance, but cost in execution time.
**
*/

/*@constant int DEFAULT_OPTLEVEL; @*/
# define DEFAULT_OPTLEVEL 15

/*
** There are many *List and *Set types used by lclint (all
** generated automatically using a template and script).  
** For each, the BASESIZE is the number of entries the
** structure grows by each time it runs out of space.
** Depending on expected usage, each List/Set defines
** its BASESIZE to one of these three values.
*/

/*@constant int SMALLBASESIZE; @*/
# define SMALLBASESIZE   4

/*@constant int MIDBASESIZE; @*/
# define MIDBASESIZE     8

/*@constant int LARGEBASESIZE; @*/
# define LARGEBASESIZE  16

/*@constant int BIGBASESIZE; @*/
# define BIGBASESIZE   256

/*@constant int HUGEBASESIZE; @*/
# define HUGEBASESIZE  512

/*
** Size of hash table for file names.
*/

/*@constant unsigned long FTHASHSIZE; @*/
# define FTHASHSIZE 273

/*
** BASESIZE for C environment frames.
*/

/*@constant int CBASESIZE; @*/
# define CBASESIZE 4

/*
** The global environment (across files) is stored in
** a hash table.
*/

/*@constant int CGLOBBASESIZE; @*/
# define CGLOBBASESIZE 1024

/*@constant unsigned long CGLOBHASHSIZE; @*/
# define CGLOBHASHSIZE 1795

/*@constant int LLHASHSIZE; @*/
# define LLHASHSIZE 1279   

# else
# error "Multiple include"
# endif

