/*
** Splint - annotation-assisted static program checker
-** Copyright (C) 1994-2002 University of Virginia,
+** Copyright (C) 1994-2003 University of Virginia,
** Massachusetts Institute of Technology
**
** This program is free software; you can redistribute it and/or modify it
# include "splintMacros.nf"
# include "basic.h"
-static /*@only@*/ /*@notnull@*/ /*@special@*/ functionConstraint /*@i32 need special? @*/
+static /*@only@*/ /*@notnull@*/ /*@special@*/ functionConstraint
functionConstraint_alloc (functionConstraintKind kind) /*@defines result->kind@*/
{
functionConstraint res = (functionConstraint) dmalloc (sizeof (*res));
{
if (node->kind == FCT_CONJUNCT)
{
- /*@i223*/ /*make sure this is safe*/
+ /* make sure this is safe*/
return constraintList_addListFree (functionConstraint_getBufferConstraints (node->constraint.conjunct.op1),
functionConstraint_getBufferConstraints (node->constraint.conjunct.op2));
}
}
}
+/*drl modified */
+void functionConstraint_addBufferConstraints (functionConstraint node, constraintList clist)
+{
+ constraintList temp;
-
-
-
-
-
-
-
+ temp = constraintList_copy (clist);
+
+ if (functionConstraint_isDefined (node))
+ {
+ if (node->kind == FCT_CONJUNCT)
+ {
+ functionConstraint_addBufferConstraints (node->constraint.conjunct.op1, constraintList_copy(temp) );
+ functionConstraint_addBufferConstraints (node->constraint.conjunct.op2,temp);
+ }
+ else
+ {
+ if (node->kind == FCT_BUFFER)
+ {
+ node->constraint.buffer = constraintList_addListFree(node->constraint.buffer, temp);
+ }
+ else
+ {
+ constraintList_free (temp);
+ return;
+ }
+ }
+ }
+ else
+ {
+ constraintList_free (temp);
+ return;
+ }
+}