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, 2003 Free Software Foundation, Inc.
5 This file is part of GCC.
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
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
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
24 #include "coretypes.h"
42 #include "splay-tree.h"
45 #ifdef MULTIBYTE_CHARS
48 #endif /* MULTIBYTE_CHARS */
50 /* The current line map. */
51 static const struct line_map
*map
;
53 /* The line used to refresh the lineno global variable after each token. */
54 static unsigned int src_lineno
;
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
;
60 /* File used for outputting assembler code. */
61 extern FILE *asm_out_file
;
63 #undef WCHAR_TYPE_SIZE
64 #define WCHAR_TYPE_SIZE TYPE_PRECISION (wchar_type_node)
66 /* Number of bytes in a wide character. */
67 #define WCHAR_BYTES (WCHAR_TYPE_SIZE / BITS_PER_UNIT)
69 int pending_lang_change
; /* If we need to switch languages - C++ only */
70 int c_header_level
; /* depth in C headers - C++ only */
72 /* Nonzero tells yylex to ignore \ in string constants. */
73 static int ignore_escape_flag
;
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,
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,
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,
93 static void cb_undef
PARAMS ((cpp_reader
*, unsigned int,
99 struct cpp_callbacks
*cb
;
100 struct c_fileinfo
*toplevel
;
102 /* Set up filename timing. Must happen before cpp_read_main_file. */
103 file_info_tree
= splay_tree_new ((splay_tree_compare_fn
)strcmp
,
105 (splay_tree_delete_value_fn
)free
);
106 toplevel
= get_fileinfo ("<top level>");
107 if (flag_detailed_statistics
)
110 body_time
= get_run_time ();
111 toplevel
->time
= body_time
;
114 cb
= cpp_get_callbacks (parse_in
);
116 cb
->register_builtins
= cb_register_builtins
;
117 cb
->line_change
= cb_line_change
;
118 cb
->ident
= cb_ident
;
119 cb
->file_change
= cb_file_change
;
120 cb
->def_pragma
= cb_def_pragma
;
121 cb
->valid_pch
= c_common_valid_pch
;
122 cb
->read_pch
= c_common_read_pch
;
124 /* Set the debug callbacks if we can use them. */
125 if (debug_info_level
== DINFO_LEVEL_VERBOSE
126 && (write_symbols
== DWARF_DEBUG
|| write_symbols
== DWARF2_DEBUG
127 || write_symbols
== VMS_AND_DWARF2_DEBUG
))
129 cb
->define
= cb_define
;
130 cb
->undef
= cb_undef
;
134 /* A thin wrapper around the real parser that initializes the
135 integrated preprocessor after debug output has been initialized.
136 Also, make sure the start_source_file debug hook gets called for
137 the primary source file. */
140 c_common_parse_file (set_yydebug
)
141 int set_yydebug ATTRIBUTE_UNUSED
;
144 yydebug
= set_yydebug
;
146 warning ("YYDEBUG not defined");
149 (*debug_hooks
->start_source_file
) (lineno
, input_filename
);
150 cpp_finish_options (parse_in
);
155 free_parser_stacks ();
163 struct c_fileinfo
*fi
;
165 n
= splay_tree_lookup (file_info_tree
, (splay_tree_key
) name
);
167 return (struct c_fileinfo
*) n
->value
;
169 fi
= (struct c_fileinfo
*) xmalloc (sizeof (struct c_fileinfo
));
171 fi
->interface_only
= 0;
172 fi
->interface_unknown
= 1;
173 splay_tree_insert (file_info_tree
, (splay_tree_key
) name
,
174 (splay_tree_value
) fi
);
179 update_header_times (name
)
182 /* Changing files again. This means currently collected time
183 is charged against header time, and body time starts back at 0. */
184 if (flag_detailed_statistics
)
186 int this_time
= get_run_time ();
187 struct c_fileinfo
*file
= get_fileinfo (name
);
188 header_time
+= this_time
- body_time
;
189 file
->time
+= this_time
- body_time
;
190 body_time
= this_time
;
195 dump_one_header (n
, dummy
)
197 void *dummy ATTRIBUTE_UNUSED
;
199 print_time ((const char *) n
->key
,
200 ((struct c_fileinfo
*) n
->value
)->time
);
205 dump_time_statistics ()
207 struct c_fileinfo
*file
= get_fileinfo (input_filename
);
208 int this_time
= get_run_time ();
209 file
->time
+= this_time
- body_time
;
211 fprintf (stderr
, "\n******\n");
212 print_time ("header files (total)", header_time
);
213 print_time ("main file (total)", this_time
- body_time
);
214 fprintf (stderr
, "ratio = %g : 1\n",
215 (double)header_time
/ (double)(this_time
- body_time
));
216 fprintf (stderr
, "\n******\n");
218 splay_tree_foreach (file_info_tree
, dump_one_header
, 0);
222 cb_ident (pfile
, line
, str
)
223 cpp_reader
*pfile ATTRIBUTE_UNUSED
;
224 unsigned int line ATTRIBUTE_UNUSED
;
225 const cpp_string
*str ATTRIBUTE_UNUSED
;
227 #ifdef ASM_OUTPUT_IDENT
230 /* Convert escapes in the string. */
231 tree value ATTRIBUTE_UNUSED
= lex_string (str
->text
, str
->len
, 0);
232 ASM_OUTPUT_IDENT (asm_out_file
, TREE_STRING_POINTER (value
));
237 /* Called at the start of every non-empty line. TOKEN is the first
238 lexed token on the line. Used for diagnostic line numbers. */
240 cb_line_change (pfile
, token
, parsing_args
)
241 cpp_reader
*pfile ATTRIBUTE_UNUSED
;
242 const cpp_token
*token
;
243 int parsing_args ATTRIBUTE_UNUSED
;
245 src_lineno
= SOURCE_LINE (map
, token
->line
);
249 cb_file_change (pfile
, new_map
)
250 cpp_reader
*pfile ATTRIBUTE_UNUSED
;
251 const struct line_map
*new_map
;
253 unsigned int to_line
= SOURCE_LINE (new_map
, new_map
->to_line
);
255 if (new_map
->reason
== LC_ENTER
)
257 /* Don't stack the main buffer on the input stack;
258 we already did in compile_file. */
260 main_input_filename
= new_map
->to_file
;
263 int included_at
= SOURCE_LINE (new_map
- 1, new_map
->from_line
- 1);
265 lineno
= included_at
;
266 push_srcloc (new_map
->to_file
, 1);
267 (*debug_hooks
->start_source_file
) (included_at
, new_map
->to_file
);
268 #ifndef NO_IMPLICIT_EXTERN_C
271 else if (new_map
->sysp
== 2)
274 ++pending_lang_change
;
279 else if (new_map
->reason
== LC_LEAVE
)
281 #ifndef NO_IMPLICIT_EXTERN_C
282 if (c_header_level
&& --c_header_level
== 0)
284 if (new_map
->sysp
== 2)
285 warning ("badly nested C headers from preprocessor");
286 --pending_lang_change
;
291 (*debug_hooks
->end_source_file
) (to_line
);
294 update_header_times (new_map
->to_file
);
295 in_system_header
= new_map
->sysp
!= 0;
296 input_filename
= new_map
->to_file
;
301 extract_interface_info ();
305 cb_def_pragma (pfile
, line
)
309 /* Issue a warning message if we have been asked to do so. Ignore
310 unknown pragmas in system headers unless an explicit
311 -Wunknown-pragmas has been given. */
312 if (warn_unknown_pragmas
> in_system_header
)
314 const unsigned char *space
, *name
;
317 space
= name
= (const unsigned char *) "";
318 s
= cpp_get_token (pfile
);
319 if (s
->type
!= CPP_EOF
)
321 space
= cpp_token_as_text (pfile
, s
);
322 s
= cpp_get_token (pfile
);
323 if (s
->type
== CPP_NAME
)
324 name
= cpp_token_as_text (pfile
, s
);
327 lineno
= SOURCE_LINE (map
, line
);
328 warning ("ignoring #pragma %s %s", space
, name
);
332 /* #define callback for DWARF and DWARF2 debug info. */
334 cb_define (pfile
, line
, node
)
339 (*debug_hooks
->define
) (SOURCE_LINE (map
, line
),
340 (const char *) cpp_macro_definition (pfile
, node
));
343 /* #undef callback for DWARF and DWARF2 debug info. */
345 cb_undef (pfile
, line
, node
)
346 cpp_reader
*pfile ATTRIBUTE_UNUSED
;
350 (*debug_hooks
->undef
) (SOURCE_LINE (map
, line
),
351 (const char *) NODE_NAME (node
));
355 /* Returns nonzero if C is a universal-character-name. Give an error if it
356 is not one which may appear in an identifier, as per [extendid].
358 Note that extended character support in identifiers has not yet been
359 implemented. It is my personal opinion that this is not a desirable
360 feature. Portable code cannot count on support for more than the basic
361 identifier character set. */
374 /* None of the valid chars are outside the Basic Multilingual Plane (the
378 error ("universal-character-name '\\U%08x' not valid in identifier", c
);
383 if ((c
>= 0x00c0 && c
<= 0x00d6)
384 || (c
>= 0x00d8 && c
<= 0x00f6)
385 || (c
>= 0x00f8 && c
<= 0x01f5)
386 || (c
>= 0x01fa && c
<= 0x0217)
387 || (c
>= 0x0250 && c
<= 0x02a8)
388 || (c
>= 0x1e00 && c
<= 0x1e9a)
389 || (c
>= 0x1ea0 && c
<= 0x1ef9))
394 || (c
>= 0x0388 && c
<= 0x038a)
396 || (c
>= 0x038e && c
<= 0x03a1)
397 || (c
>= 0x03a3 && c
<= 0x03ce)
398 || (c
>= 0x03d0 && c
<= 0x03d6)
403 || (c
>= 0x03e2 && c
<= 0x03f3)
404 || (c
>= 0x1f00 && c
<= 0x1f15)
405 || (c
>= 0x1f18 && c
<= 0x1f1d)
406 || (c
>= 0x1f20 && c
<= 0x1f45)
407 || (c
>= 0x1f48 && c
<= 0x1f4d)
408 || (c
>= 0x1f50 && c
<= 0x1f57)
412 || (c
>= 0x1f5f && c
<= 0x1f7d)
413 || (c
>= 0x1f80 && c
<= 0x1fb4)
414 || (c
>= 0x1fb6 && c
<= 0x1fbc)
415 || (c
>= 0x1fc2 && c
<= 0x1fc4)
416 || (c
>= 0x1fc6 && c
<= 0x1fcc)
417 || (c
>= 0x1fd0 && c
<= 0x1fd3)
418 || (c
>= 0x1fd6 && c
<= 0x1fdb)
419 || (c
>= 0x1fe0 && c
<= 0x1fec)
420 || (c
>= 0x1ff2 && c
<= 0x1ff4)
421 || (c
>= 0x1ff6 && c
<= 0x1ffc))
425 if ((c
>= 0x0401 && c
<= 0x040d)
426 || (c
>= 0x040f && c
<= 0x044f)
427 || (c
>= 0x0451 && c
<= 0x045c)
428 || (c
>= 0x045e && c
<= 0x0481)
429 || (c
>= 0x0490 && c
<= 0x04c4)
430 || (c
>= 0x04c7 && c
<= 0x04c8)
431 || (c
>= 0x04cb && c
<= 0x04cc)
432 || (c
>= 0x04d0 && c
<= 0x04eb)
433 || (c
>= 0x04ee && c
<= 0x04f5)
434 || (c
>= 0x04f8 && c
<= 0x04f9))
438 if ((c
>= 0x0531 && c
<= 0x0556)
439 || (c
>= 0x0561 && c
<= 0x0587))
443 if ((c
>= 0x05d0 && c
<= 0x05ea)
444 || (c
>= 0x05f0 && c
<= 0x05f4))
448 if ((c
>= 0x0621 && c
<= 0x063a)
449 || (c
>= 0x0640 && c
<= 0x0652)
450 || (c
>= 0x0670 && c
<= 0x06b7)
451 || (c
>= 0x06ba && c
<= 0x06be)
452 || (c
>= 0x06c0 && c
<= 0x06ce)
453 || (c
>= 0x06e5 && c
<= 0x06e7))
457 if ((c
>= 0x0905 && c
<= 0x0939)
458 || (c
>= 0x0958 && c
<= 0x0962))
462 if ((c
>= 0x0985 && c
<= 0x098c)
463 || (c
>= 0x098f && c
<= 0x0990)
464 || (c
>= 0x0993 && c
<= 0x09a8)
465 || (c
>= 0x09aa && c
<= 0x09b0)
467 || (c
>= 0x09b6 && c
<= 0x09b9)
468 || (c
>= 0x09dc && c
<= 0x09dd)
469 || (c
>= 0x09df && c
<= 0x09e1)
470 || (c
>= 0x09f0 && c
<= 0x09f1))
474 if ((c
>= 0x0a05 && c
<= 0x0a0a)
475 || (c
>= 0x0a0f && c
<= 0x0a10)
476 || (c
>= 0x0a13 && c
<= 0x0a28)
477 || (c
>= 0x0a2a && c
<= 0x0a30)
478 || (c
>= 0x0a32 && c
<= 0x0a33)
479 || (c
>= 0x0a35 && c
<= 0x0a36)
480 || (c
>= 0x0a38 && c
<= 0x0a39)
481 || (c
>= 0x0a59 && c
<= 0x0a5c)
486 if ((c
>= 0x0a85 && c
<= 0x0a8b)
488 || (c
>= 0x0a8f && c
<= 0x0a91)
489 || (c
>= 0x0a93 && c
<= 0x0aa8)
490 || (c
>= 0x0aaa && c
<= 0x0ab0)
491 || (c
>= 0x0ab2 && c
<= 0x0ab3)
492 || (c
>= 0x0ab5 && c
<= 0x0ab9)
497 if ((c
>= 0x0b05 && c
<= 0x0b0c)
498 || (c
>= 0x0b0f && c
<= 0x0b10)
499 || (c
>= 0x0b13 && c
<= 0x0b28)
500 || (c
>= 0x0b2a && c
<= 0x0b30)
501 || (c
>= 0x0b32 && c
<= 0x0b33)
502 || (c
>= 0x0b36 && c
<= 0x0b39)
503 || (c
>= 0x0b5c && c
<= 0x0b5d)
504 || (c
>= 0x0b5f && c
<= 0x0b61))
508 if ((c
>= 0x0b85 && c
<= 0x0b8a)
509 || (c
>= 0x0b8e && c
<= 0x0b90)
510 || (c
>= 0x0b92 && c
<= 0x0b95)
511 || (c
>= 0x0b99 && c
<= 0x0b9a)
513 || (c
>= 0x0b9e && c
<= 0x0b9f)
514 || (c
>= 0x0ba3 && c
<= 0x0ba4)
515 || (c
>= 0x0ba8 && c
<= 0x0baa)
516 || (c
>= 0x0bae && c
<= 0x0bb5)
517 || (c
>= 0x0bb7 && c
<= 0x0bb9))
521 if ((c
>= 0x0c05 && c
<= 0x0c0c)
522 || (c
>= 0x0c0e && c
<= 0x0c10)
523 || (c
>= 0x0c12 && c
<= 0x0c28)
524 || (c
>= 0x0c2a && c
<= 0x0c33)
525 || (c
>= 0x0c35 && c
<= 0x0c39)
526 || (c
>= 0x0c60 && c
<= 0x0c61))
530 if ((c
>= 0x0c85 && c
<= 0x0c8c)
531 || (c
>= 0x0c8e && c
<= 0x0c90)
532 || (c
>= 0x0c92 && c
<= 0x0ca8)
533 || (c
>= 0x0caa && c
<= 0x0cb3)
534 || (c
>= 0x0cb5 && c
<= 0x0cb9)
535 || (c
>= 0x0ce0 && c
<= 0x0ce1))
539 if ((c
>= 0x0d05 && c
<= 0x0d0c)
540 || (c
>= 0x0d0e && c
<= 0x0d10)
541 || (c
>= 0x0d12 && c
<= 0x0d28)
542 || (c
>= 0x0d2a && c
<= 0x0d39)
543 || (c
>= 0x0d60 && c
<= 0x0d61))
547 if ((c
>= 0x0e01 && c
<= 0x0e30)
548 || (c
>= 0x0e32 && c
<= 0x0e33)
549 || (c
>= 0x0e40 && c
<= 0x0e46)
550 || (c
>= 0x0e4f && c
<= 0x0e5b))
554 if ((c
>= 0x0e81 && c
<= 0x0e82)
560 || (c
>= 0x0e94 && c
<= 0x0e97)
561 || (c
>= 0x0e99 && c
<= 0x0e9f)
562 || (c
>= 0x0ea1 && c
<= 0x0ea3)
567 || (c
>= 0x0ead && c
<= 0x0eb0)
571 || (c
>= 0x0ec0 && c
<= 0x0ec4)
576 if ((c
>= 0x10a0 && c
<= 0x10c5)
577 || (c
>= 0x10d0 && c
<= 0x10f6))
581 if ((c
>= 0x3041 && c
<= 0x3094)
582 || (c
>= 0x309b && c
<= 0x309e))
586 if ((c
>= 0x30a1 && c
<= 0x30fe))
590 if ((c
>= 0x3105 && c
<= 0x312c))
594 if ((c
>= 0x1100 && c
<= 0x1159)
595 || (c
>= 0x1161 && c
<= 0x11a2)
596 || (c
>= 0x11a8 && c
<= 0x11f9))
599 /* CJK Unified Ideographs */
600 if ((c
>= 0xf900 && c
<= 0xfa2d)
601 || (c
>= 0xfb1f && c
<= 0xfb36)
602 || (c
>= 0xfb38 && c
<= 0xfb3c)
604 || (c
>= 0xfb40 && c
<= 0xfb41)
605 || (c
>= 0xfb42 && c
<= 0xfb44)
606 || (c
>= 0xfb46 && c
<= 0xfbb1)
607 || (c
>= 0xfbd3 && c
<= 0xfd3f)
608 || (c
>= 0xfd50 && c
<= 0xfd8f)
609 || (c
>= 0xfd92 && c
<= 0xfdc7)
610 || (c
>= 0xfdf0 && c
<= 0xfdfb)
611 || (c
>= 0xfe70 && c
<= 0xfe72)
613 || (c
>= 0xfe76 && c
<= 0xfefc)
614 || (c
>= 0xff21 && c
<= 0xff3a)
615 || (c
>= 0xff41 && c
<= 0xff5a)
616 || (c
>= 0xff66 && c
<= 0xffbe)
617 || (c
>= 0xffc2 && c
<= 0xffc7)
618 || (c
>= 0xffca && c
<= 0xffcf)
619 || (c
>= 0xffd2 && c
<= 0xffd7)
620 || (c
>= 0xffda && c
<= 0xffdc)
621 || (c
>= 0x4e00 && c
<= 0x9fa5))
624 error ("universal-character-name '\\u%04x' not valid in identifier", c
);
629 /* Add the UTF-8 representation of C to the token_buffer. */
632 utf8_extend_token (c
)
642 else if (c
<= 0x000007ff)
643 shift
= 6, mask
= 0xc0;
644 else if (c
<= 0x0000ffff)
645 shift
= 12, mask
= 0xe0;
646 else if (c
<= 0x001fffff)
647 shift
= 18, mask
= 0xf0;
648 else if (c
<= 0x03ffffff)
649 shift
= 24, mask
= 0xf8;
651 shift
= 30, mask
= 0xfc;
653 extend_token (mask
| (c
>> shift
));
657 extend_token ((unsigned char) (0x80 | (c
>> shift
)));
667 const cpp_token
*tok
;
670 timevar_push (TV_CPP
);
672 tok
= cpp_get_token (parse_in
);
673 while (tok
->type
== CPP_PADDING
);
674 timevar_pop (TV_CPP
);
676 /* The C++ front end does horrible things with the current line
677 number. To ensure an accurate line number, we must reset it
678 every time we return a token. */
684 /* Issue this error here, where we can get at tok->val.c. */
686 if (ISGRAPH (tok
->val
.c
))
687 error ("stray '%c' in program", tok
->val
.c
);
689 error ("stray '\\%o' in program", tok
->val
.c
);
693 *value
= HT_IDENT_TO_GCC_IDENT (HT_NODE (tok
->val
.node
));
698 unsigned int flags
= cpp_classify_number (parse_in
, tok
);
700 switch (flags
& CPP_N_CATEGORY
)
703 /* cpplib has issued an error. */
704 *value
= error_mark_node
;
708 *value
= interpret_integer (tok
, flags
);
712 *value
= interpret_float (tok
, flags
);
723 *value
= lex_charconst (tok
);
728 *value
= lex_string (tok
->val
.str
.text
, tok
->val
.str
.len
,
729 tok
->type
== CPP_WSTRING
);
732 /* These tokens should not be visible outside cpplib. */
733 case CPP_HEADER_NAME
:
744 /* Returns the narrowest C-visible unsigned type, starting with the
745 minimum specified by FLAGS, that can fit VALUE, or itk_none if
747 static enum integer_type_kind
748 narrowest_unsigned_type (value
, flags
)
752 enum integer_type_kind itk
;
754 if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
755 itk
= itk_unsigned_int
;
756 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
757 itk
= itk_unsigned_long
;
759 itk
= itk_unsigned_long_long
;
761 /* int_fits_type_p must think the type of its first argument is
762 wider than its second argument, or it won't do the proper check. */
763 TREE_TYPE (value
) = widest_unsigned_literal_type_node
;
765 for (; itk
< itk_none
; itk
+= 2 /* skip unsigned types */)
766 if (int_fits_type_p (value
, integer_types
[itk
]))
772 /* Ditto, but narrowest signed type. */
773 static enum integer_type_kind
774 narrowest_signed_type (value
, flags
)
778 enum integer_type_kind itk
;
780 if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
782 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
787 /* int_fits_type_p must think the type of its first argument is
788 wider than its second argument, or it won't do the proper check. */
789 TREE_TYPE (value
) = widest_unsigned_literal_type_node
;
791 for (; itk
< itk_none
; itk
+= 2 /* skip signed types */)
792 if (int_fits_type_p (value
, integer_types
[itk
]))
798 /* Interpret TOKEN, an integer with FLAGS as classified by cpplib. */
800 interpret_integer (token
, flags
)
801 const cpp_token
*token
;
805 enum integer_type_kind itk
;
807 cpp_options
*options
= cpp_get_options (parse_in
);
809 integer
= cpp_interpret_integer (parse_in
, token
, flags
);
810 integer
= cpp_num_sign_extend (integer
, options
->precision
);
811 value
= build_int_2_wide (integer
.low
, integer
.high
);
813 /* The type of a constant with a U suffix is straightforward. */
814 if (flags
& CPP_N_UNSIGNED
)
815 itk
= narrowest_unsigned_type (value
, flags
);
818 /* The type of a potentially-signed integer constant varies
819 depending on the base it's in, the standard in use, and the
821 enum integer_type_kind itk_u
= narrowest_unsigned_type (value
, flags
);
822 enum integer_type_kind itk_s
= narrowest_signed_type (value
, flags
);
824 /* In both C89 and C99, octal and hex constants may be signed or
825 unsigned, whichever fits tighter. We do not warn about this
826 choice differing from the traditional choice, as the constant
827 is probably a bit pattern and either way will work. */
828 if ((flags
& CPP_N_RADIX
) != CPP_N_DECIMAL
)
829 itk
= MIN (itk_u
, itk_s
);
832 /* In C99, decimal constants are always signed.
833 In C89, decimal constants that don't fit in long have
834 undefined behavior; we try to make them unsigned long.
835 In GCC's extended C89, that last is true of decimal
836 constants that don't fit in long long, too. */
839 if (itk_s
> itk_u
&& itk_s
> itk_long
)
843 if (itk_u
< itk_unsigned_long
)
844 itk_u
= itk_unsigned_long
;
846 warning ("this decimal constant is unsigned only in ISO C90");
848 else if (warn_traditional
)
849 warning ("this decimal constant would be unsigned in ISO C90");
855 /* cpplib has already issued a warning for overflow. */
856 type
= ((flags
& CPP_N_UNSIGNED
)
857 ? widest_unsigned_literal_type_node
858 : widest_integer_literal_type_node
);
860 type
= integer_types
[itk
];
862 if (itk
> itk_unsigned_long
863 && (flags
& CPP_N_WIDTH
) != CPP_N_LARGE
864 && ! in_system_header
&& ! flag_isoc99
)
865 pedwarn ("integer constant is too large for \"%s\" type",
866 (flags
& CPP_N_UNSIGNED
) ? "unsigned long" : "long");
868 TREE_TYPE (value
) = type
;
870 /* Convert imaginary to a complex type. */
871 if (flags
& CPP_N_IMAGINARY
)
872 value
= build_complex (NULL_TREE
, convert (type
, integer_zero_node
), value
);
877 /* Interpret TOKEN, a floating point number with FLAGS as classified
880 interpret_float (token
, flags
)
881 const cpp_token
*token
;
886 REAL_VALUE_TYPE real
;
889 const char *typename
;
891 /* FIXME: make %T work in error/warning, then we don't need typename. */
892 if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
894 type
= long_double_type_node
;
895 typename
= "long double";
897 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
898 || flag_single_precision_constant
)
900 type
= float_type_node
;
905 type
= double_type_node
;
909 /* Copy the constant to a nul-terminated buffer. If the constant
910 has any suffixes, cut them off; REAL_VALUE_ATOF/ REAL_VALUE_HTOF
911 can't handle them. */
912 copylen
= token
->val
.str
.len
;
913 if ((flags
& CPP_N_WIDTH
) != CPP_N_MEDIUM
)
914 /* Must be an F or L suffix. */
916 if (flags
& CPP_N_IMAGINARY
)
920 copy
= alloca (copylen
+ 1);
921 memcpy (copy
, token
->val
.str
.text
, copylen
);
922 copy
[copylen
] = '\0';
924 real_from_string (&real
, copy
);
925 real_convert (&real
, TYPE_MODE (type
), &real
);
927 /* A diagnostic is required for "soft" overflow by some ISO C
928 testsuites. This is not pedwarn, because some people don't want
930 ??? That's a dubious reason... is this a mandatory diagnostic or
931 isn't it? -- zw, 2001-08-21. */
932 if (REAL_VALUE_ISINF (real
) && pedantic
)
933 warning ("floating constant exceeds range of \"%s\"", typename
);
935 /* Create a node with determined type and value. */
936 value
= build_real (type
, real
);
937 if (flags
& CPP_N_IMAGINARY
)
938 value
= build_complex (NULL_TREE
, convert (type
, integer_zero_node
), value
);
944 lex_string (str
, len
, wide
)
945 const unsigned char *str
;
950 char *buf
= alloca ((len
+ 1) * (wide
? WCHAR_BYTES
: 1));
952 const unsigned char *p
= str
, *limit
= str
+ len
;
955 #ifdef MULTIBYTE_CHARS
956 /* Reset multibyte conversion state. */
957 (void) local_mbtowc (NULL
, NULL
, 0);
962 #ifdef MULTIBYTE_CHARS
966 char_len
= local_mbtowc (&wc
, (const char *) p
, limit
- p
);
969 warning ("ignoring invalid multibyte character");
982 if (c
== '\\' && !ignore_escape_flag
)
983 c
= cpp_parse_escape (parse_in
, &p
, limit
, wide
);
985 /* Add this single character into the buffer either as a wchar_t,
986 a multibyte sequence, or as a single byte. */
989 unsigned charwidth
= TYPE_PRECISION (char_type_node
);
990 unsigned bytemask
= (1 << charwidth
) - 1;
993 for (byte
= 0; byte
< WCHAR_BYTES
; ++byte
)
996 if (byte
>= (int) sizeof (c
))
999 n
= (c
>> (byte
* charwidth
)) & bytemask
;
1000 if (BYTES_BIG_ENDIAN
)
1001 q
[WCHAR_BYTES
- byte
- 1] = n
;
1007 #ifdef MULTIBYTE_CHARS
1008 else if (char_len
> 1)
1010 /* We're dealing with a multibyte character. */
1011 for ( ; char_len
>0; --char_len
)
1013 *q
++ = *(p
- char_len
);
1023 /* Terminate the string value, either with a single byte zero
1024 or with a wide zero. */
1028 memset (q
, 0, WCHAR_BYTES
);
1036 value
= build_string (q
- buf
, buf
);
1039 TREE_TYPE (value
) = wchar_array_type_node
;
1041 TREE_TYPE (value
) = char_array_type_node
;
1045 /* Converts a (possibly wide) character constant token into a tree. */
1047 lex_charconst (token
)
1048 const cpp_token
*token
;
1052 unsigned int chars_seen
;
1055 result
= cpp_interpret_charconst (parse_in
, token
,
1056 &chars_seen
, &unsignedp
);
1058 /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
1059 before possibly widening to HOST_WIDE_INT for build_int_2. */
1060 if (unsignedp
|| (cppchar_signed_t
) result
>= 0)
1061 value
= build_int_2 (result
, 0);
1063 value
= build_int_2 ((cppchar_signed_t
) result
, -1);
1065 if (token
->type
== CPP_WCHAR
)
1066 type
= wchar_type_node
;
1067 /* In C, a character constant has type 'int'.
1068 In C++ 'char', but multi-char charconsts have type 'int'. */
1069 else if ((c_language
== clk_c
) || chars_seen
> 1)
1070 type
= integer_type_node
;
1072 type
= char_type_node
;
1074 TREE_TYPE (value
) = type
;