]>
Commit | Line | Data |
---|---|---|
65f973be | 1 | /* |
11db3170 | 2 | ** Splint - annotation-assisted static program checker |
77d37419 | 3 | ** Copyright (C) 1994-2002 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 | ||
b7b694d6 | 137 | constraintExprData constraintExprData_termSetTerm (/*@returned@*/ constraintExprData data, /*@only@*/constraintTerm term) |
3aaedf88 | 138 | { |
c3e695ff | 139 | llassert (constraintExprData_isDefined(data)); |
a779b61e | 140 | |
141 | if (constraintTerm_isDefined(data->term) ) | |
142 | constraintTerm_free(data->term); | |
143 | ||
d46ce6a4 | 144 | data->term = term; |
3aaedf88 | 145 | return data; |
146 | } | |
147 | ||
148 | ||
149 | ||
d46ce6a4 | 150 | /*@observer@*/ constraintTerm constraintExprData_termGetTerm (/*@observer@*/ constraintExprData data) |
3aaedf88 | 151 | { |
c3e695ff | 152 | llassert (constraintExprData_isDefined(data)); |
a8e557d3 | 153 | /*@i22*/return data->term; |
3aaedf88 | 154 | } |
155 | ||
156 | ||
4ab867d6 | 157 | constraintExprUnaryOpKind constraintExprData_unaryExprGetOp (/*@observer@*/ constraintExprData data) |
3aaedf88 | 158 | { |
c3e695ff | 159 | llassert (constraintExprData_isDefined(data)); |
3aaedf88 | 160 | return (data->unaryOp.unaryOp); |
161 | } | |
162 | ||
163 | ||
4ab867d6 | 164 | constraintExpr constraintExprData_unaryExprGetExpr (/*@observer@*/ constraintExprData data) |
3aaedf88 | 165 | { |
60eced23 | 166 | llassert (constraintExprData_isDefined (data)); |
a779b61e | 167 | return (data->unaryOp.expr); |
3aaedf88 | 168 | } |
169 | ||
170 | ||
171 | ||
60eced23 | 172 | constraintExprData constraintExprData_unaryExprSetOp ( /*@returned@*/ constraintExprData data, constraintExprUnaryOpKind op) |
3aaedf88 | 173 | { |
60eced23 | 174 | llassert (constraintExprData_isDefined (data)); |
175 | ||
3aaedf88 | 176 | data->unaryOp.unaryOp = op; |
177 | return data; | |
178 | } | |
179 | ||
d46ce6a4 | 180 | constraintExprData constraintExprData_unaryExprSetExpr (constraintExprData data, /*@only@*/ constraintExpr expr) |
3aaedf88 | 181 | { |
c3e695ff | 182 | llassert (constraintExprData_isDefined(data)); |
a779b61e | 183 | |
184 | if (constraintExpr_isDefined(data->unaryOp.expr) ) | |
185 | constraintExpr_free(data->unaryOp.expr); | |
186 | ||
d46ce6a4 | 187 | data->unaryOp.expr = expr; |
3aaedf88 | 188 | return data; |
189 | } | |
190 | ||
b7b694d6 | 191 | /* |
192 | ** binaryExpr stuff | |
193 | */ | |
3aaedf88 | 194 | |
195 | constraintExprBinaryOpKind constraintExprData_binaryExprGetOp (constraintExprData data) | |
196 | { | |
c3e695ff | 197 | llassert (constraintExprData_isDefined(data)); |
a779b61e | 198 | |
3aaedf88 | 199 | return (data->binaryOp.binaryOp); |
200 | } | |
201 | ||
202 | ||
203 | constraintExpr constraintExprData_binaryExprGetExpr1 (constraintExprData data) | |
204 | { | |
c3e695ff | 205 | llassert (constraintExprData_isDefined(data)); |
a779b61e | 206 | |
207 | ||
208 | return (data->binaryOp.expr1); | |
3aaedf88 | 209 | } |
210 | ||
211 | ||
212 | constraintExpr constraintExprData_binaryExprGetExpr2 (constraintExprData data) | |
213 | { | |
c3e695ff | 214 | llassert (constraintExprData_isDefined(data)); |
a8e557d3 | 215 | /*@i22*/ return (data->binaryOp.expr2); |
3aaedf88 | 216 | } |
217 | ||
218 | ||
28bf4b0b | 219 | constraintExprData constraintExprData_binaryExprSetExpr1 ( /*@returned@*/ constraintExprData data, /*@only@*/ constraintExpr expr) |
3aaedf88 | 220 | { |
c3e695ff | 221 | llassert (constraintExprData_isDefined(data)); |
a779b61e | 222 | |
223 | if (constraintExpr_isDefined(data->binaryOp.expr1) ) | |
224 | constraintExpr_free(data->binaryOp.expr1); | |
225 | ||
d46ce6a4 | 226 | data->binaryOp.expr1 = expr; |
3aaedf88 | 227 | return data; |
228 | } | |
229 | ||
28bf4b0b | 230 | constraintExprData constraintExprData_binaryExprSetExpr2 (constraintExprData data, constraintExpr expr) |
3aaedf88 | 231 | { |
c3e695ff | 232 | llassert (constraintExprData_isDefined(data)); |
a779b61e | 233 | if (constraintExpr_isDefined(data->binaryOp.expr2) ) |
234 | constraintExpr_free(data->binaryOp.expr2); | |
235 | ||
d46ce6a4 | 236 | data->binaryOp.expr2 = expr; |
3aaedf88 | 237 | return data; |
238 | } | |
239 | ||
240 | ||
28bf4b0b | 241 | constraintExprData constraintExprData_binaryExprSetOp (constraintExprData data, constraintExprBinaryOpKind op) |
3aaedf88 | 242 | { |
c3e695ff | 243 | llassert (constraintExprData_isDefined(data)); |
3aaedf88 | 244 | data->binaryOp.binaryOp = op; |
245 | return data; | |
246 | } | |
a779b61e | 247 |