]> andersk Git - splint.git/blobdiff - src/cscanner.l
- library fixes:
[splint.git] / src / cscanner.l
index 6118acac4184e4d835808183bba1bebb7b61bf35..1a8e618a50db271bf45852a896f3ef8fb8391de3 100644 (file)
@@ -84,8 +84,6 @@ ULSuffix                ({U}{L}|{L}{U})
 
 # include "cgrammar.h"
 # include "cgrammar_tokens.h"
-
-# include "fileIdList.h"
 # include "portab.h"
 
 static bool lastWasString = FALSE;
@@ -199,7 +197,7 @@ static void setTokLengthT (size_t len)
 
 %%
 
-"/*"           { llfatalbug (cstring_makeLiteral ("Comment in pre-processor output")); }
+"/*"           { llfatalerror (cstring_makeLiteral ("Comment in pre-processor output")); }
 
 "#"{Letter}({Letter}|{Digit})*  { 
                  context_saveLocation (); 
@@ -271,6 +269,7 @@ static void setTokLengthT (size_t len)
 
 "volatile"     { setTokLength (8); RETURN_TOK (QVOLATILE); }
 "const"                { setTokLength (5); RETURN_TOK (QCONST); }
+"restrict"     { setTokLength (8); RETURN_TOK (QRESTRICT); }
 
                         /* some systems expect this! [gack!] */ 
 "__const"      { setTokLength (7); RETURN_TOK (QCONST); }
@@ -476,7 +475,7 @@ L'(\\.|[^\\'])+'       { setTokLengthT (mstring_length (yytext));
                     if (context_inMacro ())
                       {
                         /* Don't use RETURN_TOK */
-                        yylval.tok = lltok_create (TENDMACRO, g_currentloc);
+                        yylval.tok = lltok_create (TENDMACRO, fileloc_copy (g_currentloc)); /* !!! evans 2002-03-13 */
                         lastWasString = FALSE;
                         return (TENDMACRO);
                       }  
@@ -1713,20 +1712,23 @@ static bool handleSpecial (char *yyt)
   char c;
   char *ol;
   cstring olc;
-  
-  strcpy (l, yyt + 1);
 
-  /* Need to safe original l for deallocating. */
-  ol = l;
+  int len_yyt;
 
-  l += strlen (yyt) - 1;
+  len_yyt = strlen (yyt +1) ;
+
+  l = mstring_copy (yyt + 1);
   
   while ((c = char_fromInt (lminput ())) != '\n' && c != '\0')
     {
-      *l++ = c;
+      l = mstring_append(l, c);
     }
 
-  *l = '\0';
+    /* Need to safe original l for deallocating. */
+  ol = l;
+
+  l += strlen (l);
+
   olc = cstring_fromChars (ol);
   
   if (cstring_equalPrefixLit (olc, "pragma"))
@@ -1992,7 +1994,7 @@ static int handleLlSpecial ()
              (FLG_SYNTAX, 
               message ("Likely parse error: syntactic comment token spans multiple lines: %s",
                        cstring_fromChars (s)),
-              g_currentloc);
+              loc);
          }
 
          s = mstring_append (s, c);
@@ -2046,33 +2048,30 @@ static int handleLlSpecial ()
                {
                  ;
                }
-             else if (flagcode_isInvalid (fflag))
+             else if (flagcode_isModeName (fflag))
                {
-                 if (isMode (flagname))
+                 if (ynm_isMaybe (set))
                    {
-                     if (ynm_isMaybe (set))
-                       {
-                         llerror
-                           (FLG_BADFLAG, 
-                            message 
-                            ("Semantic comment attempts to restore flag %s.  "
-                             "A mode flag cannot be restored.",
-                             flagname));
-                       }
-                     else
-                       {
-                         context_setMode (flagname);
-                       }
+                     llerror
+                       (FLG_BADFLAG, 
+                        message 
+                        ("Semantic comment attempts to restore flag %s.  "
+                         "A mode flag cannot be restored.",
+                         flagname));
                    }
                  else
                    {
-                     voptgenerror
-                       (FLG_UNRECOGFLAGCOMMENTS,
-                        message ("Unrecognized option in semantic comment: %s", 
-                                 flagname),
-                        g_currentloc);
+                     context_setMode (flagname);
                    }
                }
+             else if (flagcode_isInvalid (fflag))
+               {
+                 voptgenerror
+                   (FLG_UNRECOGFLAGCOMMENTS,
+                    message ("Unrecognized option in semantic comment: %s", 
+                             flagname),
+                    loc);
+               }
              else if (flagcode_isGlobalFlag (fflag))
                {
                  voptgenerror
@@ -2081,11 +2080,11 @@ static int handleLlSpecial ()
                     ("Semantic comment attempts to set global flag %s.  "
                      "A global flag cannot be set locally.",
                      flagname),
-                    g_currentloc);
+                    loc);
                }
              else
                {
-                 context_fileSetFlag (fflag, set);
+                 context_fileSetFlag (fflag, set, loc);
                  
                  if (flagcode_hasArgument (fflag))
                    {
@@ -2097,7 +2096,7 @@ static int handleLlSpecial ()
                             ("Semantic comment attempts to restore flag %s.  "
                              "A flag for setting a value cannot be restored.",
                              flagname),
-                            g_currentloc);
+                            loc);
                        }
                      else
                        { /* cut-and-pastied from llmain...blecch */
@@ -2176,7 +2175,7 @@ static int handleLlSpecial ()
       if (context_inHeader () && !isArtificial (cstring_fromChars (os)))
        {
          DPRINTF (("Here adding comment: %s", os));
-         context_addComment (cstring_fromCharsNew (os));
+         context_addComment (cstring_fromCharsNew (os), loc);
        }
       else
        {
@@ -2244,8 +2243,14 @@ static int handleLlSpecial ()
              && macrocode != SKIPTOK
              && !isArtificial (cstring_fromChars (os))) 
            {
-             DPRINTF (("Add comment: %s", os));
-             context_addComment (cstring_fromCharsNew (os));
+             if (context_processingMacros ())
+               {
+                 /* evans 2002-02-24: don't add comments when procssing macros */
+               }
+             else
+               {
+                 context_addComment (cstring_fromCharsNew (os), loc);
+               }
            }
          else
            {
@@ -2262,7 +2267,7 @@ static int handleLlSpecial ()
        {
          if (!context_getFlag (FLG_NOCOMMENTS))
            {
-             context_enterSuppressRegion ();
+             context_enterSuppressRegion (loc);
            }
        }
       else if ((*t == 'i' || *t == 't')
@@ -2271,7 +2276,7 @@ static int handleLlSpecial ()
          if (!context_getFlag (FLG_NOCOMMENTS)
              && (*t == 'i' || context_getFlag (FLG_TMPCOMMENTS)))
            {
-             context_enterSuppressLine (-1); /* infinite suppression */
+             context_enterSuppressLine (-1, loc); /* infinite suppression */
            }
        }
       else if (((*t == 'i') || (*t == 't'))
@@ -2294,19 +2299,19 @@ static int handleLlSpecial ()
                  lc = *(++tt);
                }
            }
-
          
          if (!context_getFlag (FLG_NOCOMMENTS)
              && (!tmpcomment || context_getFlag (FLG_TMPCOMMENTS)))
            {
-             context_enterSuppressLine (val);
+             DPRINTF (("Here: enter suppress: %s", fileloc_unparse (loc)));
+             context_enterSuppressLine (val, loc);
            }
        }
       else if (mstring_equal (t, "end"))
        {
          if (!context_getFlag (FLG_NOCOMMENTS))
            {
-             context_exitSuppressRegion ();
+             context_exitSuppressRegion (loc);
            }
        }
       else if (mstring_equal (t, "notfunction"))
@@ -2361,20 +2366,20 @@ static int handleLlSpecial ()
                             message
                             ("Non-abstract type %s used in access comment",
                              tname),
-                            g_currentloc);
+                            loc);
                        }
                    }
                  else
                    {
                      if (!(context_inSuppressRegion ()
-                           || context_inSuppressZone (g_currentloc)))
+                           || context_inSuppressZone (loc)))
                        {
                          voptgenerror
                            (FLG_COMMENTERROR,
                             message
                             ("Unrecognized type %s used in access comment",
                              tname),
-                            g_currentloc);
+                            loc);
                        }
                    }
                }
@@ -2432,7 +2437,7 @@ static int handleLlSpecial ()
                      else
                        {
                          if (!(context_inSuppressRegion () 
-                               || context_inSuppressZone (g_currentloc)))
+                               || context_inSuppressZone (loc)))
                            {
                              uentry ue = usymtab_getTypeEntry (tuid);
                              
@@ -2443,7 +2448,7 @@ static int handleLlSpecial ()
                                     message
                                     ("Non-accessible abstract type %s used in noaccess comment",
                                      tname),
-                                    g_currentloc);
+                                    loc);
                                }
                              else
                                {
@@ -2452,7 +2457,7 @@ static int handleLlSpecial ()
                                     message
                                     ("Non-abstract type %s used in noaccess comment",
                                      tname),
-                                    g_currentloc);
+                                    loc);
                                }
                            }
                        }
@@ -2460,14 +2465,14 @@ static int handleLlSpecial ()
                  else
                    {
                      if (!(context_inSuppressRegion () 
-                           || context_inSuppressZone (g_currentloc)))
+                           || context_inSuppressZone (loc)))
                        {
                          voptgenerror
                            (FLG_COMMENTERROR,
                             message
                             ("Unrecognized type %s used in noaccess comment",
                              tname),
-                            g_currentloc);
+                            loc);
                        }
                    }
                }
@@ -2487,9 +2492,10 @@ static int handleLlSpecial ()
        {
          voptgenerror (FLG_UNRECOGCOMMENTS, 
                        message ("Semantic comment unrecognized: %s", 
-                                cstring_fromChars (os)), loc);
+                                cstring_fromChars (os)),
+                       loc);
        }
-
+      
       sfree (t);
     }
   
@@ -2654,6 +2660,14 @@ static int processIdentifier (cstring id)
        {
          tok = CALIGNOF; /* alignof is parsed like sizeof */
        }
+      else if (cstring_equalLit (id, "__typeof__")) 
+       {
+         tok = CTYPEOF;
+       }
+      else if (cstring_equalLit (id, "typeof")) 
+       {
+         tok = CTYPEOF;
+       }
       else if (cstring_equalLit (id, "__FUNCTION__")
               || cstring_equalLit (id, "__PRETTY_FUNCTION__")) 
        {
This page took 0.141449 seconds and 4 git commands to generate.