X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fscan.c;h=f32606107979b03bc238497d50707659746928ad;hb=ece1cf4f24d4adacd7b39adde40703d071a0450f;hp=1086c384f1aca92b795171ae8208496a42df90a2;hpb=c58d4270afd64d680a7f9c705bb205efda8e56a4;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/scan.c b/gcc/scan.c index 1086c384f1a..f3260610797 100644 --- a/gcc/scan.c +++ b/gcc/scan.c @@ -1,5 +1,5 @@ /* Utility functions for scan-decls and fix-header programs. - Copyright (C) 1993, 1994 Free Software Foundation, Inc. + Copyright (C) 1993, 1994, 1998, 2002, 2003 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 @@ -15,18 +15,18 @@ 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. */ +#include "bconfig.h" +#include "system.h" +#include "coretypes.h" +#include "tm.h" #include "scan.h" -#include "hconfig.h" -#include 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,19 +96,17 @@ 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; } -/* Skip horizontal white spaces (spaces, tabs, and C-style comments). */ +/* 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; +}