]> andersk Git - splint.git/blobdiff - src/constraintExprData.c
*** empty log message ***
[splint.git] / src / constraintExprData.c
index d3cd6235a8d5533827469dba2b611795b7f115cb..9ca1409e9c19d39fc5061c69c806f47d9a661310 100644 (file)
@@ -1,8 +1,32 @@
-#/*
+/*
+** 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 "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)
 {
   constraintExpr_free (data->binaryOp.expr1);
@@ -21,7 +88,9 @@ constraintExprData constraintExprData_copyBinaryExpr(/*@observer@*/ constraintEx
 {
   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);
@@ -38,7 +107,8 @@ constraintExprData constraintExprData_copyUnaryExpr(/*@observer@*/ constraintExp
 {
  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);
@@ -57,122 +127,132 @@ constraintExprData constraintExprData_copyTerm (/*@observer@*/ constraintExprDat
 {
  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 (/*@returned@*/  constraintExprData data,  /*@only@*/constraintTerm term)
+constraintExprData 
+constraintExprData_termSetTerm (/*@returned@*/ constraintExprData data,  
+                               /*@only@*/ constraintTerm term)
 {
-  llassert (constraintExprData_isDefined(data));
+  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)
+/*@observer@*/ constraintTerm 
+constraintExprData_termGetTerm (/*@observer@*/ constraintExprData data)
 {
-  llassert (constraintExprData_isDefined(data));
-  /*@i22*/return data->term;
+  llassert (constraintExprData_isDefined (data));
+  /*@i22*/
+  return data->term;
 }
 
 
-constraintExprUnaryOpKind constraintExprData_unaryExprGetOp (/*@observer@*/ constraintExprData data)
+constraintExprUnaryOpKind 
+constraintExprData_unaryExprGetOp (/*@observer@*/ constraintExprData data)
 {
-  llassert (constraintExprData_isDefined(data));
+  llassert (constraintExprData_isDefined (data));
   return (data->unaryOp.unaryOp);
 }
 
 
-constraintExpr  constraintExprData_unaryExprGetExpr (/*@observer@*/ constraintExprData data)
+constraintExpr
+constraintExprData_unaryExprGetExpr (/*@observer@*/ constraintExprData data)
 {
   llassert (constraintExprData_isDefined (data));
-  /*@i232*/ return (data->unaryOp.expr);
+  return (data->unaryOp.expr);
 }
 
-
-
-constraintExprData constraintExprData_unaryExprSetOp ( /*@returned@*/ constraintExprData data, constraintExprUnaryOpKind op)
+constraintExprData 
+constraintExprData_unaryExprSetOp (/*@returned@*/ constraintExprData data,
+                                  constraintExprUnaryOpKind op)
 {
   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);
+  /*@i22*/ 
+  return (data->binaryOp.expr2);
 }
 
-
-constraintExprData  constraintExprData_binaryExprSetExpr1 (  /*@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 (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 (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;
 }
+
This page took 0.113103 seconds and 4 git commands to generate.