]> andersk Git - splint.git/blobdiff - src/metaStateInfo.c
noexpand always false.
[splint.git] / src / metaStateInfo.c
index 60937bec36ce83362588b3407a251a2e8d48198a..a35c52d0be53fe7ba7d4f95fc128a56a5944da50 100644 (file)
@@ -1,6 +1,6 @@
 /*
-** 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 
@@ -37,6 +37,7 @@ metaStateInfo_create (cstring name,
                      fileloc loc) 
 {
   metaStateInfo res = (metaStateInfo) dmalloc (sizeof (*res));
+  int i;
 
   res->name = name;
   res->valueNames = valueNames;
@@ -45,11 +46,15 @@ metaStateInfo_create (cstring name,
   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;
 }
 
@@ -62,6 +67,7 @@ void metaStateInfo_free (/*@only@*/ metaStateInfo msinfo)
       stateCombinationTable_free (msinfo->sctable);
       stateCombinationTable_free (msinfo->mergetable);
       fileloc_free (msinfo->loc);
+      mtContextNode_free (msinfo->context); /* evans 2002-01-03 */
       sfree (msinfo);
     }
 }
@@ -123,49 +129,81 @@ metaStateInfo_getMergeTable (metaStateInfo info) /*@*/
   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);
 }
+
This page took 0.038115 seconds and 4 git commands to generate.