]> andersk Git - splint.git/blob - src/metaStateInfo.c
noexpand always false.
[splint.git] / src / metaStateInfo.c
1 /*
2 ** Splint - annotation-assisted static program checker
3 ** Copyright (C) 1994-2003 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 splint: info@splint.org
21 ** To report a bug: splint-bug@splint.org
22 ** For more information: http://www.splint.org
23 */
24 /*
25 ** metaStateInfo.c
26 */
27
28 # include "splintMacros.nf"
29 # include "basic.h"
30
31 /*@notnull@*/ metaStateInfo 
32 metaStateInfo_create (cstring name, 
33                       cstringList valueNames, 
34                       mtContextNode context,
35                       stateCombinationTable sctable,
36                       stateCombinationTable mergetable,
37                       fileloc loc) 
38 {
39   metaStateInfo res = (metaStateInfo) dmalloc (sizeof (*res));
40   int i;
41
42   res->name = name;
43   res->valueNames = valueNames;
44   res->context = context;
45
46   res->sctable = sctable;
47   res->mergetable = mergetable;
48   res->loc = loc;
49
50   for (i = 0; i < MTC_NUMCONTEXTS; i++)
51     {
52       res->defaultValue[i] = stateValue_error;
53     }
54
55   llassert (stateCombinationTable_size (res->sctable) 
56             == cstringList_size (res->valueNames));
57
58   return res;
59 }
60
61 void metaStateInfo_free (/*@only@*/ metaStateInfo msinfo)
62 {
63   if (metaStateInfo_isDefined (msinfo))
64     {
65       cstring_free (msinfo->name);
66       cstringList_free (msinfo->valueNames);
67       stateCombinationTable_free (msinfo->sctable);
68       stateCombinationTable_free (msinfo->mergetable);
69       fileloc_free (msinfo->loc);
70       mtContextNode_free (msinfo->context); /* evans 2002-01-03 */
71       sfree (msinfo);
72     }
73 }
74
75 cstring metaStateInfo_unparse (metaStateInfo info)
76 {
77   llassert (metaStateInfo_isDefined (info));
78   return message ("%s: %q\n%q", info->name,
79                   cstringList_unparse (info->valueNames),
80                   stateCombinationTable_unparse (info->sctable));
81 }
82
83 cstring metaStateInfo_unparseValue (metaStateInfo info, int value)
84 {
85   llassert (metaStateInfo_isDefined (info));
86   
87   DPRINTF (("unparse value: %s / %d",
88             metaStateInfo_unparse (info), value));
89   
90   if (value < 0) 
91       {
92           llassert (value == stateValue_error);
93           return cstring_makeLiteralTemp ("error");
94       }
95   
96   llassert (value < cstringList_size (info->valueNames));
97   return cstringList_get (info->valueNames, value);
98 }
99
100 /*@observer@*/ mtContextNode metaStateInfo_getContext (metaStateInfo info)
101 {
102   llassert (metaStateInfo_isDefined (info));
103   return info->context;
104 }
105
106 /*@observer@*/ cstring metaStateInfo_getName (metaStateInfo info) 
107 {
108   llassert (metaStateInfo_isDefined (info));
109   return info->name;
110 }
111
112 /*@observer@*/ fileloc metaStateInfo_getLoc (metaStateInfo info) 
113 {
114   llassert (metaStateInfo_isDefined (info));
115   return info->loc;
116 }
117
118 extern /*@exposed@*/ stateCombinationTable 
119 metaStateInfo_getTransferTable (metaStateInfo info) /*@*/
120 {
121   llassert (metaStateInfo_isDefined (info));
122   return info->sctable;
123 }
124
125 extern /*@exposed@*/ stateCombinationTable 
126 metaStateInfo_getMergeTable (metaStateInfo info) /*@*/
127 {
128   llassert (metaStateInfo_isDefined (info));
129   return info->mergetable;
130 }
131
132 /*@+enumindex@*/ /* allow context kinds to reference array */
133 extern int metaStateInfo_getDefaultValueContext (metaStateInfo info, mtContextKind context)
134 {
135   llassert (metaStateInfo_isDefined (info));
136   return info->defaultValue [context];
137 }
138
139 extern int metaStateInfo_getDefaultValue (metaStateInfo info, sRef s)
140 {
141   llassert (metaStateInfo_isDefined (info));
142
143   if (sRef_isParam (s)
144       && (info->defaultValue [MTC_PARAM] != stateValue_error))
145     {
146       return info->defaultValue [MTC_PARAM];
147     }
148   else if (sRef_isResult (s)
149            && (info->defaultValue [MTC_RESULT] != stateValue_error))
150     {
151       return info->defaultValue [MTC_RESULT];
152     }
153   else if (sRef_isConst (s)
154            && (info->defaultValue [MTC_LITERAL] != stateValue_error))
155     {
156       return info->defaultValue [MTC_LITERAL];
157     }
158   else 
159     {
160       llassert (mtContextNode_matchesRef (metaStateInfo_getContext (info), s));
161       return info->defaultValue [MTC_REFERENCE];
162     }
163 }
164
165 extern int metaStateInfo_getDefaultGlobalValue (metaStateInfo info)
166 {
167   llassert (metaStateInfo_isDefined (info));
168   return info->defaultValue [MTC_REFERENCE];
169 }
170
171 void metaStateInfo_setDefaultValueContext (metaStateInfo info, mtContextKind context, int val)
172 {
173   llassert (metaStateInfo_isDefined (info));
174   /*@-type@*/ llassert (context >= 0 && context < MTC_NUMCONTEXTS); /*@=type@*/
175   llassert (metaStateInfo_getDefaultValueContext (info, context) == stateValue_error);
176   info->defaultValue [context] = val;
177 }
178 /*@=enumindex@*/ 
179 \
180 void metaStateInfo_setDefaultRefValue (metaStateInfo info, int val)
181 {
182   metaStateInfo_setDefaultValueContext (info, MTC_REFERENCE, val);
183 }
184
185 void metaStateInfo_setDefaultResultValue (metaStateInfo info, int val)
186 {
187   metaStateInfo_setDefaultValueContext (info, MTC_RESULT, val);
188 }
189
190 void metaStateInfo_setDefaultParamValue (metaStateInfo info, int val)
191 {
192   metaStateInfo_setDefaultValueContext (info, MTC_PARAM, val);
193 }
194
195 int metaStateInfo_getDefaultRefValue (metaStateInfo info)
196 {
197   return metaStateInfo_getDefaultValueContext (info, MTC_REFERENCE);
198 }
199
200 int metaStateInfo_getDefaultResultValue (metaStateInfo info)
201 {
202   return metaStateInfo_getDefaultValueContext (info, MTC_RESULT);
203 }
204
205 int metaStateInfo_getDefaultParamValue (metaStateInfo info)
206 {
207   return metaStateInfo_getDefaultValueContext (info, MTC_PARAM);
208 }
209
This page took 0.175079 seconds and 5 git commands to generate.