2 ** Splint - annotation-assisted static program checker
3 ** Copyright (C) 1994-2002 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"
31 # include "cgrammar.h"
32 # include "cgrammar_tokens.h"
34 # include "exprChecks.h"
35 # include "exprNodeSList.h"
37 static /*@out@*/ constraintExprData constraintExprData_alloc (void)
39 constraintExprData ret;
41 ret = dmalloc (sizeof (*ret) );
46 static /*@out@*/ constraintExprData constraintExprData_allocBinaryOp (void)
48 constraintExprData ret;
50 ret = constraintExprData_alloc();
52 ret->binaryOp.expr1 = constraintExpr_undefined;
53 ret->binaryOp.expr2 = constraintExpr_undefined;
58 static /*@out@*/ constraintExprData constraintExprData_allocUnaryOp (void)
60 constraintExprData ret;
62 ret = constraintExprData_alloc();
64 ret->unaryOp.expr = constraintExpr_undefined;
69 static /*@out@*/ constraintExprData constraintExprData_allocTerm (void)
71 constraintExprData ret;
73 ret = constraintExprData_alloc();
80 void constraintExprData_freeBinaryExpr (/*@only@*/constraintExprData data)
82 constraintExpr_free (data->binaryOp.expr1);
83 constraintExpr_free (data->binaryOp.expr2);
87 constraintExprData constraintExprData_copyBinaryExpr(/*@observer@*/ constraintExprData data)
89 constraintExprData ret;
90 llassert(constraintExprData_isDefined(data));
92 ret = constraintExprData_allocBinaryOp();
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);
100 void constraintExprData_freeUnaryExpr (/*@only@*/constraintExprData data)
102 constraintExpr_free (data->unaryOp.expr);
106 constraintExprData constraintExprData_copyUnaryExpr(/*@observer@*/ constraintExprData data)
108 constraintExprData ret;
109 llassert(constraintExprData_isDefined(data));
111 ret = constraintExprData_allocUnaryOp();
113 ret->unaryOp.unaryOp = data->unaryOp.unaryOp;
114 ret->unaryOp.expr = constraintExpr_copy (data->unaryOp.expr);
119 void constraintExprData_freeTerm (/*@only@*/constraintExprData data)
121 constraintTerm_free (data->term);
126 constraintExprData constraintExprData_copyTerm (/*@observer@*/ constraintExprData data)
128 constraintExprData ret;
129 llassert(constraintExprData_isDefined(data));
131 ret = constraintExprData_allocTerm();
133 ret->term = constraintTerm_copy (data->term);
137 constraintExprData constraintExprData_termSetTerm (/*@returned@*/ constraintExprData data, /*@only@*/constraintTerm term)
139 llassert (constraintExprData_isDefined(data));
141 if (constraintTerm_isDefined(data->term) )
142 constraintTerm_free(data->term);
150 /*@observer@*/ constraintTerm constraintExprData_termGetTerm (/*@observer@*/ constraintExprData data)
152 llassert (constraintExprData_isDefined(data));
153 /*@i22*/return data->term;
157 constraintExprUnaryOpKind constraintExprData_unaryExprGetOp (/*@observer@*/ constraintExprData data)
159 llassert (constraintExprData_isDefined(data));
160 return (data->unaryOp.unaryOp);
164 constraintExpr constraintExprData_unaryExprGetExpr (/*@observer@*/ constraintExprData data)
166 llassert (constraintExprData_isDefined (data));
167 return (data->unaryOp.expr);
172 constraintExprData constraintExprData_unaryExprSetOp ( /*@returned@*/ constraintExprData data, constraintExprUnaryOpKind op)
174 llassert (constraintExprData_isDefined (data));
176 data->unaryOp.unaryOp = op;
180 constraintExprData constraintExprData_unaryExprSetExpr (constraintExprData data, /*@only@*/ constraintExpr expr)
182 llassert (constraintExprData_isDefined(data));
184 if (constraintExpr_isDefined(data->unaryOp.expr) )
185 constraintExpr_free(data->unaryOp.expr);
187 data->unaryOp.expr = expr;
195 constraintExprBinaryOpKind constraintExprData_binaryExprGetOp (constraintExprData data)
197 llassert (constraintExprData_isDefined(data));
199 return (data->binaryOp.binaryOp);
203 constraintExpr constraintExprData_binaryExprGetExpr1 (constraintExprData data)
205 llassert (constraintExprData_isDefined(data));
208 return (data->binaryOp.expr1);
212 constraintExpr constraintExprData_binaryExprGetExpr2 (constraintExprData data)
214 llassert (constraintExprData_isDefined(data));
215 /*@i22*/ return (data->binaryOp.expr2);
219 constraintExprData constraintExprData_binaryExprSetExpr1 ( /*@returned@*/ constraintExprData data, /*@only@*/ constraintExpr expr)
221 llassert (constraintExprData_isDefined(data));
223 if (constraintExpr_isDefined(data->binaryOp.expr1) )
224 constraintExpr_free(data->binaryOp.expr1);
226 data->binaryOp.expr1 = expr;
230 constraintExprData constraintExprData_binaryExprSetExpr2 (constraintExprData data, constraintExpr expr)
232 llassert (constraintExprData_isDefined(data));
233 if (constraintExpr_isDefined(data->binaryOp.expr2) )
234 constraintExpr_free(data->binaryOp.expr2);
236 data->binaryOp.expr2 = expr;
241 constraintExprData constraintExprData_binaryExprSetOp (constraintExprData data, constraintExprBinaryOpKind op)
243 llassert (constraintExprData_isDefined(data));
244 data->binaryOp.binaryOp = op;