OSDN Git Service

2007-11-13 Sebastian Pop <sebastian.pop@amd.com>
[pf3gnuchains/gcc-fork.git] / gcc / scan.c
index 4f575b3..f697d26 100644 (file)
@@ -1,32 +1,32 @@
 /* Utility functions for scan-decls and fix-header programs.
-   Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1994, 1998, 2002, 2003, 2007 Free Software Foundation, Inc.
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
 
+#include "bconfig.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
 #include "scan.h"
-#include "hconfig.h"
-#include <ctype.h>
 
 int lineno = 1;
 int source_lineno = 1;
 sstring source_filename;
 
 void
-make_sstring_space (str, count)
-     sstring *str;
-     int count;
+make_sstring_space (sstring *str, int count)
 {
   int cur_pos = str->ptr - str->base;
   int cur_size = str->limit - str->base;
@@ -34,58 +34,50 @@ make_sstring_space (str, count)
 
   if (new_size <= cur_size)
     return;
-  
-  if (str->base == NULL)
-    str->base = xmalloc (new_size);
-  else
-    str->base = xrealloc (str->base, new_size);
+
+  str->base = xrealloc (str->base, new_size);
   str->ptr = str->base + cur_size;
   str->limit = str->base + new_size;
 }
 
 void
-sstring_append (dst, src)
-     sstring *dst;
-     sstring *src;
+sstring_append (sstring *dst, sstring *src)
 {
-  register char *d, *s;
-  register count = SSTRING_LENGTH(src);
-  MAKE_SSTRING_SPACE(dst, count + 1);
+  char *d, *s;
+  int count = SSTRING_LENGTH (src);
+
+  MAKE_SSTRING_SPACE (dst, count + 1);
   d = dst->ptr;
   s = src->base;
   while (--count >= 0) *d++ = *s++;
   dst->ptr = d;
-  *d = 0;  
+  *d = 0;
 }
 
 int
-scan_ident (fp, s, c)
-     register FILE *fp;
-     register sstring *s;
-     int c;
+scan_ident (FILE *fp, sstring *s, int c)
 {
   s->ptr = s->base;
-  if (isalpha(c) || c == '_')
+  if (ISIDST (c))
     {
       for (;;)
        {
-         SSTRING_PUT(s, c);
+         SSTRING_PUT (s, c);
          c = getc (fp);
-         if (c == EOF || !(isalnum(c) || c == '_'))
+         if (c == EOF || ! ISIDNUM (c))
            break;
        }
     }
-  MAKE_SSTRING_SPACE(s, 1);
+  MAKE_SSTRING_SPACE (s, 1);
   *s->ptr = 0;
   return c;
 }
 
 int
-scan_string (fp, s, init)
-     register FILE *fp;
-     register sstring *s;
+scan_string (FILE *fp, sstring *s, int init)
 {
   int c;
+
   for (;;)
     {
       c = getc (fp);
@@ -104,9 +96,9 @@ scan_string (fp, s, init)
          if (c == '\n')
            continue;
        }
-      SSTRING_PUT(s, c);
+      SSTRING_PUT (s, c);
     }
-  MAKE_SSTRING_SPACE(s, 1);
+  MAKE_SSTRING_SPACE (s, 1);
   *s->ptr = 0;
   return c;
 }
@@ -114,9 +106,7 @@ scan_string (fp, s, init)
 /* Skip horizontal white spaces (spaces, tabs, and C-style comments).  */
 
 int
-skip_spaces (fp, c)
-     register FILE *fp;
-     int c;
+skip_spaces (FILE *fp, int c)
 {
   for (;;)
     {
@@ -152,30 +142,27 @@ skip_spaces (fp, c)
 }
 
 int
-read_upto (fp, str, delim)
-     FILE *fp;
-     sstring *str;
-     int delim;
+read_upto (FILE *fp, sstring *str, int delim)
 {
   int ch;
+
   for (;;)
     {
       ch = getc (fp);
       if (ch == EOF || ch == delim)
        break;
-      SSTRING_PUT(str, ch);
+      SSTRING_PUT (str, ch);
     }
-  MAKE_SSTRING_SPACE(str, 1);
+  MAKE_SSTRING_SPACE (str, 1);
   *str->ptr = 0;
   return ch;
 }
 
 int
-get_token (fp, s)
-     register FILE *fp;
-     register sstring *s;
+get_token (FILE *fp, sstring *s)
 {
   int c;
+
   s->ptr = s->base;
  retry:
   c = ' ';
@@ -209,18 +196,18 @@ get_token (fp, s)
     }
   if (c == EOF)
     return EOF;
-  if (isdigit (c))
+  if (ISDIGIT (c))
     {
       do
        {
-         SSTRING_PUT(s, c);
+         SSTRING_PUT (s, c);
          c = getc (fp);
-       } while (c != EOF && isdigit(c));
+       } while (c != EOF && ISDIGIT (c));
       ungetc (c, fp);
       c = INT_TOKEN;
       goto done;
     }
-  if (isalpha (c) || c == '_')
+  if (ISIDST (c))
     {
       c = scan_ident (fp, s, c);
       ungetc (c, fp);
@@ -232,9 +219,22 @@ get_token (fp, s)
       ungetc (c, fp);
       return c == '\'' ? CHAR_TOKEN : STRING_TOKEN;
     }
-  SSTRING_PUT(s, c);
+  SSTRING_PUT (s, c);
  done:
-  MAKE_SSTRING_SPACE(s, 1);
+  MAKE_SSTRING_SPACE (s, 1);
   *s->ptr = 0;
   return c;
 }
+
+unsigned int
+hashstr (const char *str, unsigned int len)
+{
+  unsigned int n = len;
+  unsigned int r = 0;
+  const unsigned char *s = (const unsigned char *) str;
+
+  do
+    r = r * 67 + (*s++ - 113);
+  while (--n);
+  return r + len;
+}