-#/*
+/*
+** Splint - annotation-assisted static program checker
+** Copyright (C) 1994-2003 University of Virginia,
+** Massachusetts Institute of Technology
+**
+** This program is free software; you can redistribute it and/or modify it
+** under the terms of the GNU General Public License as published by the
+** Free Software Foundation; either version 2 of the License, or (at your
+** option) any later version.
+**
+** This program is distributed in the hope that it will be useful, but
+** WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+** General Public License for more details.
+**
+** The GNU General Public License is available from http://www.gnu.org/ or
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+** MA 02111-1307, USA.
+**
+** For information on splint: info@splint.org
+** To report a bug: splint-bug@splint.org
+** For more information: http://www.splint.org
+*/
+
+/*
** constraintExprData.c
*/
-# include "lclintMacros.nf"
+# include "splintMacros.nf"
# include "basic.h"
# include "cgrammar.h"
# include "cgrammar_tokens.h"
# include "exprChecks.h"
-# include "aliasChecks.h"
# include "exprNodeSList.h"
+static /*@out@*/ constraintExprData constraintExprData_alloc (void)
+{
+ constraintExprData ret;
+
+ ret = dmalloc (sizeof (*ret) );
+
+ return ret;
+}
+
+static /*@out@*/ constraintExprData constraintExprData_allocBinaryOp (void)
+{
+ constraintExprData ret;
+
+ ret = constraintExprData_alloc();
+
+ ret->binaryOp.expr1 = constraintExpr_undefined;
+ ret->binaryOp.expr2 = constraintExpr_undefined;
+
+ return ret;
+}
+
+static /*@out@*/ constraintExprData constraintExprData_allocUnaryOp (void)
+{
+ constraintExprData ret;
+
+ ret = constraintExprData_alloc();
+
+ ret->unaryOp.expr = constraintExpr_undefined;
+
+ return ret;
+}
+
+static /*@out@*/ constraintExprData constraintExprData_allocTerm (void)
+{
+ constraintExprData ret;
+
+ ret = constraintExprData_alloc();
+
+ ret->term = NULL;
+ return ret;
+}
+
void constraintExprData_freeBinaryExpr (/*@only@*/constraintExprData data)
{
free(data);
}
-constraintExprData constraintExprData_copyBinaryExpr(constraintExprData data)
+constraintExprData constraintExprData_copyBinaryExpr(/*@observer@*/ constraintExprData data)
{
- constraintExprData ret;
+ constraintExprData ret;
llassert(constraintExprData_isDefined(data));
- ret = dmalloc (sizeof (*ret) );
+
+ ret = constraintExprData_allocBinaryOp();
+
ret->binaryOp.binaryOp = data->binaryOp.binaryOp;
ret->binaryOp.expr1 = constraintExpr_copy (data->binaryOp.expr1);
ret->binaryOp.expr2 = constraintExpr_copy (data->binaryOp.expr2);
return ret;
}
- void constraintExprData_freeUnaryExpr (/*@only@*/constraintExprData data)
+void constraintExprData_freeUnaryExpr (/*@only@*/constraintExprData data)
{
constraintExpr_free (data->unaryOp.expr);
free(data);
}
-constraintExprData constraintExprData_copyUnaryExpr(constraintExprData data)
+constraintExprData constraintExprData_copyUnaryExpr(/*@observer@*/ constraintExprData data)
{
constraintExprData ret;
llassert(constraintExprData_isDefined(data));
- ret = dmalloc (sizeof (*ret) );
+
+ ret = constraintExprData_allocUnaryOp();
ret->unaryOp.unaryOp = data->unaryOp.unaryOp;
ret->unaryOp.expr = constraintExpr_copy (data->unaryOp.expr);
}
-constraintExprData constraintExprData_copyTerm (constraintExprData data)
+constraintExprData constraintExprData_copyTerm (/*@observer@*/ constraintExprData data)
{
constraintExprData ret;
llassert(constraintExprData_isDefined(data));
- ret = dmalloc (sizeof (*ret) );
+
+ ret = constraintExprData_allocTerm();
+
ret->term = constraintTerm_copy (data->term);
return ret;
}
-// constraintExprData constraintExprData_copy (constraintExprData data, constraintExprKind kind)
-// {
-// constraintExprData ret;
-// llassert(constraintExprData_isDefined(data));
-// ret = dmalloc (sizeof (*ret) );
-// switch (kind)
-// {
-// case binaryexpr:
-// ret->binaryOp.binaryOp = data->binaryOp.binaryOp;
-// ret->binaryOp.expr1 = constraintExpr_copy (data->binaryOp.expr1);
-// ret->binaryOp.expr2 = constraintExpr_copy (data->binaryOp.expr2);
-// break;
-// case unaryExpr:
-// ret->unaryOp.unaryOp = data->unaryOp.unaryOp;
-// ret->unaryOp.expr = constraintExpr_copy (data->unaryOp.expr);
-// break;
-// case term:
-// ret->term = constraintTerm_copy (data->term);
-// }
-
-// return ret;
-// }
-
-/*@reldef@*/ constraintExprData constraintExprData_termSetTerm (/*@reldef@*/ /*@returned@*/ constraintExprData data, /*@only@*/constraintTerm term)
+constraintExprData
+constraintExprData_termSetTerm (/*@returned@*/ constraintExprData data,
+ /*@only@*/ constraintTerm term)
{
- /*@-uniondef@*/
- llassert (constraintExprData_isDefined(data));
- /*@=uniondef@*/
+ llassert (constraintExprData_isDefined (data));
+
+ if (constraintTerm_isDefined (data->term))
+ {
+ constraintTerm_free (data->term);
+ }
+
data->term = term;
return data;
}
-
-
-/*@observer@*/ constraintTerm constraintExprData_termGetTerm (/*@observer@*/ constraintExprData data)
+/*@exposed@*/ constraintTerm
+constraintExprData_termGetTerm (/*@observer@*/ constraintExprData data)
{
- llassert (constraintExprData_isDefined(data));
- /*@i22*/return data->term;
+ llassert (constraintExprData_isDefined (data));
+ return data->term;
}
-constraintExprUnaryOpKind constraintExprData_unaryExprGetOp (constraintExprData data)
+constraintExprUnaryOpKind
+constraintExprData_unaryExprGetOp (/*@observer@*/ constraintExprData data)
{
- llassert (constraintExprData_isDefined(data));
+ llassert (constraintExprData_isDefined (data));
return (data->unaryOp.unaryOp);
}
-constraintExpr constraintExprData_unaryExprGetExpr (constraintExprData data)
+constraintExpr
+constraintExprData_unaryExprGetExpr (/*@observer@*/ constraintExprData data)
{
- llassert (constraintExprData_isDefined(data));
- /*@i232*/ return (data->unaryOp.expr);
+ llassert (constraintExprData_isDefined (data));
+ return (data->unaryOp.expr);
}
-
-
- constraintExprData constraintExprData_unaryExprSetOp (/*@reldef@*/ /*@returned@*/ constraintExprData data, constraintExprUnaryOpKind op)
+constraintExprData
+constraintExprData_unaryExprSetOp (/*@returned@*/ constraintExprData data,
+ constraintExprUnaryOpKind op)
{
- /*@-uniondef@*/
- llassert (constraintExprData_isDefined(data));
- /*@=uniondef@*/
-
+ llassert (constraintExprData_isDefined (data));
data->unaryOp.unaryOp = op;
return data;
}
-constraintExprData constraintExprData_unaryExprSetExpr (constraintExprData data, /*@only@*/ constraintExpr expr)
+constraintExprData
+constraintExprData_unaryExprSetExpr (constraintExprData data,
+ /*@only@*/ constraintExpr expr)
{
- llassert (constraintExprData_isDefined(data));
+ llassert (constraintExprData_isDefined (data));
+
+ if (constraintExpr_isDefined (data->unaryOp.expr))
+ {
+ constraintExpr_free (data->unaryOp.expr);
+ }
+
data->unaryOp.expr = expr;
return data;
}
-// binaryExpr stuff
-
+/*
+** binaryExpr stuff
+*/
-constraintExprBinaryOpKind constraintExprData_binaryExprGetOp (constraintExprData data)
+constraintExprBinaryOpKind constraintExprData_binaryExprGetOp (constraintExprData data)
{
- llassert (constraintExprData_isDefined(data));
+ llassert (constraintExprData_isDefined (data));
return (data->binaryOp.binaryOp);
}
-
-constraintExpr constraintExprData_binaryExprGetExpr1 (constraintExprData data)
+constraintExpr constraintExprData_binaryExprGetExpr1 (constraintExprData data)
{
- llassert (constraintExprData_isDefined(data));
- /*@i23*/ return (data->binaryOp.expr1);
+ llassert (constraintExprData_isDefined (data));
+ return (data->binaryOp.expr1);
}
-
-constraintExpr constraintExprData_binaryExprGetExpr2 (constraintExprData data)
+constraintExpr constraintExprData_binaryExprGetExpr2 (constraintExprData data)
{
llassert (constraintExprData_isDefined(data));
- /*@i22*/ return (data->binaryOp.expr2);
+ return (data->binaryOp.expr2);
}
-
-constraintExprData constraintExprData_binaryExprSetExpr1 ( /*@reldef@*/ /*@returned@*/ constraintExprData data, /*@only@*/ constraintExpr expr)
+constraintExprData
+constraintExprData_binaryExprSetExpr1 (/*@returned@*/ constraintExprData data,
+ /*@only@*/ constraintExpr expr)
{
- llassert (constraintExprData_isDefined(data));
+ llassert (constraintExprData_isDefined (data));
+
+ if (constraintExpr_isDefined (data->binaryOp.expr1))
+ constraintExpr_free(data->binaryOp.expr1);
+
data->binaryOp.expr1 = expr;
return data;
}
-constraintExprData constraintExprData_binaryExprSetExpr2 (/*@returned@*/ /*@reldef@*/ constraintExprData data, constraintExpr expr)
+constraintExprData
+constraintExprData_binaryExprSetExpr2 (constraintExprData data, constraintExpr expr)
{
- llassert (constraintExprData_isDefined(data));
+ llassert (constraintExprData_isDefined (data));
+
+ if (constraintExpr_isDefined (data->binaryOp.expr2))
+ constraintExpr_free (data->binaryOp.expr2);
+
data->binaryOp.expr2 = expr;
return data;
}
-
-constraintExprData constraintExprData_binaryExprSetOp (/*@returned@*/ /*@reldef@*/ constraintExprData data, constraintExprBinaryOpKind op)
+constraintExprData
+constraintExprData_binaryExprSetOp (constraintExprData data,
+ constraintExprBinaryOpKind op)
{
- llassert (constraintExprData_isDefined(data));
+ llassert (constraintExprData_isDefined (data));
data->binaryOp.binaryOp = op;
return data;
}
+