]> andersk Git - splint.git/blame - src/metaStateInfo.c
noexpand always false.
[splint.git] / src / metaStateInfo.c
CommitLineData
28bf4b0b 1/*
11db3170 2** Splint - annotation-assisted static program checker
c59f5181 3** Copyright (C) 1994-2003 University of Virginia,
28bf4b0b 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**
155af98d 20** For information on splint: info@splint.org
21** To report a bug: splint-bug@splint.org
11db3170 22** For more information: http://www.splint.org
28bf4b0b 23*/
24/*
25** metaStateInfo.c
26*/
27
1b8ae690 28# include "splintMacros.nf"
28bf4b0b 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);
27c9e640 70 mtContextNode_free (msinfo->context); /* evans 2002-01-03 */
28bf4b0b 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
12f2ffe9 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
28bf4b0b 139extern int metaStateInfo_getDefaultValue (metaStateInfo info, sRef s)
140{
141 llassert (metaStateInfo_isDefined (info));
28bf4b0b 142
12f2ffe9 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))
28bf4b0b 150 {
12f2ffe9 151 return info->defaultValue [MTC_RESULT];
28bf4b0b 152 }
12f2ffe9 153 else if (sRef_isConst (s)
154 && (info->defaultValue [MTC_LITERAL] != stateValue_error))
b072092f 155 {
12f2ffe9 156 return info->defaultValue [MTC_LITERAL];
b072092f 157 }
28bf4b0b 158 else
159 {
b072092f 160 llassert (mtContextNode_matchesRef (metaStateInfo_getContext (info), s));
12f2ffe9 161 return info->defaultValue [MTC_REFERENCE];
28bf4b0b 162 }
163}
164
165extern int metaStateInfo_getDefaultGlobalValue (metaStateInfo info)
166{
167 llassert (metaStateInfo_isDefined (info));
12f2ffe9 168 return info->defaultValue [MTC_REFERENCE];
28bf4b0b 169}
170
12f2ffe9 171void metaStateInfo_setDefaultValueContext (metaStateInfo info, mtContextKind context, int val)
28bf4b0b 172{
173 llassert (metaStateInfo_isDefined (info));
12f2ffe9 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);
28bf4b0b 183}
184
b072092f 185void metaStateInfo_setDefaultResultValue (metaStateInfo info, int val)
186{
12f2ffe9 187 metaStateInfo_setDefaultValueContext (info, MTC_RESULT, val);
b072092f 188}
189
28bf4b0b 190void metaStateInfo_setDefaultParamValue (metaStateInfo info, int val)
191{
12f2ffe9 192 metaStateInfo_setDefaultValueContext (info, MTC_PARAM, val);
28bf4b0b 193}
194
195int metaStateInfo_getDefaultRefValue (metaStateInfo info)
196{
12f2ffe9 197 return metaStateInfo_getDefaultValueContext (info, MTC_REFERENCE);
28bf4b0b 198}
199
b072092f 200int metaStateInfo_getDefaultResultValue (metaStateInfo info)
201{
12f2ffe9 202 return metaStateInfo_getDefaultValueContext (info, MTC_RESULT);
b072092f 203}
204
28bf4b0b 205int metaStateInfo_getDefaultParamValue (metaStateInfo info)
206{
12f2ffe9 207 return metaStateInfo_getDefaultValueContext (info, MTC_PARAM);
28bf4b0b 208}
12f2ffe9 209
This page took 0.5335 seconds and 5 git commands to generate.