2 ** LCLint - annotation-assisted static program checker
3 ** Copyright (C) 1994-2000 University of Virginia,
4 ** Massachusetts Institute of Technology
6 ** This program is free software; you can redistribute it and/or modify it
7 ** under the terms of the GNU General Public License as published by the
8 ** Free Software Foundation; either version 2 of the License, or (at your
9 ** option) any later version.
11 ** This program is distributed in the hope that it will be useful, but
12 ** WITHOUT ANY WARRANTY; without even the implied warranty of
13 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 ** General Public License for more details.
16 ** The GNU General Public License is available from http://www.gnu.org/ or
17 ** the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18 ** MA 02111-1307, USA.
20 ** For information on lclint: lclint-request@cs.virginia.edu
21 ** To report a bug: lclint-bug@cs.virginia.edu
22 ** For more information: http://lclint.cs.virginia.edu
28 ** Larch shift sequence manager
30 ** Tokens are sent by the parser to this module. Here they are saved
31 ** for awhile in a stack, and delivered on demand during reduce actions.
32 ** The coordination between what the parser sends here and what reduce
33 ** consumes here must be maintained by the programmer.
37 # include "lclintMacros.nf"
41 /*@constant static int SHIFTMAX;@*/
44 static o_ltoken Shifts[SHIFTMAX];
45 static int shiftIndex;
47 static bool Parsing_LSLinit = TRUE;
50 LSLGenIsEmptyShiftStack (void)
52 return (shiftIndex == 0);
55 void LSLGenShift (ltoken tok)
57 if (shiftIndex < SHIFTMAX)
59 Shifts[shiftIndex] = ltoken_copy (tok);
64 llbuglit ("LSLGenShift: needs MoreMem ()");
69 LSLGenShiftOnly (/*@only@*/ ltoken tok)
71 if (shiftIndex < SHIFTMAX)
73 Shifts[shiftIndex] = tok;
78 llbugexitlit ("LSLGenShift: needs MoreMem ()");
83 LSLGenTopPopShiftStack (void)
85 if (LSLGenIsEmptyShiftStack ())
87 lclfatalbug ("LSLGenTopPopShiftStack: Empty stack");
91 return Shifts[--shiftIndex];
96 LSLGenInit (bool LSLParse)
98 Parsing_LSLinit = LSLParse;