]> andersk Git - splint.git/blobdiff - src/cscannerHelp.c
Fixed problem with NULL being changed.
[splint.git] / src / cscannerHelp.c
index d3379ae632a2cc172fa5712d3acc6aea6ef499c5..24f75ba93fa6d139e684b09cc76d51b107b497d8 100644 (file)
@@ -33,6 +33,7 @@
 # include "cscannerHelp.h"
 # include "cscanner.h"
 # include "cgrammar_tokens.h"
+# include "osd.h"
 
 static int lminput (void);
 static int s_tokLength = 0;
@@ -405,7 +406,8 @@ static char macro_nextChar (void)
        }
       else /* if (c == '@') */
        {
-         llassert (FALSE); /*@i23@*/
+         llassert (FALSE); 
+
          if (cscannerHelp_handleLlSpecial () != BADTOK)
            {
              llerrorlit (FLG_SYNTAX, "Macro cannot use special syntax");
@@ -722,11 +724,15 @@ bool cscannerHelp_handleSpecial (char *yyt)
 
          cstring_free (exname);
        }
+
+      (void) cscannerHelp_handleNewLine (); /* evans 2003-10-27: pragment increments line */
     }
   else if (cstring_equalPrefixLit (olc, "ident"))
     {
       /* Some pre-processors will leave these in the code.  Ignore rest of line */
+      (void) cscannerHelp_handleNewLine (); /* evans 2003-10-27: ident increments line */
     }
+
   /*
   ** Yuk...Win32 filenames can have spaces in them...we need to read
   ** to the matching end quote.
@@ -745,9 +751,7 @@ bool cscannerHelp_handleSpecial (char *yyt)
        }
 
       llassert (*tmp == '\"');
-
       tmp++;
-
       fname = tmp;
       
       while (*tmp != '\"' && *tmp != '\0')
@@ -756,7 +760,6 @@ bool cscannerHelp_handleSpecial (char *yyt)
        }
 
       llassert (*tmp == '\"');
-
       *tmp = '\0';
 
 # if defined(OS2) || defined(MSDOS) || defined(WIN32)
@@ -836,6 +839,7 @@ bool cscannerHelp_handleSpecial (char *yyt)
        ** We handle a plain # in the input file, by echoing it, and ignoring it in the post-pp-file.
        */
        mstring_free (ol);
+       (void) cscannerHelp_handleNewLine (); /* evans 2003-10-27: increments line */
        return FALSE;
       } else {
        voptgenerror
@@ -843,6 +847,7 @@ bool cscannerHelp_handleSpecial (char *yyt)
           message ("Unrecognized pre-processor directive: #%s", 
                    cstring_fromChars (ol)),
           g_currentloc);
+       (void) cscannerHelp_handleNewLine (); /* evans 2003-10-27: increments line */
       }
       
       sfree (ol);
@@ -935,7 +940,9 @@ int cscannerHelp_handleLlSpecial (void)
          s = mstring_append (s, c);
          charsread++;
        }
-      /*@i888@*/ }
+      /*@-branchstate@*/ 
+    } /* spurious (?) warnings about s */
+  /*@=branchstate@*/ 
 
   DPRINTF (("Read: %s / %s", s, fileloc_unparse (g_currentloc)));
 
@@ -1163,7 +1170,7 @@ int cscannerHelp_handleLlSpecial (void)
       
       if (annotationInfo_isDefined (ainfo)) {
        DPRINTF (("Found annotation: %s", annotationInfo_unparse (ainfo)));
-       /*@i324@*/ yylval.annotation = ainfo;
+       yylval.annotation = ainfo;
        s_tokLength = 0;
        sfree (os);
        sfree (t);
@@ -1433,7 +1440,9 @@ int cscannerHelp_handleLlSpecial (void)
                        message ("Semantic comment unrecognized: %s", 
                                 cstring_fromChars (os)),
                        loc);
-         /*@i888@*/ }
+         /*@-branchstate@*/
+       } /* spurious (?) warning about t */
+      /*@=branchstate@*/
       
       sfree (t);
     }
@@ -1575,7 +1584,7 @@ int cscannerHelp_processIdentifier (cstring id)
              if (annotationInfo_isDefined (ainfo)) 
                {
                  DPRINTF (("Found annotation: %s", annotationInfo_unparse (ainfo)));
-                 /*@i324@*/ yylval.annotation = ainfo;
+                 yylval.annotation = ainfo;
                  return CANNOTATION;
                }
              else
@@ -1774,12 +1783,12 @@ int cscannerHelp_processIdentifier (cstring id)
   
   if (uentry_isIter (le))
     {
-      /*@i32@*/ yylval.entry = le;
+      yylval.entry = le;
       return (ITER_NAME);
     }
   else if (uentry_isEndIter (le))
     {
-      /*@i32@*/ yylval.entry = le;
+      yylval.entry = le;
       return (ITER_ENDNAME);
     }
   else if (uentry_isUndefined (le))
@@ -1805,7 +1814,7 @@ int cscannerHelp_processIdentifier (cstring id)
        }
       else
        {
-         /*@i32@*/ yylval.entry = le;            
+         yylval.entry = le;              
          return (IDENTIFIER); 
        }
     }
@@ -1827,7 +1836,7 @@ int cscannerHelp_processIdentifier (cstring id)
     }
   else
     {
-      /*@i32@*/ yylval.entry = le;            
+      yylval.entry = le;            
       return (IDENTIFIER); 
     }
 
@@ -2144,7 +2153,6 @@ bool cscannerHelp_isConstraintToken (int tok)
 {
   return (tok == QMAXSET || tok == QMAXREAD);
           /* || tok == QMINREAD || tok == QMINSET */
-  /*@i4523@*/
   /* uncomment the additional if statement tests when minSet and minRead are supported */
 }
 
@@ -2318,10 +2326,10 @@ bool cscannerHelp_processMacro (void)
                          else if (!fileloc_withinLines (oloc, loc, 2))
                            { /* bogus!  will give errors if there is too much whitespace */
                              voptgenerror
-                               (FLG_SYNTAX,
+                               (FLG_MACROCONSTDIST,
                                 message 
-                                ("Macro constant name %s does not match name in "
-                                 "previous constant declaration.  This constant "
+                                ("Macro constant name %s matches name in "
+                                 "distant constant declaration.  This constant "
                                  "is declared at %q", fname, 
                                  fileloc_unparse (oloc)),
                                 loc);
@@ -2680,7 +2688,12 @@ void cscannerHelp_advanceLine (void)
 
 int cscannerHelp_returnToken (int t)
 {
-  yylval.tok = lltok_create (t, fileloc_decColumn (g_currentloc, s_tokLength)); 
+  if (s_tokLength > fileloc_column (g_currentloc)) {
+    yylval.tok = lltok_create (t, fileloc_copy (g_currentloc));
+  } else {
+    yylval.tok = lltok_create (t, fileloc_decColumn (g_currentloc, s_tokLength)); 
+  }
+
   s_tokLength = 0; 
   s_lastWasString = FALSE; 
   return (t); 
This page took 0.051599 seconds and 4 git commands to generate.