]> andersk Git - splint.git/blob - src/shift.c
Initial revision
[splint.git] / src / shift.c
1 /*
2 ** LCLint - annotation-assisted static program checker
3 ** Copyright (C) 1994-2000 University of Virginia,
4 **         Massachusetts Institute of Technology
5 **
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.
10 ** 
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.
15 ** 
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.
19 **
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
23 */
24
25 /*
26 ** shift.c
27 **
28 ** Larch shift sequence manager
29 **
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.
34 **
35 */
36
37 # include "lclintMacros.nf"
38 # include "llbasic.h"
39 # include "shift.h"
40
41 /*@constant static int SHIFTMAX;@*/
42 # define SHIFTMAX 200
43
44 static o_ltoken Shifts[SHIFTMAX];
45 static int shiftIndex;
46
47 static bool Parsing_LSLinit = TRUE;
48
49 static bool
50 LSLGenIsEmptyShiftStack (void)
51 {
52   return (shiftIndex == 0);
53 }
54
55 void LSLGenShift (ltoken tok)
56 {
57   if (shiftIndex < SHIFTMAX)
58     {
59       Shifts[shiftIndex] = ltoken_copy (tok);
60       shiftIndex++;
61     }
62   else
63     {
64       llbuglit ("LSLGenShift: needs MoreMem ()");
65     }
66 }
67
68 extern void
69 LSLGenShiftOnly (/*@only@*/ ltoken tok)
70 {
71   if (shiftIndex < SHIFTMAX)
72     {
73       Shifts[shiftIndex] = tok;
74       shiftIndex++;
75     }
76   else
77     {
78       llbugexitlit ("LSLGenShift: needs MoreMem ()");
79     }
80 }
81
82 extern ltoken
83 LSLGenTopPopShiftStack (void)
84 {
85   if (LSLGenIsEmptyShiftStack ())
86     {
87       lclfatalbug ("LSLGenTopPopShiftStack: Empty stack");
88     }
89
90   /*@-retalias@*/
91   return Shifts[--shiftIndex];
92   /*@=retalias@*/
93 }
94
95 void
96 LSLGenInit (bool LSLParse)
97 {
98   Parsing_LSLinit = LSLParse;
99 }
100
This page took 0.04136 seconds and 5 git commands to generate.