]> andersk Git - splint.git/blame_incremental - src/metaStateInfo.c
Fixed declarations of inptr_t and uintptr_t.
[splint.git] / src / metaStateInfo.c
... / ...
CommitLineData
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
32metaStateInfo_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
61void 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
75cstring 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
83cstring 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
118extern /*@exposed@*/ stateCombinationTable
119metaStateInfo_getTransferTable (metaStateInfo info) /*@*/
120{
121 llassert (metaStateInfo_isDefined (info));
122 return info->sctable;
123}
124
125extern /*@exposed@*/ stateCombinationTable
126metaStateInfo_getMergeTable (metaStateInfo info) /*@*/
127{
128 llassert (metaStateInfo_isDefined (info));
129 return info->mergetable;
130}
131
132/*@+enumindex@*/ /* allow context kinds to reference array */
133extern int metaStateInfo_getDefaultValueContext (metaStateInfo info, mtContextKind context)
134{
135 llassert (metaStateInfo_isDefined (info));
136 return info->defaultValue [context];
137}
138
139extern 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
165extern int metaStateInfo_getDefaultGlobalValue (metaStateInfo info)
166{
167 llassert (metaStateInfo_isDefined (info));
168 return info->defaultValue [MTC_REFERENCE];
169}
170
171void 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\
180void metaStateInfo_setDefaultRefValue (metaStateInfo info, int val)
181{
182 metaStateInfo_setDefaultValueContext (info, MTC_REFERENCE, val);
183}
184
185void metaStateInfo_setDefaultResultValue (metaStateInfo info, int val)
186{
187 metaStateInfo_setDefaultValueContext (info, MTC_RESULT, val);
188}
189
190void metaStateInfo_setDefaultParamValue (metaStateInfo info, int val)
191{
192 metaStateInfo_setDefaultValueContext (info, MTC_PARAM, val);
193}
194
195int metaStateInfo_getDefaultRefValue (metaStateInfo info)
196{
197 return metaStateInfo_getDefaultValueContext (info, MTC_REFERENCE);
198}
199
200int metaStateInfo_getDefaultResultValue (metaStateInfo info)
201{
202 return metaStateInfo_getDefaultValueContext (info, MTC_RESULT);
203}
204
205int metaStateInfo_getDefaultParamValue (metaStateInfo info)
206{
207 return metaStateInfo_getDefaultValueContext (info, MTC_PARAM);
208}
209
This page took 0.078818 seconds and 5 git commands to generate.