diff options
-rw-r--r-- | gcc/ChangeLog | 24 | ||||
-rw-r--r-- | gcc/c-decl.c | 2 | ||||
-rw-r--r-- | gcc/cpplib.c | 42 | ||||
-rw-r--r-- | gcc/cpplib.h | 17 | ||||
-rw-r--r-- | gcc/cppmain.c | 2 | ||||
-rw-r--r-- | gcc/fix-header.c | 2 | ||||
-rw-r--r-- | gcc/objc/objc-act.c | 2 |
7 files changed, 58 insertions, 33 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f2f0aaf2bd6..098de32c649 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,26 @@ -1998-11-26 01:17 -0500 Zack Weinberg <zack@rabi.phys.columbia.edu> +1998-12-07 Zack Weinberg <zack@rabi.phys.columbia.edu> + + * cpplib.c (initialize_char_syntax): Use ISALPHA and ISALNUM + so it'll work on non-ASCII platforms. Always consider $ an + identifier character. Take no arguments. + (cpp_reader_init): Call initialize_char_syntax with no + arguments. + (cpp_start_read): Don't call initialize_char_syntax again. + Clear is_idchar['$'] and is_idstart['$'] if not + opts->dollars_in_ident. + + * cpplib.h (struct cpp_reader): Replace void *data element by + cpp_options *opts. Rearrange elements to make gdb printout + less annoying (put buffer stack at end). + (CPP_OPTIONS): Get rid of now-unnecessary cast. + + * cppmain.c: s/data/opts/ when initializing cpp_reader + structure. + * c-decl.c: Likewise. + * objc/objc-act.c: Likewise. + * fix-header.c: Likewise. + +1998-12-07 Zack Weinberg <zack@rabi.phys.columbia.edu> * cpplib.h (struct cpp_buffer): Replace dir and dlen members with a struct file_name_list pointer. diff --git a/gcc/c-decl.c b/gcc/c-decl.c index c0898363642..f5e95733902 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -618,7 +618,7 @@ c_decode_option (argc, argv) if (! cpp_initialized) { cpp_reader_init (&parse_in); - parse_in.data = &parse_options; + parse_in.opts = &parse_options; cpp_options_init (&parse_options); cpp_initialized = 1; } diff --git a/gcc/cpplib.c b/gcc/cpplib.c index dbdf2f45c08..8d408d0048c 100644 --- a/gcc/cpplib.c +++ b/gcc/cpplib.c @@ -169,7 +169,7 @@ static char *my_strerror PROTO ((int)); static void make_assertion PROTO ((cpp_reader *, char *, U_CHAR *)); static void path_include PROTO ((cpp_reader *, char *)); static void initialize_builtins PROTO ((cpp_reader *)); -static void initialize_char_syntax PROTO ((struct cpp_options *)); +static void initialize_char_syntax PROTO ((void)); #if 0 static void trigraph_pcp (); #endif @@ -339,11 +339,9 @@ U_CHAR is_hor_space[256] = { 0 }; /* table to tell if c is horizontal or vertical space. */ U_CHAR is_space[256] = { 0 }; -/* Initialize syntactic classifications of characters. */ - +/* Initialize syntactic classifications of characters. */ static void -initialize_char_syntax (opts) - struct cpp_options *opts; +initialize_char_syntax () { register int i; @@ -352,19 +350,20 @@ initialize_char_syntax (opts) * faster than saying (is_alpha (c) || c == '_'), etc. * Set up these things before calling any routines tthat * refer to them. + * XXX We should setlocale(LC_CTYPE, "C") here for safety. */ - for (i = 'a'; i <= 'z'; i++) { - is_idchar[i - 'a' + 'A'] = 1; - is_idchar[i] = 1; - is_idstart[i - 'a' + 'A'] = 1; - is_idstart[i] = 1; - } - for (i = '0'; i <= '9'; i++) - is_idchar[i] = 1; - is_idchar['_'] = 1; + for (i = 0; i < 256; i++) + { + is_idchar[i] = ISALNUM (i); + is_idstart[i] = ISALPHA (i); + } + + is_idchar['_'] = 1; is_idstart['_'] = 1; - is_idchar['$'] = opts->dollars_in_ident; - is_idstart['$'] = opts->dollars_in_ident; + + /* These will be reset later if -$ is in effect. */ + is_idchar['$'] = 1; + is_idstart['$'] = 1; /* horizontal space table */ is_hor_space[' '] = 1; @@ -595,9 +594,8 @@ cpp_options_init (opts) opts->in_fname = NULL; opts->out_fname = NULL; - /* Initialize is_idchar to allow $. */ opts->dollars_in_ident = 1; - initialize_char_syntax (opts); + initialize_char_syntax (); opts->no_line_commands = 0; opts->no_trigraphs = 1; @@ -4837,6 +4835,11 @@ cpp_start_read (pfile, fname) variable specifies other defaults. */ struct default_include *include_defaults = include_defaults_array; + /* Now that we know dollars_in_ident for real, + reset is_idchar/is_idstart. */ + is_idchar['$'] = opts->dollars_in_ident; + is_idstart['$'] = opts->dollars_in_ident; + /* Add dirs from CPATH after dirs from -I. */ /* There seems to be confusion about what CPATH should do, so for the moment it is not documented. */ @@ -4847,9 +4850,6 @@ cpp_start_read (pfile, fname) if (p != 0 && ! opts->no_standard_includes) path_include (pfile, p); - /* Now that dollars_in_ident is known, initialize is_idchar. */ - initialize_char_syntax (opts); - /* Do partial setup of input buffer for the sake of generating early #line directives (when -g is in effect). */ fp = cpp_push_buffer (pfile, NULL, 0); diff --git a/gcc/cpplib.h b/gcc/cpplib.h index 3cb275327de..65c286b7e18 100644 --- a/gcc/cpplib.h +++ b/gcc/cpplib.h @@ -156,13 +156,11 @@ typedef struct assertion_hashnode ASSERTION_HASHNODE; Applying cpp_get_token repeatedly yields a stream of pre-processor tokens. Usually, there is only one cpp_reader object active. */ -struct cpp_reader { +struct cpp_reader +{ parse_underflow_t get_token; cpp_buffer *buffer; - cpp_buffer buffer_stack[CPP_STACK_MAX]; - - int errors; /* Error counter for exit code */ - void *data; + cpp_options *opts; /* A buffer used for both for cpp_get_token's output, and also internally. */ unsigned char *token_buffer; @@ -171,6 +169,9 @@ struct cpp_reader { /* End of the written part of token_buffer. */ unsigned char *limit; + /* Error counter for exit code */ + int errors; + /* Line where a newline was first seen in a string constant. */ int multiline_string_line; @@ -247,6 +248,8 @@ struct cpp_reader { #ifdef __cplusplus ~cpp_reader () { cpp_cleanup (this); } #endif + + cpp_buffer buffer_stack[CPP_STACK_MAX]; }; #define CPP_FATAL_LIMIT 1000 @@ -288,14 +291,14 @@ struct cpp_reader { #define CPP_ADJUST_WRITTEN(PFILE,DELTA) ((PFILE)->limit += (DELTA)) #define CPP_SET_WRITTEN(PFILE,N) ((PFILE)->limit = (PFILE)->token_buffer + (N)) -#define CPP_OPTIONS(PFILE) ((cpp_options *) (PFILE)->data) +#define CPP_OPTIONS(PFILE) ((PFILE)->opts) #define CPP_BUFFER(PFILE) ((PFILE)->buffer) #define CPP_PREV_BUFFER(BUFFER) ((BUFFER)+1) /* The bottom of the buffer stack. */ #define CPP_NULL_BUFFER(PFILE) (&(PFILE)->buffer_stack[CPP_STACK_MAX]) -/* Pointed to by cpp_reader::data. */ +/* Pointed to by cpp_reader.opts. */ struct cpp_options { char *in_fname; diff --git a/gcc/cppmain.c b/gcc/cppmain.c index b39df34f055..7d11ca09d05 100644 --- a/gcc/cppmain.c +++ b/gcc/cppmain.c @@ -69,7 +69,7 @@ main (argc, argv) progname = p; cpp_reader_init (&parse_in); - parse_in.data = opts; + parse_in.opts = opts; cpp_options_init (opts); diff --git a/gcc/fix-header.c b/gcc/fix-header.c index 76ae479e0ae..ba169fa4306 100644 --- a/gcc/fix-header.c +++ b/gcc/fix-header.c @@ -632,7 +632,7 @@ read_scan_file (in_fname, argc, argv) obstack_init (&scan_file_obstack); cpp_reader_init (&scan_in); - scan_in.data = &scan_options; + scan_in.opts = &scan_options; cpp_options_init (&scan_options); i = cpp_handle_options (&scan_in, argc, argv); if (i < argc && ! CPP_FATAL_ERRORS (&scan_in)) diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index 332c93bb062..d064da3f5e7 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -694,7 +694,7 @@ lang_decode_option (argc, argv) if (! cpp_initialized) { cpp_reader_init (&parse_in); - parse_in.data = &parse_options; + parse_in.opts = &parse_options; cpp_options_init (&parse_options); cpp_initialized = 1; } |