2 ** Splint - annotation-assisted static program checker
3 ** Copyright (C) 1994-2003 University of Virginia,
4 ** Massachusetts Institute of Technology
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.
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.
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.
20 ** For information on splint: info@splint.org
21 ** To report a bug: splint-bug@splint.org
22 ** For more information: http://www.splint.org
26 ** constraintExprData.c
29 # include "splintMacros.nf"
32 static /*@out@*/ constraintExprData
constraintExprData_alloc (void)
34 constraintExprData ret
;
36 ret
= dmalloc (sizeof (*ret
) );
41 static /*@out@*/ constraintExprData
constraintExprData_allocBinaryOp (void)
43 constraintExprData ret
;
45 ret
= constraintExprData_alloc();
47 ret
->binaryOp
.expr1
= constraintExpr_undefined
;
48 ret
->binaryOp
.expr2
= constraintExpr_undefined
;
53 static /*@out@*/ constraintExprData
constraintExprData_allocUnaryOp (void)
55 constraintExprData ret
;
57 ret
= constraintExprData_alloc();
59 ret
->unaryOp
.expr
= constraintExpr_undefined
;
64 static /*@out@*/ constraintExprData
constraintExprData_allocTerm (void)
66 constraintExprData ret
;
68 ret
= constraintExprData_alloc();
75 void constraintExprData_freeBinaryExpr (/*@only@*/constraintExprData data
)
77 constraintExpr_free (data
->binaryOp
.expr1
);
78 constraintExpr_free (data
->binaryOp
.expr2
);
82 constraintExprData
constraintExprData_copyBinaryExpr(/*@observer@*/ constraintExprData data
)
84 constraintExprData ret
;
85 llassert(constraintExprData_isDefined(data
));
87 ret
= constraintExprData_allocBinaryOp();
89 ret
->binaryOp
.binaryOp
= data
->binaryOp
.binaryOp
;
90 ret
->binaryOp
.expr1
= constraintExpr_copy (data
->binaryOp
.expr1
);
91 ret
->binaryOp
.expr2
= constraintExpr_copy (data
->binaryOp
.expr2
);
95 void constraintExprData_freeUnaryExpr (/*@only@*/constraintExprData data
)
97 constraintExpr_free (data
->unaryOp
.expr
);
101 constraintExprData
constraintExprData_copyUnaryExpr(/*@observer@*/ constraintExprData data
)
103 constraintExprData ret
;
104 llassert(constraintExprData_isDefined(data
));
106 ret
= constraintExprData_allocUnaryOp();
108 ret
->unaryOp
.unaryOp
= data
->unaryOp
.unaryOp
;
109 ret
->unaryOp
.expr
= constraintExpr_copy (data
->unaryOp
.expr
);
114 void constraintExprData_freeTerm (/*@only@*/constraintExprData data
)
116 constraintTerm_free (data
->term
);
121 constraintExprData
constraintExprData_copyTerm (/*@observer@*/ constraintExprData data
)
123 constraintExprData ret
;
124 llassert(constraintExprData_isDefined(data
));
126 ret
= constraintExprData_allocTerm();
128 ret
->term
= constraintTerm_copy (data
->term
);
133 constraintExprData_termSetTerm (/*@returned@*/ constraintExprData data
,
134 /*@only@*/ constraintTerm term
)
136 llassert (constraintExprData_isDefined (data
));
138 if (constraintTerm_isDefined (data
->term
))
140 constraintTerm_free (data
->term
);
147 /*@exposed@*/ constraintTerm
148 constraintExprData_termGetTerm (/*@observer@*/ constraintExprData data
)
150 llassert (constraintExprData_isDefined (data
));
155 constraintExprUnaryOpKind
156 constraintExprData_unaryExprGetOp (/*@observer@*/ constraintExprData data
)
158 llassert (constraintExprData_isDefined (data
));
159 return (data
->unaryOp
.unaryOp
);
164 constraintExprData_unaryExprGetExpr (/*@observer@*/ constraintExprData data
)
166 llassert (constraintExprData_isDefined (data
));
167 return (data
->unaryOp
.expr
);
171 constraintExprData_unaryExprSetOp (/*@returned@*/ constraintExprData data
,
172 constraintExprUnaryOpKind op
)
174 llassert (constraintExprData_isDefined (data
));
175 data
->unaryOp
.unaryOp
= op
;
180 constraintExprData_unaryExprSetExpr (constraintExprData data
,
181 /*@only@*/ constraintExpr expr
)
183 llassert (constraintExprData_isDefined (data
));
185 if (constraintExpr_isDefined (data
->unaryOp
.expr
))
187 constraintExpr_free (data
->unaryOp
.expr
);
190 data
->unaryOp
.expr
= expr
;
198 constraintExprBinaryOpKind
constraintExprData_binaryExprGetOp (constraintExprData data
)
200 llassert (constraintExprData_isDefined (data
));
201 return (data
->binaryOp
.binaryOp
);
204 constraintExpr
constraintExprData_binaryExprGetExpr1 (constraintExprData data
)
206 llassert (constraintExprData_isDefined (data
));
207 return (data
->binaryOp
.expr1
);
210 constraintExpr
constraintExprData_binaryExprGetExpr2 (constraintExprData data
)
212 llassert (constraintExprData_isDefined(data
));
213 return (data
->binaryOp
.expr2
);
217 constraintExprData_binaryExprSetExpr1 (/*@returned@*/ constraintExprData data
,
218 /*@only@*/ constraintExpr expr
)
220 llassert (constraintExprData_isDefined (data
));
222 if (constraintExpr_isDefined (data
->binaryOp
.expr1
))
223 constraintExpr_free(data
->binaryOp
.expr1
);
225 data
->binaryOp
.expr1
= expr
;
230 constraintExprData_binaryExprSetExpr2 (constraintExprData data
, constraintExpr expr
)
232 llassert (constraintExprData_isDefined (data
));
234 if (constraintExpr_isDefined (data
->binaryOp
.expr2
))
235 constraintExpr_free (data
->binaryOp
.expr2
);
237 data
->binaryOp
.expr2
= expr
;
242 constraintExprData_binaryExprSetOp (constraintExprData data
,
243 constraintExprBinaryOpKind op
)
245 llassert (constraintExprData_isDefined (data
));
246 data
->binaryOp
.binaryOp
= op
;