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.
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
40 #include "splay-tree.h"
43 #ifdef MULTIBYTE_CHARS
46 #endif /* MULTIBYTE_CHARS */
47 #ifndef GET_ENVIRONMENT
48 #define GET_ENVIRONMENT(ENV_VALUE,ENV_NAME) ((ENV_VALUE) = getenv (ENV_NAME))
51 /* The current line map. */
52 static const struct line_map
*map
;
54 /* The line used to refresh the lineno global variable after each token. */
55 static unsigned int src_lineno
;
57 /* We may keep statistics about how long which files took to compile. */
58 static int header_time
, body_time
;
59 static splay_tree file_info_tree
;
61 /* File used for outputting assembler code. */
62 extern FILE *asm_out_file
;
64 #undef WCHAR_TYPE_SIZE
65 #define WCHAR_TYPE_SIZE TYPE_PRECISION (wchar_type_node)
67 /* Number of bytes in a wide character. */
68 #define WCHAR_BYTES (WCHAR_TYPE_SIZE / BITS_PER_UNIT)
70 int pending_lang_change
; /* If we need to switch languages - C++ only */
71 int c_header_level
; /* depth in C headers - C++ only */
73 /* Nonzero tells yylex to ignore \ in string constants. */
74 static int ignore_escape_flag
;
76 static tree interpret_integer
PARAMS ((const cpp_token
*, unsigned int));
77 static tree interpret_float
PARAMS ((const cpp_token
*, unsigned int));
78 static enum integer_type_kind
79 narrowest_unsigned_type
PARAMS ((tree
, unsigned int));
80 static enum integer_type_kind
81 narrowest_signed_type
PARAMS ((tree
, unsigned int));
82 static tree lex_string
PARAMS ((const unsigned char *, unsigned int,
84 static tree lex_charconst
PARAMS ((const cpp_token
*));
85 static void update_header_times
PARAMS ((const char *));
86 static int dump_one_header
PARAMS ((splay_tree_node
, void *));
87 static void cb_line_change
PARAMS ((cpp_reader
*, const cpp_token
*, int));
88 static void cb_ident
PARAMS ((cpp_reader
*, unsigned int,
90 static void cb_file_change
PARAMS ((cpp_reader
*, const struct line_map
*));
91 static void cb_def_pragma
PARAMS ((cpp_reader
*, unsigned int));
92 static void cb_define
PARAMS ((cpp_reader
*, unsigned int,
94 static void cb_undef
PARAMS ((cpp_reader
*, unsigned int,
101 struct cpp_callbacks
*cb
;
102 struct c_fileinfo
*toplevel
;
104 /* Set up filename timing. Must happen before cpp_read_main_file. */
105 file_info_tree
= splay_tree_new ((splay_tree_compare_fn
)strcmp
,
107 (splay_tree_delete_value_fn
)free
);
108 toplevel
= get_fileinfo ("<top level>");
109 if (flag_detailed_statistics
)
112 body_time
= get_run_time ();
113 toplevel
->time
= body_time
;
116 #ifdef MULTIBYTE_CHARS
117 /* Change to the native locale for multibyte conversions. */
118 setlocale (LC_CTYPE
, "");
119 GET_ENVIRONMENT (literal_codeset
, "LANG");
122 cb
= cpp_get_callbacks (parse_in
);
124 cb
->line_change
= cb_line_change
;
125 cb
->ident
= cb_ident
;
126 cb
->file_change
= cb_file_change
;
127 cb
->def_pragma
= cb_def_pragma
;
129 /* Set the debug callbacks if we can use them. */
130 if (debug_info_level
== DINFO_LEVEL_VERBOSE
131 && (write_symbols
== DWARF_DEBUG
|| write_symbols
== DWARF2_DEBUG
132 || write_symbols
== VMS_AND_DWARF2_DEBUG
))
134 cb
->define
= cb_define
;
135 cb
->undef
= cb_undef
;
141 if (filename
== NULL
|| !strcmp (filename
, "-"))
144 return cpp_read_main_file (parse_in
, filename
, ident_hash
);
147 /* A thin wrapper around the real parser that initializes the
148 integrated preprocessor after debug output has been initialized.
149 Also, make sure the start_source_file debug hook gets called for
150 the primary source file. */
153 c_common_parse_file (set_yydebug
)
154 int set_yydebug ATTRIBUTE_UNUSED
;
157 yydebug
= set_yydebug
;
159 warning ("YYDEBUG not defined");
162 (*debug_hooks
->start_source_file
) (lineno
, input_filename
);
163 cpp_finish_options (parse_in
);
166 free_parser_stacks ();
174 struct c_fileinfo
*fi
;
176 n
= splay_tree_lookup (file_info_tree
, (splay_tree_key
) name
);
178 return (struct c_fileinfo
*) n
->value
;
180 fi
= (struct c_fileinfo
*) xmalloc (sizeof (struct c_fileinfo
));
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
);
190 update_header_times (name
)
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
)
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
;
206 dump_one_header (n
, dummy
)
208 void *dummy ATTRIBUTE_UNUSED
;
210 print_time ((const char *) n
->key
,
211 ((struct c_fileinfo
*) n
->value
)->time
);
216 dump_time_statistics ()
218 struct c_fileinfo
*file
= get_fileinfo (input_filename
);
219 int this_time
= get_run_time ();
220 file
->time
+= this_time
- body_time
;
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");
229 splay_tree_foreach (file_info_tree
, dump_one_header
, 0);
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
;
238 #ifdef ASM_OUTPUT_IDENT
241 /* Convert escapes in the string. */
242 tree value
= lex_string (str
->text
, str
->len
, 0);
243 ASM_OUTPUT_IDENT (asm_out_file
, TREE_STRING_POINTER (value
));
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. */
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
;
256 src_lineno
= SOURCE_LINE (map
, token
->line
);
260 cb_file_change (pfile
, new_map
)
261 cpp_reader
*pfile ATTRIBUTE_UNUSED
;
262 const struct line_map
*new_map
;
264 unsigned int to_line
= SOURCE_LINE (new_map
, new_map
->to_line
);
266 if (new_map
->reason
== LC_ENTER
)
268 /* Don't stack the main buffer on the input stack;
269 we already did in compile_file. */
271 main_input_filename
= new_map
->to_file
;
274 int included_at
= SOURCE_LINE (new_map
- 1, new_map
->from_line
- 1);
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
282 else if (new_map
->sysp
== 2)
285 ++pending_lang_change
;
290 else if (new_map
->reason
== LC_LEAVE
)
292 #ifndef NO_IMPLICIT_EXTERN_C
293 if (c_header_level
&& --c_header_level
== 0)
295 if (new_map
->sysp
== 2)
296 warning ("badly nested C headers from preprocessor");
297 --pending_lang_change
;
302 (*debug_hooks
->end_source_file
) (to_line
);
305 update_header_times (new_map
->to_file
);
306 in_system_header
= new_map
->sysp
!= 0;
307 input_filename
= new_map
->to_file
;
312 extract_interface_info ();
316 cb_def_pragma (pfile
, line
)
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
)
325 const unsigned char *space
, *name
;
328 space
= name
= (const unsigned char *) "";
329 s
= cpp_get_token (pfile
);
330 if (s
->type
!= CPP_EOF
)
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
);
338 lineno
= SOURCE_LINE (map
, line
);
339 warning ("ignoring #pragma %s %s", space
, name
);
343 /* #define callback for DWARF and DWARF2 debug info. */
345 cb_define (pfile
, line
, node
)
350 (*debug_hooks
->define
) (SOURCE_LINE (map
, line
),
351 (const char *) cpp_macro_definition (pfile
, node
));
354 /* #undef callback for DWARF and DWARF2 debug info. */
356 cb_undef (pfile
, line
, node
)
357 cpp_reader
*pfile ATTRIBUTE_UNUSED
;
361 (*debug_hooks
->undef
) (SOURCE_LINE (map
, line
),
362 (const char *) NODE_NAME (node
));
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].
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. */
385 /* None of the valid chars are outside the Basic Multilingual Plane (the
389 error ("universal-character-name '\\U%08x' not valid in identifier", c
);
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))
405 || (c
>= 0x0388 && c
<= 0x038a)
407 || (c
>= 0x038e && c
<= 0x03a1)
408 || (c
>= 0x03a3 && c
<= 0x03ce)
409 || (c
>= 0x03d0 && c
<= 0x03d6)
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)
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))
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))
449 if ((c
>= 0x0531 && c
<= 0x0556)
450 || (c
>= 0x0561 && c
<= 0x0587))
454 if ((c
>= 0x05d0 && c
<= 0x05ea)
455 || (c
>= 0x05f0 && c
<= 0x05f4))
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))
468 if ((c
>= 0x0905 && c
<= 0x0939)
469 || (c
>= 0x0958 && c
<= 0x0962))
473 if ((c
>= 0x0985 && c
<= 0x098c)
474 || (c
>= 0x098f && c
<= 0x0990)
475 || (c
>= 0x0993 && c
<= 0x09a8)
476 || (c
>= 0x09aa && c
<= 0x09b0)
478 || (c
>= 0x09b6 && c
<= 0x09b9)
479 || (c
>= 0x09dc && c
<= 0x09dd)
480 || (c
>= 0x09df && c
<= 0x09e1)
481 || (c
>= 0x09f0 && c
<= 0x09f1))
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)
497 if ((c
>= 0x0a85 && c
<= 0x0a8b)
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)
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))
519 if ((c
>= 0x0b85 && c
<= 0x0b8a)
520 || (c
>= 0x0b8e && c
<= 0x0b90)
521 || (c
>= 0x0b92 && c
<= 0x0b95)
522 || (c
>= 0x0b99 && c
<= 0x0b9a)
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))
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))
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))
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))
558 if ((c
>= 0x0e01 && c
<= 0x0e30)
559 || (c
>= 0x0e32 && c
<= 0x0e33)
560 || (c
>= 0x0e40 && c
<= 0x0e46)
561 || (c
>= 0x0e4f && c
<= 0x0e5b))
565 if ((c
>= 0x0e81 && c
<= 0x0e82)
571 || (c
>= 0x0e94 && c
<= 0x0e97)
572 || (c
>= 0x0e99 && c
<= 0x0e9f)
573 || (c
>= 0x0ea1 && c
<= 0x0ea3)
578 || (c
>= 0x0ead && c
<= 0x0eb0)
582 || (c
>= 0x0ec0 && c
<= 0x0ec4)
587 if ((c
>= 0x10a0 && c
<= 0x10c5)
588 || (c
>= 0x10d0 && c
<= 0x10f6))
592 if ((c
>= 0x3041 && c
<= 0x3094)
593 || (c
>= 0x309b && c
<= 0x309e))
597 if ((c
>= 0x30a1 && c
<= 0x30fe))
601 if ((c
>= 0x3105 && c
<= 0x312c))
605 if ((c
>= 0x1100 && c
<= 0x1159)
606 || (c
>= 0x1161 && c
<= 0x11a2)
607 || (c
>= 0x11a8 && c
<= 0x11f9))
610 /* CJK Unified Ideographs */
611 if ((c
>= 0xf900 && c
<= 0xfa2d)
612 || (c
>= 0xfb1f && c
<= 0xfb36)
613 || (c
>= 0xfb38 && c
<= 0xfb3c)
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)
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))
635 error ("universal-character-name '\\u%04x' not valid in identifier", c
);
640 /* Add the UTF-8 representation of C to the token_buffer. */
643 utf8_extend_token (c
)
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;
662 shift
= 30, mask
= 0xfc;
664 extend_token (mask
| (c
>> shift
));
668 extend_token ((unsigned char) (0x80 | (c
>> shift
)));
678 const cpp_token
*tok
;
681 timevar_push (TV_CPP
);
683 tok
= cpp_get_token (parse_in
);
684 while (tok
->type
== CPP_PADDING
);
685 timevar_pop (TV_CPP
);
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. */
695 /* Issue this error here, where we can get at tok->val.c. */
697 if (ISGRAPH (tok
->val
.c
))
698 error ("stray '%c' in program", tok
->val
.c
);
700 error ("stray '\\%o' in program", tok
->val
.c
);
704 *value
= HT_IDENT_TO_GCC_IDENT (HT_NODE (tok
->val
.node
));
709 unsigned int flags
= cpp_classify_number (parse_in
, tok
);
711 switch (flags
& CPP_N_CATEGORY
)
714 /* cpplib has issued an error. */
718 *value
= interpret_integer (tok
, flags
);
722 *value
= interpret_float (tok
, flags
);
733 *value
= lex_charconst (tok
);
738 *value
= lex_string (tok
->val
.str
.text
, tok
->val
.str
.len
,
739 tok
->type
== CPP_WSTRING
);
742 /* These tokens should not be visible outside cpplib. */
743 case CPP_HEADER_NAME
:
754 /* Returns the narrowest C-visible unsigned type, starting with the
755 minimum specified by FLAGS, that can fit VALUE, or itk_none if
757 static enum integer_type_kind
758 narrowest_unsigned_type (value
, flags
)
762 enum integer_type_kind itk
;
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
;
769 itk
= itk_unsigned_long_long
;
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
;
775 for (; itk
< itk_none
; itk
+= 2 /* skip unsigned types */)
776 if (int_fits_type_p (value
, integer_types
[itk
]))
782 /* Ditto, but narrowest signed type. */
783 static enum integer_type_kind
784 narrowest_signed_type (value
, flags
)
788 enum integer_type_kind itk
;
790 if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
)
792 else if ((flags
& CPP_N_WIDTH
) == CPP_N_MEDIUM
)
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
;
801 for (; itk
< itk_none
; itk
+= 2 /* skip signed types */)
802 if (int_fits_type_p (value
, integer_types
[itk
]))
808 /* Interpret TOKEN, an integer with FLAGS as classified by cpplib. */
810 interpret_integer (token
, flags
)
811 const cpp_token
*token
;
815 enum integer_type_kind itk
;
817 cpp_options
*options
= cpp_get_options (parse_in
);
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
);
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
);
828 /* The type of a potentially-signed integer constant varies
829 depending on the base it's in, the standard in use, and the
831 enum integer_type_kind itk_u
= narrowest_unsigned_type (value
, flags
);
832 enum integer_type_kind itk_s
= narrowest_signed_type (value
, flags
);
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
);
842 /* In C99, decimal constants are always signed.
843 In C89, decimal constants that don't fit in long have
844 undefined behaviour; we try to make them unsigned long.
845 In GCC's extended C89, that last is true of decimal
846 constants that don't fit in long long, too. */
849 if (itk_s
> itk_u
&& itk_s
> itk_long
)
853 if (itk_u
< itk_unsigned_long
)
854 itk_u
= itk_unsigned_long
;
856 warning ("this decimal constant is unsigned only in ISO C89");
858 else if (warn_traditional
)
859 warning ("this decimal constant would be unsigned in ISO C89");
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
);
870 type
= integer_types
[itk
];
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");
878 TREE_TYPE (value
) = type
;
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
);
887 /* Interpret TOKEN, a floating point number with FLAGS as classified
890 interpret_float (token
, flags
)
891 const cpp_token
*token
;
896 REAL_VALUE_TYPE real
;
899 const char *typename
;
901 /* FIXME: make %T work in error/warning, then we don't need typename. */
902 if ((flags
& CPP_N_WIDTH
) == CPP_N_LARGE
)
904 type
= long_double_type_node
;
905 typename
= "long double";
907 else if ((flags
& CPP_N_WIDTH
) == CPP_N_SMALL
908 || flag_single_precision_constant
)
910 type
= float_type_node
;
915 type
= double_type_node
;
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. */
926 if (flags
& CPP_N_IMAGINARY
)
930 copy
= alloca (copylen
+ 1);
931 memcpy (copy
, token
->val
.str
.text
, copylen
);
932 copy
[copylen
] = '\0';
934 /* The second argument, machine_mode, of REAL_VALUE_ATOF tells the
935 desired precision of the binary result of decimal-to-binary
937 if (flags
& CPP_N_HEX
)
938 real
= REAL_VALUE_HTOF (copy
, TYPE_MODE (type
));
940 real
= REAL_VALUE_ATOF (copy
, TYPE_MODE (type
));
942 /* A diagnostic is required for "soft" overflow by some ISO C
943 testsuites. This is not pedwarn, because some people don't want
945 ??? That's a dubious reason... is this a mandatory diagnostic or
946 isn't it? -- zw, 2001-08-21. */
947 if (REAL_VALUE_ISINF (real
) && pedantic
)
948 warning ("floating constant exceeds range of \"%s\"", typename
);
950 /* Create a node with determined type and value. */
951 value
= build_real (type
, real
);
952 if (flags
& CPP_N_IMAGINARY
)
953 value
= build_complex (NULL_TREE
, convert (type
, integer_zero_node
), value
);
959 lex_string (str
, len
, wide
)
960 const unsigned char *str
;
965 char *buf
= alloca ((len
+ 1) * (wide
? WCHAR_BYTES
: 1));
967 const unsigned char *p
= str
, *limit
= str
+ len
;
970 #ifdef MULTIBYTE_CHARS
971 /* Reset multibyte conversion state. */
972 (void) local_mbtowc (NULL
, NULL
, 0);
977 #ifdef MULTIBYTE_CHARS
981 char_len
= local_mbtowc (&wc
, (const char *) p
, limit
- p
);
984 warning ("ignoring invalid multibyte character");
997 if (c
== '\\' && !ignore_escape_flag
)
998 c
= cpp_parse_escape (parse_in
, &p
, limit
, wide
);
1000 /* Add this single character into the buffer either as a wchar_t,
1001 a multibyte sequence, or as a single byte. */
1004 unsigned charwidth
= TYPE_PRECISION (char_type_node
);
1005 unsigned bytemask
= (1 << charwidth
) - 1;
1008 for (byte
= 0; byte
< WCHAR_BYTES
; ++byte
)
1011 if (byte
>= (int) sizeof (c
))
1014 n
= (c
>> (byte
* charwidth
)) & bytemask
;
1015 if (BYTES_BIG_ENDIAN
)
1016 q
[WCHAR_BYTES
- byte
- 1] = n
;
1022 #ifdef MULTIBYTE_CHARS
1023 else if (char_len
> 1)
1025 /* We're dealing with a multibyte character. */
1026 for ( ; char_len
>0; --char_len
)
1028 *q
++ = *(p
- char_len
);
1038 /* Terminate the string value, either with a single byte zero
1039 or with a wide zero. */
1043 memset (q
, 0, WCHAR_BYTES
);
1051 value
= build_string (q
- buf
, buf
);
1054 TREE_TYPE (value
) = wchar_array_type_node
;
1056 TREE_TYPE (value
) = char_array_type_node
;
1060 /* Converts a (possibly wide) character constant token into a tree. */
1062 lex_charconst (token
)
1063 const cpp_token
*token
;
1067 unsigned int chars_seen
;
1070 result
= cpp_interpret_charconst (parse_in
, token
,
1071 &chars_seen
, &unsignedp
);
1073 /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
1074 before possibly widening to HOST_WIDE_INT for build_int_2. */
1075 if (unsignedp
|| (cppchar_signed_t
) result
>= 0)
1076 value
= build_int_2 (result
, 0);
1078 value
= build_int_2 ((cppchar_signed_t
) result
, -1);
1080 if (token
->type
== CPP_WCHAR
)
1081 type
= wchar_type_node
;
1082 /* In C, a character constant has type 'int'.
1083 In C++ 'char', but multi-char charconsts have type 'int'. */
1084 else if ((c_language
== clk_c
|| c_language
== clk_objective_c
)
1086 type
= integer_type_node
;
1088 type
= char_type_node
;
1090 TREE_TYPE (value
) = type
;