/*
** Splint - annotation-assisted static program checker
-** Copyright (C) 1994-2001 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
** the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
** MA 02111-1307, USA.
**
-** For information on lclint: lclint-request@cs.virginia.edu
-** To report a bug: lclint-bug@cs.virginia.edu
+** For information on splint: info@splint.org
+** To report a bug: splint-bug@splint.org
** For more information: http://www.splint.org
*/
/*
** stateClause.c
*/
-# include "lclintMacros.nf"
+# include "splintMacros.nf"
# include "basic.h"
# include "cgrammar.h"
# include "cgrammar_tokens.h"
return ret;
}
+/*drl added 3/7/2003*/
+bool stateClause_hasEmptyReferences (stateClause s)
+{
+ if (sRefSet_isUndefined(s->refs) )
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool stateClause_isMetaState (stateClause s)
+{
+
+ if (qual_isMetaState (s->squal) )
+ return TRUE;
+ else
+ return FALSE;
+}
+/*end drl added*/
+
stateClause
stateClause_create (lltok tok, qual q, sRefSet s)
{
return (cl->state == TK_AFTER);
}
+bool stateClause_isQual (stateClause cl)
+{
+ return (cl->kind == SP_QUAL);
+}
+
bool stateClause_isMemoryAllocation (stateClause cl)
{
switch (cl->kind)
/*
** An error is reported if the test is NOT true.
*/
+\r
+# ifdef WIN32\r
+/* Microsoft doesn't believe in higher order functions... */\r
+# pragma warning( disable : 4550 )\r
+# endif \r
sRefTest stateClause_getPreTestFunction (stateClause cl)
{
case SP_USES:
return sRef_setDefinedComplete;
case SP_ALLOCATES:
- return NULL;
+ return sRef_setUndefined; /* evans 2002-01-01 */
case SP_DEFINES:
- return NULL;
+ return sRef_setUndefined; /* evans 2002-01-01 */
case SP_SETS:
return sRef_setAllocatedComplete;
case SP_RELEASES:
case SP_ALLOCATES: /*@fallthrough@*/
case SP_DEFINES:
case SP_SETS:
- return FLG_MUSTFREE;
+ return FLG_MUSTFREEONLY;
case SP_RELEASES:
return FLG_USEDEF;
case SP_GLOBAL:
case SP_SETS:
return FLG_COMPDEF;
case SP_RELEASES:
- return FLG_MUSTFREE;
+ return FLG_MUSTFREEONLY;
case SP_GLOBAL:
BADBRANCH;
case SP_QUAL:
}
else if (qual_isAliasQual (sq))
{
- return (sRefModVal) sRef_setAliasKind; /*@i23 complete? @*/
+ return (sRefModVal) sRef_setAliasKind;
}
else
{
llassert (cl->kind == SP_QUAL || cl->kind == SP_GLOBAL);
sq = cl->squal;
-
- /*@+relaxtypes@*/ /*@i523 this is wrong, remove the enumint@*/
- /*@+enumint@*/
+
+ /*@+enumint@*/
+ /*
+ ** Since this can be many different types of state kinds, we need to allow all
+ ** enum's to be returned as int.
+ */
if (qual_isNotNull (sq))
{