]>
Commit | Line | Data |
---|---|---|
65f973be | 1 | /* |
11db3170 | 2 | ** Splint - annotation-assisted static program checker |
c59f5181 | 3 | ** Copyright (C) 1994-2003 University of Virginia, |
65f973be | 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 |
65f973be | 23 | */ |
24 | ||
25 | /* | |
a8e557d3 | 26 | ** constraintExprData.c |
3aaedf88 | 27 | */ |
28 | ||
1b8ae690 | 29 | # include "splintMacros.nf" |
3aaedf88 | 30 | # include "basic.h" |
31 | # include "cgrammar.h" | |
32 | # include "cgrammar_tokens.h" | |
33 | ||
34 | # include "exprChecks.h" | |
3aaedf88 | 35 | # include "exprNodeSList.h" |
3aaedf88 | 36 | |
a779b61e | 37 | static /*@out@*/ constraintExprData constraintExprData_alloc (void) |
38 | { | |
39 | constraintExprData ret; | |
40 | ||
41 | ret = dmalloc (sizeof (*ret) ); | |
42 | ||
43 | return ret; | |
44 | } | |
45 | ||
46 | static /*@out@*/ constraintExprData constraintExprData_allocBinaryOp (void) | |
47 | { | |
48 | constraintExprData ret; | |
49 | ||
50 | ret = constraintExprData_alloc(); | |
51 | ||
52 | ret->binaryOp.expr1 = constraintExpr_undefined; | |
53 | ret->binaryOp.expr2 = constraintExpr_undefined; | |
54 | ||
55 | return ret; | |
56 | } | |
57 | ||
58 | static /*@out@*/ constraintExprData constraintExprData_allocUnaryOp (void) | |
59 | { | |
60 | constraintExprData ret; | |
61 | ||
62 | ret = constraintExprData_alloc(); | |
63 | ||
64 | ret->unaryOp.expr = constraintExpr_undefined; | |
65 | ||
66 | return ret; | |
67 | } | |
68 | ||
69 | static /*@out@*/ constraintExprData constraintExprData_allocTerm (void) | |
70 | { | |
71 | constraintExprData ret; | |
72 | ||
73 | ret = constraintExprData_alloc(); | |
74 | ||
75 | ret->term = NULL; | |
76 | return ret; | |
77 | } | |
78 | ||
79 | ||
d46ce6a4 | 80 | void constraintExprData_freeBinaryExpr (/*@only@*/constraintExprData data) |
81 | { | |
82 | constraintExpr_free (data->binaryOp.expr1); | |
83 | constraintExpr_free (data->binaryOp.expr2); | |
84 | free(data); | |
85 | } | |
86 | ||
4ab867d6 | 87 | constraintExprData constraintExprData_copyBinaryExpr(/*@observer@*/ constraintExprData data) |
c3e695ff | 88 | { |
4ab867d6 | 89 | constraintExprData ret; |
c3e695ff | 90 | llassert(constraintExprData_isDefined(data)); |
a779b61e | 91 | |
92 | ret = constraintExprData_allocBinaryOp(); | |
93 | ||
c3e695ff | 94 | ret->binaryOp.binaryOp = data->binaryOp.binaryOp; |
95 | ret->binaryOp.expr1 = constraintExpr_copy (data->binaryOp.expr1); | |
96 | ret->binaryOp.expr2 = constraintExpr_copy (data->binaryOp.expr2); | |
97 | return ret; | |
98 | } | |
3aaedf88 | 99 | |
2934b455 | 100 | void constraintExprData_freeUnaryExpr (/*@only@*/constraintExprData data) |
d46ce6a4 | 101 | { |
102 | constraintExpr_free (data->unaryOp.expr); | |
103 | free(data); | |
104 | } | |
105 | ||
4ab867d6 | 106 | constraintExprData constraintExprData_copyUnaryExpr(/*@observer@*/ constraintExprData data) |
3aaedf88 | 107 | { |
c3e695ff | 108 | constraintExprData ret; |
109 | llassert(constraintExprData_isDefined(data)); | |
a779b61e | 110 | |
111 | ret = constraintExprData_allocUnaryOp(); | |
c3e695ff | 112 | |
113 | ret->unaryOp.unaryOp = data->unaryOp.unaryOp; | |
114 | ret->unaryOp.expr = constraintExpr_copy (data->unaryOp.expr); | |
3aaedf88 | 115 | |
116 | return ret; | |
117 | } | |
118 | ||
d46ce6a4 | 119 | void constraintExprData_freeTerm (/*@only@*/constraintExprData data) |
120 | { | |
121 | constraintTerm_free (data->term); | |
122 | free(data); | |
123 | } | |
124 | ||
125 | ||
4ab867d6 | 126 | constraintExprData constraintExprData_copyTerm (/*@observer@*/ constraintExprData data) |
c3e695ff | 127 | { |
128 | constraintExprData ret; | |
129 | llassert(constraintExprData_isDefined(data)); | |
a779b61e | 130 | |
131 | ret = constraintExprData_allocTerm(); | |
132 | ||
c3e695ff | 133 | ret->term = constraintTerm_copy (data->term); |
134 | return ret; | |
135 | } | |
136 | ||
9a48d98c | 137 | constraintExprData |
138 | constraintExprData_termSetTerm (/*@returned@*/ constraintExprData data, | |
139 | /*@only@*/ constraintTerm term) | |
3aaedf88 | 140 | { |
9a48d98c | 141 | llassert (constraintExprData_isDefined (data)); |
a779b61e | 142 | |
9a48d98c | 143 | if (constraintTerm_isDefined (data->term)) |
144 | { | |
145 | constraintTerm_free (data->term); | |
146 | } | |
a779b61e | 147 | |
d46ce6a4 | 148 | data->term = term; |
3aaedf88 | 149 | return data; |
150 | } | |
151 | ||
152 | ||
153 | ||
9a48d98c | 154 | /*@observer@*/ constraintTerm |
155 | constraintExprData_termGetTerm (/*@observer@*/ constraintExprData data) | |
3aaedf88 | 156 | { |
9a48d98c | 157 | llassert (constraintExprData_isDefined (data)); |
332e22fa | 158 | /*@i22*/ |
159 | return data->term; | |
3aaedf88 | 160 | } |
161 | ||
162 | ||
9a48d98c | 163 | constraintExprUnaryOpKind |
164 | constraintExprData_unaryExprGetOp (/*@observer@*/ constraintExprData data) | |
3aaedf88 | 165 | { |
9a48d98c | 166 | llassert (constraintExprData_isDefined (data)); |
3aaedf88 | 167 | return (data->unaryOp.unaryOp); |
168 | } | |
169 | ||
170 | ||
9a48d98c | 171 | constraintExpr |
172 | constraintExprData_unaryExprGetExpr (/*@observer@*/ constraintExprData data) | |
3aaedf88 | 173 | { |
60eced23 | 174 | llassert (constraintExprData_isDefined (data)); |
a779b61e | 175 | return (data->unaryOp.expr); |
3aaedf88 | 176 | } |
177 | ||
9a48d98c | 178 | constraintExprData |
179 | constraintExprData_unaryExprSetOp (/*@returned@*/ constraintExprData data, | |
180 | constraintExprUnaryOpKind op) | |
3aaedf88 | 181 | { |
60eced23 | 182 | llassert (constraintExprData_isDefined (data)); |
3aaedf88 | 183 | data->unaryOp.unaryOp = op; |
184 | return data; | |
185 | } | |
186 | ||
9a48d98c | 187 | constraintExprData |
188 | constraintExprData_unaryExprSetExpr (constraintExprData data, | |
189 | /*@only@*/ constraintExpr expr) | |
3aaedf88 | 190 | { |
9a48d98c | 191 | llassert (constraintExprData_isDefined (data)); |
192 | ||
193 | if (constraintExpr_isDefined (data->unaryOp.expr)) | |
194 | { | |
195 | constraintExpr_free (data->unaryOp.expr); | |
196 | } | |
a779b61e | 197 | |
d46ce6a4 | 198 | data->unaryOp.expr = expr; |
3aaedf88 | 199 | return data; |
200 | } | |
201 | ||
b7b694d6 | 202 | /* |
203 | ** binaryExpr stuff | |
204 | */ | |
3aaedf88 | 205 | |
9a48d98c | 206 | constraintExprBinaryOpKind constraintExprData_binaryExprGetOp (constraintExprData data) |
3aaedf88 | 207 | { |
9a48d98c | 208 | llassert (constraintExprData_isDefined (data)); |
3aaedf88 | 209 | return (data->binaryOp.binaryOp); |
210 | } | |
211 | ||
9a48d98c | 212 | constraintExpr constraintExprData_binaryExprGetExpr1 (constraintExprData data) |
3aaedf88 | 213 | { |
9a48d98c | 214 | llassert (constraintExprData_isDefined (data)); |
a779b61e | 215 | return (data->binaryOp.expr1); |
3aaedf88 | 216 | } |
217 | ||
9a48d98c | 218 | constraintExpr constraintExprData_binaryExprGetExpr2 (constraintExprData data) |
3aaedf88 | 219 | { |
c3e695ff | 220 | llassert (constraintExprData_isDefined(data)); |
332e22fa | 221 | /*@i22*/ |
222 | return (data->binaryOp.expr2); | |
3aaedf88 | 223 | } |
224 | ||
9a48d98c | 225 | constraintExprData |
226 | constraintExprData_binaryExprSetExpr1 (/*@returned@*/ constraintExprData data, | |
227 | /*@only@*/ constraintExpr expr) | |
3aaedf88 | 228 | { |
9a48d98c | 229 | llassert (constraintExprData_isDefined (data)); |
a779b61e | 230 | |
9a48d98c | 231 | if (constraintExpr_isDefined (data->binaryOp.expr1)) |
a779b61e | 232 | constraintExpr_free(data->binaryOp.expr1); |
233 | ||
d46ce6a4 | 234 | data->binaryOp.expr1 = expr; |
3aaedf88 | 235 | return data; |
236 | } | |
237 | ||
9a48d98c | 238 | constraintExprData |
239 | constraintExprData_binaryExprSetExpr2 (constraintExprData data, constraintExpr expr) | |
3aaedf88 | 240 | { |
9a48d98c | 241 | llassert (constraintExprData_isDefined (data)); |
a779b61e | 242 | |
9a48d98c | 243 | if (constraintExpr_isDefined (data->binaryOp.expr2)) |
244 | constraintExpr_free (data->binaryOp.expr2); | |
245 | ||
d46ce6a4 | 246 | data->binaryOp.expr2 = expr; |
3aaedf88 | 247 | return data; |
248 | } | |
249 | ||
9a48d98c | 250 | constraintExprData |
251 | constraintExprData_binaryExprSetOp (constraintExprData data, | |
252 | constraintExprBinaryOpKind op) | |
3aaedf88 | 253 | { |
9a48d98c | 254 | llassert (constraintExprData_isDefined (data)); |
3aaedf88 | 255 | data->binaryOp.binaryOp = op; |
256 | return data; | |
257 | } | |
a779b61e | 258 |