]> andersk Git - splint.git/blobdiff - src/constraintExprData.c
*** empty log message ***
[splint.git] / src / constraintExprData.c
index 9809a90b19e0aaf9165901e9a554d3e2531ee7af..9ca1409e9c19d39fc5061c69c806f47d9a661310 100644 (file)
-#/*
-** constraintExpr.c
+/*
+** 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
 */
 
-# include <ctype.h> /* for isdigit */
-# include "lclintMacros.nf"
+/*
+** constraintExprData.c
+*/
+
+# include "splintMacros.nf"
 # include "basic.h"
 # include "cgrammar.h"
 # include "cgrammar_tokens.h"
 
 # include "exprChecks.h"
-# include "aliasChecks.h"
 # include "exprNodeSList.h"
-//# include "exprData.i"
 
+static /*@out@*/ constraintExprData constraintExprData_alloc (void)
+{
+  constraintExprData ret;
+
+  ret = dmalloc (sizeof (*ret) );
+
+  return ret;
+}
 
-constraintExprData constraintExprData_copyBinaryExpr(constraintExprData data)
+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);
@@ -37,125 +116,143 @@ 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 (/*@out@*/ constraintExprData data, constraintTerm term)
+constraintExprData 
+constraintExprData_termSetTerm (/*@returned@*/ constraintExprData data,  
+                               /*@only@*/ constraintTerm term)
 {
-  llassert (constraintExprData_isDefined(data));
-  data->term = constraintTerm_copy(term);
+  llassert (constraintExprData_isDefined (data));
+
+  if (constraintTerm_isDefined (data->term))
+    {
+      constraintTerm_free (data->term);
+    }
+
+  data->term = term;
   return data;
 }
 
 
 
-constraintTerm constraintExprData_termGetTerm (constraintExprData data)
+/*@observer@*/ constraintTerm 
+constraintExprData_termGetTerm (/*@observer@*/ constraintExprData data)
 {
-  llassert (constraintExprData_isDefined(data));
+  llassert (constraintExprData_isDefined (data));
+  /*@i22*/
   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));
+  llassert (constraintExprData_isDefined (data));
   return (data->unaryOp.expr);
 }
 
-
-
-constraintExprData  constraintExprData_unaryExprSetOp (/*@out@*/ constraintExprData data, constraintExprUnaryOpKind op)
+constraintExprData 
+constraintExprData_unaryExprSetOp (/*@returned@*/ constraintExprData data,
+                                  constraintExprUnaryOpKind op)
 {
-  llassert (constraintExprData_isDefined(data));
+  llassert (constraintExprData_isDefined (data));
   data->unaryOp.unaryOp = op;
   return data;
 }
 
-constraintExprData  constraintExprData_unaryExprSetExpr (/*@out@*/ constraintExprData data, constraintExpr expr)
+constraintExprData  
+constraintExprData_unaryExprSetExpr (constraintExprData data,
+                                    /*@only@*/ constraintExpr expr)
 {
-  llassert (constraintExprData_isDefined(data));
-  data->unaryOp.expr = constraintExpr_copy(expr);
+  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));
+  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);
 }
 
-
-constraintExprData  constraintExprData_binaryExprSetExpr1 (constraintExprData data, constraintExpr expr)
+constraintExprData 
+constraintExprData_binaryExprSetExpr1 (/*@returned@*/ constraintExprData data,
+                                      /*@only@*/ constraintExpr expr)
 {
-  llassert (constraintExprData_isDefined(data));
-  data->binaryOp.expr1 = constraintExpr_copy(expr);
+  llassert (constraintExprData_isDefined (data));
+
+  if (constraintExpr_isDefined (data->binaryOp.expr1))
+    constraintExpr_free(data->binaryOp.expr1);
+  
+  data->binaryOp.expr1 = expr;
   return data;
 }
 
-constraintExprData  constraintExprData_binaryExprSetExpr2 (constraintExprData data, constraintExpr expr)
+constraintExprData  
+constraintExprData_binaryExprSetExpr2 (constraintExprData data, constraintExpr expr) 
 {
-  llassert (constraintExprData_isDefined(data));
-  data->binaryOp.expr2 = constraintExpr_copy(expr);
+  llassert (constraintExprData_isDefined (data));
+
+  if (constraintExpr_isDefined (data->binaryOp.expr2))
+    constraintExpr_free (data->binaryOp.expr2);
+  
+  data->binaryOp.expr2 = expr;
   return data;
 }
 
-
-/*@special@*/ constraintExprData  constraintExprData_binaryExprSetOp (/*@returned@*/ /*@out@*/constraintExprData data, constraintExprBinaryOpKind op) /*@defines result->binaryOp.binaryOp@*/
+constraintExprData  
+constraintExprData_binaryExprSetOp (constraintExprData data, 
+                                   constraintExprBinaryOpKind op)
 {
-  llassert (constraintExprData_isDefined(data));
+  llassert (constraintExprData_isDefined (data));
   data->binaryOp.binaryOp = op;
   return data;
 }
+
This page took 0.048103 seconds and 4 git commands to generate.