]> andersk Git - splint.git/blobdiff - src/warnClause.c
Added mtgrammar.c.der
[splint.git] / src / warnClause.c
index c0e5d3cd176afde8d4378808e15f05f63400a49e..059ec9af578d421c423b05005919033ddd84dd4b 100644 (file)
 
 # include "lclintMacros.nf"
 # include "basic.h"
-# include "mtgrammar.h"
 
 static warnClause warnClause_createAux (/*@only@*/ fileloc loc, 
                                        /*@only@*/ flagSpec flag, 
-                                       /*@only@*/ exprNode msg)
+                                       /*@only@*/ cstring msg)
 {
   warnClause res = (warnClause) dmalloc (sizeof (*res));
   
@@ -42,20 +41,31 @@ static warnClause warnClause_createAux (/*@only@*/ fileloc loc,
   return res;
 }
 
-extern warnClause warnClause_create (lltok tok, flagSpec flag, exprNode msg) 
+extern warnClause warnClause_create (lltok tok, flagSpec flag, cstring msg) 
 {
   warnClause res;
-  DPRINTF (("Create warn message: %s/ %s ", 
-           flagSpec_unparse (flag), exprNode_unparse(msg)));
-  
-  res = warnClause_createAux (lltok_stealLoc (tok),
-                             flag, msg);
+  res = warnClause_createAux (lltok_stealLoc (tok), flag, msg);
   lltok_release (tok);
   return res;
 }
 
+warnClause warnClause_copy (warnClause w)
+{
+  if (warnClause_isDefined (w))
+    {
+      return warnClause_createAux (fileloc_copy (w->loc),
+                                  flagSpec_copy (w->flag),
+                                  cstring_copy (w->msg)); 
+    }
+  else
+    {
+      return warnClause_undefined;
+    }
+}
+
 extern flagSpec warnClause_getFlag (warnClause w)
 {
+  llassert (warnClause_isDefined (w));
   return w->flag;
 }
 
@@ -63,8 +73,7 @@ extern cstring warnClause_unparse (warnClause w)
 {
   if (warnClause_isDefined (w))
     {
-      return message ("<%q> %s",
-                     flagSpec_unparse (w->flag), exprNode_unparse (w->msg));
+      return message ("<%q> %s", flagSpec_unparse (w->flag), w->msg);
     }
   else
     {
@@ -74,15 +83,13 @@ extern cstring warnClause_unparse (warnClause w)
 
 extern bool warnClause_hasMessage (warnClause w)
 {
-  return warnClause_isDefined (w) && exprNode_isDefined (w->msg)
-    && cstring_isDefined (multiVal_forceString (exprNode_getValue (w->msg)));
+  return warnClause_isDefined (w) && cstring_isDefined (w->msg);
 }
 
 extern /*@observer@*/ cstring warnClause_getMessage (warnClause w)
 {
-  if (warnClause_isDefined (w) && exprNode_isDefined (w->msg)) {
-    llassert (exprNode_knownStringValue (w->msg));
-    return multiVal_forceString (exprNode_getValue (w->msg));
+  if (warnClause_isDefined (w)) {
+    return w->msg;
   } else {
     return cstring_undefined;
   }
@@ -94,8 +101,8 @@ extern void warnClause_free (warnClause w)
   if (warnClause_isDefined (w))
     {
       flagSpec_free (w->flag);
-      exprNode_free (w->msg);
       fileloc_free (w->loc);
+      cstring_free (w->msg);
       sfree (w);
     }
 }
@@ -104,10 +111,19 @@ extern void warnClause_free (warnClause w)
 warnClause_dump (warnClause wc)
 {
   cstring st = cstring_undefined;
-
+  llassert (warnClause_isDefined (wc));
   llassert (!cstring_containsChar (warnClause_getMessage (wc), '#'));
-  
-  st = message ("%q#%s#", flagSpec_dump (wc->flag), warnClause_getMessage (wc));
+
+  if (warnClause_hasMessage (wc))
+    {
+      llassert (cstring_firstChar (warnClause_getMessage (wc)) != '.');
+      st = message ("%q#%s#", flagSpec_dump (wc->flag), warnClause_getMessage (wc));
+    }
+  else
+    {
+      st = message ("%q#.#", flagSpec_dump (wc->flag));
+    }
+
   return st;
 }
 
@@ -116,13 +132,24 @@ warnClause_undump (char **s)
 {
   flagSpec flag;
   cstring msg;
-  exprNode emsg;
 
+  DPRINTF (("Undump: %s", *s));
   flag = flagSpec_undump (s);
+  DPRINTF (("Here: %s", *s));
   reader_checkChar (s, '#');
-  msg = reader_readUntil (s, '#');
-  reader_checkChar (s, '#');
-  emsg = exprNode_rawStringLiteral (msg, fileloc_copy (g_currentloc));
+  DPRINTF (("Here: %s", *s));
+
+  if (reader_optCheckChar (s, '.'))
+    {
+      msg = cstring_undefined;
+    }
+  else
+    {
+      msg = reader_readUntil (s, '#');
+    }
   
-  return warnClause_createAux (fileloc_copy (g_currentloc), flag, emsg);
+  DPRINTF (("Here: %s", *s));
+  reader_checkChar (s, '#');
+
+  return warnClause_createAux (fileloc_copy (g_currentloc), flag, msg);
 }
This page took 0.035599 seconds and 4 git commands to generate.