/*
-** LCLint - annotation-assisted static program checker
-** Copyright (C) 1994-2001 University of Virginia,
+** 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
** 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 more information: http://lclint.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
*/
/*
** metaStateInfo.c
*/
-# include "lclintMacros.nf"
+# include "splintMacros.nf"
# include "basic.h"
/*@notnull@*/ metaStateInfo
fileloc loc)
{
metaStateInfo res = (metaStateInfo) dmalloc (sizeof (*res));
+ int i;
res->name = name;
res->valueNames = valueNames;
res->sctable = sctable;
res->mergetable = mergetable;
res->loc = loc;
- res->default_ref = stateValue_error;
- res->default_parameter = stateValue_error;
+
+ for (i = 0; i < MTC_NUMCONTEXTS; i++)
+ {
+ res->defaultValue[i] = stateValue_error;
+ }
llassert (stateCombinationTable_size (res->sctable)
== cstringList_size (res->valueNames));
+
return res;
}
stateCombinationTable_free (msinfo->sctable);
stateCombinationTable_free (msinfo->mergetable);
fileloc_free (msinfo->loc);
+ mtContextNode_free (msinfo->context); /* evans 2002-01-03 */
sfree (msinfo);
}
}
return info->mergetable;
}
+/*@+enumindex@*/ /* allow context kinds to reference array */
+extern int metaStateInfo_getDefaultValueContext (metaStateInfo info, mtContextKind context)
+{
+ llassert (metaStateInfo_isDefined (info));
+ return info->defaultValue [context];
+}
+
extern int metaStateInfo_getDefaultValue (metaStateInfo info, sRef s)
{
llassert (metaStateInfo_isDefined (info));
- llassert (mtContextNode_matchesRef (metaStateInfo_getContext (info), s));
- if (sRef_isParam (s))
+ if (sRef_isParam (s)
+ && (info->defaultValue [MTC_PARAM] != stateValue_error))
+ {
+ return info->defaultValue [MTC_PARAM];
+ }
+ else if (sRef_isResult (s)
+ && (info->defaultValue [MTC_RESULT] != stateValue_error))
{
- return info->default_parameter;
+ return info->defaultValue [MTC_RESULT];
+ }
+ else if (sRef_isConst (s)
+ && (info->defaultValue [MTC_LITERAL] != stateValue_error))
+ {
+ return info->defaultValue [MTC_LITERAL];
}
else
{
- return info->default_ref;
+ llassert (mtContextNode_matchesRef (metaStateInfo_getContext (info), s));
+ return info->defaultValue [MTC_REFERENCE];
}
}
extern int metaStateInfo_getDefaultGlobalValue (metaStateInfo info)
{
llassert (metaStateInfo_isDefined (info));
- return info->default_ref;
+ return info->defaultValue [MTC_REFERENCE];
}
-void metaStateInfo_setDefaultRefValue (metaStateInfo info, int val)
+void metaStateInfo_setDefaultValueContext (metaStateInfo info, mtContextKind context, int val)
{
llassert (metaStateInfo_isDefined (info));
- llassert (info->default_ref == stateValue_error);
- info->default_ref = val;
+ /*@-type@*/ llassert (context >= 0 && context < MTC_NUMCONTEXTS); /*@=type@*/
+ llassert (metaStateInfo_getDefaultValueContext (info, context) == stateValue_error);
+ info->defaultValue [context] = val;
+}
+/*@=enumindex@*/
+\
+void metaStateInfo_setDefaultRefValue (metaStateInfo info, int val)
+{
+ metaStateInfo_setDefaultValueContext (info, MTC_REFERENCE, val);
+}
+
+void metaStateInfo_setDefaultResultValue (metaStateInfo info, int val)
+{
+ metaStateInfo_setDefaultValueContext (info, MTC_RESULT, val);
}
void metaStateInfo_setDefaultParamValue (metaStateInfo info, int val)
{
- llassert (metaStateInfo_isDefined (info));
- llassert (info->default_parameter == stateValue_error);
- info->default_parameter = val;
+ metaStateInfo_setDefaultValueContext (info, MTC_PARAM, val);
}
int metaStateInfo_getDefaultRefValue (metaStateInfo info)
{
- llassert (metaStateInfo_isDefined (info));
- return info->default_ref;
+ return metaStateInfo_getDefaultValueContext (info, MTC_REFERENCE);
+}
+
+int metaStateInfo_getDefaultResultValue (metaStateInfo info)
+{
+ return metaStateInfo_getDefaultValueContext (info, MTC_RESULT);
}
int metaStateInfo_getDefaultParamValue (metaStateInfo info)
{
- llassert (metaStateInfo_isDefined (info));
- return info->default_parameter;
+ return metaStateInfo_getDefaultValueContext (info, MTC_PARAM);
}
+