X-Git-Url: http://andersk.mit.edu/gitweb/splint.git/blobdiff_plain/84c9ffbf30db7d2e74209383daaf61c3a82149e4..a6bfbad8f5ae6b3544a2c767e449ee095aad8978:/src/constraintExprData.c diff --git a/src/constraintExprData.c b/src/constraintExprData.c index cdcbb63..d2fd3e0 100644 --- a/src/constraintExprData.c +++ b/src/constraintExprData.c @@ -1,33 +1,114 @@ -#/* +/* +** Splint - annotation-assisted static program checker +** Copyright (C) 1994-2002 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) ); -constraintExprData constraintExprData_copyBinaryExpr(constraintExprData data) + return ret; +} + +static /*@out@*/ constraintExprData constraintExprData_allocBinaryOp (void) { - constraintExprData ret; + 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) +{ + constraintExpr_free (data->binaryOp.expr1); + constraintExpr_free (data->binaryOp.expr2); + free(data); +} + +constraintExprData constraintExprData_copyBinaryExpr(/*@observer@*/ constraintExprData data) +{ + 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; } -constraintExprData constraintExprData_copyUnaryExpr(constraintExprData data) +void constraintExprData_freeUnaryExpr (/*@only@*/constraintExprData data) +{ + constraintExpr_free (data->unaryOp.expr); + free(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); @@ -35,94 +116,86 @@ constraintExprData constraintExprData_copyUnaryExpr(constraintExprData data) return ret; } -constraintExprData constraintExprData_copyTerm (constraintExprData data) +void constraintExprData_freeTerm (/*@only@*/constraintExprData data) +{ + constraintTerm_free (data->term); + free(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; -// } - -constraintExprData constraintExprData_termSetTerm (/*@reldef@*/ constraintExprData data, constraintTerm term) +constraintExprData constraintExprData_termSetTerm (/*@returned@*/ constraintExprData data, /*@only@*/constraintTerm term) { - /*@-uniondef@*/ llassert (constraintExprData_isDefined(data)); - /*@=uniondef@*/ - data->term = constraintTerm_copy(term); + + if (constraintTerm_isDefined(data->term) ) + constraintTerm_free(data->term); + + data->term = term; return data; } -constraintTerm constraintExprData_termGetTerm (/*@observer@*/ constraintExprData data) +/*@observer@*/ constraintTerm constraintExprData_termGetTerm (/*@observer@*/ constraintExprData data) { llassert (constraintExprData_isDefined(data)); /*@i22*/return data->term; } -constraintExprUnaryOpKind constraintExprData_unaryExprGetOp (constraintExprData data) +constraintExprUnaryOpKind constraintExprData_unaryExprGetOp (/*@observer@*/ constraintExprData 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, constraintExpr expr) +constraintExprData constraintExprData_unaryExprSetExpr (constraintExprData data, /*@only@*/ constraintExpr expr) { llassert (constraintExprData_isDefined(data)); - data->unaryOp.expr = constraintExpr_copy(expr); + + 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) { llassert (constraintExprData_isDefined(data)); + return (data->binaryOp.binaryOp); } @@ -130,7 +203,9 @@ constraintExprBinaryOpKind constraintExprData_binaryExprGetOp (constraintExprDa constraintExpr constraintExprData_binaryExprGetExpr1 (constraintExprData data) { llassert (constraintExprData_isDefined(data)); - /*@i23*/ return (data->binaryOp.expr1); + + + return (data->binaryOp.expr1); } @@ -141,24 +216,32 @@ constraintExpr constraintExprData_binaryExprGetExpr2 (constraintExprData data) } - constraintExprData constraintExprData_binaryExprSetExpr1 ( /*@reldef@*/ /*@returned@*/ constraintExprData data, constraintExpr expr) +constraintExprData constraintExprData_binaryExprSetExpr1 ( /*@returned@*/ constraintExprData data, /*@only@*/ constraintExpr expr) { llassert (constraintExprData_isDefined(data)); - data->binaryOp.expr1 = constraintExpr_copy(expr); + + 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)); - data->binaryOp.expr2 = constraintExpr_copy(expr); + 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)); data->binaryOp.binaryOp = op; return data; } +