OSDN Git Service

* unwind-dw2-fde.c (__deregister_frame_info): Stringize use
[pf3gnuchains/gcc-fork.git] / gcc / c-lex.c
1 /* Lexical analyzer for C and Objective C.
2    Copyright (C) 1987, 1988, 1989, 1992, 1994, 1995, 1996, 1997
3    1998, 1999, 2000 Free Software Foundation, Inc.
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22 #include "config.h"
23 #include "system.h"
24
25 #include "rtl.h"
26 #include "expr.h"
27 #include "tree.h"
28 #include "input.h"
29 #include "output.h"
30 #include "c-lex.h"
31 #include "c-tree.h"
32 #include "flags.h"
33 #include "timevar.h"
34 #include "cpplib.h"
35 #include "c-pragma.h"
36 #include "toplev.h"
37 #include "intl.h"
38 #include "tm_p.h"
39 #include "splay-tree.h"
40
41 /* MULTIBYTE_CHARS support only works for native compilers.
42    ??? Ideally what we want is to model widechar support after
43    the current floating point support.  */
44 #ifdef CROSS_COMPILE
45 #undef MULTIBYTE_CHARS
46 #endif
47
48 #ifdef MULTIBYTE_CHARS
49 #include "mbchar.h"
50 #include <locale.h>
51 #endif /* MULTIBYTE_CHARS */
52 #ifndef GET_ENVIRONMENT
53 #define GET_ENVIRONMENT(ENV_VALUE,ENV_NAME) ((ENV_VALUE) = getenv (ENV_NAME))
54 #endif
55
56 /* The input filename as understood by CPP, where "" represents stdin.  */
57 static const char *cpp_filename;
58
59 /* We may keep statistics about how long which files took to compile.  */
60 static int header_time, body_time;
61 static splay_tree file_info_tree;
62
63 /* Cause the `yydebug' variable to be defined.  */
64 #define YYDEBUG 1
65
66 /* File used for outputting assembler code.  */
67 extern FILE *asm_out_file;
68
69 #undef WCHAR_TYPE_SIZE
70 #define WCHAR_TYPE_SIZE TYPE_PRECISION (wchar_type_node)
71
72 /* Number of bytes in a wide character.  */
73 #define WCHAR_BYTES (WCHAR_TYPE_SIZE / BITS_PER_UNIT)
74
75 int indent_level;        /* Number of { minus number of }. */
76 int pending_lang_change; /* If we need to switch languages - C++ only */
77 int c_header_level;      /* depth in C headers - C++ only */
78
79 /* Nonzero tells yylex to ignore \ in string constants.  */
80 static int ignore_escape_flag;
81
82 static const char *readescape   PARAMS ((const char *, const char *,
83                                          unsigned int *));
84 static const char *read_ucs     PARAMS ((const char *, const char *,
85                                          unsigned int *, int));
86 static void parse_float         PARAMS ((PTR));
87 static tree lex_number          PARAMS ((const char *, unsigned int));
88 static tree lex_string          PARAMS ((const char *, unsigned int, int));
89 static tree lex_charconst       PARAMS ((const cpp_token *));
90 static void update_header_times PARAMS ((const char *));
91 static int dump_one_header      PARAMS ((splay_tree_node, void *));
92 static void cb_ident            PARAMS ((cpp_reader *, const cpp_string *));
93 static void cb_file_change    PARAMS ((cpp_reader *, const cpp_file_change *));
94 static void cb_def_pragma       PARAMS ((cpp_reader *));
95 static void cb_define           PARAMS ((cpp_reader *, cpp_hashnode *));
96 static void cb_undef            PARAMS ((cpp_reader *, cpp_hashnode *));
97 \f
98 const char *
99 init_c_lex (filename)
100      const char *filename;
101 {
102   struct cpp_callbacks *cb;
103   struct c_fileinfo *toplevel;
104
105   /* Set up filename timing.  Must happen before cpp_start_read.  */
106   file_info_tree = splay_tree_new ((splay_tree_compare_fn)strcmp,
107                                    0,
108                                    (splay_tree_delete_value_fn)free);
109   toplevel = get_fileinfo ("<top level>");
110   if (flag_detailed_statistics)
111     {
112       header_time = 0;
113       body_time = get_run_time ();
114       toplevel->time = body_time;
115     }
116   
117 #ifdef MULTIBYTE_CHARS
118   /* Change to the native locale for multibyte conversions.  */
119   setlocale (LC_CTYPE, "");
120   GET_ENVIRONMENT (literal_codeset, "LANG");
121 #endif
122
123   cb = cpp_get_callbacks (parse_in);
124
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     {
133       cb->define = cb_define;
134       cb->undef = cb_undef;
135     }
136
137
138   if (filename == 0 || !strcmp (filename, "-"))
139     filename = "stdin", cpp_filename = "";
140   else
141     cpp_filename = filename;
142
143   /* Start it at 0.  */
144   lineno = 0;
145
146   return filename;
147 }
148
149 /* A thin wrapper around the real parser that initializes the 
150    integrated preprocessor after debug output has been initialized.  */
151
152 int
153 yyparse()
154 {
155   if (! cpp_start_read (parse_in, cpp_filename))
156     return 1;                   /* cpplib has emitted an error.  */
157
158   return yyparse_1();
159 }
160
161 struct c_fileinfo *
162 get_fileinfo (name)
163      const char *name;
164 {
165   splay_tree_node n;
166   struct c_fileinfo *fi;
167
168   n = splay_tree_lookup (file_info_tree, (splay_tree_key) name);
169   if (n)
170     return (struct c_fileinfo *) n->value;
171
172   fi = (struct c_fileinfo *) xmalloc (sizeof (struct c_fileinfo));
173   fi->time = 0;
174   fi->interface_only = 0;
175   fi->interface_unknown = 1;
176   splay_tree_insert (file_info_tree, (splay_tree_key) name,
177                      (splay_tree_value) fi);
178   return fi;
179 }
180
181 static void
182 update_header_times (name)
183      const char *name;
184 {
185   /* Changing files again.  This means currently collected time
186      is charged against header time, and body time starts back at 0.  */
187   if (flag_detailed_statistics)
188     {
189       int this_time = get_run_time ();
190       struct c_fileinfo *file = get_fileinfo (name);
191       header_time += this_time - body_time;
192       file->time += this_time - body_time;
193       body_time = this_time;
194     }
195 }
196
197 static int
198 dump_one_header (n, dummy)
199      splay_tree_node n;
200      void *dummy ATTRIBUTE_UNUSED;
201 {
202   print_time ((const char *) n->key,
203               ((struct c_fileinfo *) n->value)->time);
204   return 0;
205 }
206
207 void
208 dump_time_statistics ()
209 {
210   struct c_fileinfo *file = get_fileinfo (input_filename);
211   int this_time = get_run_time ();
212   file->time += this_time - body_time;
213
214   fprintf (stderr, "\n******\n");
215   print_time ("header files (total)", header_time);
216   print_time ("main file (total)", this_time - body_time);
217   fprintf (stderr, "ratio = %g : 1\n",
218            (double)header_time / (double)(this_time - body_time));
219   fprintf (stderr, "\n******\n");
220
221   splay_tree_foreach (file_info_tree, dump_one_header, 0);
222 }
223
224 /* Not yet handled: #pragma, #define, #undef.
225    No need to deal with linemarkers under normal conditions.  */
226
227 static void
228 cb_ident (pfile, str)
229      cpp_reader *pfile ATTRIBUTE_UNUSED;
230      const cpp_string *str ATTRIBUTE_UNUSED;
231 {
232 #ifdef ASM_OUTPUT_IDENT
233   if (! flag_no_ident)
234     {
235       /* Convert escapes in the string.  */
236       tree value = lex_string ((const char *)str->text, str->len, 0);
237       ASM_OUTPUT_IDENT (asm_out_file, TREE_STRING_POINTER (value));
238     }
239 #endif
240 }
241
242 static void
243 cb_file_change (pfile, fc)
244      cpp_reader *pfile ATTRIBUTE_UNUSED;
245      const cpp_file_change *fc;
246 {
247   if (fc->reason == FC_ENTER)
248     {
249       /* Don't stack the main buffer on the input stack;
250          we already did in compile_file.  */
251       if (fc->from.filename)
252         {
253           lineno = fc->from.lineno;
254           push_srcloc (fc->to.filename, 1);
255           input_file_stack->indent_level = indent_level;
256           debug_start_source_file (fc->to.filename);
257 #ifndef NO_IMPLICIT_EXTERN_C
258           if (c_header_level)
259             ++c_header_level;
260           else if (fc->externc)
261             {
262               c_header_level = 1;
263               ++pending_lang_change;
264             }
265 #endif
266         }
267       else
268         main_input_filename = fc->to.filename;
269     }
270   else if (fc->reason == FC_LEAVE)
271     {
272       /* Popping out of a file.  */
273       if (input_file_stack->next)
274         {
275 #ifndef NO_IMPLICIT_EXTERN_C
276           if (c_header_level && --c_header_level == 0)
277             {
278               if (fc->externc)
279                 warning ("badly nested C headers from preprocessor");
280               --pending_lang_change;
281             }
282 #endif
283 #if 0
284           if (indent_level != input_file_stack->indent_level)
285             {
286               warning_with_file_and_line
287                 (input_filename, lineno,
288                  "This file contains more '%c's than '%c's.",
289                  indent_level > input_file_stack->indent_level ? '{' : '}',
290                  indent_level > input_file_stack->indent_level ? '}' : '{');
291             }
292 #endif
293           pop_srcloc ();
294           debug_end_source_file (input_file_stack->line);
295         }
296       else
297         error ("leaving more files than we entered");
298     }
299
300   update_header_times (fc->to.filename);
301   in_system_header = fc->sysp != 0;
302   input_filename = fc->to.filename;
303   lineno = fc->to.lineno;       /* Do we need this?  */
304
305   /* Hook for C++.  */
306   extract_interface_info ();
307 }
308
309 static void
310 cb_def_pragma (pfile)
311      cpp_reader *pfile;
312 {
313   /* Issue a warning message if we have been asked to do so.  Ignore
314      unknown pragmas in system headers unless an explicit
315      -Wunknown-pragmas has been given. */
316   if (warn_unknown_pragmas > in_system_header)
317     {
318       const unsigned char *space, *name = 0;
319       cpp_token s;
320
321       cpp_get_token (pfile, &s);
322       space = cpp_token_as_text (pfile, &s);
323       cpp_get_token (pfile, &s);
324       if (s.type == CPP_NAME)
325         name = cpp_token_as_text (pfile, &s);
326
327       lineno = cpp_get_line (parse_in)->line;
328       if (name)
329         warning ("ignoring #pragma %s %s", space, name);
330       else
331         warning ("ignoring #pragma %s", space);
332     }
333 }
334
335 /* #define callback for DWARF and DWARF2 debug info.  */
336 static void
337 cb_define (pfile, node)
338      cpp_reader *pfile;
339      cpp_hashnode *node;
340 {
341   debug_define (lineno, (const char *) cpp_macro_definition (pfile, node));
342 }
343
344 /* #undef callback for DWARF and DWARF2 debug info.  */
345 static void
346 cb_undef (pfile, node)
347      cpp_reader *pfile ATTRIBUTE_UNUSED;
348      cpp_hashnode *node;
349 {
350   debug_undef (lineno, (const char *) NODE_NAME (node));
351 }
352
353 /* Parse a '\uNNNN' or '\UNNNNNNNN' sequence.
354
355    [lex.charset]: The character designated by the universal-character-name 
356    \UNNNNNNNN is that character whose character short name in ISO/IEC 10646
357    is NNNNNNNN; the character designated by the universal-character-name
358    \uNNNN is that character whose character short name in ISO/IEC 10646 is
359    0000NNNN. If the hexadecimal value for a universal character name is
360    less than 0x20 or in the range 0x7F-0x9F (inclusive), or if the
361    universal character name designates a character in the basic source
362    character set, then the program is ill-formed.
363
364    We assume that wchar_t is Unicode, so we don't need to do any
365    mapping.  Is this ever wrong?  */
366
367 static const char *
368 read_ucs (p, limit, cptr, length)
369      const char *p;
370      const char *limit;
371      unsigned int *cptr;
372      int length;
373 {
374   unsigned int code = 0;
375   int c;
376
377   for (; length; --length)
378     {
379       if (p >= limit)
380         {
381           error ("incomplete universal-character-name");
382           break;
383         }
384
385       c = *p++;
386       if (! ISXDIGIT (c))
387         {
388           error ("non hex digit '%c' in universal-character-name", c);
389           p--;
390           break;
391         }
392
393       code <<= 4;
394       if (c >= 'a' && c <= 'f')
395         code += c - 'a' + 10;
396       if (c >= 'A' && c <= 'F')
397         code += c - 'A' + 10;
398       if (c >= '0' && c <= '9')
399         code += c - '0';
400     }
401
402 #ifdef TARGET_EBCDIC
403   sorry ("universal-character-name on EBCDIC target");
404   *cptr = 0x3f;  /* EBCDIC invalid character */
405   return p;
406 #endif
407
408   if (code > 0x9f && !(code & 0x80000000))
409     /* True extended character, OK.  */;
410   else if (code >= 0x20 && code < 0x7f)
411     {
412       /* ASCII printable character.  The C character set consists of all of
413          these except $, @ and `.  We use hex escapes so that this also
414          works with EBCDIC hosts.  */
415       if (code != 0x24 && code != 0x40 && code != 0x60)
416         error ("universal-character-name used for '%c'", code);
417     }
418   else
419     error ("invalid universal-character-name");
420
421   *cptr = code;
422   return p;
423 }
424
425 /* Read an escape sequence and write its character equivalent into *CPTR.
426    P is the input pointer, which is just after the backslash.  LIMIT
427    is how much text we have.
428    Returns the updated input pointer.  */
429
430 static const char *
431 readescape (p, limit, cptr)
432      const char *p;
433      const char *limit;
434      unsigned int *cptr;
435 {
436   unsigned int c, code, count;
437   unsigned firstdig = 0;
438   int nonnull;
439
440   if (p == limit)
441     {
442       /* cpp has already issued an error for this.  */
443       *cptr = 0;
444       return p;
445     }
446
447   c = *p++;
448
449   switch (c)
450     {
451     case 'x':
452       if (warn_traditional && !in_system_header)
453         warning ("the meaning of `\\x' varies with -traditional");
454
455       if (flag_traditional)
456         {
457           *cptr = 'x';
458           return p;
459         }
460
461       code = 0;
462       count = 0;
463       nonnull = 0;
464       while (p < limit)
465         {
466           c = *p++;
467           if (! ISXDIGIT (c))
468             {
469               p--;
470               break;
471             }
472           code *= 16;
473           if (c >= 'a' && c <= 'f')
474             code += c - 'a' + 10;
475           if (c >= 'A' && c <= 'F')
476             code += c - 'A' + 10;
477           if (c >= '0' && c <= '9')
478             code += c - '0';
479           if (code != 0 || count != 0)
480             {
481               if (count == 0)
482                 firstdig = code;
483               count++;
484             }
485           nonnull = 1;
486         }
487       if (! nonnull)
488         {
489           warning ("\\x used with no following hex digits");
490           *cptr = 'x';
491           return p;
492         }
493       else if (count == 0)
494         /* Digits are all 0's.  Ok.  */
495         ;
496       else if ((count - 1) * 4 >= TYPE_PRECISION (integer_type_node)
497                || (count > 1
498                    && (((unsigned)1
499                         << (TYPE_PRECISION (integer_type_node)
500                             - (count - 1) * 4))
501                        <= firstdig)))
502         pedwarn ("hex escape out of range");
503       *cptr = code;
504       return p;
505
506     case '0':  case '1':  case '2':  case '3':  case '4':
507     case '5':  case '6':  case '7':
508       code = 0;
509       for (count = 0; count < 3; count++)
510         {
511           if (c < '0' || c > '7')
512             {
513               p--;
514               break;
515             }
516           code = (code * 8) + (c - '0');
517           if (p == limit)
518             break;
519           c = *p++;
520         }
521
522       if (count == 3)
523         p--;
524
525       *cptr = code;
526       return p;
527
528     case '\\': case '\'': case '"': case '?':
529       *cptr = c;
530       return p;
531
532     case 'n': *cptr = TARGET_NEWLINE;   return p;
533     case 't': *cptr = TARGET_TAB;       return p;
534     case 'r': *cptr = TARGET_CR;        return p;
535     case 'f': *cptr = TARGET_FF;        return p;
536     case 'b': *cptr = TARGET_BS;        return p;
537     case 'v': *cptr = TARGET_VT;        return p;
538     case 'a':
539       if (warn_traditional && !in_system_header)
540         warning ("the meaning of '\\a' varies with -traditional");
541       *cptr = flag_traditional ? c : TARGET_BELL;
542       return p;
543
544       /* Warnings and support checks handled by read_ucs().  */
545     case 'u': case 'U':
546       if (c_language != clk_cplusplus && !flag_isoc99)
547         break;
548
549       if (warn_traditional && !in_system_header)
550         warning ("the meaning of '\\%c' varies with -traditional", c);
551
552       return read_ucs (p, limit, cptr, c == 'u' ? 4 : 8);
553       
554     case 'e': case 'E':
555       if (pedantic)
556         pedwarn ("non-ISO-standard escape sequence, '\\%c'", c);
557       *cptr = TARGET_ESC; return p;
558
559       /* '\(', etc, are used at beginning of line to avoid confusing Emacs.
560          '\%' is used to prevent SCCS from getting confused.  */
561     case '(': case '{': case '[': case '%':
562       if (pedantic)
563         pedwarn ("unknown escape sequence '\\%c'", c);
564       *cptr = c;
565       return p;
566     }
567
568   if (ISGRAPH (c))
569     pedwarn ("unknown escape sequence '\\%c'", c);
570   else
571     pedwarn ("unknown escape sequence: '\\' followed by char 0x%x", c);
572
573   *cptr = c;
574   return p;
575 }
576
577 #if 0 /* not yet */
578 /* Returns nonzero if C is a universal-character-name.  Give an error if it
579    is not one which may appear in an identifier, as per [extendid].
580
581    Note that extended character support in identifiers has not yet been
582    implemented.  It is my personal opinion that this is not a desirable
583    feature.  Portable code cannot count on support for more than the basic
584    identifier character set.  */
585
586 static inline int
587 is_extended_char (c)
588      int c;
589 {
590 #ifdef TARGET_EBCDIC
591   return 0;
592 #else
593   /* ASCII.  */
594   if (c < 0x7f)
595     return 0;
596
597   /* None of the valid chars are outside the Basic Multilingual Plane (the
598      low 16 bits).  */
599   if (c > 0xffff)
600     {
601       error ("universal-character-name '\\U%08x' not valid in identifier", c);
602       return 1;
603     }
604   
605   /* Latin */
606   if ((c >= 0x00c0 && c <= 0x00d6)
607       || (c >= 0x00d8 && c <= 0x00f6)
608       || (c >= 0x00f8 && c <= 0x01f5)
609       || (c >= 0x01fa && c <= 0x0217)
610       || (c >= 0x0250 && c <= 0x02a8)
611       || (c >= 0x1e00 && c <= 0x1e9a)
612       || (c >= 0x1ea0 && c <= 0x1ef9))
613     return 1;
614
615   /* Greek */
616   if ((c == 0x0384)
617       || (c >= 0x0388 && c <= 0x038a)
618       || (c == 0x038c)
619       || (c >= 0x038e && c <= 0x03a1)
620       || (c >= 0x03a3 && c <= 0x03ce)
621       || (c >= 0x03d0 && c <= 0x03d6)
622       || (c == 0x03da)
623       || (c == 0x03dc)
624       || (c == 0x03de)
625       || (c == 0x03e0)
626       || (c >= 0x03e2 && c <= 0x03f3)
627       || (c >= 0x1f00 && c <= 0x1f15)
628       || (c >= 0x1f18 && c <= 0x1f1d)
629       || (c >= 0x1f20 && c <= 0x1f45)
630       || (c >= 0x1f48 && c <= 0x1f4d)
631       || (c >= 0x1f50 && c <= 0x1f57)
632       || (c == 0x1f59)
633       || (c == 0x1f5b)
634       || (c == 0x1f5d)
635       || (c >= 0x1f5f && c <= 0x1f7d)
636       || (c >= 0x1f80 && c <= 0x1fb4)
637       || (c >= 0x1fb6 && c <= 0x1fbc)
638       || (c >= 0x1fc2 && c <= 0x1fc4)
639       || (c >= 0x1fc6 && c <= 0x1fcc)
640       || (c >= 0x1fd0 && c <= 0x1fd3)
641       || (c >= 0x1fd6 && c <= 0x1fdb)
642       || (c >= 0x1fe0 && c <= 0x1fec)
643       || (c >= 0x1ff2 && c <= 0x1ff4)
644       || (c >= 0x1ff6 && c <= 0x1ffc))
645     return 1;
646
647   /* Cyrillic */
648   if ((c >= 0x0401 && c <= 0x040d)
649       || (c >= 0x040f && c <= 0x044f)
650       || (c >= 0x0451 && c <= 0x045c)
651       || (c >= 0x045e && c <= 0x0481)
652       || (c >= 0x0490 && c <= 0x04c4)
653       || (c >= 0x04c7 && c <= 0x04c8)
654       || (c >= 0x04cb && c <= 0x04cc)
655       || (c >= 0x04d0 && c <= 0x04eb)
656       || (c >= 0x04ee && c <= 0x04f5)
657       || (c >= 0x04f8 && c <= 0x04f9))
658     return 1;
659
660   /* Armenian */
661   if ((c >= 0x0531 && c <= 0x0556)
662       || (c >= 0x0561 && c <= 0x0587))
663     return 1;
664
665   /* Hebrew */
666   if ((c >= 0x05d0 && c <= 0x05ea)
667       || (c >= 0x05f0 && c <= 0x05f4))
668     return 1;
669
670   /* Arabic */
671   if ((c >= 0x0621 && c <= 0x063a)
672       || (c >= 0x0640 && c <= 0x0652)
673       || (c >= 0x0670 && c <= 0x06b7)
674       || (c >= 0x06ba && c <= 0x06be)
675       || (c >= 0x06c0 && c <= 0x06ce)
676       || (c >= 0x06e5 && c <= 0x06e7))
677     return 1;
678
679   /* Devanagari */
680   if ((c >= 0x0905 && c <= 0x0939)
681       || (c >= 0x0958 && c <= 0x0962))
682     return 1;
683
684   /* Bengali */
685   if ((c >= 0x0985 && c <= 0x098c)
686       || (c >= 0x098f && c <= 0x0990)
687       || (c >= 0x0993 && c <= 0x09a8)
688       || (c >= 0x09aa && c <= 0x09b0)
689       || (c == 0x09b2)
690       || (c >= 0x09b6 && c <= 0x09b9)
691       || (c >= 0x09dc && c <= 0x09dd)
692       || (c >= 0x09df && c <= 0x09e1)
693       || (c >= 0x09f0 && c <= 0x09f1))
694     return 1;
695
696   /* Gurmukhi */
697   if ((c >= 0x0a05 && c <= 0x0a0a)
698       || (c >= 0x0a0f && c <= 0x0a10)
699       || (c >= 0x0a13 && c <= 0x0a28)
700       || (c >= 0x0a2a && c <= 0x0a30)
701       || (c >= 0x0a32 && c <= 0x0a33)
702       || (c >= 0x0a35 && c <= 0x0a36)
703       || (c >= 0x0a38 && c <= 0x0a39)
704       || (c >= 0x0a59 && c <= 0x0a5c)
705       || (c == 0x0a5e))
706     return 1;
707
708   /* Gujarati */
709   if ((c >= 0x0a85 && c <= 0x0a8b)
710       || (c == 0x0a8d)
711       || (c >= 0x0a8f && c <= 0x0a91)
712       || (c >= 0x0a93 && c <= 0x0aa8)
713       || (c >= 0x0aaa && c <= 0x0ab0)
714       || (c >= 0x0ab2 && c <= 0x0ab3)
715       || (c >= 0x0ab5 && c <= 0x0ab9)
716       || (c == 0x0ae0))
717     return 1;
718
719   /* Oriya */
720   if ((c >= 0x0b05 && c <= 0x0b0c)
721       || (c >= 0x0b0f && c <= 0x0b10)
722       || (c >= 0x0b13 && c <= 0x0b28)
723       || (c >= 0x0b2a && c <= 0x0b30)
724       || (c >= 0x0b32 && c <= 0x0b33)
725       || (c >= 0x0b36 && c <= 0x0b39)
726       || (c >= 0x0b5c && c <= 0x0b5d)
727       || (c >= 0x0b5f && c <= 0x0b61))
728     return 1;
729
730   /* Tamil */
731   if ((c >= 0x0b85 && c <= 0x0b8a)
732       || (c >= 0x0b8e && c <= 0x0b90)
733       || (c >= 0x0b92 && c <= 0x0b95)
734       || (c >= 0x0b99 && c <= 0x0b9a)
735       || (c == 0x0b9c)
736       || (c >= 0x0b9e && c <= 0x0b9f)
737       || (c >= 0x0ba3 && c <= 0x0ba4)
738       || (c >= 0x0ba8 && c <= 0x0baa)
739       || (c >= 0x0bae && c <= 0x0bb5)
740       || (c >= 0x0bb7 && c <= 0x0bb9))
741     return 1;
742
743   /* Telugu */
744   if ((c >= 0x0c05 && c <= 0x0c0c)
745       || (c >= 0x0c0e && c <= 0x0c10)
746       || (c >= 0x0c12 && c <= 0x0c28)
747       || (c >= 0x0c2a && c <= 0x0c33)
748       || (c >= 0x0c35 && c <= 0x0c39)
749       || (c >= 0x0c60 && c <= 0x0c61))
750     return 1;
751
752   /* Kannada */
753   if ((c >= 0x0c85 && c <= 0x0c8c)
754       || (c >= 0x0c8e && c <= 0x0c90)
755       || (c >= 0x0c92 && c <= 0x0ca8)
756       || (c >= 0x0caa && c <= 0x0cb3)
757       || (c >= 0x0cb5 && c <= 0x0cb9)
758       || (c >= 0x0ce0 && c <= 0x0ce1))
759     return 1;
760
761   /* Malayalam */
762   if ((c >= 0x0d05 && c <= 0x0d0c)
763       || (c >= 0x0d0e && c <= 0x0d10)
764       || (c >= 0x0d12 && c <= 0x0d28)
765       || (c >= 0x0d2a && c <= 0x0d39)
766       || (c >= 0x0d60 && c <= 0x0d61))
767     return 1;
768
769   /* Thai */
770   if ((c >= 0x0e01 && c <= 0x0e30)
771       || (c >= 0x0e32 && c <= 0x0e33)
772       || (c >= 0x0e40 && c <= 0x0e46)
773       || (c >= 0x0e4f && c <= 0x0e5b))
774     return 1;
775
776   /* Lao */
777   if ((c >= 0x0e81 && c <= 0x0e82)
778       || (c == 0x0e84)
779       || (c == 0x0e87)
780       || (c == 0x0e88)
781       || (c == 0x0e8a)
782       || (c == 0x0e0d)
783       || (c >= 0x0e94 && c <= 0x0e97)
784       || (c >= 0x0e99 && c <= 0x0e9f)
785       || (c >= 0x0ea1 && c <= 0x0ea3)
786       || (c == 0x0ea5)
787       || (c == 0x0ea7)
788       || (c == 0x0eaa)
789       || (c == 0x0eab)
790       || (c >= 0x0ead && c <= 0x0eb0)
791       || (c == 0x0eb2)
792       || (c == 0x0eb3)
793       || (c == 0x0ebd)
794       || (c >= 0x0ec0 && c <= 0x0ec4)
795       || (c == 0x0ec6))
796     return 1;
797
798   /* Georgian */
799   if ((c >= 0x10a0 && c <= 0x10c5)
800       || (c >= 0x10d0 && c <= 0x10f6))
801     return 1;
802
803   /* Hiragana */
804   if ((c >= 0x3041 && c <= 0x3094)
805       || (c >= 0x309b && c <= 0x309e))
806     return 1;
807
808   /* Katakana */
809   if ((c >= 0x30a1 && c <= 0x30fe))
810     return 1;
811
812   /* Bopmofo */
813   if ((c >= 0x3105 && c <= 0x312c))
814     return 1;
815
816   /* Hangul */
817   if ((c >= 0x1100 && c <= 0x1159)
818       || (c >= 0x1161 && c <= 0x11a2)
819       || (c >= 0x11a8 && c <= 0x11f9))
820     return 1;
821
822   /* CJK Unified Ideographs */
823   if ((c >= 0xf900 && c <= 0xfa2d)
824       || (c >= 0xfb1f && c <= 0xfb36)
825       || (c >= 0xfb38 && c <= 0xfb3c)
826       || (c == 0xfb3e)
827       || (c >= 0xfb40 && c <= 0xfb41)
828       || (c >= 0xfb42 && c <= 0xfb44)
829       || (c >= 0xfb46 && c <= 0xfbb1)
830       || (c >= 0xfbd3 && c <= 0xfd3f)
831       || (c >= 0xfd50 && c <= 0xfd8f)
832       || (c >= 0xfd92 && c <= 0xfdc7)
833       || (c >= 0xfdf0 && c <= 0xfdfb)
834       || (c >= 0xfe70 && c <= 0xfe72)
835       || (c == 0xfe74)
836       || (c >= 0xfe76 && c <= 0xfefc)
837       || (c >= 0xff21 && c <= 0xff3a)
838       || (c >= 0xff41 && c <= 0xff5a)
839       || (c >= 0xff66 && c <= 0xffbe)
840       || (c >= 0xffc2 && c <= 0xffc7)
841       || (c >= 0xffca && c <= 0xffcf)
842       || (c >= 0xffd2 && c <= 0xffd7)
843       || (c >= 0xffda && c <= 0xffdc)
844       || (c >= 0x4e00 && c <= 0x9fa5))
845     return 1;
846
847   error ("universal-character-name '\\u%04x' not valid in identifier", c);
848   return 1;
849 #endif
850 }
851
852 /* Add the UTF-8 representation of C to the token_buffer.  */
853
854 static void
855 utf8_extend_token (c)
856      int c;
857 {
858   int shift, mask;
859
860   if      (c <= 0x0000007f)
861     {
862       extend_token (c);
863       return;
864     }
865   else if (c <= 0x000007ff)
866     shift = 6, mask = 0xc0;
867   else if (c <= 0x0000ffff)
868     shift = 12, mask = 0xe0;
869   else if (c <= 0x001fffff)
870     shift = 18, mask = 0xf0;
871   else if (c <= 0x03ffffff)
872     shift = 24, mask = 0xf8;
873   else
874     shift = 30, mask = 0xfc;
875
876   extend_token (mask | (c >> shift));
877   do
878     {
879       shift -= 6;
880       extend_token ((unsigned char) (0x80 | (c >> shift)));
881     }
882   while (shift);
883 }
884 #endif
885
886 #if 0
887 struct try_type
888 {
889   tree *node_var;
890   char unsigned_flag;
891   char long_flag;
892   char long_long_flag;
893 };
894
895 struct try_type type_sequence[] =
896 {
897   { &integer_type_node, 0, 0, 0},
898   { &unsigned_type_node, 1, 0, 0},
899   { &long_integer_type_node, 0, 1, 0},
900   { &long_unsigned_type_node, 1, 1, 0},
901   { &long_long_integer_type_node, 0, 1, 1},
902   { &long_long_unsigned_type_node, 1, 1, 1}
903 };
904 #endif /* 0 */
905 \f
906 struct pf_args
907 {
908   /* Input */
909   const char *str;
910   int fflag;
911   int lflag;
912   int base;
913   /* Output */
914   int conversion_errno;
915   REAL_VALUE_TYPE value;
916   tree type;
917 };
918  
919 static void
920 parse_float (data)
921   PTR data;
922 {
923   struct pf_args * args = (struct pf_args *) data;
924   const char *typename;
925
926   args->conversion_errno = 0;
927   args->type = double_type_node;
928   typename = "double";
929
930   /* The second argument, machine_mode, of REAL_VALUE_ATOF
931      tells the desired precision of the binary result
932      of decimal-to-binary conversion.  */
933
934   if (args->fflag)
935     {
936       if (args->lflag)
937         error ("both 'f' and 'l' suffixes on floating constant");
938
939       args->type = float_type_node;
940       typename = "float";
941     }
942   else if (args->lflag)
943     {
944       args->type = long_double_type_node;
945       typename = "long double";
946     }
947   else if (flag_single_precision_constant)
948     {
949       args->type = float_type_node;
950       typename = "float";
951     }
952
953   errno = 0;
954   if (args->base == 16)
955     args->value = REAL_VALUE_HTOF (args->str, TYPE_MODE (args->type));
956   else
957     args->value = REAL_VALUE_ATOF (args->str, TYPE_MODE (args->type));
958
959   args->conversion_errno = errno;
960   /* A diagnostic is required here by some ISO C testsuites.
961      This is not pedwarn, because some people don't want
962      an error for this.  */
963   if (REAL_VALUE_ISINF (args->value) && pedantic)
964     warning ("floating point number exceeds range of '%s'", typename);
965 }
966  
967 int
968 c_lex (value)
969      tree *value;
970 {
971   cpp_token tok;
972   enum cpp_ttype type;
973
974   retry:
975   timevar_push (TV_CPP);
976   cpp_get_token (parse_in, &tok);
977   timevar_pop (TV_CPP);
978
979   /* The C++ front end does horrible things with the current line
980      number.  To ensure an accurate line number, we must reset it
981      every time we return a token.  */
982   lineno = cpp_get_line (parse_in)->line;
983
984   *value = NULL_TREE;
985   type = tok.type;
986   switch (type)
987     {
988     case CPP_OPEN_BRACE:  indent_level++;  break;
989     case CPP_CLOSE_BRACE: indent_level--;  break;
990
991     /* Issue this error here, where we can get at tok.val.c.  */
992     case CPP_OTHER:
993       if (ISGRAPH (tok.val.c))
994         error ("stray '%c' in program", tok.val.c);
995       else
996         error ("stray '\\%o' in program", tok.val.c);
997       goto retry;
998       
999     case CPP_NAME:
1000       *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok.val.node));
1001       break;
1002
1003     case CPP_INT:
1004     case CPP_FLOAT:
1005     case CPP_NUMBER:
1006       *value = lex_number ((const char *)tok.val.str.text, tok.val.str.len);
1007       break;
1008
1009     case CPP_CHAR:
1010     case CPP_WCHAR:
1011       *value = lex_charconst (&tok);
1012       break;
1013
1014     case CPP_STRING:
1015     case CPP_WSTRING:
1016       *value = lex_string ((const char *)tok.val.str.text,
1017                            tok.val.str.len, tok.type == CPP_WSTRING);
1018       break;
1019
1020       /* These tokens should not be visible outside cpplib.  */
1021     case CPP_HEADER_NAME:
1022     case CPP_COMMENT:
1023     case CPP_MACRO_ARG:
1024       abort ();
1025
1026     default: break;
1027     }
1028
1029   return type;
1030 }
1031
1032 #define ERROR(msgid) do { error(msgid); goto syntax_error; } while(0)
1033
1034 static tree
1035 lex_number (str, len)
1036      const char *str;
1037      unsigned int len;
1038 {
1039   int base = 10;
1040   int count = 0;
1041   int largest_digit = 0;
1042   int numdigits = 0;
1043   int overflow = 0;
1044   int c;
1045   tree value;
1046   const char *p;
1047   enum anon1 { NOT_FLOAT = 0, AFTER_POINT, AFTER_EXPON } floatflag = NOT_FLOAT;
1048   
1049   /* We actually store only HOST_BITS_PER_CHAR bits in each part.
1050      The code below which fills the parts array assumes that a host
1051      int is at least twice as wide as a host char, and that 
1052      HOST_BITS_PER_WIDE_INT is an even multiple of HOST_BITS_PER_CHAR.
1053      Two HOST_WIDE_INTs is the largest int literal we can store.
1054      In order to detect overflow below, the number of parts (TOTAL_PARTS)
1055      must be exactly the number of parts needed to hold the bits
1056      of two HOST_WIDE_INTs. */
1057 #define TOTAL_PARTS ((HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR) * 2)
1058   unsigned int parts[TOTAL_PARTS];
1059   
1060   /* Optimize for most frequent case.  */
1061   if (len == 1)
1062     {
1063       if (*str == '0')
1064         return integer_zero_node;
1065       else if (*str == '1')
1066         return integer_one_node;
1067       else
1068         return build_int_2 (*str - '0', 0);
1069     }
1070
1071   for (count = 0; count < TOTAL_PARTS; count++)
1072     parts[count] = 0;
1073
1074   /* len is known to be >1 at this point.  */
1075   p = str;
1076
1077   if (len > 2 && str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
1078     {
1079       base = 16;
1080       p = str + 2;
1081     }
1082   /* The ISDIGIT check is so we are not confused by a suffix on 0.  */
1083   else if (str[0] == '0' && ISDIGIT (str[1]))
1084     {
1085       base = 8;
1086       p = str + 1;
1087     }
1088
1089   do
1090     {
1091       c = *p++;
1092
1093       if (c == '.')
1094         {
1095           if (floatflag == AFTER_POINT)
1096             ERROR ("too many decimal points in floating constant");
1097           else if (floatflag == AFTER_EXPON)
1098             ERROR ("decimal point in exponent - impossible!");
1099           else
1100             floatflag = AFTER_POINT;
1101
1102           if (base == 8)
1103             base = 10;
1104         }
1105       else if (c == '_')
1106         /* Possible future extension: silently ignore _ in numbers,
1107            permitting cosmetic grouping - e.g. 0x8000_0000 == 0x80000000
1108            but somewhat easier to read.  Ada has this?  */
1109         ERROR ("underscore in number");
1110       else
1111         {
1112           int n;
1113           /* It is not a decimal point.
1114              It should be a digit (perhaps a hex digit).  */
1115
1116           if (ISDIGIT (c))
1117             {
1118               n = c - '0';
1119             }
1120           else if (base <= 10 && (c == 'e' || c == 'E'))
1121             {
1122               base = 10;
1123               floatflag = AFTER_EXPON;
1124               break;
1125             }
1126           else if (base == 16 && (c == 'p' || c == 'P'))
1127             {
1128               floatflag = AFTER_EXPON;
1129               break;   /* start of exponent */
1130             }
1131           else if (base == 16 && c >= 'a' && c <= 'f')
1132             {
1133               n = c - 'a' + 10;
1134             }
1135           else if (base == 16 && c >= 'A' && c <= 'F')
1136             {
1137               n = c - 'A' + 10;
1138             }
1139           else
1140             {
1141               p--;
1142               break;  /* start of suffix */
1143             }
1144
1145           if (n >= largest_digit)
1146             largest_digit = n;
1147           numdigits++;
1148
1149           for (count = 0; count < TOTAL_PARTS; count++)
1150             {
1151               parts[count] *= base;
1152               if (count)
1153                 {
1154                   parts[count]
1155                     += (parts[count-1] >> HOST_BITS_PER_CHAR);
1156                   parts[count-1]
1157                     &= (1 << HOST_BITS_PER_CHAR) - 1;
1158                 }
1159               else
1160                 parts[0] += n;
1161             }
1162
1163           /* If the highest-order part overflows (gets larger than
1164              a host char will hold) then the whole number has 
1165              overflowed.  Record this and truncate the highest-order
1166              part. */
1167           if (parts[TOTAL_PARTS - 1] >> HOST_BITS_PER_CHAR)
1168             {
1169               overflow = 1;
1170               parts[TOTAL_PARTS - 1] &= (1 << HOST_BITS_PER_CHAR) - 1;
1171             }
1172         }
1173     }
1174   while (p < str + len);
1175
1176   /* This can happen on input like `int i = 0x;' */
1177   if (numdigits == 0)
1178     ERROR ("numeric constant with no digits");
1179
1180   if (largest_digit >= base)
1181     ERROR ("numeric constant contains digits beyond the radix");
1182
1183   if (floatflag != NOT_FLOAT)
1184     {
1185       tree type;
1186       int imag, fflag, lflag, conversion_errno;
1187       REAL_VALUE_TYPE real;
1188       struct pf_args args;
1189       char *copy;
1190
1191       if (base == 16 && pedantic && !flag_isoc99)
1192         pedwarn ("floating constant may not be in radix 16");
1193
1194       if (base == 16 && floatflag != AFTER_EXPON)
1195         ERROR ("hexadecimal floating constant has no exponent");
1196
1197       /* Read explicit exponent if any, and put it in tokenbuf.  */
1198       if ((base == 10 && ((c == 'e') || (c == 'E')))
1199           || (base == 16 && (c == 'p' || c == 'P')))
1200         {
1201           if (p < str + len)
1202             c = *p++;
1203           if (p < str + len && (c == '+' || c == '-'))
1204             c = *p++;
1205           /* Exponent is decimal, even if string is a hex float.  */
1206           if (! ISDIGIT (c))
1207             ERROR ("floating constant exponent has no digits");
1208           while (p < str + len && ISDIGIT (c))
1209             c = *p++;
1210           if (! ISDIGIT (c))
1211             p--;
1212         }
1213
1214       /* Copy the float constant now; we don't want any suffixes in the
1215          string passed to parse_float.  */
1216       copy = alloca (p - str + 1);
1217       memcpy (copy, str, p - str);
1218       copy[p - str] = '\0';
1219
1220       /* Now parse suffixes.  */
1221       fflag = lflag = imag = 0;
1222       while (p < str + len)
1223         switch (*p++)
1224           {
1225           case 'f': case 'F':
1226             if (fflag)
1227               ERROR ("more than one 'f' suffix on floating constant");
1228             else if (warn_traditional && !in_system_header
1229                      && ! cpp_sys_macro_p (parse_in))
1230               warning ("traditional C rejects the 'f' suffix");
1231
1232             fflag = 1;
1233             break;
1234
1235           case 'l': case 'L':
1236             if (lflag)
1237               ERROR ("more than one 'l' suffix on floating constant");
1238             else if (warn_traditional && !in_system_header
1239                      && ! cpp_sys_macro_p (parse_in))
1240               warning ("traditional C rejects the 'l' suffix");
1241
1242             lflag = 1;
1243             break;
1244
1245           case 'i': case 'I':
1246           case 'j': case 'J':
1247             if (imag)
1248               ERROR ("more than one 'i' or 'j' suffix on floating constant");
1249             else if (pedantic)
1250               pedwarn ("ISO C forbids imaginary numeric constants");
1251             imag = 1;
1252             break;
1253
1254           default:
1255             ERROR ("invalid suffix on floating constant");
1256           }
1257
1258       /* Setup input for parse_float() */
1259       args.str = copy;
1260       args.fflag = fflag;
1261       args.lflag = lflag;
1262       args.base = base;
1263
1264       /* Convert string to a double, checking for overflow.  */
1265       if (do_float_handler (parse_float, (PTR) &args))
1266         {
1267           /* Receive output from parse_float() */
1268           real = args.value;
1269         }
1270       else
1271           /* We got an exception from parse_float() */
1272           ERROR ("floating constant out of range");
1273
1274       /* Receive output from parse_float() */
1275       conversion_errno = args.conversion_errno;
1276       type = args.type;
1277             
1278 #ifdef ERANGE
1279       /* ERANGE is also reported for underflow,
1280          so test the value to distinguish overflow from that.  */
1281       if (conversion_errno == ERANGE && !flag_traditional && pedantic
1282           && (REAL_VALUES_LESS (dconst1, real)
1283               || REAL_VALUES_LESS (real, dconstm1)))
1284         warning ("floating point number exceeds range of 'double'");
1285 #endif
1286
1287       /* Create a node with determined type and value.  */
1288       if (imag)
1289         value = build_complex (NULL_TREE, convert (type, integer_zero_node),
1290                                build_real (type, real));
1291       else
1292         value = build_real (type, real);
1293     }
1294   else
1295     {
1296       tree trad_type, ansi_type, type;
1297       HOST_WIDE_INT high, low;
1298       int spec_unsigned = 0;
1299       int spec_long = 0;
1300       int spec_long_long = 0;
1301       int spec_imag = 0;
1302       int suffix_lu = 0;
1303       int warn = 0, i;
1304
1305       trad_type = ansi_type = type = NULL_TREE;
1306       while (p < str + len)
1307         {
1308           c = *p++;
1309           switch (c)
1310             {
1311             case 'u': case 'U':
1312               if (spec_unsigned)
1313                 error ("two 'u' suffixes on integer constant");
1314               else if (warn_traditional && !in_system_header
1315                        && ! cpp_sys_macro_p (parse_in))
1316                 warning ("traditional C rejects the 'u' suffix");
1317
1318               spec_unsigned = 1;
1319               if (spec_long)
1320                 suffix_lu = 1;
1321               break;
1322
1323             case 'l': case 'L':
1324               if (spec_long)
1325                 {
1326                   if (spec_long_long)
1327                     error ("three 'l' suffixes on integer constant");
1328                   else if (suffix_lu)
1329                     error ("'lul' is not a valid integer suffix");
1330                   else if (c != spec_long)
1331                     error ("'Ll' and 'lL' are not valid integer suffixes");
1332                   else if (pedantic && ! flag_isoc99
1333                            && ! in_system_header && warn_long_long)
1334                     pedwarn ("ISO C89 forbids long long integer constants");
1335                   spec_long_long = 1;
1336                 }
1337               spec_long = c;
1338               break;
1339
1340             case 'i': case 'I': case 'j': case 'J':
1341               if (spec_imag)
1342                 error ("more than one 'i' or 'j' suffix on integer constant");
1343               else if (pedantic)
1344                 pedwarn ("ISO C forbids imaginary numeric constants");
1345               spec_imag = 1;
1346               break;
1347
1348             default:
1349               ERROR ("invalid suffix on integer constant");
1350             }
1351         }
1352
1353       /* If the literal overflowed, pedwarn about it now. */
1354       if (overflow)
1355         {
1356           warn = 1;
1357           pedwarn ("integer constant is too large for this configuration of the compiler - truncated to %d bits", HOST_BITS_PER_WIDE_INT * 2);
1358         }
1359
1360       /* This is simplified by the fact that our constant
1361          is always positive.  */
1362
1363       high = low = 0;
1364
1365       for (i = 0; i < HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR; i++)
1366         {
1367           high |= ((HOST_WIDE_INT) parts[i + (HOST_BITS_PER_WIDE_INT
1368                                               / HOST_BITS_PER_CHAR)]
1369                    << (i * HOST_BITS_PER_CHAR));
1370           low |= (HOST_WIDE_INT) parts[i] << (i * HOST_BITS_PER_CHAR);
1371         }
1372
1373       value = build_int_2 (low, high);
1374       TREE_TYPE (value) = long_long_unsigned_type_node;
1375
1376       /* If warn_traditional, calculate both the ISO type and the
1377          traditional type, then see if they disagree.
1378          Otherwise, calculate only the type for the dialect in use.  */
1379       if (warn_traditional || flag_traditional)
1380         {
1381           /* Calculate the traditional type.  */
1382           /* Traditionally, any constant is signed; but if unsigned is
1383              specified explicitly, obey that.  Use the smallest size
1384              with the right number of bits, except for one special
1385              case with decimal constants.  */
1386           if (! spec_long && base != 10
1387               && int_fits_type_p (value, unsigned_type_node))
1388             trad_type = spec_unsigned ? unsigned_type_node : integer_type_node;
1389           /* A decimal constant must be long if it does not fit in
1390              type int.  I think this is independent of whether the
1391              constant is signed.  */
1392           else if (! spec_long && base == 10
1393                    && int_fits_type_p (value, integer_type_node))
1394             trad_type = spec_unsigned ? unsigned_type_node : integer_type_node;
1395           else if (! spec_long_long)
1396             trad_type = (spec_unsigned
1397                          ? long_unsigned_type_node
1398                          : long_integer_type_node);
1399           else if (int_fits_type_p (value,
1400                                     spec_unsigned 
1401                                     ? long_long_unsigned_type_node
1402                                     : long_long_integer_type_node)) 
1403             trad_type = (spec_unsigned
1404                          ? long_long_unsigned_type_node
1405                          : long_long_integer_type_node);
1406           else
1407             trad_type = (spec_unsigned
1408                          ? widest_unsigned_literal_type_node
1409                          : widest_integer_literal_type_node);
1410         }
1411       if (warn_traditional || ! flag_traditional)
1412         {
1413           /* Calculate the ISO type.  */
1414           if (! spec_long && ! spec_unsigned
1415               && int_fits_type_p (value, integer_type_node))
1416             ansi_type = integer_type_node;
1417           else if (! spec_long && (base != 10 || spec_unsigned)
1418                    && int_fits_type_p (value, unsigned_type_node))
1419             ansi_type = unsigned_type_node;
1420           else if (! spec_unsigned && !spec_long_long
1421                    && int_fits_type_p (value, long_integer_type_node))
1422             ansi_type = long_integer_type_node;
1423           else if (! spec_long_long
1424                    && int_fits_type_p (value, long_unsigned_type_node))
1425             ansi_type = long_unsigned_type_node;
1426           else if (! spec_unsigned
1427                    && int_fits_type_p (value, long_long_integer_type_node))
1428             ansi_type = long_long_integer_type_node;
1429           else if (int_fits_type_p (value, long_long_unsigned_type_node))
1430             ansi_type = long_long_unsigned_type_node;
1431           else if (! spec_unsigned
1432                    && int_fits_type_p (value, widest_integer_literal_type_node))
1433             ansi_type = widest_integer_literal_type_node;
1434           else
1435             ansi_type = widest_unsigned_literal_type_node;
1436         }
1437
1438       type = flag_traditional ? trad_type : ansi_type;
1439
1440       /* We assume that constants specified in a non-decimal
1441          base are bit patterns, and that the programmer really
1442          meant what they wrote.  */
1443       if (warn_traditional && !in_system_header
1444           && base == 10 && trad_type != ansi_type)
1445         {
1446           if (TYPE_PRECISION (trad_type) != TYPE_PRECISION (ansi_type))
1447             warning ("width of integer constant changes with -traditional");
1448           else if (TREE_UNSIGNED (trad_type) != TREE_UNSIGNED (ansi_type))
1449             warning ("integer constant is unsigned in ISO C, signed with -traditional");
1450           else
1451             warning ("width of integer constant may change on other systems with -traditional");
1452         }
1453
1454       if (pedantic && !flag_traditional && (flag_isoc99 || !spec_long_long)
1455           && !warn
1456           && ((flag_isoc99
1457                ? TYPE_PRECISION (long_long_integer_type_node)
1458                : TYPE_PRECISION (long_integer_type_node)) < TYPE_PRECISION (type)))
1459         {
1460           warn = 1;
1461           pedwarn ("integer constant larger than the maximum value of %s",
1462                    (flag_isoc99
1463                     ? (TREE_UNSIGNED (type)
1464                        ? "an unsigned long long int"
1465                        : "a long long int")
1466                     : "an unsigned long int"));
1467         }
1468
1469       if (base == 10 && ! spec_unsigned && TREE_UNSIGNED (type))
1470         warning ("decimal constant is so large that it is unsigned");
1471
1472       if (spec_imag)
1473         {
1474           if (TYPE_PRECISION (type)
1475               <= TYPE_PRECISION (integer_type_node))
1476             value = build_complex (NULL_TREE, integer_zero_node,
1477                                    convert (integer_type_node, value));
1478           else
1479             ERROR ("complex integer constant is too wide for 'complex int'");
1480         }
1481       else if (flag_traditional && !int_fits_type_p (value, type))
1482         /* The traditional constant 0x80000000 is signed
1483            but doesn't fit in the range of int.
1484            This will change it to -0x80000000, which does fit.  */
1485         {
1486           TREE_TYPE (value) = unsigned_type (type);
1487           value = convert (type, value);
1488           TREE_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (value) = 0;
1489         }
1490       else
1491         TREE_TYPE (value) = type;
1492
1493       /* If it's still an integer (not a complex), and it doesn't
1494          fit in the type we choose for it, then pedwarn. */
1495
1496       if (! warn
1497           && TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE
1498           && ! int_fits_type_p (value, TREE_TYPE (value)))
1499         pedwarn ("integer constant is larger than the maximum value for its type");
1500     }
1501
1502   if (p < str + len)
1503     error ("missing white space after number '%.*s'", (int) (p - str), str);
1504
1505   return value;
1506
1507  syntax_error:
1508   return integer_zero_node;
1509 }
1510
1511 static tree
1512 lex_string (str, len, wide)
1513      const char *str;
1514      unsigned int len;
1515      int wide;
1516 {
1517   tree value;
1518   char *buf = alloca ((len + 1) * (wide ? WCHAR_BYTES : 1));
1519   char *q = buf;
1520   const char *p = str, *limit = str + len;
1521   unsigned int c;
1522   unsigned width = wide ? WCHAR_TYPE_SIZE
1523                         : TYPE_PRECISION (char_type_node);
1524
1525 #ifdef MULTIBYTE_CHARS
1526   /* Reset multibyte conversion state.  */
1527   (void) local_mbtowc (NULL, NULL, 0);
1528 #endif
1529
1530   while (p < limit)
1531     {
1532 #ifdef MULTIBYTE_CHARS
1533       wchar_t wc;
1534       int char_len;
1535
1536       char_len = local_mbtowc (&wc, p, limit - p);
1537       if (char_len == -1)
1538         {
1539           warning ("Ignoring invalid multibyte character");
1540           char_len = 1;
1541           c = *p++;
1542         }
1543       else
1544         {
1545           p += char_len;
1546           c = wc;
1547         }
1548 #else
1549       c = *p++;
1550 #endif
1551
1552       if (c == '\\' && !ignore_escape_flag)
1553         {
1554           p = readescape (p, limit, &c);
1555           if (width < HOST_BITS_PER_INT
1556               && (unsigned) c >= ((unsigned)1 << width))
1557             pedwarn ("escape sequence out of range for character");
1558         }
1559         
1560       /* Add this single character into the buffer either as a wchar_t
1561          or as a single byte.  */
1562       if (wide)
1563         {
1564           unsigned charwidth = TYPE_PRECISION (char_type_node);
1565           unsigned bytemask = (1 << charwidth) - 1;
1566           int byte;
1567
1568           for (byte = 0; byte < WCHAR_BYTES; ++byte)
1569             {
1570               int n;
1571               if (byte >= (int) sizeof (c))
1572                 n = 0;
1573               else
1574                 n = (c >> (byte * charwidth)) & bytemask;
1575               if (BYTES_BIG_ENDIAN)
1576                 q[WCHAR_BYTES - byte - 1] = n;
1577               else
1578                 q[byte] = n;
1579             }
1580           q += WCHAR_BYTES;
1581         }
1582       else
1583         {
1584           *q++ = c;
1585         }
1586     }
1587
1588   /* Terminate the string value, either with a single byte zero
1589      or with a wide zero.  */
1590
1591   if (wide)
1592     {
1593       memset (q, 0, WCHAR_BYTES);
1594       q += WCHAR_BYTES;
1595     }
1596   else
1597     {
1598       *q++ = '\0';
1599     }
1600
1601   value = build_string (q - buf, buf);
1602
1603   if (wide)
1604     TREE_TYPE (value) = wchar_array_type_node;
1605   else
1606     TREE_TYPE (value) = char_array_type_node;
1607   return value;
1608 }
1609
1610 /* Converts a (possibly wide) character constant token into a tree.  */
1611 static tree
1612 lex_charconst (token)
1613      const cpp_token *token;
1614 {
1615   HOST_WIDE_INT result;
1616   tree value;
1617   unsigned int chars_seen;
1618  
1619   result = cpp_interpret_charconst (parse_in, token, warn_multichar,
1620                                     flag_traditional, &chars_seen);
1621   if (token->type == CPP_WCHAR)
1622     {
1623       value = build_int_2 (result, 0);
1624       TREE_TYPE (value) = wchar_type_node;
1625     }
1626   else
1627     {
1628       if (result < 0)
1629         value = build_int_2 (result, -1);
1630       else
1631         value = build_int_2 (result, 0);
1632  
1633       /* In C, a character constant has type 'int'.
1634          In C++ 'char', but multi-char charconsts have type 'int'.  */
1635       if (c_language == clk_cplusplus && chars_seen <= 1)
1636         TREE_TYPE (value) = char_type_node;
1637       else
1638         TREE_TYPE (value) = integer_type_node;
1639     }
1640  
1641   return value;
1642 }