cpplib.c (initialize_char_syntax): Use ISALPHA and ISALNUM so it'll work on non-ASCII...
authorZack Weinberg <zack@rabi.phys.columbia.edu>
Mon, 7 Dec 1998 14:15:29 +0000 (14:15 +0000)
committerDave Brolley <brolley@gcc.gnu.org>
Mon, 7 Dec 1998 14:15:29 +0000 (09:15 -0500)
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.

From-SVN: r24154

gcc/ChangeLog
gcc/c-decl.c
gcc/cpplib.c
gcc/cpplib.h
gcc/cppmain.c
gcc/fix-header.c
gcc/objc/objc-act.c

index f2f0aaf2bd6d28cc5651072b086d39775d3f45ef..098de32c649c59a77a7d78e8b32840c917dfe796 100644 (file)
@@ -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.
index c089836364246a98cd5e97ff1abf0311063f1375..f5e9573390247b62d55c230a5ad50c268a654c19 100644 (file)
@@ -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;
     }
index dbdf2f45c08320eaffd5d775ae04b810a3824239..8d408d0048c0bec743e26cdccd0aad7d815318a2 100644 (file)
@@ -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);
index 3cb275327ded9da86db515f2b65e3700114a6f59..65c286b7e182d52ca9862bff250684bf15775c17 100644 (file)
@@ -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;
 
index b39df34f055ea72a1d301f5dd4f20519f5bfcb12..7d11ca09d0556c7ec896369b43ab24df5ef0bb9a 100644 (file)
@@ -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);
   
index 76ae479e0ae67a6c08086990ae1abf8bcfd564e1..ba169fa430663a854b783edbb55d8587ef0edfa0 100644 (file)
@@ -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))
index 332c93bb06221fbffd4448e93de08979b6d8eada..d064da3f5e7a77d56104a964975f3ce4f616e5b6 100644 (file)
@@ -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;
     }