]> andersk Git - splint.git/blob - src/metaStateInfo.c
Merged code tree with Dave Evans's version. Many changes to numberous to list....
[splint.git] / src / metaStateInfo.c
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 
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
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
56 void 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
69 cstring 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
77 cstring 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
112 extern /*@exposed@*/ stateCombinationTable 
113 metaStateInfo_getTransferTable (metaStateInfo info) /*@*/
114 {
115   llassert (metaStateInfo_isDefined (info));
116   return info->sctable;
117 }
118
119 extern /*@exposed@*/ stateCombinationTable 
120 metaStateInfo_getMergeTable (metaStateInfo info) /*@*/
121 {
122   llassert (metaStateInfo_isDefined (info));
123   return info->mergetable;
124 }
125
126 extern 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
141 extern int metaStateInfo_getDefaultGlobalValue (metaStateInfo info)
142 {
143   llassert (metaStateInfo_isDefined (info));
144   return info->default_ref;
145 }
146
147 void 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
154 void 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
161 int metaStateInfo_getDefaultRefValue (metaStateInfo info)
162 {
163   llassert (metaStateInfo_isDefined (info));
164   return info->default_ref;
165 }
166
167 int metaStateInfo_getDefaultParamValue (metaStateInfo info)
168 {
169   llassert (metaStateInfo_isDefined (info));
170   return info->default_parameter;
171 }
This page took 0.052245 seconds and 5 git commands to generate.