]> andersk Git - splint.git/blame - src/metaStateInfo.c
Merged code tree with Dave Evans's version. Many changes to numberous to list....
[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));
40
41 res->name = name;
42 res->valueNames = valueNames;
43 res->context = context;
44
45 res->sctable = sctable;
46 res->mergetable = mergetable;
47 res->loc = loc;
48 res->default_ref = stateValue_error;
49 res->default_parameter = stateValue_error;
50
51 llassert (stateCombinationTable_size (res->sctable)
52 == cstringList_size (res->valueNames));
53 return res;
54}
55
56void metaStateInfo_free (/*@only@*/ metaStateInfo msinfo)
57{
58 if (metaStateInfo_isDefined (msinfo))
59 {
60 cstring_free (msinfo->name);
61 cstringList_free (msinfo->valueNames);
62 stateCombinationTable_free (msinfo->sctable);
63 stateCombinationTable_free (msinfo->mergetable);
64 fileloc_free (msinfo->loc);
65 sfree (msinfo);
66 }
67}
68
69cstring metaStateInfo_unparse (metaStateInfo info)
70{
71 llassert (metaStateInfo_isDefined (info));
72 return message ("%s: %q\n%q", info->name,
73 cstringList_unparse (info->valueNames),
74 stateCombinationTable_unparse (info->sctable));
75}
76
77cstring metaStateInfo_unparseValue (metaStateInfo info, int value)
78{
79 llassert (metaStateInfo_isDefined (info));
80
81 DPRINTF (("unparse value: %s / %d",
82 metaStateInfo_unparse (info), value));
83
84 if (value < 0)
85 {
86 llassert (value == stateValue_error);
87 return cstring_makeLiteralTemp ("error");
88 }
89
90 llassert (value < cstringList_size (info->valueNames));
91 return cstringList_get (info->valueNames, value);
92}
93
94/*@observer@*/ mtContextNode metaStateInfo_getContext (metaStateInfo info)
95{
96 llassert (metaStateInfo_isDefined (info));
97 return info->context;
98}
99
100/*@observer@*/ cstring metaStateInfo_getName (metaStateInfo info)
101{
102 llassert (metaStateInfo_isDefined (info));
103 return info->name;
104}
105
106/*@observer@*/ fileloc metaStateInfo_getLoc (metaStateInfo info)
107{
108 llassert (metaStateInfo_isDefined (info));
109 return info->loc;
110}
111
112extern /*@exposed@*/ stateCombinationTable
113metaStateInfo_getTransferTable (metaStateInfo info) /*@*/
114{
115 llassert (metaStateInfo_isDefined (info));
116 return info->sctable;
117}
118
119extern /*@exposed@*/ stateCombinationTable
120metaStateInfo_getMergeTable (metaStateInfo info) /*@*/
121{
122 llassert (metaStateInfo_isDefined (info));
123 return info->mergetable;
124}
125
126extern int metaStateInfo_getDefaultValue (metaStateInfo info, sRef s)
127{
128 llassert (metaStateInfo_isDefined (info));
129 llassert (mtContextNode_matchesRef (metaStateInfo_getContext (info), s));
130
131 if (sRef_isParam (s))
132 {
133 return info->default_parameter;
134 }
135 else
136 {
137 return info->default_ref;
138 }
139}
140
141extern int metaStateInfo_getDefaultGlobalValue (metaStateInfo info)
142{
143 llassert (metaStateInfo_isDefined (info));
144 return info->default_ref;
145}
146
147void metaStateInfo_setDefaultRefValue (metaStateInfo info, int val)
148{
149 llassert (metaStateInfo_isDefined (info));
150 llassert (info->default_ref == stateValue_error);
151 info->default_ref = val;
152}
153
154void metaStateInfo_setDefaultParamValue (metaStateInfo info, int val)
155{
156 llassert (metaStateInfo_isDefined (info));
157 llassert (info->default_parameter == stateValue_error);
158 info->default_parameter = val;
159}
160
161int metaStateInfo_getDefaultRefValue (metaStateInfo info)
162{
163 llassert (metaStateInfo_isDefined (info));
164 return info->default_ref;
165}
166
167int metaStateInfo_getDefaultParamValue (metaStateInfo info)
168{
169 llassert (metaStateInfo_isDefined (info));
170 return info->default_parameter;
171}
This page took 0.295047 seconds and 5 git commands to generate.