1 /* Separate lexical analyzer for GNU C++.
2 Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000 Free Software Foundation, Inc.
4 Hacked by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GNU CC.
8 GNU CC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GNU CC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GNU CC; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
24 /* This file is the lexical analyzer for GNU C++. */
26 /* Cause the `yydebug' variable to be defined. */
44 #include "diagnostic.h"
46 #ifdef MULTIBYTE_CHARS
51 #define obstack_chunk_alloc xmalloc
52 #define obstack_chunk_free free
54 extern void yyprint PARAMS ((FILE *, int, YYSTYPE));
56 static tree get_time_identifier PARAMS ((const char *));
57 static int check_newline PARAMS ((void));
58 static int whitespace_cr PARAMS ((int));
59 static int skip_white_space PARAMS ((int));
60 static void finish_defarg PARAMS ((void));
61 static int interface_strcmp PARAMS ((const char *));
62 static int readescape PARAMS ((int *));
63 static char *extend_token_buffer PARAMS ((const char *));
64 static void consume_string PARAMS ((struct obstack *, int));
65 static void feed_defarg PARAMS ((tree, tree));
66 static void store_pending_inline PARAMS ((tree, struct pending_inline *));
67 static void reinit_parse_for_expr PARAMS ((struct obstack *));
68 static int *init_cpp_parse PARAMS ((void));
69 static void cp_pragma_interface PARAMS ((const char *));
70 static void cp_pragma_implementation PARAMS ((const char *));
71 static int handle_cp_pragma PARAMS ((const char *));
72 #ifdef HANDLE_GENERIC_PRAGMAS
73 static int handle_generic_pragma PARAMS ((int));
75 #ifdef GATHER_STATISTICS
77 static int reduce_cmp PARAMS ((int *, int *));
78 static int token_cmp PARAMS ((int *, int *));
81 static void begin_definition_of_inclass_inline PARAMS ((struct pending_inline*));
82 static void parse_float PARAMS ((PTR));
83 static int is_global PARAMS ((tree));
84 static void init_filename_times PARAMS ((void));
85 static void extend_token_buffer_to PARAMS ((int));
87 static int pragma_getc PARAMS ((void));
88 static void pragma_ungetc PARAMS ((int));
90 static int read_line_number PARAMS ((int *));
91 static int token_getch PARAMS ((void));
92 static void token_put_back PARAMS ((int));
93 static void mark_impl_file_chain PARAMS ((void *));
94 static int read_ucs PARAMS ((int));
95 static int is_extended_char PARAMS ((int));
96 static int is_extended_char_1 PARAMS ((int));
97 static void init_operators PARAMS ((void));
99 /* This obstack is needed to hold text. It is not safe to use
100 TOKEN_BUFFER because `check_newline' calls `yylex'. */
101 struct obstack inline_text_obstack;
102 char *inline_text_firstobj;
104 /* Nonzero if parse output is being saved to an obstack for later parsing. */
105 static int saving_parse_to_obstack = 0;
109 extern cpp_reader parse_in;
110 extern cpp_options parse_options;
111 extern unsigned char *yy_cur, *yy_lim;
112 extern enum cpp_token cpp_token;
120 /* Pending language change.
121 Positive is push count, negative is pop count. */
122 int pending_lang_change = 0;
124 /* Wrap the current header file in extern "C". */
125 static int c_header_level = 0;
127 extern int first_token;
128 extern struct obstack token_obstack;
130 /* ??? Don't really know where this goes yet. */
134 extern int yychar; /* the lookahead symbol */
135 extern YYSTYPE yylval; /* the semantic value of the */
136 /* lookahead symbol */
139 YYLTYPE yylloc; /* location data for the lookahead */
144 /* the declaration found for the last IDENTIFIER token read in.
145 yylex must look this up to detect typedefs, which get token type TYPENAME,
146 so it is left around in case the identifier is not a typedef but is
147 used in a context which makes it a reference to a variable. */
150 /* We may keep statistics about how long which files took to compile. */
151 static int header_time, body_time;
152 static tree filename_times;
153 static tree this_filename_time;
155 /* Array for holding counts of the numbers of tokens seen. */
156 extern int *token_count;
158 /* When we see a default argument in a method declaration, we snarf it as
159 text using snarf_defarg. When we get up to namespace scope, we then go
160 through and parse all of them using do_pending_defargs. Since yacc
161 parsers are not reentrant, we retain defargs state in these two
162 variables so that subsequent calls to do_pending_defargs can resume
163 where the previous call left off. */
165 static tree defarg_fns;
166 static tree defarg_parm;
168 /* Functions and data structures for #pragma interface.
170 `#pragma implementation' means that the main file being compiled
171 is considered to implement (provide) the classes that appear in
172 its main body. I.e., if this is file "foo.cc", and class `bar'
173 is defined in "foo.cc", then we say that "foo.cc implements bar".
175 All main input files "implement" themselves automagically.
177 `#pragma interface' means that unless this file (of the form "foo.h"
178 is not presently being included by file "foo.cc", the
179 CLASSTYPE_INTERFACE_ONLY bit gets set. The effect is that none
180 of the vtables nor any of the inline functions defined in foo.h
183 There are cases when we want to link files such as "defs.h" and
184 "main.cc". In this case, we give "defs.h" a `#pragma interface',
185 and "main.cc" has `#pragma implementation "defs.h"'. */
190 struct impl_files *next;
193 static struct impl_files *impl_file_chain;
195 /* The string used to represent the filename of internally generated
196 tree nodes. The variable, which is dynamically allocated, should
197 be used; the macro is only used to initialize it. */
198 static char *internal_filename;
199 #define INTERNAL_FILENAME ("<internal>")
201 /* Return something to represent absolute declarators containing a *.
202 TARGET is the absolute declarator that the * contains.
203 CV_QUALIFIERS is a list of modifiers such as const or volatile
204 to apply to the pointer type, represented as identifiers.
206 We return an INDIRECT_REF whose "contents" are TARGET
207 and whose type is the modifier list. */
210 make_pointer_declarator (cv_qualifiers, target)
211 tree cv_qualifiers, target;
213 if (target && TREE_CODE (target) == IDENTIFIER_NODE
214 && ANON_AGGRNAME_P (target))
215 error ("type name expected before `*'");
216 target = build_parse_node (INDIRECT_REF, target);
217 TREE_TYPE (target) = cv_qualifiers;
221 /* Return something to represent absolute declarators containing a &.
222 TARGET is the absolute declarator that the & contains.
223 CV_QUALIFIERS is a list of modifiers such as const or volatile
224 to apply to the reference type, represented as identifiers.
226 We return an ADDR_EXPR whose "contents" are TARGET
227 and whose type is the modifier list. */
230 make_reference_declarator (cv_qualifiers, target)
231 tree cv_qualifiers, target;
235 if (TREE_CODE (target) == ADDR_EXPR)
237 error ("cannot declare references to references");
240 if (TREE_CODE (target) == INDIRECT_REF)
242 error ("cannot declare pointers to references");
245 if (TREE_CODE (target) == IDENTIFIER_NODE && ANON_AGGRNAME_P (target))
246 error ("type name expected before `&'");
248 target = build_parse_node (ADDR_EXPR, target);
249 TREE_TYPE (target) = cv_qualifiers;
254 make_call_declarator (target, parms, cv_qualifiers, exception_specification)
255 tree target, parms, cv_qualifiers, exception_specification;
257 target = build_parse_node (CALL_EXPR, target,
258 /* Both build_parse_node and
259 decl_tree_cons build on the
260 temp_decl_obstack. */
261 decl_tree_cons (parms, cv_qualifiers, NULL_TREE),
262 /* The third operand is really RTL. We
263 shouldn't put anything there. */
265 CALL_DECLARATOR_EXCEPTION_SPEC (target) = exception_specification;
270 set_quals_and_spec (call_declarator, cv_qualifiers, exception_specification)
271 tree call_declarator, cv_qualifiers, exception_specification;
273 CALL_DECLARATOR_QUALS (call_declarator) = cv_qualifiers;
274 CALL_DECLARATOR_EXCEPTION_SPEC (call_declarator) = exception_specification;
277 int interface_only; /* whether or not current file is only for
278 interface definitions. */
279 int interface_unknown; /* whether or not we know this class
280 to behave according to #pragma interface. */
282 /* lexical analyzer */
284 #undef WCHAR_TYPE_SIZE
285 #define WCHAR_TYPE_SIZE TYPE_PRECISION (wchar_type_node)
287 /* Number of bytes in a wide character. */
288 #define WCHAR_BYTES (WCHAR_TYPE_SIZE / BITS_PER_UNIT)
290 static int maxtoken; /* Current nominal length of token buffer. */
291 char *token_buffer; /* Pointer to token buffer.
292 Actual allocated length is maxtoken + 2. */
294 static int indent_level; /* Number of { minus number of }. */
299 /* Nonzero tells yylex to ignore \ in string constants. */
300 static int ignore_escape_flag;
303 get_time_identifier (name)
306 tree time_identifier;
307 int len = strlen (name);
308 char *buf = (char *) alloca (len + 6);
309 strcpy (buf, "file ");
310 bcopy (name, buf+5, len);
312 time_identifier = get_identifier (buf);
313 if (TIME_IDENTIFIER_TIME (time_identifier) == NULL_TREE)
315 TIME_IDENTIFIER_TIME (time_identifier) = build_int_2 (0, 0);
316 TIME_IDENTIFIER_FILEINFO (time_identifier)
317 = build_int_2 (0, 1);
318 SET_IDENTIFIER_GLOBAL_VALUE (time_identifier, filename_times);
319 filename_times = time_identifier;
321 return time_identifier;
325 /* Tree code classes. */
327 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
329 static char cplus_tree_code_type[] = {
331 #include "cp-tree.def"
335 /* Table indexed by tree code giving number of expression
336 operands beyond the fixed part of the node structure.
337 Not used for types or decls. */
339 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
341 static int cplus_tree_code_length[] = {
343 #include "cp-tree.def"
347 /* Names of tree components.
348 Used for printing out the tree and error messages. */
349 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
351 static const char *cplus_tree_code_name[] = {
353 #include "cp-tree.def"
357 /* toplev.c needs to call these. */
363 cpp_reader_init (&parse_in);
364 parse_in.opts = &parse_options;
365 cpp_options_init (&parse_options);
366 parse_options.cplusplus = 1;
369 /* Default exceptions on. */
371 /* Mark as "unspecified". */
372 flag_bounds_check = -1;
373 /* By default wrap lines at 80 characters. Is getenv ("COLUMNS")
375 diagnostic_message_length_per_line = 80;
376 /* By default, emit location information once for every
377 diagnostic message. */
378 set_message_prefixing_rule (DIAGNOSTICS_SHOW_PREFIX_ONCE);
384 /* If still "unspecified", make it match -fbounded-pointers. */
385 if (flag_bounds_check < 0)
386 flag_bounds_check = flag_bounded_pointers;
388 /* the beginning of the file is a new line; check for # */
389 /* With luck, we discover the real source file's name from that
390 and put it in input_filename. */
391 put_back (check_newline ());
392 if (flag_gnu_xref) GNU_xref_begin (input_filename);
393 init_repo (input_filename);
399 if (flag_gnu_xref) GNU_xref_end (errorcount+sorrycount);
409 init_filename_times ()
411 this_filename_time = get_time_identifier ("<top level>");
412 if (flag_detailed_statistics)
415 body_time = get_run_time ();
416 TREE_INT_CST_LOW (TIME_IDENTIFIER_TIME (this_filename_time))
424 #ifdef GATHER_STATISTICS
426 reduce_count = (int *) xcalloc (sizeof (int), (REDUCE_LENGTH + 1));
428 token_count = (int *) xcalloc (sizeof (int), (TOKEN_LENGTH + 1));
435 /* A mapping from tree codes to operator name information. */
436 operator_name_info_t operator_name_info[(int) LAST_CPLUS_TREE_CODE];
437 /* Similar, but for assignment operators. */
438 operator_name_info_t assignment_operator_name_info[(int) LAST_CPLUS_TREE_CODE];
440 /* Initialize data structures that keep track of operator names. */
447 struct operator_name_info_t *oni;
449 #define DEF_OPERATOR(NAME, CODE, NEW_MANGLING, OLD_MANGLING, ARITY, ASSN_P) \
450 my_friendly_assert ((strlen ("operator ") + strlen (NAME) + 1 \
451 + ISALPHA (NAME[0]) <= 256), \
453 sprintf (buffer, ISALPHA (NAME[0]) ? "operator %s" : "operator%s", NAME); \
454 identifier = get_identifier (buffer); \
455 IDENTIFIER_OPNAME_P (identifier) = 1; \
458 ? &assignment_operator_name_info[(int) CODE] \
459 : &operator_name_info[(int) CODE]); \
460 oni->identifier = identifier; \
462 oni->mangled_name = flag_new_abi ? NEW_MANGLING : OLD_MANGLING;
464 #include "operators.def"
467 operator_name_info[(int) ERROR_MARK].identifier
468 = get_identifier ("<invalid operator>");
470 /* Handle some special cases. These operators are not defined in
471 the language, but can be produced internally. We may need them
472 for error-reporting. (Eventually, we should ensure that this
473 does not happen. Error messages involving these operators will
474 be confusing to users.) */
476 operator_name_info [(int) INIT_EXPR].name
477 = operator_name_info [(int) MODIFY_EXPR].name;
478 operator_name_info [(int) EXACT_DIV_EXPR].name = "(ceiling /)";
479 operator_name_info [(int) CEIL_DIV_EXPR].name = "(ceiling /)";
480 operator_name_info [(int) FLOOR_DIV_EXPR].name = "(floor /)";
481 operator_name_info [(int) ROUND_DIV_EXPR].name = "(round /)";
482 operator_name_info [(int) CEIL_MOD_EXPR].name = "(ceiling %)";
483 operator_name_info [(int) FLOOR_MOD_EXPR].name = "(floor %)";
484 operator_name_info [(int) ROUND_MOD_EXPR].name = "(round %)";
485 operator_name_info [(int) ABS_EXPR].name = "abs";
486 operator_name_info [(int) FFS_EXPR].name = "ffs";
487 operator_name_info [(int) BIT_ANDTC_EXPR].name = "&~";
488 operator_name_info [(int) TRUTH_AND_EXPR].name = "strict &&";
489 operator_name_info [(int) TRUTH_OR_EXPR].name = "strict ||";
490 operator_name_info [(int) IN_EXPR].name = "in";
491 operator_name_info [(int) RANGE_EXPR].name = "...";
492 operator_name_info [(int) CONVERT_EXPR].name = "+";
494 assignment_operator_name_info [(int) EXACT_DIV_EXPR].name
496 assignment_operator_name_info [(int) CEIL_DIV_EXPR].name
498 assignment_operator_name_info [(int) FLOOR_DIV_EXPR].name
500 assignment_operator_name_info [(int) ROUND_DIV_EXPR].name
502 assignment_operator_name_info [(int) CEIL_MOD_EXPR].name
504 assignment_operator_name_info [(int) FLOOR_MOD_EXPR].name
506 assignment_operator_name_info [(int) ROUND_MOD_EXPR].name
511 init_parse (filename)
512 const char *filename;
514 extern int flag_no_gnu_keywords;
515 extern int flag_operator_names;
517 #ifdef MULTIBYTE_CHARS
518 /* Change to the native locale for multibyte conversions. */
519 setlocale (LC_CTYPE, "");
520 literal_codeset = getenv ("LANG");
524 /* Open input file. */
525 if (filename == 0 || !strcmp (filename, "-"))
531 finput = fopen (filename, "r");
533 pfatal_with_name (filename);
535 #ifdef IO_BUFFER_SIZE
536 setvbuf (finput, (char *) xmalloc (IO_BUFFER_SIZE), _IOFBF, IO_BUFFER_SIZE);
538 #else /* !USE_CPPLIB */
539 parse_in.show_column = 1;
540 if (! cpp_start_read (&parse_in, filename))
543 if (filename == 0 || !strcmp (filename, "-"))
546 /* cpp_start_read always puts at least one line directive into the
547 token buffer. We must arrange to read it out here. */
548 yy_cur = parse_in.token_buffer;
549 yy_lim = CPP_PWRITTEN (&parse_in);
550 cpp_token = CPP_DIRECTIVE;
552 #endif /* !USE_CPPLIB */
554 /* Initialize the lookahead machinery. */
557 /* Make identifier nodes long enough for the language-specific slots. */
558 set_identifier_size (sizeof (struct lang_identifier));
559 decl_printable_name = lang_printable_name;
562 init_cplus_expand ();
566 memcpy (tree_code_type + (int) LAST_C_TREE_CODE,
567 cplus_tree_code_type,
568 (int)LAST_CPLUS_TREE_CODE - (int)LAST_C_TREE_CODE);
569 memcpy (tree_code_length + (int) LAST_C_TREE_CODE,
570 cplus_tree_code_length,
571 (LAST_CPLUS_TREE_CODE - (int)LAST_C_TREE_CODE) * sizeof (int));
572 memcpy (tree_code_name + (int) LAST_C_TREE_CODE,
573 cplus_tree_code_name,
574 (LAST_CPLUS_TREE_CODE - (int)LAST_C_TREE_CODE) * sizeof (char *));
579 gcc_obstack_init (&inline_text_obstack);
580 inline_text_firstobj = (char *) obstack_alloc (&inline_text_obstack, 0);
582 internal_filename = ggc_alloc_string (INTERNAL_FILENAME,
583 sizeof (INTERNAL_FILENAME));
585 /* Start it at 0, because check_newline is called at the very beginning
586 and will increment it to 1. */
588 input_filename = internal_filename;
589 current_function_decl = NULL;
592 token_buffer = (char *) xmalloc (maxtoken + 2);
594 my_friendly_assert ((int) CP_RID_MAX < 64, 20000630);
595 ridpointers = (tree *) xcalloc ((int) CP_RID_MAX, sizeof (tree));
596 ridpointers[(int) RID_INT] = get_identifier ("int");
597 ridpointers[(int) RID_BOOL] = get_identifier ("bool");
598 ridpointers[(int) RID_CHAR] = get_identifier ("char");
599 ridpointers[(int) RID_VOID] = get_identifier ("void");
600 ridpointers[(int) RID_FLOAT] = get_identifier ("float");
601 ridpointers[(int) RID_DOUBLE] = get_identifier ("double");
602 ridpointers[(int) RID_SHORT] = get_identifier ("short");
603 ridpointers[(int) RID_LONG] = get_identifier ("long");
604 ridpointers[(int) RID_UNSIGNED] = get_identifier ("unsigned");
605 ridpointers[(int) RID_SIGNED] = get_identifier ("signed");
606 ridpointers[(int) RID_INLINE] = get_identifier ("inline");
607 ridpointers[(int) RID_CONST] = get_identifier ("const");
608 ridpointers[(int) RID_RESTRICT] = get_identifier ("__restrict");
609 ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile");
610 ridpointers[(int) RID_AUTO] = get_identifier ("auto");
611 ridpointers[(int) RID_STATIC] = get_identifier ("static");
612 ridpointers[(int) RID_EXTERN] = get_identifier ("extern");
613 ridpointers[(int) RID_TYPEDEF] = get_identifier ("typedef");
614 ridpointers[(int) RID_REGISTER] = get_identifier ("register");
615 ridpointers[(int) RID_COMPLEX] = get_identifier ("__complex");
617 /* C++ extensions. These are probably not correctly named. */
618 ridpointers[(int) RID_WCHAR] = get_identifier ("__wchar_t");
619 class_type_node = build_int_2 (class_type, 0);
620 TREE_TYPE (class_type_node) = class_type_node;
621 ridpointers[(int) RID_CLASS] = class_type_node;
623 record_type_node = build_int_2 (record_type, 0);
624 TREE_TYPE (record_type_node) = record_type_node;
625 ridpointers[(int) RID_RECORD] = record_type_node;
627 union_type_node = build_int_2 (union_type, 0);
628 TREE_TYPE (union_type_node) = union_type_node;
629 ridpointers[(int) RID_UNION] = union_type_node;
631 enum_type_node = build_int_2 (enum_type, 0);
632 TREE_TYPE (enum_type_node) = enum_type_node;
633 ridpointers[(int) RID_ENUM] = enum_type_node;
635 ridpointers[(int) RID_VIRTUAL] = get_identifier ("virtual");
636 ridpointers[(int) RID_EXPLICIT] = get_identifier ("explicit");
637 ridpointers[(int) RID_EXPORT] = get_identifier ("export");
638 ridpointers[(int) RID_FRIEND] = get_identifier ("friend");
640 ridpointers[(int) RID_PUBLIC] = get_identifier ("public");
641 ridpointers[(int) RID_PRIVATE] = get_identifier ("private");
642 ridpointers[(int) RID_PROTECTED] = get_identifier ("protected");
643 ridpointers[(int) RID_TEMPLATE] = get_identifier ("template");
644 /* This is for ANSI C++. */
645 ridpointers[(int) RID_MUTABLE] = get_identifier ("mutable");
647 /* Create the built-in __null node. Note that we can't yet call for
648 type_for_size here because integer_type_node and so forth are not
649 set up. Therefore, we don't set the type of these nodes until
650 init_decl_processing. */
651 null_node = build_int_2 (0, 0);
652 ridpointers[RID_NULL] = null_node;
654 init_filename_times ();
656 /* Some options inhibit certain reserved words.
657 Clear those words out of the hash table so they won't be recognized. */
658 #define UNSET_RESERVED_WORD(STRING) \
659 do { struct resword *s = is_reserved_word (STRING, sizeof (STRING) - 1); \
660 if (s) s->name = ""; } while (0)
663 /* let's parse things, and if they use it, then give them an error. */
664 if (!flag_exceptions)
666 UNSET_RESERVED_WORD ("throw");
667 UNSET_RESERVED_WORD ("try");
668 UNSET_RESERVED_WORD ("catch");
672 if (flag_no_asm || flag_no_gnu_keywords)
673 UNSET_RESERVED_WORD ("typeof");
674 if (! flag_operator_names)
676 /* These are new ANSI keywords that may break code. */
677 UNSET_RESERVED_WORD ("and");
678 UNSET_RESERVED_WORD ("and_eq");
679 UNSET_RESERVED_WORD ("bitand");
680 UNSET_RESERVED_WORD ("bitor");
681 UNSET_RESERVED_WORD ("compl");
682 UNSET_RESERVED_WORD ("not");
683 UNSET_RESERVED_WORD ("not_eq");
684 UNSET_RESERVED_WORD ("or");
685 UNSET_RESERVED_WORD ("or_eq");
686 UNSET_RESERVED_WORD ("xor");
687 UNSET_RESERVED_WORD ("xor_eq");
690 token_count = init_cpp_parse ();
691 interface_unknown = 1;
693 ggc_add_string_root (&internal_filename, 1);
694 ggc_add_tree_root (ridpointers, CP_RID_MAX);
695 ggc_add_tree_root (&defarg_fns, 1);
696 ggc_add_tree_root (&defarg_parm, 1);
697 ggc_add_tree_root (&this_filename_time, 1);
698 ggc_add_tree_root (&filename_times, 1);
699 ggc_add_root (&impl_file_chain, 1, sizeof (impl_file_chain),
700 mark_impl_file_chain);
708 cpp_finish (&parse_in);
709 errorcount += parse_in.errors;
716 yyprint (file, yychar, yylval)
729 case IDENTIFIER_DEFN:
733 case PRE_PARSED_CLASS_DECL:
735 if (TREE_CODE (t) == TYPE_DECL || TREE_CODE (t) == TEMPLATE_DECL)
737 fprintf (file, " `%s'", IDENTIFIER_POINTER (DECL_NAME (t)));
740 my_friendly_assert (TREE_CODE (t) == IDENTIFIER_NODE, 224);
741 if (IDENTIFIER_POINTER (t))
742 fprintf (file, " `%s'", IDENTIFIER_POINTER (t));
746 if (yylval.ttype == class_type_node)
747 fprintf (file, " `class'");
748 else if (yylval.ttype == record_type_node)
749 fprintf (file, " `struct'");
750 else if (yylval.ttype == union_type_node)
751 fprintf (file, " `union'");
752 else if (yylval.ttype == enum_type_node)
753 fprintf (file, " `enum'");
755 my_friendly_abort (80);
760 if (TREE_CODE (t) == INTEGER_CST)
762 #if HOST_BITS_PER_WIDE_INT == 64
763 #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT
766 #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
773 #if HOST_BITS_PER_WIDE_INT != HOST_BITS_PER_INT
779 TREE_INT_CST_HIGH (t), TREE_INT_CST_LOW (t));
784 #if defined(GATHER_STATISTICS) && defined(REDUCE_LENGTH)
785 static int *reduce_count;
791 #define REDUCE_LENGTH (sizeof (yyr2) / sizeof (yyr2[0]))
792 #define TOKEN_LENGTH (256 + sizeof (yytname) / sizeof (yytname[0]))
795 #ifdef GATHER_STATISTICS
801 reduce_count[yyn] += 1;
808 return reduce_count[*q] - reduce_count[*p];
815 return token_count[*q] - token_count[*p];
821 print_parse_statistics ()
823 #ifdef GATHER_STATISTICS
827 int maxlen = REDUCE_LENGTH;
830 if (reduce_count[-1] == 0)
833 if (TOKEN_LENGTH > REDUCE_LENGTH)
834 maxlen = TOKEN_LENGTH;
835 sorted = (unsigned *) alloca (sizeof (int) * maxlen);
837 for (i = 0; i < TOKEN_LENGTH; i++)
839 qsort (sorted, TOKEN_LENGTH, sizeof (int), token_cmp);
840 for (i = 0; i < TOKEN_LENGTH; i++)
843 if (token_count[idx] == 0)
845 if (token_count[idx] < token_count[-1])
847 fprintf (stderr, "token %d, `%s', count = %d\n",
848 idx, yytname[YYTRANSLATE (idx)], token_count[idx]);
850 fprintf (stderr, "\n");
851 for (i = 0; i < REDUCE_LENGTH; i++)
853 qsort (sorted, REDUCE_LENGTH, sizeof (int), reduce_cmp);
854 for (i = 0; i < REDUCE_LENGTH; i++)
857 if (reduce_count[idx] == 0)
859 if (reduce_count[idx] < reduce_count[-1])
861 fprintf (stderr, "rule %d, line %d, count = %d\n",
862 idx, yyrline[idx], reduce_count[idx]);
864 fprintf (stderr, "\n");
870 /* Sets the value of the 'yydebug' variable to VALUE.
871 This is a function so we don't have to have YYDEBUG defined
872 in order to build the compiler. */
882 warning ("YYDEBUG not defined.");
887 /* Mark ARG (which is really a struct impl_files **) for GC. */
890 mark_impl_file_chain (arg)
893 struct impl_files *ifs;
895 ifs = *(struct impl_files **) arg;
898 ggc_mark_string (ifs->filename);
903 /* Helper function to load global variables with interface
907 extract_interface_info ()
911 if (flag_alt_external_templates)
913 tree til = tinst_for_decl ();
916 fileinfo = get_time_identifier (TINST_FILE (til));
919 fileinfo = get_time_identifier (input_filename);
920 fileinfo = TIME_IDENTIFIER_FILEINFO (fileinfo);
921 interface_only = TREE_INT_CST_LOW (fileinfo);
922 interface_unknown = TREE_INT_CST_HIGH (fileinfo);
925 /* Return nonzero if S is not considered part of an
926 INTERFACE/IMPLEMENTATION pair. Otherwise, return 0. */
932 /* Set the interface/implementation bits for this scope. */
933 struct impl_files *ifiles;
936 for (ifiles = impl_file_chain; ifiles; ifiles = ifiles->next)
938 const char *t1 = ifiles->filename;
941 if (*s1 != *t1 || *s1 == 0)
944 while (*s1 == *t1 && *s1 != 0)
951 /* Don't get faked out by xxx.yyy.cc vs xxx.zzz.cc. */
952 if (index (s1, '.') || index (t1, '.'))
955 if (*s1 == '\0' || s1[-1] != '.' || t1[-1] != '.')
967 cp_pragma_interface (main_filename)
968 const char *main_filename;
971 = TIME_IDENTIFIER_FILEINFO (get_time_identifier (input_filename));
973 if (impl_file_chain == 0)
975 /* If this is zero at this point, then we are
976 auto-implementing. */
977 if (main_input_filename == 0)
978 main_input_filename = input_filename;
980 #ifdef AUTO_IMPLEMENT
981 filename = file_name_nondirectory (main_input_filename);
982 fi = get_time_identifier (filename);
983 fi = TIME_IDENTIFIER_FILEINFO (fi);
984 TREE_INT_CST_LOW (fi) = 0;
985 TREE_INT_CST_HIGH (fi) = 1;
988 = (struct impl_files *) xmalloc (sizeof (struct impl_files));
989 impl_file_chain->filename = ggc_alloc_string (filename, -1);
990 impl_file_chain->next = 0;
994 interface_only = interface_strcmp (main_filename);
995 #ifdef MULTIPLE_SYMBOL_SPACES
996 if (! interface_only)
997 interface_unknown = 0;
998 #else /* MULTIPLE_SYMBOL_SPACES */
999 interface_unknown = 0;
1000 #endif /* MULTIPLE_SYMBOL_SPACES */
1001 TREE_INT_CST_LOW (fileinfo) = interface_only;
1002 TREE_INT_CST_HIGH (fileinfo) = interface_unknown;
1005 /* Note that we have seen a #pragma implementation for the key MAIN_FILENAME.
1006 We used to only allow this at toplevel, but that restriction was buggy
1007 in older compilers and it seems reasonable to allow it in the headers
1008 themselves, too. It only needs to precede the matching #p interface.
1010 We don't touch interface_only or interface_unknown; the user must specify
1011 a matching #p interface for this to have any effect. */
1014 cp_pragma_implementation (main_filename)
1015 const char *main_filename;
1017 struct impl_files *ifiles = impl_file_chain;
1018 for (; ifiles; ifiles = ifiles->next)
1020 if (! strcmp (ifiles->filename, main_filename))
1025 ifiles = (struct impl_files*) xmalloc (sizeof (struct impl_files));
1026 ifiles->filename = ggc_alloc_string (main_filename, -1);
1027 ifiles->next = impl_file_chain;
1028 impl_file_chain = ifiles;
1032 /* Set up the state required to correctly handle the definition of the
1033 inline function whose preparsed state has been saved in PI. */
1036 begin_definition_of_inclass_inline (pi)
1037 struct pending_inline* pi;
1044 /* If this is an inline function in a local class, we must make sure
1045 that we save all pertinent information about the function
1046 surrounding the local class. */
1047 context = decl_function_context (pi->fndecl);
1049 push_function_context_to (context);
1051 feed_input (pi->buf, pi->len, pi->filename, pi->lineno);
1052 yychar = PRE_PARSED_FUNCTION_DECL;
1054 /* Pass back a handle to the rest of the inline functions, so that they
1055 can be processed later. */
1056 DECL_PENDING_INLINE_INFO (pi->fndecl) = 0;
1057 DECL_PENDING_INLINE_P (pi->fndecl) = 0;
1058 interface_unknown = pi->interface == 1;
1059 interface_only = pi->interface == 0;
1062 /* Called from the top level: if there are any pending inlines to
1063 do, set up to process them now. This function sets up the first function
1064 to be parsed; after it has been, the rule for fndef in parse.y will
1065 call process_next_inline to start working on the next one. */
1068 do_pending_inlines ()
1070 struct pending_inline *t;
1072 /* Oops, we're still dealing with the last batch. */
1073 if (yychar == PRE_PARSED_FUNCTION_DECL)
1076 /* Reverse the pending inline functions, since
1077 they were cons'd instead of appended. */
1079 struct pending_inline *prev = 0, *tail;
1080 t = pending_inlines;
1081 pending_inlines = 0;
1096 /* Now start processing the first inline function. */
1097 begin_definition_of_inclass_inline (t);
1100 /* Called from the fndecl rule in the parser when the function just parsed
1101 was declared using a PRE_PARSED_FUNCTION_DECL (i.e. came from
1102 do_pending_inlines). */
1105 process_next_inline (i)
1106 struct pending_inline *i;
1109 context = decl_function_context (i->fndecl);
1111 pop_function_context_from (context);
1113 if (yychar == YYEMPTY)
1115 if (yychar != END_OF_SAVED_INPUT)
1117 error ("parse error at end of saved function text");
1119 /* restore_pending_input will abort unless yychar is either
1120 END_OF_SAVED_INPUT or YYEMPTY; since we already know we're
1121 hosed, feed back YYEMPTY. */
1126 begin_definition_of_inclass_inline (i);
1128 extract_interface_info ();
1131 /* Since inline methods can refer to text which has not yet been seen,
1132 we store the text of the method in a structure which is placed in the
1133 DECL_PENDING_INLINE_INFO field of the FUNCTION_DECL.
1134 After parsing the body of the class definition, the FUNCTION_DECL's are
1135 scanned to see which ones have this field set. Those are then digested
1138 This function's FUNCTION_DECL will have a bit set in its common so
1139 that we know to watch out for it. */
1142 consume_string (this_obstack, matching_char)
1143 register struct obstack *this_obstack;
1147 int starting_lineno;
1150 if (cpp_token == CPP_STRING)
1152 /* The C preprocessor will warn about newlines in strings. */
1153 obstack_grow (this_obstack, yy_cur, (yy_lim - yy_cur));
1155 lineno = parse_in.lineno;
1160 starting_lineno = lineno;
1166 int save_lineno = lineno;
1167 lineno = starting_lineno;
1168 if (matching_char == '"')
1169 error ("end of file encountered inside string constant");
1171 error ("end of file encountered inside character constant");
1172 lineno = save_lineno;
1177 obstack_1grow (this_obstack, c);
1179 obstack_1grow (this_obstack, c);
1181 /* Make sure we continue the loop */
1188 pedwarn ("ISO C++ forbids newline in string constant");
1191 obstack_1grow (this_obstack, c);
1193 while (c != matching_char);
1196 struct pending_input {
1199 struct obstack token_obstack;
1203 struct pending_input *
1204 save_pending_input ()
1206 struct pending_input *p;
1207 p = (struct pending_input *) xmalloc (sizeof (struct pending_input));
1210 p->eof = end_of_file;
1212 p->first_token = first_token;
1213 p->token_obstack = token_obstack;
1216 gcc_obstack_init (&token_obstack);
1222 restore_pending_input (p)
1223 struct pending_input *p;
1225 my_friendly_assert (yychar == YYEMPTY || yychar == END_OF_SAVED_INPUT, 230);
1228 first_token = p->first_token;
1229 obstack_free (&token_obstack, (char *) 0);
1230 token_obstack = p->token_obstack;
1231 end_of_file = p->eof;
1235 /* Unget character CH from the input stream.
1236 If RESCAN is non-zero, then we want to `see' this
1237 character as the next input token. */
1240 yyungetc (ch, rescan)
1244 /* Unget a character from the input stream. */
1245 if (yychar == YYEMPTY || rescan == 0)
1247 /* If we're putting back a brace, undo the change in indent_level
1248 from the first time we saw it. */
1263 clear_inline_text_obstack ()
1265 obstack_free (&inline_text_obstack, inline_text_firstobj);
1268 /* This function stores away the text for an inline function that should
1269 be processed later. It decides how much later, and may need to move
1270 the info between obstacks; therefore, the caller should not refer to
1271 the T parameter after calling this function. */
1274 store_pending_inline (decl, t)
1276 struct pending_inline *t;
1279 DECL_PENDING_INLINE_INFO (decl) = t;
1280 DECL_PENDING_INLINE_P (decl) = 1;
1282 /* Because we use obstacks, we must process these in precise order. */
1283 t->next = pending_inlines;
1284 pending_inlines = t;
1288 reinit_parse_for_method (yychar, decl)
1293 int starting_lineno = lineno;
1294 const char *starting_filename = input_filename;
1296 reinit_parse_for_block (yychar, &inline_text_obstack);
1298 len = obstack_object_size (&inline_text_obstack);
1299 if (decl == void_type_node
1300 || (current_class_type && TYPE_REDEFINED (current_class_type)))
1302 /* Happens when we get two declarations of the same
1303 function in the same scope. */
1304 char *buf = obstack_finish (&inline_text_obstack);
1305 obstack_free (&inline_text_obstack, buf);
1310 struct pending_inline *t;
1311 char *buf = obstack_finish (&inline_text_obstack);
1313 t = (struct pending_inline *) obstack_alloc (&inline_text_obstack,
1314 sizeof (struct pending_inline));
1315 t->lineno = starting_lineno;
1316 t->filename = starting_filename;
1323 if (interface_unknown && processing_template_defn && flag_external_templates && ! DECL_IN_SYSTEM_HEADER (decl))
1324 warn_if_unknown_interface (decl);
1326 t->interface = (interface_unknown ? 1 : (interface_only ? 0 : 2));
1327 store_pending_inline (decl, t);
1331 /* Consume a block -- actually, a method beginning
1332 with `:' or `{' -- and save it away on the specified obstack. */
1335 reinit_parse_for_block (pyychar, obstackp)
1337 struct obstack *obstackp;
1341 int starting_lineno = lineno;
1342 const char *starting_filename = input_filename;
1344 int look_for_semicolon = 0;
1345 int look_for_lbrac = 0;
1349 obstack_1grow (obstackp, '{');
1350 /* We incremented indent_level in yylex; undo that. */
1353 else if (pyychar == '=')
1354 look_for_semicolon = 1;
1355 else if (pyychar == ':')
1357 obstack_1grow (obstackp, pyychar);
1358 /* Add a space so we don't get confused by ': ::A(20)'. */
1359 obstack_1grow (obstackp, ' ');
1363 else if (pyychar == RETURN_KEYWORD)
1365 obstack_grow (obstackp, "return", 6);
1369 else if (pyychar == TRY)
1371 obstack_grow (obstackp, "try", 3);
1377 yyerror ("parse error in method specification");
1378 obstack_1grow (obstackp, '{');
1385 int this_lineno = lineno;
1387 saving_parse_to_obstack = 1;
1388 c = skip_white_space (c);
1389 saving_parse_to_obstack = 0;
1391 /* Don't lose our cool if there are lots of comments. */
1392 if (lineno == this_lineno + 1)
1393 obstack_1grow (obstackp, '\n');
1394 else if (lineno == this_lineno)
1396 else if (lineno - this_lineno < 10)
1399 for (i = lineno - this_lineno; i > 0; i--)
1400 obstack_1grow (obstackp, '\n');
1405 sprintf (buf, "\n# %d \"", lineno);
1407 obstack_grow (obstackp, buf, len);
1409 len = strlen (input_filename);
1410 obstack_grow (obstackp, input_filename, len);
1411 obstack_1grow (obstackp, '\"');
1412 obstack_1grow (obstackp, '\n');
1415 while (c > ' ') /* ASCII dependent... */
1417 obstack_1grow (obstackp, c);
1426 if (blev == 0 && !look_for_semicolon)
1430 if (peekyylex () == CATCH)
1433 obstack_grow (obstackp, " catch ", 7);
1450 /* Don't act on the next character...e.g, doing an escaped
1455 error_with_file_and_line (starting_filename,
1457 "end of file read inside definition");
1460 obstack_1grow (obstackp, c);
1463 consume_string (obstackp, c);
1465 consume_string (obstackp, c);
1470 error ("function body for constructor missing");
1471 obstack_1grow (obstackp, '{');
1472 obstack_1grow (obstackp, '}');
1476 else if (look_for_semicolon && blev == 0)
1484 error_with_file_and_line (starting_filename,
1486 "end of file read inside definition");
1491 obstack_1grow (obstackp, c);
1496 obstack_1grow (obstackp, '\0');
1499 /* Consume a no-commas expression -- actually, a default argument -- and
1500 save it away on the specified obstack. */
1503 reinit_parse_for_expr (obstackp)
1504 struct obstack *obstackp;
1507 int starting_lineno = lineno;
1508 const char *starting_filename = input_filename;
1516 int this_lineno = lineno;
1518 saving_parse_to_obstack = 1;
1519 c = skip_white_space (c);
1520 saving_parse_to_obstack = 0;
1522 /* Don't lose our cool if there are lots of comments. */
1523 if (lineno == this_lineno + 1)
1524 obstack_1grow (obstackp, '\n');
1525 else if (lineno == this_lineno)
1527 else if (lineno - this_lineno < 10)
1530 for (i = lineno - this_lineno; i > 0; --i)
1531 obstack_1grow (obstackp, '\n');
1536 sprintf (buf, "\n# %d \"", lineno);
1538 obstack_grow (obstackp, buf, len);
1540 len = strlen (input_filename);
1541 obstack_grow (obstackp, input_filename, len);
1542 obstack_1grow (obstackp, '\"');
1543 obstack_1grow (obstackp, '\n');
1546 while (c > ' ') /* ASCII dependent... */
1548 if (plev <= 0 && (c == ')' || c == ','))
1553 obstack_1grow (obstackp, c);
1554 if (c == '(' || c == '[')
1556 else if (c == ']' || c == ')')
1560 /* Don't act on the next character...e.g, doing an escaped
1565 error_with_file_and_line (starting_filename,
1567 "end of file read inside definition");
1570 obstack_1grow (obstackp, c);
1573 consume_string (obstackp, c);
1575 consume_string (obstackp, c);
1581 error_with_file_and_line (starting_filename,
1583 "end of file read inside definition");
1588 obstack_1grow (obstackp, c);
1593 obstack_1grow (obstackp, '\0');
1596 int do_snarf_defarg;
1598 /* Decide whether the default argument we are about to see should be
1599 gobbled up as text for later parsing. */
1602 maybe_snarf_defarg ()
1604 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
1605 do_snarf_defarg = 1;
1615 reinit_parse_for_expr (&inline_text_obstack);
1616 len = obstack_object_size (&inline_text_obstack);
1617 buf = obstack_finish (&inline_text_obstack);
1619 arg = make_node (DEFAULT_ARG);
1620 DEFARG_LENGTH (arg) = len - 1;
1621 DEFARG_POINTER (arg) = buf;
1626 /* Called from grokfndecl to note a function decl with unparsed default
1627 arguments for later processing. Also called from grokdeclarator
1628 for function types with unparsed defargs; the call from grokfndecl
1629 will always come second, so we can overwrite the entry from the type. */
1632 add_defarg_fn (decl)
1635 if (TREE_CODE (decl) == FUNCTION_DECL)
1636 TREE_VALUE (defarg_fns) = decl;
1638 defarg_fns = tree_cons (current_class_type, decl, defarg_fns);
1641 /* Helper for do_pending_defargs. Starts the parsing of a default arg. */
1647 tree d = TREE_PURPOSE (p);
1650 if (TREE_CODE (f) == FUNCTION_DECL)
1652 line = DECL_SOURCE_LINE (f);
1653 file = DECL_SOURCE_FILE (f);
1658 file = input_filename;
1661 feed_input (DEFARG_POINTER (d), DEFARG_LENGTH (d), file, line);
1662 yychar = DEFARG_MARKER;
1666 /* Helper for do_pending_defargs. Ends the parsing of a default arg. */
1671 if (yychar == YYEMPTY)
1673 if (yychar != END_OF_SAVED_INPUT)
1675 error ("parse error at end of saved function text");
1677 /* restore_pending_input will abort unless yychar is either
1678 END_OF_SAVED_INPUT or YYEMPTY; since we already know we're
1679 hosed, feed back YYEMPTY. */
1685 /* Main function for deferred parsing of default arguments. Called from
1689 do_pending_defargs ()
1694 for (; defarg_fns; defarg_fns = TREE_CHAIN (defarg_fns))
1696 tree defarg_fn = TREE_VALUE (defarg_fns);
1697 if (defarg_parm == NULL_TREE)
1699 push_nested_class (TREE_PURPOSE (defarg_fns), 1);
1701 if (TREE_CODE (defarg_fn) == FUNCTION_DECL)
1702 maybe_begin_member_template_processing (defarg_fn);
1704 if (TREE_CODE (defarg_fn) == FUNCTION_DECL)
1708 for (p = DECL_ARGUMENTS (defarg_fn); p; p = TREE_CHAIN (p))
1709 pushdecl (copy_node (p));
1711 defarg_parm = TYPE_ARG_TYPES (TREE_TYPE (defarg_fn));
1714 defarg_parm = TYPE_ARG_TYPES (defarg_fn);
1717 defarg_parm = TREE_CHAIN (defarg_parm);
1719 for (; defarg_parm; defarg_parm = TREE_CHAIN (defarg_parm))
1720 if (TREE_PURPOSE (defarg_parm)
1721 && TREE_CODE (TREE_PURPOSE (defarg_parm)) == DEFAULT_ARG)
1723 feed_defarg (defarg_fn, defarg_parm);
1725 /* Return to the parser, which will process this defarg
1726 and call us again. */
1730 if (TREE_CODE (defarg_fn) == FUNCTION_DECL)
1732 maybe_end_member_template_processing ();
1733 check_default_args (defarg_fn);
1737 pop_nested_class ();
1741 /* Heuristic to tell whether the user is missing a semicolon
1742 after a struct or enum declaration. Emit an error message
1743 if we know the user has blown it. */
1746 check_for_missing_semicolon (type)
1754 && yychar != IDENTIFIER
1755 && yychar != TYPENAME
1756 && yychar != CV_QUALIFIER
1757 && yychar != SELFNAME)
1760 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
1761 error ("semicolon missing after %s declaration",
1762 TREE_CODE (type) == ENUMERAL_TYPE ? "enum" : "struct");
1764 cp_error ("semicolon missing after declaration of `%T'", type);
1765 shadow_tag (build_tree_list (0, type));
1767 /* Could probably also hack cases where class { ... } f (); appears. */
1772 note_got_semicolon (type)
1776 my_friendly_abort (60);
1777 if (CLASS_TYPE_P (type))
1778 CLASSTYPE_GOT_SEMICOLON (type) = 1;
1782 note_list_got_semicolon (declspecs)
1787 for (link = declspecs; link; link = TREE_CHAIN (link))
1789 tree type = TREE_VALUE (link);
1791 note_got_semicolon (type);
1796 /* Iff C is a carriage return, warn about it - if appropriate -
1797 and return nonzero. */
1802 static int newline_warning = 0;
1806 /* ANSI C says the effects of a carriage return in a source file
1808 if (pedantic && !newline_warning)
1810 warning ("carriage return in source file (we only warn about the first carriage return)");
1811 newline_warning = 1;
1818 /* If C is not whitespace, return C.
1819 Otherwise skip whitespace and return first nonwhite char read. */
1822 skip_white_space (c)
1829 /* We don't recognize comments here, because
1830 cpp output can include / and * consecutively as operators.
1831 Also, there's no need, since cpp removes all comments. */
1839 c = check_newline ();
1848 /* While processing a # directive we don't get CPP_HSPACE
1849 tokens, so we also need to handle whitespace the normal way. */
1850 if (cpp_token == CPP_HSPACE)
1851 c = yy_get_token ();
1874 error ("stray '\\' in program");
1883 /* Make the token buffer longer, preserving the data in it.
1884 P should point to just beyond the last valid character in the old buffer.
1885 The value we return is a pointer to the new buffer
1886 at a place corresponding to P. */
1889 extend_token_buffer_to (size)
1893 maxtoken = maxtoken * 2 + 10;
1894 while (maxtoken < size);
1895 token_buffer = (char *) xrealloc (token_buffer, maxtoken + 2);
1899 extend_token_buffer (p)
1902 int offset = p - token_buffer;
1903 extend_token_buffer_to (offset);
1904 return token_buffer + offset;
1907 #if defined HANDLE_PRAGMA
1908 /* Local versions of these macros, that can be passed as function pointers. */
1924 read_line_number (num)
1927 register int token = real_yylex ();
1929 if (token == CONSTANT
1930 && TREE_CODE (yylval.ttype) == INTEGER_CST)
1932 *num = TREE_INT_CST_LOW (yylval.ttype);
1937 if (token != END_OF_LINE)
1938 error ("invalid #-line");
1943 /* At the beginning of a line, increment the line number
1944 and process any #-directive on this line.
1945 If the line is a #-directive, read the entire line and return a newline.
1946 Otherwise, return the line's first non-whitespace character.
1948 Note that in the case of USE_CPPLIB, we get the whole line as one
1949 CPP_DIRECTIVE token. */
1957 enum { act_none, act_push, act_pop } action;
1958 int action_number, l;
1959 int entering_c_header;
1963 /* Read first nonwhite char on the line. Do this before incrementing the
1964 line number, in case we're at the end of saved text. */
1968 /* In some cases where we're leaving an include file, we can get multiple
1969 CPP_HSPACE tokens in a row, so we need to loop. */
1970 while (cpp_token == CPP_HSPACE)
1971 c = yy_get_token ();
1975 while (c == ' ' || c == '\t');
1982 /* Sequences of multiple newlines are very common; optimize them. */
1986 /* If not #, return it so caller will use it. */
1990 /* Don't read beyond this line. */
1995 if (cpp_token == CPP_VSPACE)
1997 /* Format is "<space> <line number> <filename> <newline>".
1998 Only the line number is interesting, and even that
1999 we can get more efficiently than scanning the line. */
2000 yy_cur = yy_lim - 1;
2001 lineno = parse_in.lineno - 1;
2006 token = real_yylex ();
2008 if (token == IDENTIFIER)
2010 /* If a letter follows, then if the word here is `line', skip
2011 it and ignore it; otherwise, ignore the line, with an error
2012 if the word isn't `pragma'. */
2014 const char *name = IDENTIFIER_POINTER (yylval.ttype);
2016 if (!strcmp (name, "pragma"))
2018 token = real_yylex ();
2019 if (token != IDENTIFIER
2020 || TREE_CODE (yylval.ttype) != IDENTIFIER_NODE)
2023 /* If this is 1, we handled it; if it's -1, it was one we
2024 wanted but had something wrong with it. Only if it's
2025 0 was it not handled. */
2026 if (handle_cp_pragma (IDENTIFIER_POINTER (yylval.ttype)))
2029 #ifdef HANDLE_PRAGMA
2030 /* We invoke HANDLE_PRAGMA before HANDLE_GENERIC_PRAGMAS
2031 (if both are defined), in order to give the back
2032 end a chance to override the interpretation of
2033 SYSV style pragmas. */
2034 if (HANDLE_PRAGMA (pragma_getc, pragma_ungetc,
2035 IDENTIFIER_POINTER (yylval.ttype)))
2037 #endif /* HANDLE_PRAGMA */
2039 #ifdef HANDLE_GENERIC_PRAGMAS
2040 if (handle_generic_pragma (token))
2042 #endif /* HANDLE_GENERIC_PRAGMAS */
2044 /* Issue a warning message if we have been asked to do so.
2045 Ignoring unknown pragmas in system header file unless
2046 an explcit -Wunknown-pragmas has been given. */
2047 if (warn_unknown_pragmas > 1
2048 || (warn_unknown_pragmas && ! in_system_header))
2049 warning ("ignoring pragma: %s", token_buffer);
2053 else if (!strcmp (name, "define"))
2055 debug_define (lineno, GET_DIRECTIVE_LINE ());
2058 else if (!strcmp (name, "undef"))
2060 debug_undef (lineno, GET_DIRECTIVE_LINE ());
2063 else if (!strcmp (name, "line"))
2066 token = real_yylex ();
2069 else if (!strcmp (name, "ident"))
2071 /* #ident. The pedantic warning is now in cpp. */
2073 /* Here we have just seen `#ident '.
2074 A string constant should follow. */
2076 token = real_yylex ();
2077 if (token == END_OF_LINE)
2080 || TREE_CODE (yylval.ttype) != STRING_CST)
2082 error ("invalid #ident");
2086 if (! flag_no_ident)
2088 #ifdef ASM_OUTPUT_IDENT
2089 ASM_OUTPUT_IDENT (asm_out_file,
2090 TREE_STRING_POINTER (yylval.ttype));
2094 /* Skip the rest of this line. */
2098 error ("undefined or invalid # directive `%s'", name);
2102 /* If the # is the only nonwhite char on the line,
2103 just ignore it. Check the new newline. */
2104 if (token == END_OF_LINE)
2108 /* Here we have either `#line' or `# <nonletter>'.
2109 In either case, it should be a line number; a digit should follow. */
2111 if (token != CONSTANT
2112 || TREE_CODE (yylval.ttype) != INTEGER_CST)
2114 error ("invalid #-line");
2118 /* subtract one, because it is the following line that
2119 gets the specified number */
2121 l = TREE_INT_CST_LOW (yylval.ttype) - 1;
2123 /* More follows: it must be a string constant (filename).
2124 It would be neat to use cpplib to quickly process the string, but
2125 (1) we don't have a handy tokenization of the string, and
2126 (2) I don't know how well that would work in the presense
2127 of filenames that contain wide characters. */
2129 if (saw_line || saving_parse_to_obstack)
2131 /* Don't treat \ as special if we are processing #line 1 "...".
2132 If you want it to be treated specially, use # 1 "...". Also
2133 ignore these if saving to an obstack for later parsing. */
2134 ignore_escape_flag = 1;
2137 /* Read the string constant. */
2138 token = real_yylex ();
2140 ignore_escape_flag = 0;
2142 if (token == END_OF_LINE)
2144 /* No more: store the line number and check following line. */
2149 if (token != STRING || TREE_CODE (yylval.ttype) != STRING_CST)
2151 error ("invalid #line");
2155 /* Changing files again. This means currently collected time
2156 is charged against header time, and body time starts back at 0. */
2157 if (flag_detailed_statistics)
2159 int this_time = get_run_time ();
2160 tree time_identifier = get_time_identifier (TREE_STRING_POINTER (yylval.ttype));
2161 header_time += this_time - body_time;
2162 TREE_INT_CST_LOW (TIME_IDENTIFIER_TIME (this_filename_time))
2163 += this_time - body_time;
2164 this_filename_time = time_identifier;
2165 body_time = this_time;
2168 new_file = TREE_STRING_POINTER (yylval.ttype);
2170 GNU_xref_file (new_file);
2172 if (main_input_filename == 0)
2174 struct impl_files *ifiles = impl_file_chain;
2178 while (ifiles->next)
2179 ifiles = ifiles->next;
2180 ifiles->filename = file_name_nondirectory (new_file);
2183 main_input_filename = new_file;
2189 /* Each change of file name
2190 reinitializes whether we are now in a system header. */
2191 in_system_header = 0;
2192 entering_c_header = 0;
2194 if (!read_line_number (&action_number) && input_file_stack)
2196 input_file_stack->name = input_filename = new_file;
2197 input_file_stack->line = lineno = l;
2200 /* `1' after file name means entering new file.
2201 `2' after file name means just left a file. */
2203 if (action_number == 1)
2206 read_line_number (&action_number);
2208 else if (action_number == 2)
2211 read_line_number (&action_number);
2213 if (action_number == 3)
2215 /* `3' after file name means this is a system header file. */
2216 in_system_header = 1;
2217 read_line_number (&action_number);
2219 if (action_number == 4)
2221 /* `4' after file name means this is a C header file. */
2222 entering_c_header = 1;
2223 read_line_number (&action_number);
2226 /* Do the actions implied by the preceding numbers. */
2228 if (action == act_push)
2230 /* Pushing to a new file. */
2231 push_srcloc (new_file, l);
2232 input_file_stack->indent_level = indent_level;
2233 debug_start_source_file (input_filename);
2236 else if (entering_c_header)
2239 ++pending_lang_change;
2242 else if (action == act_pop)
2244 /* Popping out of a file. */
2245 if (input_file_stack->next)
2247 if (c_header_level && --c_header_level == 0)
2249 if (entering_c_header)
2250 warning ("badly nested C headers from preprocessor");
2251 --pending_lang_change;
2254 if (indent_level != input_file_stack->indent_level)
2256 warning_with_file_and_line
2257 (input_filename, lineno,
2258 "This file contains more `%c's than `%c's.",
2259 indent_level > input_file_stack->indent_level ? '{' : '}',
2260 indent_level > input_file_stack->indent_level ? '}' : '{');
2264 input_file_stack->name = new_file;
2265 debug_end_source_file (input_file_stack->line);
2268 error ("#-lines for entering and leaving files don't match");
2271 input_filename = new_file;
2274 extract_interface_info ();
2276 /* skip the rest of this line. */
2283 while (c != '\n' && c != EOF);
2287 #ifdef HANDLE_GENERIC_PRAGMAS
2289 /* Handle a #pragma directive.
2290 TOKEN is the token we read after `#pragma'. Processes the entire input
2291 line and return non-zero iff the pragma has been successfully parsed. */
2293 /* This function has to be in this file, in order to get at
2297 handle_generic_pragma (token)
2308 handle_pragma_token (token_buffer, yylval.ttype);
2312 handle_pragma_token ("(", NULL_TREE);
2313 handle_pragma_token (")", NULL_TREE);
2317 return handle_pragma_token (NULL_PTR, NULL_TREE);
2320 handle_pragma_token (token_buffer, NULL_TREE);
2323 token = real_yylex ();
2326 #endif /* HANDLE_GENERIC_PRAGMAS */
2329 handle_cp_pragma (pname)
2334 if (! strcmp (pname, "vtable"))
2336 /* More follows: it must be a string constant (class name). */
2337 token = real_yylex ();
2338 if (token != STRING || TREE_CODE (yylval.ttype) != STRING_CST)
2340 error ("invalid #pragma vtable");
2345 = tree_cons (NULL_TREE,
2346 get_identifier (TREE_STRING_POINTER (yylval.ttype)),
2348 token = real_yylex ();
2349 if (token != END_OF_LINE)
2350 warning ("trailing characters ignored");
2353 else if (! strcmp (pname, "unit"))
2355 /* More follows: it must be a string constant (unit name). */
2356 token = real_yylex ();
2357 if (token != STRING || TREE_CODE (yylval.ttype) != STRING_CST)
2359 error ("invalid #pragma unit");
2362 token = real_yylex ();
2363 if (token != END_OF_LINE)
2364 warning ("trailing characters ignored");
2367 else if (! strcmp (pname, "interface"))
2369 const char *main_filename = input_filename;
2371 main_filename = file_name_nondirectory (main_filename);
2373 token = real_yylex ();
2375 if (token != END_OF_LINE)
2378 || TREE_CODE (yylval.ttype) != STRING_CST)
2380 error ("invalid `#pragma interface'");
2383 main_filename = TREE_STRING_POINTER (yylval.ttype);
2384 token = real_yylex ();
2387 if (token != END_OF_LINE)
2388 warning ("garbage after `#pragma interface' ignored");
2390 cp_pragma_interface (main_filename);
2394 else if (! strcmp (pname, "implementation"))
2396 const char *main_filename = main_input_filename ? main_input_filename : input_filename;
2398 main_filename = file_name_nondirectory (main_filename);
2400 token = real_yylex ();
2402 if (token != END_OF_LINE)
2405 || TREE_CODE (yylval.ttype) != STRING_CST)
2407 error ("invalid `#pragma implementation'");
2410 main_filename = TREE_STRING_POINTER (yylval.ttype);
2411 token = real_yylex ();
2414 if (token != END_OF_LINE)
2415 warning ("garbage after `#pragma implementation' ignored");
2417 cp_pragma_implementation (main_filename);
2426 do_pending_lang_change ()
2428 for (; pending_lang_change > 0; --pending_lang_change)
2429 push_lang_context (lang_name_c);
2430 for (; pending_lang_change < 0; ++pending_lang_change)
2431 pop_lang_context ();
2434 /* Parse a '\uNNNN' or '\UNNNNNNNN' sequence.
2436 [lex.charset]: The character designated by the universal-character-name
2437 \UNNNNNNNN is that character whose character short name in ISO/IEC 10646
2438 is NNNNNNNN; the character designated by the universal-character-name
2439 \uNNNN is that character whose character short name in ISO/IEC 10646 is
2440 0000NNNN. If the hexadecimal value for a universal character name is
2441 less than 0x20 or in the range 0x7F-0x9F (inclusive), or if the
2442 universal character name designates a character in the basic source
2443 character set, then the program is ill-formed.
2445 We assume that wchar_t is Unicode, so we don't need to do any
2446 mapping. Is this ever wrong? */
2452 unsigned int code = 0;
2455 for (; length; --length)
2460 error ("non hex digit '%c' in universal-character-name", c);
2465 if (c >= 'a' && c <= 'f')
2466 code += c - 'a' + 10;
2467 if (c >= 'A' && c <= 'F')
2468 code += c - 'A' + 10;
2469 if (c >= '0' && c <= '9')
2473 #ifdef TARGET_EBCDIC
2474 sorry ("universal-character-name on EBCDIC target");
2478 if (code > 0x9f && !(code & 0x80000000))
2479 /* True extended character, OK. */;
2480 else if (code >= 0x20 && code < 0x7f)
2482 /* ASCII printable character. The C character set consists of all of
2483 these except $, @ and `. We use hex escapes so that this also
2484 works with EBCDIC hosts. */
2485 if (code != 0x24 && code != 0x40 && code != 0x60)
2486 error ("universal-character-name designates `%c', part of the basic source character set", code);
2489 error ("invalid universal-character-name");
2493 /* Returns nonzero if C is a universal-character-name. Give an error if it
2494 is not one which may appear in an identifier, as per [extendid]. */
2497 is_extended_char (c)
2500 #ifdef TARGET_EBCDIC
2507 return is_extended_char_1 (c);
2512 is_extended_char_1 (c)
2515 /* None of the valid chars are outside the Basic Multilingual Plane (the
2519 error ("universal-character-name `\\U%08x' not valid in identifier", c);
2524 if ((c >= 0x00c0 && c <= 0x00d6)
2525 || (c >= 0x00d8 && c <= 0x00f6)
2526 || (c >= 0x00f8 && c <= 0x01f5)
2527 || (c >= 0x01fa && c <= 0x0217)
2528 || (c >= 0x0250 && c <= 0x02a8)
2529 || (c >= 0x1e00 && c <= 0x1e9a)
2530 || (c >= 0x1ea0 && c <= 0x1ef9))
2535 || (c >= 0x0388 && c <= 0x038a)
2537 || (c >= 0x038e && c <= 0x03a1)
2538 || (c >= 0x03a3 && c <= 0x03ce)
2539 || (c >= 0x03d0 && c <= 0x03d6)
2544 || (c >= 0x03e2 && c <= 0x03f3)
2545 || (c >= 0x1f00 && c <= 0x1f15)
2546 || (c >= 0x1f18 && c <= 0x1f1d)
2547 || (c >= 0x1f20 && c <= 0x1f45)
2548 || (c >= 0x1f48 && c <= 0x1f4d)
2549 || (c >= 0x1f50 && c <= 0x1f57)
2553 || (c >= 0x1f5f && c <= 0x1f7d)
2554 || (c >= 0x1f80 && c <= 0x1fb4)
2555 || (c >= 0x1fb6 && c <= 0x1fbc)
2556 || (c >= 0x1fc2 && c <= 0x1fc4)
2557 || (c >= 0x1fc6 && c <= 0x1fcc)
2558 || (c >= 0x1fd0 && c <= 0x1fd3)
2559 || (c >= 0x1fd6 && c <= 0x1fdb)
2560 || (c >= 0x1fe0 && c <= 0x1fec)
2561 || (c >= 0x1ff2 && c <= 0x1ff4)
2562 || (c >= 0x1ff6 && c <= 0x1ffc))
2566 if ((c >= 0x0401 && c <= 0x040d)
2567 || (c >= 0x040f && c <= 0x044f)
2568 || (c >= 0x0451 && c <= 0x045c)
2569 || (c >= 0x045e && c <= 0x0481)
2570 || (c >= 0x0490 && c <= 0x04c4)
2571 || (c >= 0x04c7 && c <= 0x04c8)
2572 || (c >= 0x04cb && c <= 0x04cc)
2573 || (c >= 0x04d0 && c <= 0x04eb)
2574 || (c >= 0x04ee && c <= 0x04f5)
2575 || (c >= 0x04f8 && c <= 0x04f9))
2579 if ((c >= 0x0531 && c <= 0x0556)
2580 || (c >= 0x0561 && c <= 0x0587))
2584 if ((c >= 0x05d0 && c <= 0x05ea)
2585 || (c >= 0x05f0 && c <= 0x05f4))
2589 if ((c >= 0x0621 && c <= 0x063a)
2590 || (c >= 0x0640 && c <= 0x0652)
2591 || (c >= 0x0670 && c <= 0x06b7)
2592 || (c >= 0x06ba && c <= 0x06be)
2593 || (c >= 0x06c0 && c <= 0x06ce)
2594 || (c >= 0x06e5 && c <= 0x06e7))
2598 if ((c >= 0x0905 && c <= 0x0939)
2599 || (c >= 0x0958 && c <= 0x0962))
2603 if ((c >= 0x0985 && c <= 0x098c)
2604 || (c >= 0x098f && c <= 0x0990)
2605 || (c >= 0x0993 && c <= 0x09a8)
2606 || (c >= 0x09aa && c <= 0x09b0)
2608 || (c >= 0x09b6 && c <= 0x09b9)
2609 || (c >= 0x09dc && c <= 0x09dd)
2610 || (c >= 0x09df && c <= 0x09e1)
2611 || (c >= 0x09f0 && c <= 0x09f1))
2615 if ((c >= 0x0a05 && c <= 0x0a0a)
2616 || (c >= 0x0a0f && c <= 0x0a10)
2617 || (c >= 0x0a13 && c <= 0x0a28)
2618 || (c >= 0x0a2a && c <= 0x0a30)
2619 || (c >= 0x0a32 && c <= 0x0a33)
2620 || (c >= 0x0a35 && c <= 0x0a36)
2621 || (c >= 0x0a38 && c <= 0x0a39)
2622 || (c >= 0x0a59 && c <= 0x0a5c)
2627 if ((c >= 0x0a85 && c <= 0x0a8b)
2629 || (c >= 0x0a8f && c <= 0x0a91)
2630 || (c >= 0x0a93 && c <= 0x0aa8)
2631 || (c >= 0x0aaa && c <= 0x0ab0)
2632 || (c >= 0x0ab2 && c <= 0x0ab3)
2633 || (c >= 0x0ab5 && c <= 0x0ab9)
2638 if ((c >= 0x0b05 && c <= 0x0b0c)
2639 || (c >= 0x0b0f && c <= 0x0b10)
2640 || (c >= 0x0b13 && c <= 0x0b28)
2641 || (c >= 0x0b2a && c <= 0x0b30)
2642 || (c >= 0x0b32 && c <= 0x0b33)
2643 || (c >= 0x0b36 && c <= 0x0b39)
2644 || (c >= 0x0b5c && c <= 0x0b5d)
2645 || (c >= 0x0b5f && c <= 0x0b61))
2649 if ((c >= 0x0b85 && c <= 0x0b8a)
2650 || (c >= 0x0b8e && c <= 0x0b90)
2651 || (c >= 0x0b92 && c <= 0x0b95)
2652 || (c >= 0x0b99 && c <= 0x0b9a)
2654 || (c >= 0x0b9e && c <= 0x0b9f)
2655 || (c >= 0x0ba3 && c <= 0x0ba4)
2656 || (c >= 0x0ba8 && c <= 0x0baa)
2657 || (c >= 0x0bae && c <= 0x0bb5)
2658 || (c >= 0x0bb7 && c <= 0x0bb9))
2662 if ((c >= 0x0c05 && c <= 0x0c0c)
2663 || (c >= 0x0c0e && c <= 0x0c10)
2664 || (c >= 0x0c12 && c <= 0x0c28)
2665 || (c >= 0x0c2a && c <= 0x0c33)
2666 || (c >= 0x0c35 && c <= 0x0c39)
2667 || (c >= 0x0c60 && c <= 0x0c61))
2671 if ((c >= 0x0c85 && c <= 0x0c8c)
2672 || (c >= 0x0c8e && c <= 0x0c90)
2673 || (c >= 0x0c92 && c <= 0x0ca8)
2674 || (c >= 0x0caa && c <= 0x0cb3)
2675 || (c >= 0x0cb5 && c <= 0x0cb9)
2676 || (c >= 0x0ce0 && c <= 0x0ce1))
2680 if ((c >= 0x0d05 && c <= 0x0d0c)
2681 || (c >= 0x0d0e && c <= 0x0d10)
2682 || (c >= 0x0d12 && c <= 0x0d28)
2683 || (c >= 0x0d2a && c <= 0x0d39)
2684 || (c >= 0x0d60 && c <= 0x0d61))
2688 if ((c >= 0x0e01 && c <= 0x0e30)
2689 || (c >= 0x0e32 && c <= 0x0e33)
2690 || (c >= 0x0e40 && c <= 0x0e46)
2691 || (c >= 0x0e4f && c <= 0x0e5b))
2695 if ((c >= 0x0e81 && c <= 0x0e82)
2701 || (c >= 0x0e94 && c <= 0x0e97)
2702 || (c >= 0x0e99 && c <= 0x0e9f)
2703 || (c >= 0x0ea1 && c <= 0x0ea3)
2708 || (c >= 0x0ead && c <= 0x0eb0)
2712 || (c >= 0x0ec0 && c <= 0x0ec4)
2717 if ((c >= 0x10a0 && c <= 0x10c5)
2718 || (c >= 0x10d0 && c <= 0x10f6))
2722 if ((c >= 0x3041 && c <= 0x3094)
2723 || (c >= 0x309b && c <= 0x309e))
2727 if ((c >= 0x30a1 && c <= 0x30fe))
2731 if ((c >= 0x3105 && c <= 0x312c))
2735 if ((c >= 0x1100 && c <= 0x1159)
2736 || (c >= 0x1161 && c <= 0x11a2)
2737 || (c >= 0x11a8 && c <= 0x11f9))
2740 /* CJK Unified Ideographs */
2741 if ((c >= 0xf900 && c <= 0xfa2d)
2742 || (c >= 0xfb1f && c <= 0xfb36)
2743 || (c >= 0xfb38 && c <= 0xfb3c)
2745 || (c >= 0xfb40 && c <= 0xfb41)
2746 || (c >= 0xfb42 && c <= 0xfb44)
2747 || (c >= 0xfb46 && c <= 0xfbb1)
2748 || (c >= 0xfbd3 && c <= 0xfd3f)
2749 || (c >= 0xfd50 && c <= 0xfd8f)
2750 || (c >= 0xfd92 && c <= 0xfdc7)
2751 || (c >= 0xfdf0 && c <= 0xfdfb)
2752 || (c >= 0xfe70 && c <= 0xfe72)
2754 || (c >= 0xfe76 && c <= 0xfefc)
2755 || (c >= 0xff21 && c <= 0xff3a)
2756 || (c >= 0xff41 && c <= 0xff5a)
2757 || (c >= 0xff66 && c <= 0xffbe)
2758 || (c >= 0xffc2 && c <= 0xffc7)
2759 || (c >= 0xffca && c <= 0xffcf)
2760 || (c >= 0xffd2 && c <= 0xffd7)
2761 || (c >= 0xffda && c <= 0xffdc)
2762 || (c >= 0x4e00 && c <= 0x9fa5))
2765 error ("universal-character-name `\\u%04x' not valid in identifier", c);
2770 /* Add the UTF-8 representation of C to the token_buffer. */
2773 utf8_extend_token (c)
2778 if (c <= 0x0000007f)
2783 else if (c <= 0x000007ff)
2784 shift = 6, mask = 0xc0;
2785 else if (c <= 0x0000ffff)
2786 shift = 12, mask = 0xe0;
2787 else if (c <= 0x001fffff)
2788 shift = 18, mask = 0xf0;
2789 else if (c <= 0x03ffffff)
2790 shift = 24, mask = 0xf8;
2792 shift = 30, mask = 0xfc;
2794 extend_token (mask | (c >> shift));
2798 extend_token ((unsigned char) (0x80 | (c >> shift)));
2804 #define ENDFILE -1 /* token that represents end-of-file */
2806 /* Read an escape sequence, returning its equivalent as a character,
2807 or store 1 in *ignore_ptr if it is backslash-newline. */
2810 readescape (ignore_ptr)
2813 register int c = getch ();
2815 register unsigned count;
2816 unsigned firstdig = 0;
2834 if (c >= 'a' && c <= 'f')
2835 code += c - 'a' + 10;
2836 if (c >= 'A' && c <= 'F')
2837 code += c - 'A' + 10;
2838 if (c >= '0' && c <= '9')
2840 if (code != 0 || count != 0)
2849 error ("\\x used with no following hex digits");
2850 else if (count == 0)
2851 /* Digits are all 0's. Ok. */
2853 else if ((count - 1) * 4 >= TYPE_PRECISION (integer_type_node)
2856 << (TYPE_PRECISION (integer_type_node)
2859 pedwarn ("hex escape out of range");
2862 case '0': case '1': case '2': case '3': case '4':
2863 case '5': case '6': case '7':
2866 while ((c <= '7') && (c >= '0') && (count++ < 3))
2868 code = (code * 8) + (c - '0');
2875 return read_ucs (8);
2877 return read_ucs (4);
2879 case '\\': case '\'': case '"':
2888 return TARGET_NEWLINE;
2911 pedwarn ("non-ISO-standard escape sequence, `\\%c'", c);
2917 /* `\(', etc, are used at beginning of line to avoid confusing Emacs. */
2921 /* `\%' is used to prevent SCCS from getting confused. */
2924 pedwarn ("unknown escape sequence `\\%c'", c);
2928 pedwarn ("unknown escape sequence `\\%c'", c);
2930 pedwarn ("unknown escape sequence: `\\' followed by char code 0x%x", c);
2938 extern int end_of_file;
2940 /* We can't print string and character constants well
2941 because the token_buffer contains the result of processing escapes. */
2944 if (input_redirected ())
2945 error ("%s at end of saved text", string);
2947 error ("%s at end of input", string);
2949 else if (token_buffer[0] == 0)
2950 error ("%s at null character", string);
2951 else if (token_buffer[0] == '"')
2952 error ("%s before string constant", string);
2953 else if (token_buffer[0] == '\'')
2954 error ("%s before character constant", string);
2955 else if (!ISGRAPH ((unsigned char)token_buffer[0]))
2956 error ("%s before character 0%o", string, (unsigned char) token_buffer[0]);
2958 error ("%s before `%s'", string, token_buffer);
2961 /* Value is 1 (or 2) if we should try to make the next identifier look like
2962 a typename (when it may be a local variable or a class variable).
2963 Value is 0 if we treat this name in a default fashion. */
2964 int looking_for_typename;
2967 identifier_type (decl)
2972 if (TREE_CODE (decl) == TEMPLATE_DECL)
2974 if (TREE_CODE (DECL_TEMPLATE_RESULT (decl)) == TYPE_DECL)
2976 else if (looking_for_template)
2979 if (looking_for_template && really_overloaded_fn (decl))
2981 /* See through a baselink. */
2982 if (TREE_CODE (decl) == TREE_LIST)
2983 decl = TREE_VALUE (decl);
2985 for (t = decl; t != NULL_TREE; t = OVL_CHAIN (t))
2986 if (DECL_FUNCTION_TEMPLATE_P (OVL_FUNCTION (t)))
2989 if (TREE_CODE (decl) == NAMESPACE_DECL)
2991 if (TREE_CODE (decl) != TYPE_DECL)
2993 if (DECL_ARTIFICIAL (decl) && TREE_TYPE (decl) == current_class_type)
2996 /* A constructor declarator for a template type will get here as an
2997 implicit typename, a TYPENAME_TYPE with a type. */
2999 if (t && TREE_CODE (t) == TYPENAME_TYPE)
3001 decl = TREE_TYPE (decl);
3002 if (TREE_CODE (decl) == TYPENAME_TYPE)
3003 decl = TREE_TYPE (decl);
3013 /* Only types expected, not even namespaces. */
3014 looking_for_typename = 2;
3016 if ((yychar = yylex ()) < 0) yychar = 0;
3017 looking_for_typename = 0;
3018 if (yychar == IDENTIFIER)
3020 lastiddecl = lookup_name (yylval.ttype, -2);
3021 if (lastiddecl == 0)
3024 lastiddecl = IDENTIFIER_LABEL_VALUE (yylval.ttype);
3027 yychar = identifier_type (lastiddecl);
3031 /* Return true if d is in a global scope. */
3038 switch (TREE_CODE (d))
3043 case OVERLOAD: d = OVL_FUNCTION (d); continue;
3044 case TREE_LIST: d = TREE_VALUE (d); continue;
3046 my_friendly_assert (DECL_P (d), 980629);
3048 return DECL_NAMESPACE_SCOPE_P (d);
3053 do_identifier (token, parsing, args)
3054 register tree token;
3059 int lexing = (parsing == 1);
3061 if (! lexing || IDENTIFIER_OPNAME_P (token))
3062 id = lookup_name (token, 0);
3066 /* Do Koenig lookup if appropriate (inside templates we build lookup
3067 expressions instead).
3069 [basic.lookup.koenig]: If the ordinary unqualified lookup of the name
3070 finds the declaration of a class member function, the associated
3071 namespaces and classes are not considered. */
3073 if (args && !current_template_parms && (!id || is_global (id)))
3074 id = lookup_arg_dependent (token, id, args);
3076 /* Remember that this name has been used in the class definition, as per
3079 maybe_note_name_used_in_class (token, id);
3081 if (id == error_mark_node)
3083 /* lookup_name quietly returns error_mark_node if we're parsing,
3084 as we don't want to complain about an identifier that ends up
3085 being used as a declarator. So we call it again to get the error
3087 id = lookup_name (token, 0);
3088 return error_mark_node;
3091 if (!id || (TREE_CODE (id) == FUNCTION_DECL
3092 && DECL_ANTICIPATED (id)))
3094 if (current_template_parms)
3095 return build_min_nt (LOOKUP_EXPR, token);
3096 else if (IDENTIFIER_OPNAME_P (token))
3098 if (token != ansi_opname (ERROR_MARK))
3099 cp_error ("`%D' not defined", token);
3100 id = error_mark_node;
3102 else if (current_function_decl == 0)
3104 cp_error ("`%D' was not declared in this scope", token);
3105 id = error_mark_node;
3109 if (IDENTIFIER_NAMESPACE_VALUE (token) != error_mark_node
3110 || IDENTIFIER_ERROR_LOCUS (token) != current_function_decl)
3112 static int undeclared_variable_notice;
3114 cp_error ("`%D' undeclared (first use this function)", token);
3116 if (! undeclared_variable_notice)
3118 error ("(Each undeclared identifier is reported only once for each function it appears in.)");
3119 undeclared_variable_notice = 1;
3122 id = error_mark_node;
3123 /* Prevent repeated error messages. */
3124 SET_IDENTIFIER_NAMESPACE_VALUE (token, error_mark_node);
3125 SET_IDENTIFIER_ERROR_LOCUS (token, current_function_decl);
3129 if (TREE_CODE (id) == VAR_DECL && DECL_DEAD_FOR_LOCAL (id))
3131 tree shadowed = DECL_SHADOWED_FOR_VAR (id);
3132 while (shadowed != NULL_TREE && TREE_CODE (shadowed) == VAR_DECL
3133 && DECL_DEAD_FOR_LOCAL (shadowed))
3134 shadowed = DECL_SHADOWED_FOR_VAR (shadowed);
3136 shadowed = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (id));
3139 if (!DECL_ERROR_REPORTED (id))
3141 warning ("name lookup of `%s' changed",
3142 IDENTIFIER_POINTER (token));
3143 cp_warning_at (" matches this `%D' under ISO standard rules",
3145 cp_warning_at (" matches this `%D' under old rules", id);
3146 DECL_ERROR_REPORTED (id) = 1;
3150 else if (!DECL_ERROR_REPORTED (id))
3152 DECL_ERROR_REPORTED (id) = 1;
3153 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (id)))
3155 error ("name lookup of `%s' changed for new ISO `for' scoping",
3156 IDENTIFIER_POINTER (token));
3157 cp_error_at (" cannot use obsolete binding at `%D' because it has a destructor", id);
3158 id = error_mark_node;
3162 pedwarn ("name lookup of `%s' changed for new ISO `for' scoping",
3163 IDENTIFIER_POINTER (token));
3164 cp_pedwarn_at (" using obsolete binding at `%D'", id);
3168 /* TREE_USED is set in `hack_identifier'. */
3169 if (TREE_CODE (id) == CONST_DECL)
3172 if (IDENTIFIER_CLASS_VALUE (token) == id)
3173 enforce_access (CP_DECL_CONTEXT(id), id);
3174 if (!processing_template_decl || DECL_TEMPLATE_PARM_P (id))
3175 id = DECL_INITIAL (id);
3178 id = hack_identifier (id, token);
3180 /* We must look up dependent names when the template is
3181 instantiated, not while parsing it. For now, we don't
3182 distinguish between dependent and independent names. So, for
3183 example, we look up all overloaded functions at
3184 instantiation-time, even though in some cases we should just use
3185 the DECL we have here. We also use LOOKUP_EXPRs to find things
3186 like local variables, rather than creating TEMPLATE_DECLs for the
3187 local variables and then finding matching instantiations. */
3188 if (current_template_parms
3189 && (is_overloaded_fn (id)
3190 /* Some local VAR_DECLs (such as those for local variables
3191 in member functions of local classes) are built on the
3192 permanent obstack. */
3193 || (TREE_CODE (id) == VAR_DECL
3194 && CP_DECL_CONTEXT (id)
3195 && TREE_CODE (CP_DECL_CONTEXT (id)) == FUNCTION_DECL)
3196 || TREE_CODE (id) == PARM_DECL
3197 || TREE_CODE (id) == RESULT_DECL
3198 || TREE_CODE (id) == USING_DECL))
3199 id = build_min_nt (LOOKUP_EXPR, token);
3205 do_scoped_id (token, parsing)
3210 /* during parsing, this is ::name. Otherwise, it is black magic. */
3213 id = make_node (CPLUS_BINDING);
3214 if (!qualified_lookup_using_namespace (token, global_namespace, id, 0))
3217 id = BINDING_VALUE (id);
3220 id = IDENTIFIER_GLOBAL_VALUE (token);
3221 if (parsing && yychar == YYEMPTY)
3225 if (processing_template_decl)
3227 id = build_min_nt (LOOKUP_EXPR, token);
3228 LOOKUP_EXPR_GLOBAL (id) = 1;
3231 if (IDENTIFIER_NAMESPACE_VALUE (token) != error_mark_node)
3232 cp_error ("`::%D' undeclared (first use here)", token);
3233 id = error_mark_node;
3234 /* Prevent repeated error messages. */
3235 SET_IDENTIFIER_NAMESPACE_VALUE (token, error_mark_node);
3239 if (TREE_CODE (id) == ADDR_EXPR)
3240 mark_used (TREE_OPERAND (id, 0));
3241 else if (TREE_CODE (id) != OVERLOAD)
3244 if (TREE_CODE (id) == CONST_DECL && ! processing_template_decl)
3246 /* XXX CHS - should we set TREE_USED of the constant? */
3247 id = DECL_INITIAL (id);
3248 /* This is to prevent an enum whose value is 0
3249 from being considered a null pointer constant. */
3250 id = build1 (NOP_EXPR, TREE_TYPE (id), id);
3251 TREE_CONSTANT (id) = 1;
3254 if (processing_template_decl)
3256 if (is_overloaded_fn (id))
3258 id = build_min_nt (LOOKUP_EXPR, token);
3259 LOOKUP_EXPR_GLOBAL (id) = 1;
3262 /* else just use the decl */
3264 return convert_from_reference (id);
3268 identifier_typedecl_value (node)
3272 type = IDENTIFIER_TYPE_VALUE (node);
3273 if (type == NULL_TREE)
3276 if (IDENTIFIER_BINDING (node))
3278 t = IDENTIFIER_VALUE (node);
3279 if (t && TREE_CODE (t) == TYPE_DECL && TREE_TYPE (t) == type)
3282 if (IDENTIFIER_NAMESPACE_VALUE (node))
3284 t = IDENTIFIER_NAMESPACE_VALUE (node);
3285 if (t && TREE_CODE (t) == TYPE_DECL && TREE_TYPE (t) == type)
3289 /* Will this one ever happen? */
3290 if (TYPE_MAIN_DECL (type))
3291 return TYPE_MAIN_DECL (type);
3293 /* We used to do an internal error of 62 here, but instead we will
3294 handle the return of a null appropriately in the callers. */
3308 int conversion_errno;
3309 REAL_VALUE_TYPE value;
3316 struct pf_args * args = (struct pf_args *) data;
3317 int fflag = 0, lflag = 0;
3318 /* Copy token_buffer now, while it has just the number
3319 and not the suffixes; once we add `f' or `i',
3320 REAL_VALUE_ATOF may not work any more. */
3321 char *copy = (char *) alloca (args->p - token_buffer + 1);
3322 bcopy (token_buffer, copy, args->p - token_buffer + 1);
3324 args->conversion_errno = 0;
3325 args->type = double_type_node;
3331 /* Read the suffixes to choose a data type. */
3336 error ("more than one `f' in numeric constant");
3342 error ("more than one `l' in numeric constant");
3348 error ("more than one `i' or `j' in numeric constant");
3350 pedwarn ("ISO C++ forbids imaginary numeric constants");
3361 if (args->p >= token_buffer + maxtoken - 3)
3362 args->p = extend_token_buffer (args->p);
3363 *(args->p++) = args->c;
3368 /* The second argument, machine_mode, of REAL_VALUE_ATOF
3369 tells the desired precision of the binary result
3370 of decimal-to-binary conversion. */
3375 error ("both `f' and `l' in floating constant");
3377 args->type = float_type_node;
3379 if (args->base == 16)
3380 args->value = REAL_VALUE_HTOF (copy, TYPE_MODE (args->type));
3382 args->value = REAL_VALUE_ATOF (copy, TYPE_MODE (args->type));
3383 args->conversion_errno = errno;
3384 /* A diagnostic is required here by some ANSI C testsuites.
3385 This is not pedwarn, because some people don't want
3386 an error for this. */
3387 if (REAL_VALUE_ISINF (args->value) && pedantic)
3388 warning ("floating point number exceeds range of `float'");
3392 args->type = long_double_type_node;
3394 if (args->base == 16)
3395 args->value = REAL_VALUE_HTOF (copy, TYPE_MODE (args->type));
3397 args->value = REAL_VALUE_ATOF (copy, TYPE_MODE (args->type));
3398 args->conversion_errno = errno;
3399 if (REAL_VALUE_ISINF (args->value) && pedantic)
3400 warning ("floating point number exceeds range of `long double'");
3405 if (args->base == 16)
3406 args->value = REAL_VALUE_HTOF (copy, TYPE_MODE (args->type));
3408 args->value = REAL_VALUE_ATOF (copy, TYPE_MODE (args->type));
3409 args->conversion_errno = errno;
3410 if (REAL_VALUE_ISINF (args->value) && pedantic)
3411 warning ("floating point number exceeds range of `double'");
3415 /* Get the next character, staying within the current token if possible.
3416 If we're lexing a token, we don't want to look beyond the end of the
3417 token cpplib has prepared for us; otherwise, we end up reading in the
3418 next token, which screws up feed_input. So just return a null
3425 if (yy_cur == yy_lim)
3442 /* Read a single token from the input stream, and assign it lexical
3445 Note: We used to do token pasting here, to produce compound tokens like
3446 LEFT_RIGHT and EXTERN_LANG_STRING. That's now handled in spew.c, along
3447 with symbol table interaction and other context-sensitivity. */
3459 /* Effectively do c = skip_white_space (c)
3460 but do it faster in the usual cases. */
3470 if (cpp_token == CPP_HSPACE)
3471 c = yy_get_token ();
3478 /* Call skip_white_space so we can warn if appropriate. */
3483 c = skip_white_space (c);
3485 goto found_nonwhite;
3489 token_buffer[0] = c;
3490 token_buffer[1] = 0;
3492 /* yylloc.first_line = lineno; */
3498 token_buffer[0] = 0;
3500 value = END_OF_LINE;
3501 else if (input_redirected ())
3502 value = END_OF_SAVED_INPUT;
3509 if (cpp_token == CPP_NAME)
3512 /* Capital L may start a wide-string or wide-character constant. */
3514 register int c = token_getch ();
3523 goto string_constant;
3528 case 'A': case 'B': case 'C': case 'D': case 'E':
3529 case 'F': case 'G': case 'H': case 'I': case 'J':
3530 case 'K': case 'M': case 'N': case 'O':
3531 case 'P': case 'Q': case 'R': case 'S': case 'T':
3532 case 'U': case 'V': case 'W': case 'X': case 'Y':
3534 case 'a': case 'b': case 'c': case 'd': case 'e':
3535 case 'f': case 'g': case 'h': case 'i': case 'j':
3536 case 'k': case 'l': case 'm': case 'n': case 'o':
3537 case 'p': case 'q': case 'r': case 's': case 't':
3538 case 'u': case 'v': case 'w': case 'x': case 'y':
3544 if (cpp_token == CPP_NAME)
3546 /* Note that one character has already been read from
3547 yy_cur into token_buffer. Also, cpplib complains about
3548 $ in identifiers, so we don't have to. */
3550 int len = yy_lim - yy_cur + 1;
3551 if (len >= maxtoken)
3552 extend_token_buffer_to (len + 1);
3553 memcpy (token_buffer + 1, yy_cur, len);
3554 p = token_buffer + len;
3563 /* Make sure this char really belongs in an identifier. */
3564 if (ISALNUM (c) || c == '_')
3568 if (! dollars_in_ident)
3569 error ("`$' in identifier");
3571 pedwarn ("`$' in identifier");
3573 /* FIXME we should use some sort of multibyte character
3574 encoding. Locale-dependent? Always UTF-8? */
3575 else if (is_extended_char (c))
3577 sorry ("universal characters in identifiers");
3583 if (p >= token_buffer + maxtoken)
3584 p = extend_token_buffer (p);
3594 c = readescape (&ignore);
3607 /* Try to recognize a keyword. Uses minimum-perfect hash function */
3610 register struct resword *ptr;
3612 if ((ptr = is_reserved_word (token_buffer, p - token_buffer)))
3616 if (ptr->token == VISSPEC)
3621 yylval.ttype = access_public_node;
3624 yylval.ttype = access_private_node;
3627 yylval.ttype = access_protected_node;
3630 my_friendly_abort (63);
3634 yylval.ttype = ridpointers[(int) ptr->rid];
3636 else switch (ptr->token)
3639 yylval.code = NE_EXPR;
3640 token_buffer[0] = '!';
3641 token_buffer[1] = '=';
3642 token_buffer[2] = 0;
3646 if (strcmp ("and_eq", token_buffer) == 0)
3648 yylval.code = BIT_AND_EXPR;
3649 token_buffer[0] = '&';
3651 else if (strcmp ("or_eq", token_buffer) == 0)
3653 yylval.code = BIT_IOR_EXPR;
3654 token_buffer[0] = '|';
3656 else if (strcmp ("xor_eq", token_buffer) == 0)
3658 yylval.code = BIT_XOR_EXPR;
3659 token_buffer[0] = '^';
3661 token_buffer[1] = '=';
3662 token_buffer[2] = 0;
3666 yylval.code = BIT_AND_EXPR;
3667 token_buffer[0] = '&';
3668 token_buffer[1] = 0;
3672 yylval.code = BIT_IOR_EXPR;
3673 token_buffer[0] = '|';
3674 token_buffer[1] = 0;
3678 yylval.code = BIT_XOR_EXPR;
3679 token_buffer[0] = '^';
3680 token_buffer[1] = 0;
3684 value = (int) ptr->token;
3688 /* If we did not find a keyword, look for an identifier
3691 if (value == IDENTIFIER || value == TYPESPEC)
3692 GNU_xref_ref (current_function_decl, token_buffer);
3694 if (value == IDENTIFIER)
3696 register tree tmp = get_identifier (token_buffer);
3698 #if !defined(VMS) && defined(JOINER)
3699 /* Make sure that user does not collide with our internal
3702 && (THIS_NAME_P (tmp)
3703 || VPTR_NAME_P (tmp)
3704 || DESTRUCTOR_NAME_P (tmp)
3705 || VTABLE_NAME_P (tmp)
3706 || TEMP_NAME_P (tmp)
3707 || ANON_AGGRNAME_P (tmp)
3708 || ANON_PARMNAME_P (tmp)))
3709 warning ("identifier name `%s' conflicts with GNU C++ internal naming strategy",
3715 if (value == NEW && ! global_bindings_p ())
3724 if (yy_cur < yy_lim)
3727 /* It's hard to preserve tokenization on '.' because
3728 it could be a symbol by itself, or it could be the
3729 start of a floating point number and cpp won't tell us. */
3730 register int c1 = token_getch ();
3731 token_buffer[1] = c1;
3735 token_buffer[2] = 0;
3740 c1 = token_getch ();
3743 token_buffer[2] = c1;
3744 token_buffer[3] = 0;
3748 error ("parse error at `..'");
3752 token_put_back (c1);
3755 token_put_back (c1);
3758 token_buffer[1] = 0;
3762 /* Optimize for most frequent case. */
3767 cond = (yy_cur == yy_lim);
3769 register int c1 = token_getch ();
3770 token_put_back (c1);
3771 cond = (! ISALNUM (c1) && c1 != '.');
3775 yylval.ttype = (c == '0') ? integer_zero_node : integer_one_node;
3781 case '2': case '3': case '4':
3782 case '5': case '6': case '7': case '8': case '9':
3787 int largest_digit = 0;
3791 /* We actually store only HOST_BITS_PER_CHAR bits in each part.
3792 The code below which fills the parts array assumes that a host
3793 int is at least twice as wide as a host char, and that
3794 HOST_BITS_PER_WIDE_INT is an even multiple of HOST_BITS_PER_CHAR.
3795 Two HOST_WIDE_INTs is the largest int literal we can store.
3796 In order to detect overflow below, the number of parts (TOTAL_PARTS)
3797 must be exactly the number of parts needed to hold the bits
3798 of two HOST_WIDE_INTs. */
3799 #define TOTAL_PARTS ((HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR) * 2)
3800 unsigned int parts[TOTAL_PARTS];
3802 enum anon1 { NOT_FLOAT, AFTER_POINT, TOO_MANY_POINTS, AFTER_EXPON }
3803 floatflag = NOT_FLOAT;
3805 for (count = 0; count < TOTAL_PARTS; count++)
3813 *p++ = (c = token_getch ());
3814 if ((c == 'x') || (c == 'X'))
3817 *p++ = (c = token_getch ());
3819 /* Leading 0 forces octal unless the 0 is the only digit. */
3820 else if (c >= '0' && c <= '9')
3829 /* Read all the digits-and-decimal-points. */
3832 || (ISALNUM (c) && c != 'l' && c != 'L'
3833 && c != 'u' && c != 'U'
3834 && c != 'i' && c != 'I' && c != 'j' && c != 'J'
3835 && (floatflag == NOT_FLOAT
3836 || ((base != 16) && (c != 'f') && (c != 'F'))
3841 if (base == 16 && pedantic)
3842 pedwarn ("floating constant may not be in radix 16");
3843 if (floatflag == TOO_MANY_POINTS)
3844 /* We have already emitted an error. Don't need another. */
3846 else if (floatflag == AFTER_POINT || floatflag == AFTER_EXPON)
3848 error ("malformed floating constant");
3849 floatflag = TOO_MANY_POINTS;
3850 /* Avoid another error from atof by forcing all characters
3851 from here on to be ignored. */
3855 floatflag = AFTER_POINT;
3859 *p++ = c = token_getch ();
3860 /* Accept '.' as the start of a floating-point number
3861 only when it is followed by a digit. */
3862 if (p == token_buffer + 2 && !ISDIGIT (c))
3863 my_friendly_abort (990710);
3867 /* It is not a decimal point.
3868 It should be a digit (perhaps a hex digit). */
3874 else if (base <= 10)
3876 if (c == 'e' || c == 'E')
3879 floatflag = AFTER_EXPON;
3880 break; /* start of exponent */
3882 error ("nondigits in number and not hexadecimal");
3885 else if (base == 16 && (c == 'p' || c == 'P'))
3887 floatflag = AFTER_EXPON;
3888 break; /* start of exponent */
3898 if (c >= largest_digit)
3902 for (count = 0; count < TOTAL_PARTS; count++)
3904 parts[count] *= base;
3908 += (parts[count-1] >> HOST_BITS_PER_CHAR);
3910 &= (1 << HOST_BITS_PER_CHAR) - 1;
3916 /* If the highest-order part overflows (gets larger than
3917 a host char will hold) then the whole number has
3918 overflowed. Record this and truncate the highest-order
3920 if (parts[TOTAL_PARTS - 1] >> HOST_BITS_PER_CHAR)
3923 parts[TOTAL_PARTS - 1] &= (1 << HOST_BITS_PER_CHAR) - 1;
3926 if (p >= token_buffer + maxtoken - 3)
3927 p = extend_token_buffer (p);
3928 *p++ = (c = token_getch ());
3932 /* This can happen on input like `int i = 0x;' */
3934 error ("numeric constant with no digits");
3936 if (largest_digit >= base)
3937 error ("numeric constant contains digits beyond the radix");
3939 /* Remove terminating char from the token buffer and delimit the
3943 if (floatflag != NOT_FLOAT)
3946 int imag, conversion_errno;
3947 REAL_VALUE_TYPE value;
3948 struct pf_args args;
3950 /* Read explicit exponent if any, and put it in tokenbuf. */
3952 if ((base == 10 && ((c == 'e') || (c == 'E')))
3953 || (base == 16 && (c == 'p' || c == 'P')))
3955 if (p >= token_buffer + maxtoken - 3)
3956 p = extend_token_buffer (p);
3959 if ((c == '+') || (c == '-'))
3964 /* Exponent is decimal, even if string is a hex float. */
3966 error ("floating constant exponent has no digits");
3969 if (p >= token_buffer + maxtoken - 3)
3970 p = extend_token_buffer (p);
3975 if (base == 16 && floatflag != AFTER_EXPON)
3976 error ("hexadecimal floating constant has no exponent");
3980 /* Setup input for parse_float() */
3985 /* Convert string to a double, checking for overflow. */
3986 if (do_float_handler (parse_float, (PTR) &args))
3988 /* Receive output from parse_float() */
3993 /* We got an exception from parse_float() */
3994 error ("floating constant out of range");
3998 /* Receive output from parse_float() */
4002 conversion_errno = args.conversion_errno;
4005 /* ERANGE is also reported for underflow,
4006 so test the value to distinguish overflow from that. */
4007 if (conversion_errno == ERANGE && pedantic
4008 && (REAL_VALUES_LESS (dconst1, value)
4009 || REAL_VALUES_LESS (value, dconstm1)))
4010 warning ("floating point number exceeds range of `double'");
4013 /* If the result is not a number, assume it must have been
4014 due to some error message above, so silently convert
4016 if (REAL_VALUE_ISNAN (value))
4019 /* Create a node with determined type and value. */
4021 yylval.ttype = build_complex (NULL_TREE,
4022 convert (type, integer_zero_node),
4023 build_real (type, value));
4025 yylval.ttype = build_real (type, value);
4030 HOST_WIDE_INT high, low;
4031 int spec_unsigned = 0;
4033 int spec_long_long = 0;
4040 if (c == 'u' || c == 'U')
4043 error ("two `u's in integer constant");
4046 else if (c == 'l' || c == 'L')
4051 error ("three `l's in integer constant");
4052 else if (pedantic && ! in_system_header && warn_long_long)
4053 pedwarn ("ISO C++ forbids long long integer constants");
4058 else if (c == 'i' || c == 'j' || c == 'I' || c == 'J')
4061 error ("more than one `i' or `j' in numeric constant");
4063 pedwarn ("ISO C++ forbids imaginary numeric constants");
4068 if (p >= token_buffer + maxtoken - 3)
4069 p = extend_token_buffer (p);
4074 /* If the literal overflowed, pedwarn about it now. */
4078 pedwarn ("integer constant is too large for this configuration of the compiler - truncated to %d bits", HOST_BITS_PER_WIDE_INT * 2);
4081 /* This is simplified by the fact that our constant
4082 is always positive. */
4086 for (i = 0; i < HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR; i++)
4088 high |= ((HOST_WIDE_INT) parts[i + (HOST_BITS_PER_WIDE_INT
4089 / HOST_BITS_PER_CHAR)]
4090 << (i * HOST_BITS_PER_CHAR));
4091 low |= (HOST_WIDE_INT) parts[i] << (i * HOST_BITS_PER_CHAR);
4094 yylval.ttype = build_int_2 (low, high);
4095 TREE_TYPE (yylval.ttype) = long_long_unsigned_type_node;
4097 /* Calculate the ANSI type. */
4098 if (! spec_long && ! spec_unsigned
4099 && int_fits_type_p (yylval.ttype, integer_type_node))
4100 type = integer_type_node;
4101 else if (! spec_long && (base != 10 || spec_unsigned)
4102 && int_fits_type_p (yylval.ttype, unsigned_type_node))
4103 type = unsigned_type_node;
4104 else if (! spec_unsigned && !spec_long_long
4105 && int_fits_type_p (yylval.ttype, long_integer_type_node))
4106 type = long_integer_type_node;
4107 else if (! spec_long_long
4108 && int_fits_type_p (yylval.ttype,
4109 long_unsigned_type_node))
4110 type = long_unsigned_type_node;
4111 else if (! spec_unsigned
4112 && int_fits_type_p (yylval.ttype,
4113 long_long_integer_type_node))
4114 type = long_long_integer_type_node;
4115 else if (int_fits_type_p (yylval.ttype,
4116 long_long_unsigned_type_node))
4117 type = long_long_unsigned_type_node;
4118 else if (! spec_unsigned
4119 && int_fits_type_p (yylval.ttype,
4120 widest_integer_literal_type_node))
4121 type = widest_integer_literal_type_node;
4123 type = widest_unsigned_literal_type_node;
4125 if (pedantic && !spec_long_long && !warn
4126 && (TYPE_PRECISION (long_integer_type_node)
4127 < TYPE_PRECISION (type)))
4130 pedwarn ("integer constant larger than the maximum value of an unsigned long int");
4133 if (base == 10 && ! spec_unsigned && TREE_UNSIGNED (type))
4134 warning ("decimal constant is so large that it is unsigned");
4138 if (TYPE_PRECISION (type)
4139 <= TYPE_PRECISION (integer_type_node))
4141 = build_complex (NULL_TREE, integer_zero_node,
4142 convert (integer_type_node,
4145 error ("complex integer constant is too wide for `__complex int'");
4148 TREE_TYPE (yylval.ttype) = type;
4151 /* If it's still an integer (not a complex), and it doesn't
4152 fit in the type we choose for it, then pedwarn. */
4155 && TREE_CODE (TREE_TYPE (yylval.ttype)) == INTEGER_TYPE
4156 && ! int_fits_type_p (yylval.ttype, TREE_TYPE (yylval.ttype)))
4157 pedwarn ("integer constant is larger than the maximum value for its type");
4163 if (ISALNUM (c) || c == '.' || c == '_' || c == '$'
4164 || ((c == '-' || c == '+')
4165 && (p[-1] == 'e' || p[-1] == 'E')))
4166 error ("missing white space after number `%s'", token_buffer);
4168 value = CONSTANT; break;
4174 register int result = 0;
4175 register int num_chars = 0;
4177 unsigned width = TYPE_PRECISION (char_type_node);
4179 #ifdef MULTIBYTE_CHARS
4180 int longest_char = local_mb_cur_max ();
4181 local_mbtowc (NULL_PTR, NULL_PTR, 0);
4184 max_chars = TYPE_PRECISION (integer_type_node) / width;
4186 width = WCHAR_TYPE_SIZE;
4193 if (c == '\'' || c == EOF)
4200 c = readescape (&ignore);
4203 if (width < HOST_BITS_PER_INT
4204 && (unsigned) c >= ((unsigned)1 << width))
4205 pedwarn ("escape sequence out of range for character");
4206 #ifdef MAP_CHARACTER
4208 c = MAP_CHARACTER (c);
4214 pedwarn ("ISO C++ forbids newline in character constant");
4219 #ifdef MULTIBYTE_CHARS
4223 for (i = 1; i <= longest_char; ++i)
4225 if (i > maxtoken - 4)
4226 extend_token_buffer (token_buffer);
4228 token_buffer[i] = c;
4229 char_len = local_mbtowc (& wc,
4238 /* mbtowc sometimes needs an extra char before accepting */
4243 /* Merge character into result; ignore excess chars. */
4244 for (i = 1; i <= char_len; ++i)
4248 if (width < HOST_BITS_PER_INT)
4249 result = (result << width)
4251 & ((1 << width) - 1));
4253 result = token_buffer[i];
4255 num_chars += char_len;
4264 warning ("Ignoring invalid multibyte character");
4265 /* Replace all but the first byte. */
4266 for (--i; i > 1; --i)
4267 token_put_back (token_buffer[i]);
4268 wc = token_buffer[1];
4270 #ifdef MAP_CHARACTER
4271 c = MAP_CHARACTER (wc);
4276 #else /* ! MULTIBYTE_CHARS */
4277 #ifdef MAP_CHARACTER
4278 c = MAP_CHARACTER (c);
4280 #endif /* ! MULTIBYTE_CHARS */
4285 if (chars_seen == 1) /* only keep the first one */
4290 /* Merge character into result; ignore excess chars. */
4291 num_chars += (width / TYPE_PRECISION (char_type_node));
4292 if (num_chars < max_chars + 1)
4294 if (width < HOST_BITS_PER_INT)
4295 result = (result << width) | (c & ((1 << width) - 1));
4302 error ("malformatted character constant");
4303 else if (chars_seen == 0)
4304 error ("empty character constant");
4305 else if (num_chars > max_chars)
4307 num_chars = max_chars;
4308 error ("character constant too long");
4310 else if (chars_seen != 1 && warn_multichar)
4311 warning ("multi-character character constant");
4313 /* If char type is signed, sign-extend the constant. */
4316 int num_bits = num_chars * width;
4318 /* We already got an error; avoid invalid shift. */
4319 yylval.ttype = build_int_2 (0, 0);
4320 else if (TREE_UNSIGNED (char_type_node)
4321 || ((result >> (num_bits - 1)) & 1) == 0)
4323 = build_int_2 (result & (~(unsigned HOST_WIDE_INT) 0
4324 >> (HOST_BITS_PER_WIDE_INT - num_bits)),
4328 = build_int_2 (result | ~(~(unsigned HOST_WIDE_INT) 0
4329 >> (HOST_BITS_PER_WIDE_INT - num_bits)),
4331 /* In C, a character constant has type 'int'; in C++, 'char'. */
4332 if (chars_seen <= 1)
4333 TREE_TYPE (yylval.ttype) = char_type_node;
4335 TREE_TYPE (yylval.ttype) = integer_type_node;
4339 yylval.ttype = build_int_2 (result, 0);
4340 TREE_TYPE (yylval.ttype) = wchar_type_node;
4350 unsigned width = wide_flag ? WCHAR_TYPE_SIZE
4351 : TYPE_PRECISION (char_type_node);
4352 #ifdef MULTIBYTE_CHARS
4353 int longest_char = local_mb_cur_max ();
4354 local_mbtowc (NULL_PTR, NULL_PTR, 0);
4358 p = token_buffer + 1;
4360 while (c != '"' && c != EOF)
4362 /* ignore_escape_flag is set for reading the filename in #line. */
4363 if (!ignore_escape_flag && c == '\\')
4366 c = readescape (&ignore);
4369 if (width < HOST_BITS_PER_INT
4370 && (unsigned) c >= ((unsigned)1 << width))
4371 pedwarn ("escape sequence out of range for character");
4376 pedwarn ("ISO C++ forbids newline in string constant");
4381 #ifdef MULTIBYTE_CHARS
4385 for (i = 0; i < longest_char; ++i)
4387 if (p + i >= token_buffer + maxtoken)
4388 p = extend_token_buffer (p);
4391 char_len = local_mbtowc (& wc, p, i + 1);
4398 warning ("Ignoring invalid multibyte character");
4399 /* Replace all except the first byte. */
4401 for (--i; i > 0; --i)
4402 token_put_back (p[i]);
4405 /* mbtowc sometimes needs an extra char before accepting */
4415 #endif /* MULTIBYTE_CHARS */
4418 /* Add this single character into the buffer either as a wchar_t
4419 or as a single byte. */
4422 unsigned width = TYPE_PRECISION (char_type_node);
4423 unsigned bytemask = (1 << width) - 1;
4426 if (p + WCHAR_BYTES > token_buffer + maxtoken)
4427 p = extend_token_buffer (p);
4429 for (byte = 0; byte < WCHAR_BYTES; ++byte)
4432 if (byte >= (int) sizeof (c))
4435 value = (c >> (byte * width)) & bytemask;
4436 if (BYTES_BIG_ENDIAN)
4437 p[WCHAR_BYTES - byte - 1] = value;
4445 if (p >= token_buffer + maxtoken)
4446 p = extend_token_buffer (p);
4454 /* Terminate the string value, either with a single byte zero
4455 or with a wide zero. */
4458 if (p + WCHAR_BYTES > token_buffer + maxtoken)
4459 p = extend_token_buffer (p);
4460 bzero (p, WCHAR_BYTES);
4465 if (p >= token_buffer + maxtoken)
4466 p = extend_token_buffer (p);
4471 error ("Unterminated string constant");
4473 /* We have read the entire constant.
4474 Construct a STRING_CST for the result. */
4476 yylval.ttype = build_string (p - (token_buffer + 1), token_buffer + 1);
4479 TREE_TYPE (yylval.ttype) = wchar_array_type_node;
4481 TREE_TYPE (yylval.ttype) = char_array_type_node;
4483 value = STRING; break;
4507 yylval.code = PLUS_EXPR; break;
4509 yylval.code = MINUS_EXPR; break;
4511 yylval.code = BIT_AND_EXPR; break;
4513 yylval.code = BIT_IOR_EXPR; break;
4515 yylval.code = MULT_EXPR; break;
4517 yylval.code = TRUNC_DIV_EXPR; break;
4519 yylval.code = TRUNC_MOD_EXPR; break;
4521 yylval.code = BIT_XOR_EXPR; break;
4523 yylval.code = LSHIFT_EXPR; break;
4525 yylval.code = RSHIFT_EXPR; break;
4527 yylval.code = LT_EXPR; break;
4529 yylval.code = GT_EXPR; break;
4532 token_buffer[1] = c1 = token_getch ();
4533 token_buffer[2] = 0;
4540 value = ARITHCOMPARE; yylval.code = LE_EXPR; goto done;
4542 value = ARITHCOMPARE; yylval.code = GE_EXPR; goto done;
4544 value = EQCOMPARE; yylval.code = NE_EXPR; goto done;
4546 value = EQCOMPARE; yylval.code = EQ_EXPR; goto done;
4548 value = ASSIGN; goto done;
4554 value = PLUSPLUS; goto done;
4556 value = MINUSMINUS; goto done;
4558 value = ANDAND; goto done;
4560 value = OROR; goto done;
4572 else if (c1 == '?' && (c == '<' || c == '>'))
4574 token_buffer[3] = 0;
4576 c1 = token_getch ();
4577 yylval.code = (c == '<' ? MIN_EXPR : MAX_EXPR);
4580 /* <?= or >?= expression. */
4581 token_buffer[2] = c1;
4587 token_put_back (c1);
4590 pedwarn ("use of `operator %s' is not standard C++",
4600 c1 = token_getch ();
4602 value = POINTSAT_STAR;
4605 token_put_back (c1);
4615 { value = ']'; goto done; }
4619 { value = '{'; indent_level++; goto done; }
4621 { value = '['; goto done; }
4625 { value = '}'; indent_level--; goto done; }
4629 token_put_back (c1);
4630 token_buffer[1] = 0;
4632 /* Here the C frontend changes < and > to ARITHCOMPARE. We don't
4633 do that because of templates. */
4640 /* Don't make yyparse think this is eof. */
4655 if (is_extended_char (c))
4661 /* yylloc.last_line = lineno; */
4662 #ifdef GATHER_STATISTICS
4663 #ifdef REDUCE_LENGTH
4664 token_count[value] += 1;
4675 return !!is_reserved_word (IDENTIFIER_POINTER (t), IDENTIFIER_LENGTH (t));
4678 #ifdef GATHER_STATISTICS
4679 /* The original for tree_node_kind is in the toplevel tree.c; changes there
4680 need to be brought into here, unless this were actually put into a header
4682 /* Statistics-gathering stuff. */
4703 extern int tree_node_counts[];
4704 extern int tree_node_sizes[];
4708 build_lang_decl (code, name, type)
4709 enum tree_code code;
4715 t = build_decl (code, name, type);
4716 retrofit_lang_decl (t);
4721 /* Add DECL_LANG_SPECIFIC info to T. Called from build_lang_decl
4722 and pushdecl (for functions generated by the backend). */
4725 retrofit_lang_decl (t)
4728 struct lang_decl *ld;
4731 if (CAN_HAVE_FULL_LANG_DECL_P (t))
4732 size = sizeof (struct lang_decl);
4734 size = sizeof (struct lang_decl_flags);
4736 ld = (struct lang_decl *) ggc_alloc_cleared (size);
4738 DECL_LANG_SPECIFIC (t) = ld;
4739 if (current_lang_name == lang_name_cplusplus)
4740 DECL_LANGUAGE (t) = lang_cplusplus;
4741 else if (current_lang_name == lang_name_c)
4742 DECL_LANGUAGE (t) = lang_c;
4743 else if (current_lang_name == lang_name_java)
4744 DECL_LANGUAGE (t) = lang_java;
4745 else my_friendly_abort (64);
4747 #ifdef GATHER_STATISTICS
4748 tree_node_counts[(int)lang_decl] += 1;
4749 tree_node_sizes[(int)lang_decl] += size;
4754 copy_lang_decl (node)
4758 struct lang_decl *ld;
4760 if (! DECL_LANG_SPECIFIC (node))
4763 if (!CAN_HAVE_FULL_LANG_DECL_P (node))
4764 size = sizeof (struct lang_decl_flags);
4766 size = sizeof (struct lang_decl);
4767 ld = (struct lang_decl *) ggc_alloc (size);
4768 bcopy ((char *)DECL_LANG_SPECIFIC (node), (char *)ld, size);
4769 DECL_LANG_SPECIFIC (node) = ld;
4772 /* Copy DECL, including any language-specific parts. */
4780 copy = copy_node (decl);
4781 copy_lang_decl (copy);
4786 cp_make_lang_type (code)
4787 enum tree_code code;
4789 register tree t = make_node (code);
4791 /* Set up some flags that give proper default behavior. */
4792 if (IS_AGGR_TYPE_CODE (code))
4794 struct lang_type *pi;
4796 pi = (struct lang_type *) ggc_alloc (sizeof (struct lang_type));
4797 bzero ((char *) pi, (int) sizeof (struct lang_type));
4799 TYPE_LANG_SPECIFIC (t) = pi;
4800 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, interface_unknown);
4801 CLASSTYPE_INTERFACE_ONLY (t) = interface_only;
4803 /* Make sure this is laid out, for ease of use later. In the
4804 presence of parse errors, the normal was of assuring this
4805 might not ever get executed, so we lay it out *immediately*. */
4806 build_pointer_type (t);
4808 #ifdef GATHER_STATISTICS
4809 tree_node_counts[(int)lang_type] += 1;
4810 tree_node_sizes[(int)lang_type] += sizeof (struct lang_type);
4814 /* We use TYPE_ALIAS_SET for the CLASSTYPE_MARKED bits. But,
4815 TYPE_ALIAS_SET is initialized to -1 by default, so we must
4817 TYPE_ALIAS_SET (t) = 0;
4819 /* We need to allocate a TYPE_BINFO even for TEMPLATE_TYPE_PARMs
4820 since they can be virtual base types, and we then need a
4821 canonical binfo for them. Ideally, this would be done lazily for
4823 if (IS_AGGR_TYPE_CODE (code) || code == TEMPLATE_TYPE_PARM)
4824 TYPE_BINFO (t) = make_binfo (size_zero_node, t, NULL_TREE, NULL_TREE);
4830 make_aggr_type (code)
4831 enum tree_code code;
4833 tree t = cp_make_lang_type (code);
4835 if (IS_AGGR_TYPE_CODE (code))
4836 SET_IS_AGGR_TYPE (t, 1);
4842 dump_time_statistics ()
4844 register tree prev = 0, decl, next;
4845 int this_time = get_run_time ();
4846 TREE_INT_CST_LOW (TIME_IDENTIFIER_TIME (this_filename_time))
4847 += this_time - body_time;
4849 fprintf (stderr, "\n******\n");
4850 print_time ("header files (total)", header_time);
4851 print_time ("main file (total)", this_time - body_time);
4852 fprintf (stderr, "ratio = %g : 1\n",
4853 (double)header_time / (double)(this_time - body_time));
4854 fprintf (stderr, "\n******\n");
4856 for (decl = filename_times; decl; decl = next)
4858 next = IDENTIFIER_GLOBAL_VALUE (decl);
4859 SET_IDENTIFIER_GLOBAL_VALUE (decl, prev);
4863 for (decl = prev; decl; decl = IDENTIFIER_GLOBAL_VALUE (decl))
4864 print_time (IDENTIFIER_POINTER (decl),
4865 TREE_INT_CST_LOW (TIME_IDENTIFIER_TIME (decl)));
4869 compiler_error VPARAMS ((const char *msg, ...))
4871 #ifndef ANSI_PROTOTYPES
4879 #ifndef ANSI_PROTOTYPES
4880 msg = va_arg (ap, const char *);
4883 vsprintf (buf, msg, ap);
4885 error_with_file_and_line (input_filename, lineno, "%s (compiler error)", buf);
4888 /* Return the type-qualifier corresponding to the identifier given by
4892 cp_type_qual_from_rid (rid)
4895 if (rid == ridpointers[(int) RID_CONST])
4896 return TYPE_QUAL_CONST;
4897 else if (rid == ridpointers[(int) RID_VOLATILE])
4898 return TYPE_QUAL_VOLATILE;
4899 else if (rid == ridpointers[(int) RID_RESTRICT])
4900 return TYPE_QUAL_RESTRICT;
4902 my_friendly_abort (0);
4903 return TYPE_UNQUALIFIED;