]> andersk Git - splint.git/blame - src/metaStateInfo.c
*** empty log message ***
[splint.git] / src / metaStateInfo.c
CommitLineData
28bf4b0b 1/*
2** LCLint - annotation-assisted static program checker
3** Copyright (C) 1994-2001 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** metaStateInfo.c
26*/
27
28# include "lclintMacros.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));
12f2ffe9 40 int i;
28bf4b0b 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;
12f2ffe9 49
50 for (i = 0; i < MTC_NUMCONTEXTS; i++)
51 {
52 res->defaultValue[i] = stateValue_error;
53 }
28bf4b0b 54
55 llassert (stateCombinationTable_size (res->sctable)
56 == cstringList_size (res->valueNames));
12f2ffe9 57
28bf4b0b 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 sfree (msinfo);
71 }
72}
73
74cstring metaStateInfo_unparse (metaStateInfo info)
75{
76 llassert (metaStateInfo_isDefined (info));
77 return message ("%s: %q\n%q", info->name,
78 cstringList_unparse (info->valueNames),
79 stateCombinationTable_unparse (info->sctable));
80}
81
82cstring metaStateInfo_unparseValue (metaStateInfo info, int value)
83{
84 llassert (metaStateInfo_isDefined (info));
85
86 DPRINTF (("unparse value: %s / %d",
87 metaStateInfo_unparse (info), value));
88
89 if (value < 0)
90 {
91 llassert (value == stateValue_error);
92 return cstring_makeLiteralTemp ("error");
93 }
94
95 llassert (value < cstringList_size (info->valueNames));
96 return cstringList_get (info->valueNames, value);
97}
98
99/*@observer@*/ mtContextNode metaStateInfo_getContext (metaStateInfo info)
100{
101 llassert (metaStateInfo_isDefined (info));
102 return info->context;
103}
104
105/*@observer@*/ cstring metaStateInfo_getName (metaStateInfo info)
106{
107 llassert (metaStateInfo_isDefined (info));
108 return info->name;
109}
110
111/*@observer@*/ fileloc metaStateInfo_getLoc (metaStateInfo info)
112{
113 llassert (metaStateInfo_isDefined (info));
114 return info->loc;
115}
116
117extern /*@exposed@*/ stateCombinationTable
118metaStateInfo_getTransferTable (metaStateInfo info) /*@*/
119{
120 llassert (metaStateInfo_isDefined (info));
121 return info->sctable;
122}
123
124extern /*@exposed@*/ stateCombinationTable
125metaStateInfo_getMergeTable (metaStateInfo info) /*@*/
126{
127 llassert (metaStateInfo_isDefined (info));
128 return info->mergetable;
129}
130
12f2ffe9 131/*@+enumindex@*/ /* allow context kinds to reference array */
132extern int metaStateInfo_getDefaultValueContext (metaStateInfo info, mtContextKind context)
133{
134 llassert (metaStateInfo_isDefined (info));
135 return info->defaultValue [context];
136}
137
28bf4b0b 138extern int metaStateInfo_getDefaultValue (metaStateInfo info, sRef s)
139{
140 llassert (metaStateInfo_isDefined (info));
28bf4b0b 141
12f2ffe9 142 if (sRef_isParam (s)
143 && (info->defaultValue [MTC_PARAM] != stateValue_error))
144 {
145 return info->defaultValue [MTC_PARAM];
146 }
147 else if (sRef_isResult (s)
148 && (info->defaultValue [MTC_RESULT] != stateValue_error))
28bf4b0b 149 {
12f2ffe9 150 return info->defaultValue [MTC_RESULT];
28bf4b0b 151 }
12f2ffe9 152 else if (sRef_isConst (s)
153 && (info->defaultValue [MTC_LITERAL] != stateValue_error))
b072092f 154 {
12f2ffe9 155 return info->defaultValue [MTC_LITERAL];
b072092f 156 }
28bf4b0b 157 else
158 {
b072092f 159 llassert (mtContextNode_matchesRef (metaStateInfo_getContext (info), s));
12f2ffe9 160 return info->defaultValue [MTC_REFERENCE];
28bf4b0b 161 }
162}
163
164extern int metaStateInfo_getDefaultGlobalValue (metaStateInfo info)
165{
166 llassert (metaStateInfo_isDefined (info));
12f2ffe9 167 return info->defaultValue [MTC_REFERENCE];
28bf4b0b 168}
169
12f2ffe9 170void metaStateInfo_setDefaultValueContext (metaStateInfo info, mtContextKind context, int val)
28bf4b0b 171{
172 llassert (metaStateInfo_isDefined (info));
12f2ffe9 173 /*@-type@*/ llassert (context >= 0 && context < MTC_NUMCONTEXTS); /*@=type@*/
174 llassert (metaStateInfo_getDefaultValueContext (info, context) == stateValue_error);
175 info->defaultValue [context] = val;
176}
177/*@=enumindex@*/
178\
179void metaStateInfo_setDefaultRefValue (metaStateInfo info, int val)
180{
181 metaStateInfo_setDefaultValueContext (info, MTC_REFERENCE, val);
28bf4b0b 182}
183
b072092f 184void metaStateInfo_setDefaultResultValue (metaStateInfo info, int val)
185{
12f2ffe9 186 metaStateInfo_setDefaultValueContext (info, MTC_RESULT, val);
b072092f 187}
188
28bf4b0b 189void metaStateInfo_setDefaultParamValue (metaStateInfo info, int val)
190{
12f2ffe9 191 metaStateInfo_setDefaultValueContext (info, MTC_PARAM, val);
28bf4b0b 192}
193
194int metaStateInfo_getDefaultRefValue (metaStateInfo info)
195{
12f2ffe9 196 return metaStateInfo_getDefaultValueContext (info, MTC_REFERENCE);
28bf4b0b 197}
198
b072092f 199int metaStateInfo_getDefaultResultValue (metaStateInfo info)
200{
12f2ffe9 201 return metaStateInfo_getDefaultValueContext (info, MTC_RESULT);
b072092f 202}
203
28bf4b0b 204int metaStateInfo_getDefaultParamValue (metaStateInfo info)
205{
12f2ffe9 206 return metaStateInfo_getDefaultValueContext (info, MTC_PARAM);
28bf4b0b 207}
12f2ffe9 208
This page took 0.473579 seconds and 5 git commands to generate.