OSDN Git Service

Merge from pch-branch.
[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 #include "coretypes.h"
25 #include "tm.h"
26
27 #include "real.h"
28 #include "rtl.h"
29 #include "tree.h"
30 #include "expr.h"
31 #include "input.h"
32 #include "output.h"
33 #include "c-tree.h"
34 #include "c-common.h"
35 #include "flags.h"
36 #include "timevar.h"
37 #include "cpplib.h"
38 #include "c-pragma.h"
39 #include "toplev.h"
40 #include "intl.h"
41 #include "tm_p.h"
42 #include "splay-tree.h"
43 #include "debug.h"
44
45 #ifdef MULTIBYTE_CHARS
46 #include "mbchar.h"
47 #include <locale.h>
48 #endif /* MULTIBYTE_CHARS */
49
50 /* The current line map.  */
51 static const struct line_map *map;
52
53 /* The line used to refresh the lineno global variable after each token.  */
54 static unsigned int src_lineno;
55
56 /* We may keep statistics about how long which files took to compile.  */
57 static int header_time, body_time;
58 static splay_tree file_info_tree;
59
60 /* File used for outputting assembler code.  */
61 extern FILE *asm_out_file;
62
63 #undef WCHAR_TYPE_SIZE
64 #define WCHAR_TYPE_SIZE TYPE_PRECISION (wchar_type_node)
65
66 /* Number of bytes in a wide character.  */
67 #define WCHAR_BYTES (WCHAR_TYPE_SIZE / BITS_PER_UNIT)
68
69 int pending_lang_change; /* If we need to switch languages - C++ only */
70 int c_header_level;      /* depth in C headers - C++ only */
71
72 /* Nonzero tells yylex to ignore \ in string constants.  */
73 static int ignore_escape_flag;
74
75 static tree interpret_integer   PARAMS ((const cpp_token *, unsigned int));
76 static tree interpret_float     PARAMS ((const cpp_token *, unsigned int));
77 static enum integer_type_kind
78   narrowest_unsigned_type       PARAMS ((tree, unsigned int));
79 static enum integer_type_kind
80   narrowest_signed_type         PARAMS ((tree, unsigned int));
81 static tree lex_string          PARAMS ((const unsigned char *, unsigned int,
82                                          int));
83 static tree lex_charconst       PARAMS ((const cpp_token *));
84 static void update_header_times PARAMS ((const char *));
85 static int dump_one_header      PARAMS ((splay_tree_node, void *));
86 static void cb_line_change     PARAMS ((cpp_reader *, const cpp_token *, int));
87 static void cb_ident            PARAMS ((cpp_reader *, unsigned int,
88                                          const cpp_string *));
89 static void cb_file_change    PARAMS ((cpp_reader *, const struct line_map *));
90 static void cb_def_pragma       PARAMS ((cpp_reader *, unsigned int));
91 static void cb_define           PARAMS ((cpp_reader *, unsigned int,
92                                          cpp_hashnode *));
93 static void cb_undef            PARAMS ((cpp_reader *, unsigned int,
94                                          cpp_hashnode *));
95 \f
96 const char *
97 init_c_lex (filename)
98      const char *filename;
99 {
100   struct cpp_callbacks *cb;
101   struct c_fileinfo *toplevel;
102
103   /* Set up filename timing.  Must happen before cpp_read_main_file.  */
104   file_info_tree = splay_tree_new ((splay_tree_compare_fn)strcmp,
105                                    0,
106                                    (splay_tree_delete_value_fn)free);
107   toplevel = get_fileinfo ("<top level>");
108   if (flag_detailed_statistics)
109     {
110       header_time = 0;
111       body_time = get_run_time ();
112       toplevel->time = body_time;
113     }
114   
115 #ifdef MULTIBYTE_CHARS
116   /* Change to the native locale for multibyte conversions.  */
117   setlocale (LC_CTYPE, "");
118   GET_ENVIRONMENT (literal_codeset, "LANG");
119 #endif
120
121   cb = cpp_get_callbacks (parse_in);
122
123   cb->line_change = cb_line_change;
124   cb->ident = cb_ident;
125   cb->file_change = cb_file_change;
126   cb->def_pragma = cb_def_pragma;
127   cb->valid_pch = c_common_valid_pch;
128   cb->read_pch = c_common_read_pch;
129
130   /* Set the debug callbacks if we can use them.  */
131   if (debug_info_level == DINFO_LEVEL_VERBOSE
132       && (write_symbols == DWARF_DEBUG || write_symbols == DWARF2_DEBUG
133           || write_symbols == VMS_AND_DWARF2_DEBUG))
134     {
135       cb->define = cb_define;
136       cb->undef = cb_undef;
137     }
138
139   /* Start it at 0.  */
140   lineno = 0;
141
142   return cpp_read_main_file (parse_in, filename, ident_hash);
143 }
144
145 /* A thin wrapper around the real parser that initializes the 
146    integrated preprocessor after debug output has been initialized.
147    Also, make sure the start_source_file debug hook gets called for
148    the primary source file.  */
149
150 void
151 c_common_parse_file (set_yydebug)
152      int set_yydebug ATTRIBUTE_UNUSED;
153 {
154 #if YYDEBUG != 0
155   yydebug = set_yydebug;
156 #else
157   warning ("YYDEBUG not defined");
158 #endif
159
160   (*debug_hooks->start_source_file) (lineno, input_filename);
161   cpp_finish_options (parse_in);
162
163   pch_init();
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 ATTRIBUTE_UNUSED = 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 behavior; 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   real_from_string (&real, copy);
935   real_convert (&real, TYPE_MODE (type), &real);
936
937   /* A diagnostic is required for "soft" overflow by some ISO C
938      testsuites.  This is not pedwarn, because some people don't want
939      an error for this.
940      ??? That's a dubious reason... is this a mandatory diagnostic or
941      isn't it?   -- zw, 2001-08-21.  */
942   if (REAL_VALUE_ISINF (real) && pedantic)
943     warning ("floating constant exceeds range of \"%s\"", typename);
944
945   /* Create a node with determined type and value.  */
946   value = build_real (type, real);
947   if (flags & CPP_N_IMAGINARY)
948     value = build_complex (NULL_TREE, convert (type, integer_zero_node), value);
949
950   return value;
951 }
952
953 static tree
954 lex_string (str, len, wide)
955      const unsigned char *str;
956      unsigned int len;
957      int wide;
958 {
959   tree value;
960   char *buf = alloca ((len + 1) * (wide ? WCHAR_BYTES : 1));
961   char *q = buf;
962   const unsigned char *p = str, *limit = str + len;
963   cppchar_t c;
964
965 #ifdef MULTIBYTE_CHARS
966   /* Reset multibyte conversion state.  */
967   (void) local_mbtowc (NULL, NULL, 0);
968 #endif
969
970   while (p < limit)
971     {
972 #ifdef MULTIBYTE_CHARS
973       wchar_t wc;
974       int char_len;
975
976       char_len = local_mbtowc (&wc, (const char *) p, limit - p);
977       if (char_len == -1)
978         {
979           warning ("ignoring invalid multibyte character");
980           char_len = 1;
981           c = *p++;
982         }
983       else
984         {
985           p += char_len;
986           c = wc;
987         }
988 #else
989       c = *p++;
990 #endif
991
992       if (c == '\\' && !ignore_escape_flag)
993         c = cpp_parse_escape (parse_in, &p, limit, wide);
994         
995       /* Add this single character into the buffer either as a wchar_t,
996          a multibyte sequence, or as a single byte.  */
997       if (wide)
998         {
999           unsigned charwidth = TYPE_PRECISION (char_type_node);
1000           unsigned bytemask = (1 << charwidth) - 1;
1001           int byte;
1002
1003           for (byte = 0; byte < WCHAR_BYTES; ++byte)
1004             {
1005               int n;
1006               if (byte >= (int) sizeof (c))
1007                 n = 0;
1008               else
1009                 n = (c >> (byte * charwidth)) & bytemask;
1010               if (BYTES_BIG_ENDIAN)
1011                 q[WCHAR_BYTES - byte - 1] = n;
1012               else
1013                 q[byte] = n;
1014             }
1015           q += WCHAR_BYTES;
1016         }
1017 #ifdef MULTIBYTE_CHARS
1018       else if (char_len > 1)
1019         {
1020           /* We're dealing with a multibyte character.  */
1021           for ( ; char_len >0; --char_len)
1022             {
1023               *q++ = *(p - char_len);
1024             }
1025         }
1026 #endif
1027       else
1028         {
1029           *q++ = c;
1030         }
1031     }
1032
1033   /* Terminate the string value, either with a single byte zero
1034      or with a wide zero.  */
1035
1036   if (wide)
1037     {
1038       memset (q, 0, WCHAR_BYTES);
1039       q += WCHAR_BYTES;
1040     }
1041   else
1042     {
1043       *q++ = '\0';
1044     }
1045
1046   value = build_string (q - buf, buf);
1047
1048   if (wide)
1049     TREE_TYPE (value) = wchar_array_type_node;
1050   else
1051     TREE_TYPE (value) = char_array_type_node;
1052   return value;
1053 }
1054
1055 /* Converts a (possibly wide) character constant token into a tree.  */
1056 static tree
1057 lex_charconst (token)
1058      const cpp_token *token;
1059 {
1060   cppchar_t result;
1061   tree type, value;
1062   unsigned int chars_seen;
1063   int unsignedp;
1064
1065   result = cpp_interpret_charconst (parse_in, token,
1066                                     &chars_seen, &unsignedp);
1067
1068   /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
1069      before possibly widening to HOST_WIDE_INT for build_int_2.  */
1070   if (unsignedp || (cppchar_signed_t) result >= 0)
1071     value = build_int_2 (result, 0);
1072   else
1073     value = build_int_2 ((cppchar_signed_t) result, -1);
1074
1075   if (token->type == CPP_WCHAR)
1076     type = wchar_type_node;
1077   /* In C, a character constant has type 'int'.
1078      In C++ 'char', but multi-char charconsts have type 'int'.  */
1079   else if ((c_language == clk_c) || chars_seen > 1)
1080     type = integer_type_node;
1081   else
1082     type = char_type_node;
1083
1084   TREE_TYPE (value) = type;
1085   return value;
1086 }