OSDN Git Service

2002-07-21 Gabriel Dos Reis <gdr@nerim.net>
[pf3gnuchains/gcc-fork.git] / gcc / c-lex.c
1 /* Mainly the interface between cpplib and the C front ends.
2    Copyright (C) 1987, 1988, 1989, 1992, 1994, 1995, 1996, 1997
3    1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.  */
21
22 #include "config.h"
23 #include "system.h"
24
25 #include "real.h"
26 #include "rtl.h"
27 #include "tree.h"
28 #include "expr.h"
29 #include "input.h"
30 #include "output.h"
31 #include "c-tree.h"
32 #include "c-common.h"
33 #include "flags.h"
34 #include "timevar.h"
35 #include "cpplib.h"
36 #include "c-pragma.h"
37 #include "toplev.h"
38 #include "intl.h"
39 #include "tm_p.h"
40 #include "splay-tree.h"
41 #include "debug.h"
42
43 #ifdef MULTIBYTE_CHARS
44 #include "mbchar.h"
45 #include <locale.h>
46 #endif /* MULTIBYTE_CHARS */
47 #ifndef GET_ENVIRONMENT
48 #define GET_ENVIRONMENT(ENV_VALUE,ENV_NAME) ((ENV_VALUE) = getenv (ENV_NAME))
49 #endif
50
51 /* The current line map.  */
52 static const struct line_map *map;
53
54 /* The line used to refresh the lineno global variable after each token.  */
55 static unsigned int src_lineno;
56
57 /* We may keep statistics about how long which files took to compile.  */
58 static int header_time, body_time;
59 static splay_tree file_info_tree;
60
61 /* File used for outputting assembler code.  */
62 extern FILE *asm_out_file;
63
64 #undef WCHAR_TYPE_SIZE
65 #define WCHAR_TYPE_SIZE TYPE_PRECISION (wchar_type_node)
66
67 /* Number of bytes in a wide character.  */
68 #define WCHAR_BYTES (WCHAR_TYPE_SIZE / BITS_PER_UNIT)
69
70 int pending_lang_change; /* If we need to switch languages - C++ only */
71 int c_header_level;      /* depth in C headers - C++ only */
72
73 /* Nonzero tells yylex to ignore \ in string constants.  */
74 static int ignore_escape_flag;
75
76 static tree interpret_integer   PARAMS ((const cpp_token *, unsigned int));
77 static tree interpret_float     PARAMS ((const cpp_token *, unsigned int));
78 static enum integer_type_kind
79   narrowest_unsigned_type       PARAMS ((tree, unsigned int));
80 static enum integer_type_kind
81   narrowest_signed_type         PARAMS ((tree, unsigned int));
82 static tree lex_string          PARAMS ((const unsigned char *, unsigned int,
83                                          int));
84 static tree lex_charconst       PARAMS ((const cpp_token *));
85 static void update_header_times PARAMS ((const char *));
86 static int dump_one_header      PARAMS ((splay_tree_node, void *));
87 static void cb_line_change     PARAMS ((cpp_reader *, const cpp_token *, int));
88 static void cb_ident            PARAMS ((cpp_reader *, unsigned int,
89                                          const cpp_string *));
90 static void cb_file_change    PARAMS ((cpp_reader *, const struct line_map *));
91 static void cb_def_pragma       PARAMS ((cpp_reader *, unsigned int));
92 static void cb_define           PARAMS ((cpp_reader *, unsigned int,
93                                          cpp_hashnode *));
94 static void cb_undef            PARAMS ((cpp_reader *, unsigned int,
95                                          cpp_hashnode *));
96 \f
97 const char *
98 init_c_lex (filename)
99      const char *filename;
100 {
101   struct cpp_callbacks *cb;
102   struct c_fileinfo *toplevel;
103
104   /* Set up filename timing.  Must happen before cpp_read_main_file.  */
105   file_info_tree = splay_tree_new ((splay_tree_compare_fn)strcmp,
106                                    0,
107                                    (splay_tree_delete_value_fn)free);
108   toplevel = get_fileinfo ("<top level>");
109   if (flag_detailed_statistics)
110     {
111       header_time = 0;
112       body_time = get_run_time ();
113       toplevel->time = body_time;
114     }
115   
116 #ifdef MULTIBYTE_CHARS
117   /* Change to the native locale for multibyte conversions.  */
118   setlocale (LC_CTYPE, "");
119   GET_ENVIRONMENT (literal_codeset, "LANG");
120 #endif
121
122   cb = cpp_get_callbacks (parse_in);
123
124   cb->line_change = cb_line_change;
125   cb->ident = cb_ident;
126   cb->file_change = cb_file_change;
127   cb->def_pragma = cb_def_pragma;
128
129   /* Set the debug callbacks if we can use them.  */
130   if (debug_info_level == DINFO_LEVEL_VERBOSE
131       && (write_symbols == DWARF_DEBUG || write_symbols == DWARF2_DEBUG
132           || write_symbols == VMS_AND_DWARF2_DEBUG))
133     {
134       cb->define = cb_define;
135       cb->undef = cb_undef;
136     }
137
138   /* Start it at 0.  */
139   lineno = 0;
140
141   if (filename == NULL || !strcmp (filename, "-"))
142     filename = "";
143
144   return cpp_read_main_file (parse_in, filename, ident_hash);
145 }
146
147 /* A thin wrapper around the real parser that initializes the 
148    integrated preprocessor after debug output has been initialized.
149    Also, make sure the start_source_file debug hook gets called for
150    the primary source file.  */
151
152 void
153 c_common_parse_file (set_yydebug)
154      int set_yydebug ATTRIBUTE_UNUSED;
155 {
156 #if YYDEBUG != 0
157   yydebug = set_yydebug;
158 #else
159   warning ("YYDEBUG not defined");
160 #endif
161
162   (*debug_hooks->start_source_file) (lineno, input_filename);
163   cpp_finish_options (parse_in);
164
165   yyparse ();
166   free_parser_stacks ();
167 }
168
169 struct c_fileinfo *
170 get_fileinfo (name)
171      const char *name;
172 {
173   splay_tree_node n;
174   struct c_fileinfo *fi;
175
176   n = splay_tree_lookup (file_info_tree, (splay_tree_key) name);
177   if (n)
178     return (struct c_fileinfo *) n->value;
179
180   fi = (struct c_fileinfo *) xmalloc (sizeof (struct c_fileinfo));
181   fi->time = 0;
182   fi->interface_only = 0;
183   fi->interface_unknown = 1;
184   splay_tree_insert (file_info_tree, (splay_tree_key) name,
185                      (splay_tree_value) fi);
186   return fi;
187 }
188
189 static void
190 update_header_times (name)
191      const char *name;
192 {
193   /* Changing files again.  This means currently collected time
194      is charged against header time, and body time starts back at 0.  */
195   if (flag_detailed_statistics)
196     {
197       int this_time = get_run_time ();
198       struct c_fileinfo *file = get_fileinfo (name);
199       header_time += this_time - body_time;
200       file->time += this_time - body_time;
201       body_time = this_time;
202     }
203 }
204
205 static int
206 dump_one_header (n, dummy)
207      splay_tree_node n;
208      void *dummy ATTRIBUTE_UNUSED;
209 {
210   print_time ((const char *) n->key,
211               ((struct c_fileinfo *) n->value)->time);
212   return 0;
213 }
214
215 void
216 dump_time_statistics ()
217 {
218   struct c_fileinfo *file = get_fileinfo (input_filename);
219   int this_time = get_run_time ();
220   file->time += this_time - body_time;
221
222   fprintf (stderr, "\n******\n");
223   print_time ("header files (total)", header_time);
224   print_time ("main file (total)", this_time - body_time);
225   fprintf (stderr, "ratio = %g : 1\n",
226            (double)header_time / (double)(this_time - body_time));
227   fprintf (stderr, "\n******\n");
228
229   splay_tree_foreach (file_info_tree, dump_one_header, 0);
230 }
231
232 static void
233 cb_ident (pfile, line, str)
234      cpp_reader *pfile ATTRIBUTE_UNUSED;
235      unsigned int line ATTRIBUTE_UNUSED;
236      const cpp_string *str ATTRIBUTE_UNUSED;
237 {
238 #ifdef ASM_OUTPUT_IDENT
239   if (! flag_no_ident)
240     {
241       /* Convert escapes in the string.  */
242       tree value = lex_string (str->text, str->len, 0);
243       ASM_OUTPUT_IDENT (asm_out_file, TREE_STRING_POINTER (value));
244     }
245 #endif
246 }
247
248 /* Called at the start of every non-empty line.  TOKEN is the first
249    lexed token on the line.  Used for diagnostic line numbers.  */
250 static void
251 cb_line_change (pfile, token, parsing_args)
252      cpp_reader *pfile ATTRIBUTE_UNUSED;
253      const cpp_token *token;
254      int parsing_args ATTRIBUTE_UNUSED;
255 {
256   src_lineno = SOURCE_LINE (map, token->line);
257 }
258
259 static void
260 cb_file_change (pfile, new_map)
261      cpp_reader *pfile ATTRIBUTE_UNUSED;
262      const struct line_map *new_map;
263 {
264   unsigned int to_line = SOURCE_LINE (new_map, new_map->to_line);
265
266   if (new_map->reason == LC_ENTER)
267     {
268       /* Don't stack the main buffer on the input stack;
269          we already did in compile_file.  */
270       if (map == NULL)
271         main_input_filename = new_map->to_file;
272       else
273         {
274           int included_at = SOURCE_LINE (new_map - 1, new_map->from_line - 1);
275
276           lineno = included_at;
277           push_srcloc (new_map->to_file, 1);
278           (*debug_hooks->start_source_file) (included_at, new_map->to_file);
279 #ifndef NO_IMPLICIT_EXTERN_C
280           if (c_header_level)
281             ++c_header_level;
282           else if (new_map->sysp == 2)
283             {
284               c_header_level = 1;
285               ++pending_lang_change;
286             }
287 #endif
288         }
289     }
290   else if (new_map->reason == LC_LEAVE)
291     {
292 #ifndef NO_IMPLICIT_EXTERN_C
293       if (c_header_level && --c_header_level == 0)
294         {
295           if (new_map->sysp == 2)
296             warning ("badly nested C headers from preprocessor");
297           --pending_lang_change;
298         }
299 #endif
300       pop_srcloc ();
301       
302       (*debug_hooks->end_source_file) (to_line);
303     }
304
305   update_header_times (new_map->to_file);
306   in_system_header = new_map->sysp != 0;
307   input_filename = new_map->to_file;
308   lineno = to_line;
309   map = new_map;
310
311   /* Hook for C++.  */
312   extract_interface_info ();
313 }
314
315 static void
316 cb_def_pragma (pfile, line)
317      cpp_reader *pfile;
318      unsigned int line;
319 {
320   /* Issue a warning message if we have been asked to do so.  Ignore
321      unknown pragmas in system headers unless an explicit
322      -Wunknown-pragmas has been given.  */
323   if (warn_unknown_pragmas > in_system_header)
324     {
325       const unsigned char *space, *name;
326       const cpp_token *s;
327
328       space = name = (const unsigned char *) "";
329       s = cpp_get_token (pfile);
330       if (s->type != CPP_EOF)
331         {
332           space = cpp_token_as_text (pfile, s);
333           s = cpp_get_token (pfile);
334           if (s->type == CPP_NAME)
335             name = cpp_token_as_text (pfile, s);
336         }
337
338       lineno = SOURCE_LINE (map, line);
339       warning ("ignoring #pragma %s %s", space, name);
340     }
341 }
342
343 /* #define callback for DWARF and DWARF2 debug info.  */
344 static void
345 cb_define (pfile, line, node)
346      cpp_reader *pfile;
347      unsigned int line;
348      cpp_hashnode *node;
349 {
350   (*debug_hooks->define) (SOURCE_LINE (map, line),
351                           (const char *) cpp_macro_definition (pfile, node));
352 }
353
354 /* #undef callback for DWARF and DWARF2 debug info.  */
355 static void
356 cb_undef (pfile, line, node)
357      cpp_reader *pfile ATTRIBUTE_UNUSED;
358      unsigned int line;
359      cpp_hashnode *node;
360 {
361   (*debug_hooks->undef) (SOURCE_LINE (map, line),
362                          (const char *) NODE_NAME (node));
363 }
364
365 #if 0 /* not yet */
366 /* Returns nonzero if C is a universal-character-name.  Give an error if it
367    is not one which may appear in an identifier, as per [extendid].
368
369    Note that extended character support in identifiers has not yet been
370    implemented.  It is my personal opinion that this is not a desirable
371    feature.  Portable code cannot count on support for more than the basic
372    identifier character set.  */
373
374 static inline int
375 is_extended_char (c)
376      int c;
377 {
378 #ifdef TARGET_EBCDIC
379   return 0;
380 #else
381   /* ASCII.  */
382   if (c < 0x7f)
383     return 0;
384
385   /* None of the valid chars are outside the Basic Multilingual Plane (the
386      low 16 bits).  */
387   if (c > 0xffff)
388     {
389       error ("universal-character-name '\\U%08x' not valid in identifier", c);
390       return 1;
391     }
392   
393   /* Latin */
394   if ((c >= 0x00c0 && c <= 0x00d6)
395       || (c >= 0x00d8 && c <= 0x00f6)
396       || (c >= 0x00f8 && c <= 0x01f5)
397       || (c >= 0x01fa && c <= 0x0217)
398       || (c >= 0x0250 && c <= 0x02a8)
399       || (c >= 0x1e00 && c <= 0x1e9a)
400       || (c >= 0x1ea0 && c <= 0x1ef9))
401     return 1;
402
403   /* Greek */
404   if ((c == 0x0384)
405       || (c >= 0x0388 && c <= 0x038a)
406       || (c == 0x038c)
407       || (c >= 0x038e && c <= 0x03a1)
408       || (c >= 0x03a3 && c <= 0x03ce)
409       || (c >= 0x03d0 && c <= 0x03d6)
410       || (c == 0x03da)
411       || (c == 0x03dc)
412       || (c == 0x03de)
413       || (c == 0x03e0)
414       || (c >= 0x03e2 && c <= 0x03f3)
415       || (c >= 0x1f00 && c <= 0x1f15)
416       || (c >= 0x1f18 && c <= 0x1f1d)
417       || (c >= 0x1f20 && c <= 0x1f45)
418       || (c >= 0x1f48 && c <= 0x1f4d)
419       || (c >= 0x1f50 && c <= 0x1f57)
420       || (c == 0x1f59)
421       || (c == 0x1f5b)
422       || (c == 0x1f5d)
423       || (c >= 0x1f5f && c <= 0x1f7d)
424       || (c >= 0x1f80 && c <= 0x1fb4)
425       || (c >= 0x1fb6 && c <= 0x1fbc)
426       || (c >= 0x1fc2 && c <= 0x1fc4)
427       || (c >= 0x1fc6 && c <= 0x1fcc)
428       || (c >= 0x1fd0 && c <= 0x1fd3)
429       || (c >= 0x1fd6 && c <= 0x1fdb)
430       || (c >= 0x1fe0 && c <= 0x1fec)
431       || (c >= 0x1ff2 && c <= 0x1ff4)
432       || (c >= 0x1ff6 && c <= 0x1ffc))
433     return 1;
434
435   /* Cyrillic */
436   if ((c >= 0x0401 && c <= 0x040d)
437       || (c >= 0x040f && c <= 0x044f)
438       || (c >= 0x0451 && c <= 0x045c)
439       || (c >= 0x045e && c <= 0x0481)
440       || (c >= 0x0490 && c <= 0x04c4)
441       || (c >= 0x04c7 && c <= 0x04c8)
442       || (c >= 0x04cb && c <= 0x04cc)
443       || (c >= 0x04d0 && c <= 0x04eb)
444       || (c >= 0x04ee && c <= 0x04f5)
445       || (c >= 0x04f8 && c <= 0x04f9))
446     return 1;
447
448   /* Armenian */
449   if ((c >= 0x0531 && c <= 0x0556)
450       || (c >= 0x0561 && c <= 0x0587))
451     return 1;
452
453   /* Hebrew */
454   if ((c >= 0x05d0 && c <= 0x05ea)
455       || (c >= 0x05f0 && c <= 0x05f4))
456     return 1;
457
458   /* Arabic */
459   if ((c >= 0x0621 && c <= 0x063a)
460       || (c >= 0x0640 && c <= 0x0652)
461       || (c >= 0x0670 && c <= 0x06b7)
462       || (c >= 0x06ba && c <= 0x06be)
463       || (c >= 0x06c0 && c <= 0x06ce)
464       || (c >= 0x06e5 && c <= 0x06e7))
465     return 1;
466
467   /* Devanagari */
468   if ((c >= 0x0905 && c <= 0x0939)
469       || (c >= 0x0958 && c <= 0x0962))
470     return 1;
471
472   /* Bengali */
473   if ((c >= 0x0985 && c <= 0x098c)
474       || (c >= 0x098f && c <= 0x0990)
475       || (c >= 0x0993 && c <= 0x09a8)
476       || (c >= 0x09aa && c <= 0x09b0)
477       || (c == 0x09b2)
478       || (c >= 0x09b6 && c <= 0x09b9)
479       || (c >= 0x09dc && c <= 0x09dd)
480       || (c >= 0x09df && c <= 0x09e1)
481       || (c >= 0x09f0 && c <= 0x09f1))
482     return 1;
483
484   /* Gurmukhi */
485   if ((c >= 0x0a05 && c <= 0x0a0a)
486       || (c >= 0x0a0f && c <= 0x0a10)
487       || (c >= 0x0a13 && c <= 0x0a28)
488       || (c >= 0x0a2a && c <= 0x0a30)
489       || (c >= 0x0a32 && c <= 0x0a33)
490       || (c >= 0x0a35 && c <= 0x0a36)
491       || (c >= 0x0a38 && c <= 0x0a39)
492       || (c >= 0x0a59 && c <= 0x0a5c)
493       || (c == 0x0a5e))
494     return 1;
495
496   /* Gujarati */
497   if ((c >= 0x0a85 && c <= 0x0a8b)
498       || (c == 0x0a8d)
499       || (c >= 0x0a8f && c <= 0x0a91)
500       || (c >= 0x0a93 && c <= 0x0aa8)
501       || (c >= 0x0aaa && c <= 0x0ab0)
502       || (c >= 0x0ab2 && c <= 0x0ab3)
503       || (c >= 0x0ab5 && c <= 0x0ab9)
504       || (c == 0x0ae0))
505     return 1;
506
507   /* Oriya */
508   if ((c >= 0x0b05 && c <= 0x0b0c)
509       || (c >= 0x0b0f && c <= 0x0b10)
510       || (c >= 0x0b13 && c <= 0x0b28)
511       || (c >= 0x0b2a && c <= 0x0b30)
512       || (c >= 0x0b32 && c <= 0x0b33)
513       || (c >= 0x0b36 && c <= 0x0b39)
514       || (c >= 0x0b5c && c <= 0x0b5d)
515       || (c >= 0x0b5f && c <= 0x0b61))
516     return 1;
517
518   /* Tamil */
519   if ((c >= 0x0b85 && c <= 0x0b8a)
520       || (c >= 0x0b8e && c <= 0x0b90)
521       || (c >= 0x0b92 && c <= 0x0b95)
522       || (c >= 0x0b99 && c <= 0x0b9a)
523       || (c == 0x0b9c)
524       || (c >= 0x0b9e && c <= 0x0b9f)
525       || (c >= 0x0ba3 && c <= 0x0ba4)
526       || (c >= 0x0ba8 && c <= 0x0baa)
527       || (c >= 0x0bae && c <= 0x0bb5)
528       || (c >= 0x0bb7 && c <= 0x0bb9))
529     return 1;
530
531   /* Telugu */
532   if ((c >= 0x0c05 && c <= 0x0c0c)
533       || (c >= 0x0c0e && c <= 0x0c10)
534       || (c >= 0x0c12 && c <= 0x0c28)
535       || (c >= 0x0c2a && c <= 0x0c33)
536       || (c >= 0x0c35 && c <= 0x0c39)
537       || (c >= 0x0c60 && c <= 0x0c61))
538     return 1;
539
540   /* Kannada */
541   if ((c >= 0x0c85 && c <= 0x0c8c)
542       || (c >= 0x0c8e && c <= 0x0c90)
543       || (c >= 0x0c92 && c <= 0x0ca8)
544       || (c >= 0x0caa && c <= 0x0cb3)
545       || (c >= 0x0cb5 && c <= 0x0cb9)
546       || (c >= 0x0ce0 && c <= 0x0ce1))
547     return 1;
548
549   /* Malayalam */
550   if ((c >= 0x0d05 && c <= 0x0d0c)
551       || (c >= 0x0d0e && c <= 0x0d10)
552       || (c >= 0x0d12 && c <= 0x0d28)
553       || (c >= 0x0d2a && c <= 0x0d39)
554       || (c >= 0x0d60 && c <= 0x0d61))
555     return 1;
556
557   /* Thai */
558   if ((c >= 0x0e01 && c <= 0x0e30)
559       || (c >= 0x0e32 && c <= 0x0e33)
560       || (c >= 0x0e40 && c <= 0x0e46)
561       || (c >= 0x0e4f && c <= 0x0e5b))
562     return 1;
563
564   /* Lao */
565   if ((c >= 0x0e81 && c <= 0x0e82)
566       || (c == 0x0e84)
567       || (c == 0x0e87)
568       || (c == 0x0e88)
569       || (c == 0x0e8a)
570       || (c == 0x0e0d)
571       || (c >= 0x0e94 && c <= 0x0e97)
572       || (c >= 0x0e99 && c <= 0x0e9f)
573       || (c >= 0x0ea1 && c <= 0x0ea3)
574       || (c == 0x0ea5)
575       || (c == 0x0ea7)
576       || (c == 0x0eaa)
577       || (c == 0x0eab)
578       || (c >= 0x0ead && c <= 0x0eb0)
579       || (c == 0x0eb2)
580       || (c == 0x0eb3)
581       || (c == 0x0ebd)
582       || (c >= 0x0ec0 && c <= 0x0ec4)
583       || (c == 0x0ec6))
584     return 1;
585
586   /* Georgian */
587   if ((c >= 0x10a0 && c <= 0x10c5)
588       || (c >= 0x10d0 && c <= 0x10f6))
589     return 1;
590
591   /* Hiragana */
592   if ((c >= 0x3041 && c <= 0x3094)
593       || (c >= 0x309b && c <= 0x309e))
594     return 1;
595
596   /* Katakana */
597   if ((c >= 0x30a1 && c <= 0x30fe))
598     return 1;
599
600   /* Bopmofo */
601   if ((c >= 0x3105 && c <= 0x312c))
602     return 1;
603
604   /* Hangul */
605   if ((c >= 0x1100 && c <= 0x1159)
606       || (c >= 0x1161 && c <= 0x11a2)
607       || (c >= 0x11a8 && c <= 0x11f9))
608     return 1;
609
610   /* CJK Unified Ideographs */
611   if ((c >= 0xf900 && c <= 0xfa2d)
612       || (c >= 0xfb1f && c <= 0xfb36)
613       || (c >= 0xfb38 && c <= 0xfb3c)
614       || (c == 0xfb3e)
615       || (c >= 0xfb40 && c <= 0xfb41)
616       || (c >= 0xfb42 && c <= 0xfb44)
617       || (c >= 0xfb46 && c <= 0xfbb1)
618       || (c >= 0xfbd3 && c <= 0xfd3f)
619       || (c >= 0xfd50 && c <= 0xfd8f)
620       || (c >= 0xfd92 && c <= 0xfdc7)
621       || (c >= 0xfdf0 && c <= 0xfdfb)
622       || (c >= 0xfe70 && c <= 0xfe72)
623       || (c == 0xfe74)
624       || (c >= 0xfe76 && c <= 0xfefc)
625       || (c >= 0xff21 && c <= 0xff3a)
626       || (c >= 0xff41 && c <= 0xff5a)
627       || (c >= 0xff66 && c <= 0xffbe)
628       || (c >= 0xffc2 && c <= 0xffc7)
629       || (c >= 0xffca && c <= 0xffcf)
630       || (c >= 0xffd2 && c <= 0xffd7)
631       || (c >= 0xffda && c <= 0xffdc)
632       || (c >= 0x4e00 && c <= 0x9fa5))
633     return 1;
634
635   error ("universal-character-name '\\u%04x' not valid in identifier", c);
636   return 1;
637 #endif
638 }
639
640 /* Add the UTF-8 representation of C to the token_buffer.  */
641
642 static void
643 utf8_extend_token (c)
644      int c;
645 {
646   int shift, mask;
647
648   if      (c <= 0x0000007f)
649     {
650       extend_token (c);
651       return;
652     }
653   else if (c <= 0x000007ff)
654     shift = 6, mask = 0xc0;
655   else if (c <= 0x0000ffff)
656     shift = 12, mask = 0xe0;
657   else if (c <= 0x001fffff)
658     shift = 18, mask = 0xf0;
659   else if (c <= 0x03ffffff)
660     shift = 24, mask = 0xf8;
661   else
662     shift = 30, mask = 0xfc;
663
664   extend_token (mask | (c >> shift));
665   do
666     {
667       shift -= 6;
668       extend_token ((unsigned char) (0x80 | (c >> shift)));
669     }
670   while (shift);
671 }
672 #endif
673 \f
674 int
675 c_lex (value)
676      tree *value;
677 {
678   const cpp_token *tok;
679
680   retry:
681   timevar_push (TV_CPP);
682   do
683     tok = cpp_get_token (parse_in);
684   while (tok->type == CPP_PADDING);
685   timevar_pop (TV_CPP);
686
687   /* The C++ front end does horrible things with the current line
688      number.  To ensure an accurate line number, we must reset it
689      every time we return a token.  */
690   lineno = src_lineno;
691
692   *value = NULL_TREE;
693   switch (tok->type)
694     {
695     /* Issue this error here, where we can get at tok->val.c.  */
696     case CPP_OTHER:
697       if (ISGRAPH (tok->val.c))
698         error ("stray '%c' in program", tok->val.c);
699       else
700         error ("stray '\\%o' in program", tok->val.c);
701       goto retry;
702       
703     case CPP_NAME:
704       *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node));
705       break;
706
707     case CPP_NUMBER:
708       {
709         unsigned int flags = cpp_classify_number (parse_in, tok);
710
711         switch (flags & CPP_N_CATEGORY)
712           {
713           case CPP_N_INVALID:
714             /* cpplib has issued an error.  */
715             break;
716
717           case CPP_N_INTEGER:
718             *value = interpret_integer (tok, flags);
719             break;
720
721           case CPP_N_FLOATING:
722             *value = interpret_float (tok, flags);
723             break;
724
725           default:
726             abort ();
727           }
728       }
729       break;
730
731     case CPP_CHAR:
732     case CPP_WCHAR:
733       *value = lex_charconst (tok);
734       break;
735
736     case CPP_STRING:
737     case CPP_WSTRING:
738       *value = lex_string (tok->val.str.text, tok->val.str.len,
739                            tok->type == CPP_WSTRING);
740       break;
741
742       /* These tokens should not be visible outside cpplib.  */
743     case CPP_HEADER_NAME:
744     case CPP_COMMENT:
745     case CPP_MACRO_ARG:
746       abort ();
747
748     default: break;
749     }
750
751   return tok->type;
752 }
753
754 /* Returns the narrowest C-visible unsigned type, starting with the
755    minimum specified by FLAGS, that can fit VALUE, or itk_none if
756    there isn't one.  */
757 static enum integer_type_kind
758 narrowest_unsigned_type (value, flags)
759      tree value;
760      unsigned int flags;
761 {
762   enum integer_type_kind itk;
763
764   if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
765     itk = itk_unsigned_int;
766   else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
767     itk = itk_unsigned_long;
768   else
769     itk = itk_unsigned_long_long;
770
771   /* int_fits_type_p must think the type of its first argument is
772      wider than its second argument, or it won't do the proper check.  */
773   TREE_TYPE (value) = widest_unsigned_literal_type_node;
774
775   for (; itk < itk_none; itk += 2 /* skip unsigned types */)
776     if (int_fits_type_p (value, integer_types[itk]))
777       return itk;
778
779   return itk_none;
780 }
781
782 /* Ditto, but narrowest signed type.  */
783 static enum integer_type_kind
784 narrowest_signed_type (value, flags)
785      tree value;
786      unsigned int flags;
787 {
788   enum integer_type_kind itk;
789
790   if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
791     itk = itk_int;
792   else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
793     itk = itk_long;
794   else
795     itk = itk_long_long;
796
797   /* int_fits_type_p must think the type of its first argument is
798      wider than its second argument, or it won't do the proper check.  */
799   TREE_TYPE (value) = widest_unsigned_literal_type_node;
800
801   for (; itk < itk_none; itk += 2 /* skip signed types */)
802     if (int_fits_type_p (value, integer_types[itk]))
803       return itk;
804
805   return itk_none;
806 }
807
808 /* Interpret TOKEN, an integer with FLAGS as classified by cpplib.  */
809 static tree
810 interpret_integer (token, flags)
811      const cpp_token *token;
812      unsigned int flags;
813 {
814   tree value, type;
815   enum integer_type_kind itk;
816   cpp_num integer;
817   cpp_options *options = cpp_get_options (parse_in);
818
819   integer = cpp_interpret_integer (parse_in, token, flags);
820   integer = cpp_num_sign_extend (integer, options->precision);
821   value = build_int_2_wide (integer.low, integer.high);
822
823   /* The type of a constant with a U suffix is straightforward.  */
824   if (flags & CPP_N_UNSIGNED)
825     itk = narrowest_unsigned_type (value, flags);
826   else
827     {
828       /* The type of a potentially-signed integer constant varies
829          depending on the base it's in, the standard in use, and the
830          length suffixes.  */
831       enum integer_type_kind itk_u = narrowest_unsigned_type (value, flags);
832       enum integer_type_kind itk_s = narrowest_signed_type (value, flags);
833
834       /* In both C89 and C99, octal and hex constants may be signed or
835          unsigned, whichever fits tighter.  We do not warn about this
836          choice differing from the traditional choice, as the constant
837          is probably a bit pattern and either way will work.  */
838       if ((flags & CPP_N_RADIX) != CPP_N_DECIMAL)
839         itk = MIN (itk_u, itk_s);
840       else
841         {
842           /* In C99, decimal constants are always signed.
843              In C89, decimal constants that don't fit in long have
844              undefined behaviour; we try to make them unsigned long.
845              In GCC's extended C89, that last is true of decimal
846              constants that don't fit in long long, too.  */
847
848           itk = itk_s;
849           if (itk_s > itk_u && itk_s > itk_long)
850             {
851               if (!flag_isoc99)
852                 {
853                   if (itk_u < itk_unsigned_long)
854                     itk_u = itk_unsigned_long;
855                   itk = itk_u;
856                   warning ("this decimal constant is unsigned only in ISO C90");
857                 }
858               else if (warn_traditional)
859                 warning ("this decimal constant would be unsigned in ISO C90");
860             }
861         }
862     }
863
864   if (itk == itk_none)
865     /* cpplib has already issued a warning for overflow.  */
866     type = ((flags & CPP_N_UNSIGNED)
867             ? widest_unsigned_literal_type_node
868             : widest_integer_literal_type_node);
869   else
870     type = integer_types[itk];
871
872   if (itk > itk_unsigned_long
873       && (flags & CPP_N_WIDTH) != CPP_N_LARGE
874       && ! in_system_header && ! flag_isoc99)
875     pedwarn ("integer constant is too large for \"%s\" type",
876              (flags & CPP_N_UNSIGNED) ? "unsigned long" : "long");
877
878   TREE_TYPE (value) = type;
879
880   /* Convert imaginary to a complex type.  */
881   if (flags & CPP_N_IMAGINARY)
882     value = build_complex (NULL_TREE, convert (type, integer_zero_node), value);
883
884   return value;
885 }
886
887 /* Interpret TOKEN, a floating point number with FLAGS as classified
888    by cpplib.  */
889 static tree
890 interpret_float (token, flags)
891      const cpp_token *token;
892      unsigned int flags;
893 {
894   tree type;
895   tree value;
896   REAL_VALUE_TYPE real;
897   char *copy;
898   size_t copylen;
899   const char *typename;
900
901   /* FIXME: make %T work in error/warning, then we don't need typename.  */
902   if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
903     {
904       type = long_double_type_node;
905       typename = "long double";
906     }
907   else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL
908            || flag_single_precision_constant)
909     {
910       type = float_type_node;
911       typename = "float";
912     }
913   else
914     {
915       type = double_type_node;
916       typename = "double";
917     }
918
919   /* Copy the constant to a nul-terminated buffer.  If the constant
920      has any suffixes, cut them off; REAL_VALUE_ATOF/ REAL_VALUE_HTOF
921      can't handle them.  */
922   copylen = token->val.str.len;
923   if ((flags & CPP_N_WIDTH) != CPP_N_MEDIUM)
924     /* Must be an F or L suffix.  */
925     copylen--;
926   if (flags & CPP_N_IMAGINARY)
927     /* I or J suffix.  */
928     copylen--;
929
930   copy = alloca (copylen + 1);
931   memcpy (copy, token->val.str.text, copylen);
932   copy[copylen] = '\0';
933
934   /* The second argument, machine_mode, of REAL_VALUE_ATOF tells the
935      desired precision of the binary result of decimal-to-binary
936      conversion.  */
937   if (flags & CPP_N_HEX)
938     real = REAL_VALUE_HTOF (copy, TYPE_MODE (type));
939   else
940     real = REAL_VALUE_ATOF (copy, TYPE_MODE (type));
941
942   /* A diagnostic is required for "soft" overflow by some ISO C
943      testsuites.  This is not pedwarn, because some people don't want
944      an error for this.
945      ??? That's a dubious reason... is this a mandatory diagnostic or
946      isn't it?   -- zw, 2001-08-21.  */
947   if (REAL_VALUE_ISINF (real) && pedantic)
948     warning ("floating constant exceeds range of \"%s\"", typename);
949
950   /* Create a node with determined type and value.  */
951   value = build_real (type, real);
952   if (flags & CPP_N_IMAGINARY)
953     value = build_complex (NULL_TREE, convert (type, integer_zero_node), value);
954
955   return value;
956 }
957
958 static tree
959 lex_string (str, len, wide)
960      const unsigned char *str;
961      unsigned int len;
962      int wide;
963 {
964   tree value;
965   char *buf = alloca ((len + 1) * (wide ? WCHAR_BYTES : 1));
966   char *q = buf;
967   const unsigned char *p = str, *limit = str + len;
968   cppchar_t c;
969
970 #ifdef MULTIBYTE_CHARS
971   /* Reset multibyte conversion state.  */
972   (void) local_mbtowc (NULL, NULL, 0);
973 #endif
974
975   while (p < limit)
976     {
977 #ifdef MULTIBYTE_CHARS
978       wchar_t wc;
979       int char_len;
980
981       char_len = local_mbtowc (&wc, (const char *) p, limit - p);
982       if (char_len == -1)
983         {
984           warning ("ignoring invalid multibyte character");
985           char_len = 1;
986           c = *p++;
987         }
988       else
989         {
990           p += char_len;
991           c = wc;
992         }
993 #else
994       c = *p++;
995 #endif
996
997       if (c == '\\' && !ignore_escape_flag)
998         c = cpp_parse_escape (parse_in, &p, limit, wide);
999         
1000       /* Add this single character into the buffer either as a wchar_t,
1001          a multibyte sequence, or as a single byte.  */
1002       if (wide)
1003         {
1004           unsigned charwidth = TYPE_PRECISION (char_type_node);
1005           unsigned bytemask = (1 << charwidth) - 1;
1006           int byte;
1007
1008           for (byte = 0; byte < WCHAR_BYTES; ++byte)
1009             {
1010               int n;
1011               if (byte >= (int) sizeof (c))
1012                 n = 0;
1013               else
1014                 n = (c >> (byte * charwidth)) & bytemask;
1015               if (BYTES_BIG_ENDIAN)
1016                 q[WCHAR_BYTES - byte - 1] = n;
1017               else
1018                 q[byte] = n;
1019             }
1020           q += WCHAR_BYTES;
1021         }
1022 #ifdef MULTIBYTE_CHARS
1023       else if (char_len > 1)
1024         {
1025           /* We're dealing with a multibyte character. */
1026           for ( ; char_len >0; --char_len)
1027             {
1028               *q++ = *(p - char_len);
1029             }
1030         }
1031 #endif
1032       else
1033         {
1034           *q++ = c;
1035         }
1036     }
1037
1038   /* Terminate the string value, either with a single byte zero
1039      or with a wide zero.  */
1040
1041   if (wide)
1042     {
1043       memset (q, 0, WCHAR_BYTES);
1044       q += WCHAR_BYTES;
1045     }
1046   else
1047     {
1048       *q++ = '\0';
1049     }
1050
1051   value = build_string (q - buf, buf);
1052
1053   if (wide)
1054     TREE_TYPE (value) = wchar_array_type_node;
1055   else
1056     TREE_TYPE (value) = char_array_type_node;
1057   return value;
1058 }
1059
1060 /* Converts a (possibly wide) character constant token into a tree.  */
1061 static tree
1062 lex_charconst (token)
1063      const cpp_token *token;
1064 {
1065   cppchar_t result;
1066   tree type, value;
1067   unsigned int chars_seen;
1068   int unsignedp;
1069
1070   result = cpp_interpret_charconst (parse_in, token,
1071                                     &chars_seen, &unsignedp);
1072
1073   /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
1074      before possibly widening to HOST_WIDE_INT for build_int_2.  */
1075   if (unsignedp || (cppchar_signed_t) result >= 0)
1076     value = build_int_2 (result, 0);
1077   else
1078     value = build_int_2 ((cppchar_signed_t) result, -1);
1079
1080   if (token->type == CPP_WCHAR)
1081     type = wchar_type_node;
1082   /* In C, a character constant has type 'int'.
1083      In C++ 'char', but multi-char charconsts have type 'int'.  */
1084   else if ((c_language == clk_c || c_language == clk_objective_c)
1085            || chars_seen > 1)
1086     type = integer_type_node;
1087   else
1088     type = char_type_node;
1089
1090   TREE_TYPE (value) = type;
1091   return value;
1092 }