X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fscan.c;h=f32606107979b03bc238497d50707659746928ad;hb=48be990a98811c6114000276eefdec809e20272a;hp=03b7c35cfd4b38284d7074c6b751050d1f624af0;hpb=14cf77e3845430de3b6da389922d9defc8a3b28c;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/scan.c b/gcc/scan.c index 03b7c35cfd4..f3260610797 100644 --- a/gcc/scan.c +++ b/gcc/scan.c @@ -1,5 +1,5 @@ -/* scan.c - Utility functions for scan-decls and fix-header programs. - Copyright (C) 1993 Free Software Foundation, Inc. +/* Utility functions for scan-decls and fix-header programs. + 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 @@ -13,20 +13,20 @@ 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ +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,87 +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; -} - -memory_full () -{ - abort(); -} - -char * -xmalloc (size) - unsigned size; -{ - register char *ptr = (char *) malloc (size); - if (ptr != 0) return (ptr); - memory_full (); - /*NOTREACHED*/ - return 0; -} - - -char * -xrealloc (old, size) - char *old; - unsigned size; -{ - register char *ptr = (char *) realloc (old, size); - if (ptr != 0) return (ptr); - memory_full (); - /*NOTREACHED*/ - return 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); @@ -133,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 (;;) { @@ -181,34 +142,30 @@ 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 = ' '; - again: c = skip_spaces (fp, c); if (c == '\n') { @@ -221,7 +178,7 @@ get_token (fp, s) c = get_token (fp, s); if (c == INT_TOKEN) { - source_lineno = atoi (s->base); + source_lineno = atoi (s->base) - 1; /* '\n' will add 1 */ get_token (fp, &source_filename); } for (;;) @@ -230,23 +187,27 @@ get_token (fp, s) if (c == EOF) return EOF; if (c == '\n') + { + source_lineno++; + lineno++; goto retry; + } } } 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); @@ -254,24 +215,26 @@ get_token (fp, s) } if (c == '\'' || c == '"') { - int quote = c; c = scan_string (fp, s, c); 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 long -hash (str) - char *str; +unsigned int +hashstr (const char *str, unsigned int len) { - int h = 0; - /* Replace this with something faster/better! FIXME! */ - while (*str) h = (h << 3) + *str++; - return h & 0x7FFFFFFF; + 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; }