1 /* Separate lexical analyzer for GNU C++.
2 Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001 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. */
45 #include "diagnostic.h"
47 #ifdef MULTIBYTE_CHARS
52 extern void yyprint PARAMS ((FILE *, int, YYSTYPE));
54 static int interface_strcmp PARAMS ((const char *));
55 static int *init_cpp_parse PARAMS ((void));
56 static void init_reswords PARAMS ((void));
57 static void init_cp_pragma PARAMS ((void));
59 static tree parse_strconst_pragma PARAMS ((const char *, int));
60 static void handle_pragma_vtable PARAMS ((cpp_reader *));
61 static void handle_pragma_unit PARAMS ((cpp_reader *));
62 static void handle_pragma_interface PARAMS ((cpp_reader *));
63 static void handle_pragma_implementation PARAMS ((cpp_reader *));
64 static void cxx_init PARAMS ((void));
65 static void cxx_finish PARAMS ((void));
66 static void cxx_init_options PARAMS ((void));
67 static void cxx_post_options PARAMS ((void));
69 #ifdef GATHER_STATISTICS
71 static int reduce_cmp PARAMS ((int *, int *));
72 static int token_cmp PARAMS ((int *, int *));
75 static int is_global PARAMS ((tree));
76 static void init_operators PARAMS ((void));
78 /* A constraint that can be tested at compile time. */
80 #define CONSTRAINT(name, expr) extern int constraint_##name [(expr) ? 1 : -1]
82 #define CONSTRAINT(name, expr) extern int constraint_/**/name [(expr) ? 1 : -1]
87 /* Pending language change.
88 Positive is push count, negative is pop count. */
89 int pending_lang_change = 0;
91 extern int yychar; /* the lookahead symbol */
92 extern YYSTYPE yylval; /* the semantic value of the */
93 /* lookahead symbol */
95 /* These flags are used by c-lex.c. In C++, they're always off and on,
97 int warn_traditional = 0;
98 int flag_digraphs = 1;
100 /* the declaration found for the last IDENTIFIER token read in.
101 yylex must look this up to detect typedefs, which get token type TYPENAME,
102 so it is left around in case the identifier is not a typedef but is
103 used in a context which makes it a reference to a variable. */
106 /* Array for holding counts of the numbers of tokens seen. */
107 extern int *token_count;
109 /* Functions and data structures for #pragma interface.
111 `#pragma implementation' means that the main file being compiled
112 is considered to implement (provide) the classes that appear in
113 its main body. I.e., if this is file "foo.cc", and class `bar'
114 is defined in "foo.cc", then we say that "foo.cc implements bar".
116 All main input files "implement" themselves automagically.
118 `#pragma interface' means that unless this file (of the form "foo.h"
119 is not presently being included by file "foo.cc", the
120 CLASSTYPE_INTERFACE_ONLY bit gets set. The effect is that none
121 of the vtables nor any of the inline functions defined in foo.h
124 There are cases when we want to link files such as "defs.h" and
125 "main.cc". In this case, we give "defs.h" a `#pragma interface',
126 and "main.cc" has `#pragma implementation "defs.h"'. */
130 const char *filename;
131 struct impl_files *next;
134 static struct impl_files *impl_file_chain;
137 /* Return something to represent absolute declarators containing a *.
138 TARGET is the absolute declarator that the * contains.
139 CV_QUALIFIERS is a list of modifiers such as const or volatile
140 to apply to the pointer type, represented as identifiers.
142 We return an INDIRECT_REF whose "contents" are TARGET
143 and whose type is the modifier list. */
146 make_pointer_declarator (cv_qualifiers, target)
147 tree cv_qualifiers, target;
149 if (target && TREE_CODE (target) == IDENTIFIER_NODE
150 && ANON_AGGRNAME_P (target))
151 error ("type name expected before `*'");
152 target = build_nt (INDIRECT_REF, target);
153 TREE_TYPE (target) = cv_qualifiers;
157 /* Return something to represent absolute declarators containing a &.
158 TARGET is the absolute declarator that the & contains.
159 CV_QUALIFIERS is a list of modifiers such as const or volatile
160 to apply to the reference type, represented as identifiers.
162 We return an ADDR_EXPR whose "contents" are TARGET
163 and whose type is the modifier list. */
166 make_reference_declarator (cv_qualifiers, target)
167 tree cv_qualifiers, target;
171 if (TREE_CODE (target) == ADDR_EXPR)
173 error ("cannot declare references to references");
176 if (TREE_CODE (target) == INDIRECT_REF)
178 error ("cannot declare pointers to references");
181 if (TREE_CODE (target) == IDENTIFIER_NODE && ANON_AGGRNAME_P (target))
182 error ("type name expected before `&'");
184 target = build_nt (ADDR_EXPR, target);
185 TREE_TYPE (target) = cv_qualifiers;
190 make_call_declarator (target, parms, cv_qualifiers, exception_specification)
191 tree target, parms, cv_qualifiers, exception_specification;
193 target = build_nt (CALL_EXPR, target,
194 tree_cons (parms, cv_qualifiers, NULL_TREE),
195 /* The third operand is really RTL. We
196 shouldn't put anything there. */
198 CALL_DECLARATOR_EXCEPTION_SPEC (target) = exception_specification;
203 set_quals_and_spec (call_declarator, cv_qualifiers, exception_specification)
204 tree call_declarator, cv_qualifiers, exception_specification;
206 CALL_DECLARATOR_QUALS (call_declarator) = cv_qualifiers;
207 CALL_DECLARATOR_EXCEPTION_SPEC (call_declarator) = exception_specification;
210 int interface_only; /* whether or not current file is only for
211 interface definitions. */
212 int interface_unknown; /* whether or not we know this class
213 to behave according to #pragma interface. */
215 /* Tree code classes. */
217 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
219 static char cplus_tree_code_type[] = {
221 #include "cp-tree.def"
225 /* Table indexed by tree code giving number of expression
226 operands beyond the fixed part of the node structure.
227 Not used for types or decls. */
229 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
231 static int cplus_tree_code_length[] = {
233 #include "cp-tree.def"
237 /* Names of tree components.
238 Used for printing out the tree and error messages. */
239 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
241 static const char *cplus_tree_code_name[] = {
243 #include "cp-tree.def"
247 /* Each front end provides its own hooks, for toplev.c. */
248 struct lang_hooks lang_hooks = {cxx_init,
254 /* Post-switch processing. */
258 cpp_post_options (parse_in);
264 parse_in = cpp_create_reader (CLK_GNUCXX);
266 /* Default exceptions on. */
268 /* Mark as "unspecified". */
269 flag_bounds_check = -1;
270 /* By default wrap lines at 80 characters. Is getenv ("COLUMNS")
272 diagnostic_message_length_per_line = 80;
273 /* By default, emit location information once for every
274 diagnostic message. */
275 set_message_prefixing_rule (DIAGNOSTICS_SHOW_PREFIX_ONCE);
281 c_common_lang_init ();
283 if (flag_gnu_xref) GNU_xref_begin (input_filename);
284 init_repo (input_filename);
290 if (flag_gnu_xref) GNU_xref_end (errorcount+sorrycount);
302 #ifdef GATHER_STATISTICS
304 reduce_count = (int *) xcalloc (sizeof (int), (REDUCE_LENGTH + 1));
306 token_count = (int *) xcalloc (sizeof (int), (TOKEN_LENGTH + 1));
313 /* A mapping from tree codes to operator name information. */
314 operator_name_info_t operator_name_info[(int) LAST_CPLUS_TREE_CODE];
315 /* Similar, but for assignment operators. */
316 operator_name_info_t assignment_operator_name_info[(int) LAST_CPLUS_TREE_CODE];
318 /* Initialize data structures that keep track of operator names. */
320 #define DEF_OPERATOR(NAME, C, NM, OM, AR, AP) \
321 CONSTRAINT (C, sizeof "operator " + sizeof NAME <= 256);
322 #include "operators.def"
330 struct operator_name_info_t *oni;
332 #define DEF_OPERATOR(NAME, CODE, NEW_MANGLING, OLD_MANGLING, ARITY, ASSN_P) \
333 sprintf (buffer, ISALPHA (NAME[0]) ? "operator %s" : "operator%s", NAME); \
334 identifier = get_identifier (buffer); \
335 IDENTIFIER_OPNAME_P (identifier) = 1; \
338 ? &assignment_operator_name_info[(int) CODE] \
339 : &operator_name_info[(int) CODE]); \
340 oni->identifier = identifier; \
342 oni->mangled_name = NEW_MANGLING;
344 #include "operators.def"
347 operator_name_info[(int) ERROR_MARK].identifier
348 = get_identifier ("<invalid operator>");
350 /* Handle some special cases. These operators are not defined in
351 the language, but can be produced internally. We may need them
352 for error-reporting. (Eventually, we should ensure that this
353 does not happen. Error messages involving these operators will
354 be confusing to users.) */
356 operator_name_info [(int) INIT_EXPR].name
357 = operator_name_info [(int) MODIFY_EXPR].name;
358 operator_name_info [(int) EXACT_DIV_EXPR].name = "(ceiling /)";
359 operator_name_info [(int) CEIL_DIV_EXPR].name = "(ceiling /)";
360 operator_name_info [(int) FLOOR_DIV_EXPR].name = "(floor /)";
361 operator_name_info [(int) ROUND_DIV_EXPR].name = "(round /)";
362 operator_name_info [(int) CEIL_MOD_EXPR].name = "(ceiling %)";
363 operator_name_info [(int) FLOOR_MOD_EXPR].name = "(floor %)";
364 operator_name_info [(int) ROUND_MOD_EXPR].name = "(round %)";
365 operator_name_info [(int) ABS_EXPR].name = "abs";
366 operator_name_info [(int) FFS_EXPR].name = "ffs";
367 operator_name_info [(int) BIT_ANDTC_EXPR].name = "&~";
368 operator_name_info [(int) TRUTH_AND_EXPR].name = "strict &&";
369 operator_name_info [(int) TRUTH_OR_EXPR].name = "strict ||";
370 operator_name_info [(int) IN_EXPR].name = "in";
371 operator_name_info [(int) RANGE_EXPR].name = "...";
372 operator_name_info [(int) CONVERT_EXPR].name = "+";
374 assignment_operator_name_info [(int) EXACT_DIV_EXPR].name
376 assignment_operator_name_info [(int) CEIL_DIV_EXPR].name
378 assignment_operator_name_info [(int) FLOOR_DIV_EXPR].name
380 assignment_operator_name_info [(int) ROUND_DIV_EXPR].name
382 assignment_operator_name_info [(int) CEIL_MOD_EXPR].name
384 assignment_operator_name_info [(int) FLOOR_MOD_EXPR].name
386 assignment_operator_name_info [(int) ROUND_MOD_EXPR].name
390 /* The reserved keyword table. */
394 ENUM_BITFIELD(rid) rid : 16;
395 unsigned int disable : 16;
398 /* Disable mask. Keywords are disabled if (reswords[i].disable & mask) is
400 #define D_EXT 0x01 /* GCC extension */
401 #define D_ASM 0x02 /* in C99, but has a switch to turn it off */
402 #define D_OPNAME 0x04 /* operator names */
404 CONSTRAINT(ridbits_fit, RID_LAST_MODIFIER < sizeof(unsigned long) * CHAR_BIT);
406 static const struct resword reswords[] =
408 { "_Complex", RID_COMPLEX, 0 },
409 { "__alignof", RID_ALIGNOF, 0 },
410 { "__alignof__", RID_ALIGNOF, 0 },
411 { "__asm", RID_ASM, 0 },
412 { "__asm__", RID_ASM, 0 },
413 { "__attribute", RID_ATTRIBUTE, 0 },
414 { "__attribute__", RID_ATTRIBUTE, 0 },
415 { "__builtin_va_arg", RID_VA_ARG, 0 },
416 { "__complex", RID_COMPLEX, 0 },
417 { "__complex__", RID_COMPLEX, 0 },
418 { "__const", RID_CONST, 0 },
419 { "__const__", RID_CONST, 0 },
420 { "__extension__", RID_EXTENSION, 0 },
421 { "__imag", RID_IMAGPART, 0 },
422 { "__imag__", RID_IMAGPART, 0 },
423 { "__inline", RID_INLINE, 0 },
424 { "__inline__", RID_INLINE, 0 },
425 { "__label__", RID_LABEL, 0 },
426 { "__null", RID_NULL, 0 },
427 { "__real", RID_REALPART, 0 },
428 { "__real__", RID_REALPART, 0 },
429 { "__restrict", RID_RESTRICT, 0 },
430 { "__restrict__", RID_RESTRICT, 0 },
431 { "__signed", RID_SIGNED, 0 },
432 { "__signed__", RID_SIGNED, 0 },
433 { "__typeof", RID_TYPEOF, 0 },
434 { "__typeof__", RID_TYPEOF, 0 },
435 { "__volatile", RID_VOLATILE, 0 },
436 { "__volatile__", RID_VOLATILE, 0 },
437 { "asm", RID_ASM, D_ASM },
438 { "and", RID_AND, D_OPNAME },
439 { "and_eq", RID_AND_EQ, D_OPNAME },
440 { "auto", RID_AUTO, 0 },
441 { "bitand", RID_BITAND, D_OPNAME },
442 { "bitor", RID_BITOR, D_OPNAME },
443 { "bool", RID_BOOL, 0 },
444 { "break", RID_BREAK, 0 },
445 { "case", RID_CASE, 0 },
446 { "catch", RID_CATCH, 0 },
447 { "char", RID_CHAR, 0 },
448 { "class", RID_CLASS, 0 },
449 { "compl", RID_COMPL, D_OPNAME },
450 { "const", RID_CONST, 0 },
451 { "const_cast", RID_CONSTCAST, 0 },
452 { "continue", RID_CONTINUE, 0 },
453 { "default", RID_DEFAULT, 0 },
454 { "delete", RID_DELETE, 0 },
456 { "double", RID_DOUBLE, 0 },
457 { "dynamic_cast", RID_DYNCAST, 0 },
458 { "else", RID_ELSE, 0 },
459 { "enum", RID_ENUM, 0 },
460 { "explicit", RID_EXPLICIT, 0 },
461 { "export", RID_EXPORT, 0 },
462 { "extern", RID_EXTERN, 0 },
463 { "false", RID_FALSE, 0 },
464 { "float", RID_FLOAT, 0 },
465 { "for", RID_FOR, 0 },
466 { "friend", RID_FRIEND, 0 },
467 { "goto", RID_GOTO, 0 },
469 { "inline", RID_INLINE, 0 },
470 { "int", RID_INT, 0 },
471 { "long", RID_LONG, 0 },
472 { "mutable", RID_MUTABLE, 0 },
473 { "namespace", RID_NAMESPACE, 0 },
474 { "new", RID_NEW, 0 },
475 { "not", RID_NOT, D_OPNAME },
476 { "not_eq", RID_NOT_EQ, D_OPNAME },
477 { "operator", RID_OPERATOR, 0 },
478 { "or", RID_OR, D_OPNAME },
479 { "or_eq", RID_OR_EQ, D_OPNAME },
480 { "private", RID_PRIVATE, 0 },
481 { "protected", RID_PROTECTED, 0 },
482 { "public", RID_PUBLIC, 0 },
483 { "register", RID_REGISTER, 0 },
484 { "reinterpret_cast", RID_REINTCAST, 0 },
485 { "return", RID_RETURN, 0 },
486 { "short", RID_SHORT, 0 },
487 { "signed", RID_SIGNED, 0 },
488 { "sizeof", RID_SIZEOF, 0 },
489 { "static", RID_STATIC, 0 },
490 { "static_cast", RID_STATCAST, 0 },
491 { "struct", RID_STRUCT, 0 },
492 { "switch", RID_SWITCH, 0 },
493 { "template", RID_TEMPLATE, 0 },
494 { "this", RID_THIS, 0 },
495 { "throw", RID_THROW, 0 },
496 { "true", RID_TRUE, 0 },
497 { "try", RID_TRY, 0 },
498 { "typedef", RID_TYPEDEF, 0 },
499 { "typename", RID_TYPENAME, 0 },
500 { "typeid", RID_TYPEID, 0 },
501 { "typeof", RID_TYPEOF, D_ASM|D_EXT },
502 { "union", RID_UNION, 0 },
503 { "unsigned", RID_UNSIGNED, 0 },
504 { "using", RID_USING, 0 },
505 { "virtual", RID_VIRTUAL, 0 },
506 { "void", RID_VOID, 0 },
507 { "volatile", RID_VOLATILE, 0 },
508 { "wchar_t", RID_WCHAR, 0 },
509 { "while", RID_WHILE, 0 },
510 { "xor", RID_XOR, D_OPNAME },
511 { "xor_eq", RID_XOR_EQ, D_OPNAME },
514 #define N_reswords (sizeof reswords / sizeof (struct resword))
516 /* Table mapping from RID_* constants to yacc token numbers.
517 Unfortunately we have to have entries for all the keywords in all
519 const short rid_to_yy[RID_MAX] =
521 /* RID_STATIC */ SCSPEC,
522 /* RID_UNSIGNED */ TYPESPEC,
523 /* RID_LONG */ TYPESPEC,
524 /* RID_CONST */ CV_QUALIFIER,
525 /* RID_EXTERN */ SCSPEC,
526 /* RID_REGISTER */ SCSPEC,
527 /* RID_TYPEDEF */ SCSPEC,
528 /* RID_SHORT */ TYPESPEC,
529 /* RID_INLINE */ SCSPEC,
530 /* RID_VOLATILE */ CV_QUALIFIER,
531 /* RID_SIGNED */ TYPESPEC,
532 /* RID_AUTO */ SCSPEC,
533 /* RID_RESTRICT */ CV_QUALIFIER,
535 /* C extensions. Bounded pointers are not yet in C++ */
537 /* RID_UNBOUNDED */ 0,
538 /* RID_COMPLEX */ TYPESPEC,
541 /* RID_FRIEND */ SCSPEC,
542 /* RID_VIRTUAL */ SCSPEC,
543 /* RID_EXPLICIT */ SCSPEC,
544 /* RID_EXPORT */ EXPORT,
545 /* RID_MUTABLE */ SCSPEC,
556 /* RID_INT */ TYPESPEC,
557 /* RID_CHAR */ TYPESPEC,
558 /* RID_FLOAT */ TYPESPEC,
559 /* RID_DOUBLE */ TYPESPEC,
560 /* RID_VOID */ TYPESPEC,
562 /* RID_STRUCT */ AGGR,
563 /* RID_UNION */ AGGR,
566 /* RID_WHILE */ WHILE,
569 /* RID_SWITCH */ SWITCH,
571 /* RID_DEFAULT */ DEFAULT,
572 /* RID_BREAK */ BREAK,
573 /* RID_CONTINUE */ CONTINUE,
574 /* RID_RETURN */ RETURN_KEYWORD,
576 /* RID_SIZEOF */ SIZEOF,
579 /* RID_ASM */ ASM_KEYWORD,
580 /* RID_TYPEOF */ TYPEOF,
581 /* RID_ALIGNOF */ ALIGNOF,
582 /* RID_ATTRIBUTE */ ATTRIBUTE,
583 /* RID_VA_ARG */ VA_ARG,
584 /* RID_EXTENSION */ EXTENSION,
585 /* RID_IMAGPART */ IMAGPART,
586 /* RID_REALPART */ REALPART,
587 /* RID_LABEL */ LABEL,
589 /* RID_PTREXTENT */ 0,
590 /* RID_PTRVALUE */ 0,
593 /* RID_BOOL */ TYPESPEC,
594 /* RID_WCHAR */ TYPESPEC,
595 /* RID_CLASS */ AGGR,
596 /* RID_PUBLIC */ VISSPEC,
597 /* RID_PRIVATE */ VISSPEC,
598 /* RID_PROTECTED */ VISSPEC,
599 /* RID_TEMPLATE */ TEMPLATE,
600 /* RID_NULL */ CONSTANT,
601 /* RID_CATCH */ CATCH,
602 /* RID_DELETE */ DELETE,
603 /* RID_FALSE */ CXX_FALSE,
604 /* RID_NAMESPACE */ NAMESPACE,
606 /* RID_OPERATOR */ OPERATOR,
608 /* RID_THROW */ THROW,
609 /* RID_TRUE */ CXX_TRUE,
611 /* RID_TYPENAME */ TYPENAME_KEYWORD,
612 /* RID_TYPEID */ TYPEID,
613 /* RID_USING */ USING,
616 /* RID_CONSTCAST */ CONST_CAST,
617 /* RID_DYNCAST */ DYNAMIC_CAST,
618 /* RID_REINTCAST */ REINTERPRET_CAST,
619 /* RID_STATCAST */ STATIC_CAST,
621 /* alternate spellings */
622 /* RID_AND */ ANDAND,
623 /* RID_AND_EQ */ ASSIGN,
625 /* RID_NOT_EQ */ EQCOMPARE,
627 /* RID_OR_EQ */ ASSIGN,
629 /* RID_XOR_EQ */ ASSIGN,
630 /* RID_BITAND */ '&',
636 /* RID_AT_ENCODE */ 0,
638 /* RID_AT_CLASS */ 0,
639 /* RID_AT_ALIAS */ 0,
641 /* RID_AT_PRIVATE */ 0,
642 /* RID_AT_PROTECTED */ 0,
643 /* RID_AT_PUBLIC */ 0,
644 /* RID_AT_PROTOCOL */ 0,
645 /* RID_AT_SELECTOR */ 0,
646 /* RID_AT_INTERFACE */ 0,
647 /* RID_AT_IMPLEMENTATION */ 0
655 int mask = ((flag_operator_names ? 0 : D_OPNAME)
656 | (flag_no_asm ? D_ASM : 0)
657 | (flag_no_gnu_keywords ? D_EXT : 0));
659 /* It is not necessary to register ridpointers as a GC root, because
660 all the trees it points to are permanently interned in the
661 get_identifier hash anyway. */
662 ridpointers = (tree *) xcalloc ((int) RID_MAX, sizeof (tree));
663 for (i = 0; i < N_reswords; i++)
665 id = get_identifier (reswords[i].word);
666 C_RID_CODE (id) = reswords[i].rid;
667 ridpointers [(int) reswords[i].rid] = id;
668 if (! (reswords[i].disable & mask))
669 C_IS_RESERVED_WORD (id) = 1;
676 cpp_register_pragma (parse_in, 0, "vtable", handle_pragma_vtable);
677 cpp_register_pragma (parse_in, 0, "unit", handle_pragma_unit);
679 cpp_register_pragma (parse_in, 0, "interface", handle_pragma_interface);
680 cpp_register_pragma (parse_in, 0, "implementation",
681 handle_pragma_implementation);
683 cpp_register_pragma_space (parse_in, "GCC");
684 cpp_register_pragma (parse_in, "GCC", "interface", handle_pragma_interface);
685 cpp_register_pragma (parse_in, "GCC", "implementation",
686 handle_pragma_implementation);
690 init_parse (filename)
691 const char *filename;
693 /* Make identifier nodes long enough for the language-specific slots. */
694 set_identifier_size (sizeof (struct lang_identifier));
695 decl_printable_name = lang_printable_name;
697 input_filename = "<internal>";
704 init_cplus_expand ();
705 init_cp_semantics ();
709 memcpy (tree_code_type + (int) LAST_C_TREE_CODE,
710 cplus_tree_code_type,
711 (int)LAST_CPLUS_TREE_CODE - (int)LAST_C_TREE_CODE);
712 memcpy (tree_code_length + (int) LAST_C_TREE_CODE,
713 cplus_tree_code_length,
714 (LAST_CPLUS_TREE_CODE - (int)LAST_C_TREE_CODE) * sizeof (int));
715 memcpy (tree_code_name + (int) LAST_C_TREE_CODE,
716 cplus_tree_code_name,
717 (LAST_CPLUS_TREE_CODE - (int)LAST_C_TREE_CODE) * sizeof (char *));
723 current_function_decl = NULL;
725 class_type_node = build_int_2 (class_type, 0);
726 TREE_TYPE (class_type_node) = class_type_node;
727 ridpointers[(int) RID_CLASS] = class_type_node;
729 record_type_node = build_int_2 (record_type, 0);
730 TREE_TYPE (record_type_node) = record_type_node;
731 ridpointers[(int) RID_STRUCT] = record_type_node;
733 union_type_node = build_int_2 (union_type, 0);
734 TREE_TYPE (union_type_node) = union_type_node;
735 ridpointers[(int) RID_UNION] = union_type_node;
737 enum_type_node = build_int_2 (enum_type, 0);
738 TREE_TYPE (enum_type_node) = enum_type_node;
739 ridpointers[(int) RID_ENUM] = enum_type_node;
741 /* Create the built-in __null node. Note that we can't yet call for
742 type_for_size here because integer_type_node and so forth are not
743 set up. Therefore, we don't set the type of these nodes until
744 init_decl_processing. */
745 null_node = build_int_2 (0, 0);
746 ridpointers[RID_NULL] = null_node;
748 token_count = init_cpp_parse ();
749 interface_unknown = 1;
751 return init_c_lex (filename);
757 cpp_finish (parse_in);
758 /* Call to cpp_destroy () omitted for performance reasons. */
759 errorcount += cpp_errors (parse_in);
763 yyprint (file, yychar, yylval)
776 case IDENTIFIER_DEFN:
780 case PRE_PARSED_CLASS_DECL:
782 if (TREE_CODE (t) == TYPE_DECL || TREE_CODE (t) == TEMPLATE_DECL)
784 fprintf (file, " `%s'", IDENTIFIER_POINTER (DECL_NAME (t)));
787 my_friendly_assert (TREE_CODE (t) == IDENTIFIER_NODE, 224);
788 if (IDENTIFIER_POINTER (t))
789 fprintf (file, " `%s'", IDENTIFIER_POINTER (t));
793 if (yylval.ttype == class_type_node)
794 fprintf (file, " `class'");
795 else if (yylval.ttype == record_type_node)
796 fprintf (file, " `struct'");
797 else if (yylval.ttype == union_type_node)
798 fprintf (file, " `union'");
799 else if (yylval.ttype == enum_type_node)
800 fprintf (file, " `enum'");
802 my_friendly_abort (80);
807 if (TREE_CODE (t) == INTEGER_CST)
809 #if HOST_BITS_PER_WIDE_INT == 64
810 #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT
813 #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
820 #if HOST_BITS_PER_WIDE_INT != HOST_BITS_PER_INT
826 TREE_INT_CST_HIGH (t), TREE_INT_CST_LOW (t));
831 #if defined(GATHER_STATISTICS) && defined(REDUCE_LENGTH)
832 static int *reduce_count;
838 #define REDUCE_LENGTH (sizeof (yyr2) / sizeof (yyr2[0]))
839 #define TOKEN_LENGTH (256 + sizeof (yytname) / sizeof (yytname[0]))
842 #ifdef GATHER_STATISTICS
848 reduce_count[yyn] += 1;
855 return reduce_count[*q] - reduce_count[*p];
862 return token_count[*q] - token_count[*p];
868 print_parse_statistics ()
870 #ifdef GATHER_STATISTICS
874 int maxlen = REDUCE_LENGTH;
877 if (reduce_count[-1] == 0)
880 if (TOKEN_LENGTH > REDUCE_LENGTH)
881 maxlen = TOKEN_LENGTH;
882 sorted = (unsigned *) alloca (sizeof (int) * maxlen);
884 for (i = 0; i < TOKEN_LENGTH; i++)
886 qsort (sorted, TOKEN_LENGTH, sizeof (int), token_cmp);
887 for (i = 0; i < TOKEN_LENGTH; i++)
890 if (token_count[idx] == 0)
892 if (token_count[idx] < token_count[-1])
894 fprintf (stderr, "token %d, `%s', count = %d\n",
895 idx, yytname[YYTRANSLATE (idx)], token_count[idx]);
897 fprintf (stderr, "\n");
898 for (i = 0; i < REDUCE_LENGTH; i++)
900 qsort (sorted, REDUCE_LENGTH, sizeof (int), reduce_cmp);
901 for (i = 0; i < REDUCE_LENGTH; i++)
904 if (reduce_count[idx] == 0)
906 if (reduce_count[idx] < reduce_count[-1])
908 fprintf (stderr, "rule %d, line %d, count = %d\n",
909 idx, yyrline[idx], reduce_count[idx]);
911 fprintf (stderr, "\n");
917 /* Sets the value of the 'yydebug' variable to VALUE.
918 This is a function so we don't have to have YYDEBUG defined
919 in order to build the compiler. */
929 warning ("YYDEBUG not defined.");
933 /* Helper function to load global variables with interface
937 extract_interface_info ()
939 struct c_fileinfo *finfo = 0;
941 if (flag_alt_external_templates)
943 tree til = tinst_for_decl ();
946 finfo = get_fileinfo (TINST_FILE (til));
949 finfo = get_fileinfo (input_filename);
951 interface_only = finfo->interface_only;
952 interface_unknown = finfo->interface_unknown;
954 /* This happens to be a convenient place to put this. */
955 if (flag_gnu_xref) GNU_xref_file (input_filename);
958 /* Return nonzero if S is not considered part of an
959 INTERFACE/IMPLEMENTATION pair. Otherwise, return 0. */
965 /* Set the interface/implementation bits for this scope. */
966 struct impl_files *ifiles;
969 for (ifiles = impl_file_chain; ifiles; ifiles = ifiles->next)
971 const char *t1 = ifiles->filename;
974 if (*s1 != *t1 || *s1 == 0)
977 while (*s1 == *t1 && *s1 != 0)
984 /* Don't get faked out by xxx.yyy.cc vs xxx.zzz.cc. */
985 if (strchr (s1, '.') || strchr (t1, '.'))
988 if (*s1 == '\0' || s1[-1] != '.' || t1[-1] != '.')
999 /* Heuristic to tell whether the user is missing a semicolon
1000 after a struct or enum declaration. Emit an error message
1001 if we know the user has blown it. */
1004 check_for_missing_semicolon (type)
1012 && yychar != IDENTIFIER
1013 && yychar != TYPENAME
1014 && yychar != CV_QUALIFIER
1015 && yychar != SELFNAME)
1016 || yychar == 0 /* EOF */)
1018 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
1019 error ("semicolon missing after %s declaration",
1020 TREE_CODE (type) == ENUMERAL_TYPE ? "enum" : "struct");
1022 cp_error ("semicolon missing after declaration of `%T'", type);
1023 shadow_tag (build_tree_list (0, type));
1025 /* Could probably also hack cases where class { ... } f (); appears. */
1030 note_got_semicolon (type)
1034 my_friendly_abort (60);
1035 if (CLASS_TYPE_P (type))
1036 CLASSTYPE_GOT_SEMICOLON (type) = 1;
1040 note_list_got_semicolon (declspecs)
1045 for (link = declspecs; link; link = TREE_CHAIN (link))
1047 tree type = TREE_VALUE (link);
1049 note_got_semicolon (type);
1055 /* Parse a #pragma whose sole argument is a string constant.
1056 If OPT is true, the argument is optional. */
1058 parse_strconst_pragma (name, opt)
1066 if (t == CPP_STRING)
1069 if (c_lex (&x) != CPP_EOF)
1070 warning ("junk at end of #pragma %s", name);
1074 if (t == CPP_EOF && opt)
1077 error ("invalid #pragma %s", name);
1082 handle_pragma_vtable (dfile)
1083 cpp_reader *dfile ATTRIBUTE_UNUSED;
1085 tree vtbl = parse_strconst_pragma ("vtable", 0);
1087 if (vtbl && vtbl != (tree)-1)
1088 pending_vtables = tree_cons (NULL_TREE,
1089 get_identifier (TREE_STRING_POINTER (vtbl)),
1094 handle_pragma_unit (dfile)
1095 cpp_reader *dfile ATTRIBUTE_UNUSED;
1097 /* Validate syntax, but don't do anything. */
1098 parse_strconst_pragma ("unit", 0);
1102 handle_pragma_interface (dfile)
1103 cpp_reader *dfile ATTRIBUTE_UNUSED;
1105 tree fname = parse_strconst_pragma ("interface", 1);
1106 struct c_fileinfo *finfo;
1107 const char *main_filename;
1109 if (fname == (tree)-1)
1111 else if (fname == 0)
1112 main_filename = file_name_nondirectory (input_filename);
1114 main_filename = TREE_STRING_POINTER (fname);
1116 finfo = get_fileinfo (input_filename);
1118 if (impl_file_chain == 0)
1120 /* If this is zero at this point, then we are
1121 auto-implementing. */
1122 if (main_input_filename == 0)
1123 main_input_filename = input_filename;
1126 interface_only = interface_strcmp (main_filename);
1127 #ifdef MULTIPLE_SYMBOL_SPACES
1128 if (! interface_only)
1130 interface_unknown = 0;
1132 finfo->interface_only = interface_only;
1133 finfo->interface_unknown = interface_unknown;
1136 /* Note that we have seen a #pragma implementation for the key MAIN_FILENAME.
1137 We used to only allow this at toplevel, but that restriction was buggy
1138 in older compilers and it seems reasonable to allow it in the headers
1139 themselves, too. It only needs to precede the matching #p interface.
1141 We don't touch interface_only or interface_unknown; the user must specify
1142 a matching #p interface for this to have any effect. */
1145 handle_pragma_implementation (dfile)
1146 cpp_reader *dfile ATTRIBUTE_UNUSED;
1148 tree fname = parse_strconst_pragma ("implementation", 1);
1149 const char *main_filename;
1150 struct impl_files *ifiles = impl_file_chain;
1152 if (fname == (tree)-1)
1157 if (main_input_filename)
1158 main_filename = main_input_filename;
1160 main_filename = input_filename;
1161 main_filename = file_name_nondirectory (main_filename);
1165 main_filename = TREE_STRING_POINTER (fname);
1166 if (cpp_included (parse_in, main_filename))
1167 warning ("#pragma implementation for %s appears after file is included",
1171 for (; ifiles; ifiles = ifiles->next)
1173 if (! strcmp (ifiles->filename, main_filename))
1178 ifiles = (struct impl_files*) xmalloc (sizeof (struct impl_files));
1179 ifiles->filename = main_filename;
1180 ifiles->next = impl_file_chain;
1181 impl_file_chain = ifiles;
1186 do_pending_lang_change ()
1188 for (; pending_lang_change > 0; --pending_lang_change)
1189 push_lang_context (lang_name_c);
1190 for (; pending_lang_change < 0; ++pending_lang_change)
1191 pop_lang_context ();
1194 /* Return true if d is in a global scope. */
1201 switch (TREE_CODE (d))
1206 case OVERLOAD: d = OVL_FUNCTION (d); continue;
1207 case TREE_LIST: d = TREE_VALUE (d); continue;
1209 my_friendly_assert (DECL_P (d), 980629);
1211 return DECL_NAMESPACE_SCOPE_P (d);
1216 do_identifier (token, parsing, args)
1217 register tree token;
1222 int lexing = (parsing == 1);
1225 id = lookup_name (token, 0);
1229 /* Do Koenig lookup if appropriate (inside templates we build lookup
1230 expressions instead).
1232 [basic.lookup.koenig]: If the ordinary unqualified lookup of the name
1233 finds the declaration of a class member function, the associated
1234 namespaces and classes are not considered. */
1236 if (args && !current_template_parms && (!id || is_global (id)))
1237 id = lookup_arg_dependent (token, id, args);
1239 /* Remember that this name has been used in the class definition, as per
1242 maybe_note_name_used_in_class (token, id);
1244 if (id == error_mark_node)
1246 /* lookup_name quietly returns error_mark_node if we're parsing,
1247 as we don't want to complain about an identifier that ends up
1248 being used as a declarator. So we call it again to get the error
1250 id = lookup_name (token, 0);
1251 return error_mark_node;
1254 if (!id || (TREE_CODE (id) == FUNCTION_DECL
1255 && DECL_ANTICIPATED (id)))
1257 if (current_template_parms)
1258 return build_min_nt (LOOKUP_EXPR, token);
1259 else if (IDENTIFIER_OPNAME_P (token))
1261 if (token != ansi_opname (ERROR_MARK))
1262 cp_error ("`%D' not defined", token);
1263 id = error_mark_node;
1265 else if (current_function_decl == 0)
1267 cp_error ("`%D' was not declared in this scope", token);
1268 id = error_mark_node;
1272 if (IDENTIFIER_NAMESPACE_VALUE (token) != error_mark_node
1273 || IDENTIFIER_ERROR_LOCUS (token) != current_function_decl)
1275 static int undeclared_variable_notice;
1277 cp_error ("`%D' undeclared (first use this function)", token);
1279 if (! undeclared_variable_notice)
1281 error ("(Each undeclared identifier is reported only once for each function it appears in.)");
1282 undeclared_variable_notice = 1;
1285 id = error_mark_node;
1286 /* Prevent repeated error messages. */
1287 SET_IDENTIFIER_NAMESPACE_VALUE (token, error_mark_node);
1288 SET_IDENTIFIER_ERROR_LOCUS (token, current_function_decl);
1292 if (TREE_CODE (id) == VAR_DECL && DECL_DEAD_FOR_LOCAL (id))
1294 tree shadowed = DECL_SHADOWED_FOR_VAR (id);
1295 while (shadowed != NULL_TREE && TREE_CODE (shadowed) == VAR_DECL
1296 && DECL_DEAD_FOR_LOCAL (shadowed))
1297 shadowed = DECL_SHADOWED_FOR_VAR (shadowed);
1299 shadowed = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (id));
1302 if (!DECL_ERROR_REPORTED (id))
1304 warning ("name lookup of `%s' changed",
1305 IDENTIFIER_POINTER (token));
1306 cp_warning_at (" matches this `%D' under ISO standard rules",
1308 cp_warning_at (" matches this `%D' under old rules", id);
1309 DECL_ERROR_REPORTED (id) = 1;
1313 else if (!DECL_ERROR_REPORTED (id))
1315 DECL_ERROR_REPORTED (id) = 1;
1316 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (id)))
1318 error ("name lookup of `%s' changed for new ISO `for' scoping",
1319 IDENTIFIER_POINTER (token));
1320 cp_error_at (" cannot use obsolete binding at `%D' because it has a destructor", id);
1321 id = error_mark_node;
1325 pedwarn ("name lookup of `%s' changed for new ISO `for' scoping",
1326 IDENTIFIER_POINTER (token));
1327 cp_pedwarn_at (" using obsolete binding at `%D'", id);
1331 /* TREE_USED is set in `hack_identifier'. */
1332 if (TREE_CODE (id) == CONST_DECL)
1335 if (IDENTIFIER_CLASS_VALUE (token) == id)
1336 enforce_access (CP_DECL_CONTEXT(id), id);
1337 if (!processing_template_decl || DECL_TEMPLATE_PARM_P (id))
1338 id = DECL_INITIAL (id);
1341 id = hack_identifier (id, token);
1343 /* We must look up dependent names when the template is
1344 instantiated, not while parsing it. For now, we don't
1345 distinguish between dependent and independent names. So, for
1346 example, we look up all overloaded functions at
1347 instantiation-time, even though in some cases we should just use
1348 the DECL we have here. We also use LOOKUP_EXPRs to find things
1349 like local variables, rather than creating TEMPLATE_DECLs for the
1350 local variables and then finding matching instantiations. */
1351 if (current_template_parms
1352 && (is_overloaded_fn (id)
1353 || (TREE_CODE (id) == VAR_DECL
1354 && CP_DECL_CONTEXT (id)
1355 && TREE_CODE (CP_DECL_CONTEXT (id)) == FUNCTION_DECL)
1356 || TREE_CODE (id) == PARM_DECL
1357 || TREE_CODE (id) == RESULT_DECL
1358 || TREE_CODE (id) == USING_DECL))
1359 id = build_min_nt (LOOKUP_EXPR, token);
1365 do_scoped_id (token, parsing)
1370 /* during parsing, this is ::name. Otherwise, it is black magic. */
1373 id = make_node (CPLUS_BINDING);
1374 if (!qualified_lookup_using_namespace (token, global_namespace, id, 0))
1377 id = BINDING_VALUE (id);
1380 id = IDENTIFIER_GLOBAL_VALUE (token);
1381 if (parsing && yychar == YYEMPTY)
1385 if (processing_template_decl)
1387 id = build_min_nt (LOOKUP_EXPR, token);
1388 LOOKUP_EXPR_GLOBAL (id) = 1;
1391 if (IDENTIFIER_NAMESPACE_VALUE (token) != error_mark_node)
1392 cp_error ("`::%D' undeclared (first use here)", token);
1393 id = error_mark_node;
1394 /* Prevent repeated error messages. */
1395 SET_IDENTIFIER_NAMESPACE_VALUE (token, error_mark_node);
1399 if (TREE_CODE (id) == ADDR_EXPR)
1400 mark_used (TREE_OPERAND (id, 0));
1401 else if (TREE_CODE (id) != OVERLOAD)
1404 if (TREE_CODE (id) == CONST_DECL && ! processing_template_decl)
1406 /* XXX CHS - should we set TREE_USED of the constant? */
1407 id = DECL_INITIAL (id);
1408 /* This is to prevent an enum whose value is 0
1409 from being considered a null pointer constant. */
1410 id = build1 (NOP_EXPR, TREE_TYPE (id), id);
1411 TREE_CONSTANT (id) = 1;
1414 if (processing_template_decl)
1416 if (is_overloaded_fn (id))
1418 id = build_min_nt (LOOKUP_EXPR, token);
1419 LOOKUP_EXPR_GLOBAL (id) = 1;
1422 /* else just use the decl */
1424 return convert_from_reference (id);
1428 identifier_typedecl_value (node)
1432 type = IDENTIFIER_TYPE_VALUE (node);
1433 if (type == NULL_TREE)
1436 if (IDENTIFIER_BINDING (node))
1438 t = IDENTIFIER_VALUE (node);
1439 if (t && TREE_CODE (t) == TYPE_DECL && TREE_TYPE (t) == type)
1442 if (IDENTIFIER_NAMESPACE_VALUE (node))
1444 t = IDENTIFIER_NAMESPACE_VALUE (node);
1445 if (t && TREE_CODE (t) == TYPE_DECL && TREE_TYPE (t) == type)
1449 /* Will this one ever happen? */
1450 if (TYPE_MAIN_DECL (type))
1451 return TYPE_MAIN_DECL (type);
1453 /* We used to do an internal error of 62 here, but instead we will
1454 handle the return of a null appropriately in the callers. */
1458 #ifdef GATHER_STATISTICS
1459 /* The original for tree_node_kind is in the toplevel tree.c; changes there
1460 need to be brought into here, unless this were actually put into a header
1462 /* Statistics-gathering stuff. */
1483 extern int tree_node_counts[];
1484 extern int tree_node_sizes[];
1488 build_lang_decl (code, name, type)
1489 enum tree_code code;
1495 t = build_decl (code, name, type);
1496 retrofit_lang_decl (t);
1501 /* Add DECL_LANG_SPECIFIC info to T. Called from build_lang_decl
1502 and pushdecl (for functions generated by the backend). */
1505 retrofit_lang_decl (t)
1508 struct lang_decl *ld;
1511 if (CAN_HAVE_FULL_LANG_DECL_P (t))
1512 size = sizeof (struct lang_decl);
1514 size = sizeof (struct lang_decl_flags);
1516 ld = (struct lang_decl *) ggc_alloc_cleared (size);
1518 DECL_LANG_SPECIFIC (t) = ld;
1519 if (current_lang_name == lang_name_cplusplus)
1520 DECL_LANGUAGE (t) = lang_cplusplus;
1521 else if (current_lang_name == lang_name_c)
1522 DECL_LANGUAGE (t) = lang_c;
1523 else if (current_lang_name == lang_name_java)
1524 DECL_LANGUAGE (t) = lang_java;
1525 else my_friendly_abort (64);
1527 #ifdef GATHER_STATISTICS
1528 tree_node_counts[(int)lang_decl] += 1;
1529 tree_node_sizes[(int)lang_decl] += size;
1534 copy_lang_decl (node)
1538 struct lang_decl *ld;
1540 if (! DECL_LANG_SPECIFIC (node))
1543 if (!CAN_HAVE_FULL_LANG_DECL_P (node))
1544 size = sizeof (struct lang_decl_flags);
1546 size = sizeof (struct lang_decl);
1547 ld = (struct lang_decl *) ggc_alloc (size);
1548 memcpy (ld, DECL_LANG_SPECIFIC (node), size);
1549 DECL_LANG_SPECIFIC (node) = ld;
1552 /* Copy DECL, including any language-specific parts. */
1560 copy = copy_node (decl);
1561 copy_lang_decl (copy);
1566 cp_make_lang_type (code)
1567 enum tree_code code;
1569 register tree t = make_node (code);
1571 /* Set up some flags that give proper default behavior. */
1572 if (IS_AGGR_TYPE_CODE (code))
1574 struct lang_type *pi;
1576 pi = ((struct lang_type *)
1577 ggc_alloc_cleared (sizeof (struct lang_type)));
1579 TYPE_LANG_SPECIFIC (t) = pi;
1580 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, interface_unknown);
1581 CLASSTYPE_INTERFACE_ONLY (t) = interface_only;
1583 /* Make sure this is laid out, for ease of use later. In the
1584 presence of parse errors, the normal was of assuring this
1585 might not ever get executed, so we lay it out *immediately*. */
1586 build_pointer_type (t);
1588 #ifdef GATHER_STATISTICS
1589 tree_node_counts[(int)lang_type] += 1;
1590 tree_node_sizes[(int)lang_type] += sizeof (struct lang_type);
1594 /* We use TYPE_ALIAS_SET for the CLASSTYPE_MARKED bits. But,
1595 TYPE_ALIAS_SET is initialized to -1 by default, so we must
1597 TYPE_ALIAS_SET (t) = 0;
1599 /* We need to allocate a TYPE_BINFO even for TEMPLATE_TYPE_PARMs
1600 since they can be virtual base types, and we then need a
1601 canonical binfo for them. Ideally, this would be done lazily for
1603 if (IS_AGGR_TYPE_CODE (code) || code == TEMPLATE_TYPE_PARM)
1604 TYPE_BINFO (t) = make_binfo (size_zero_node, t, NULL_TREE, NULL_TREE);
1610 make_aggr_type (code)
1611 enum tree_code code;
1613 tree t = cp_make_lang_type (code);
1615 if (IS_AGGR_TYPE_CODE (code))
1616 SET_IS_AGGR_TYPE (t, 1);
1622 compiler_error VPARAMS ((const char *msg, ...))
1624 #ifndef ANSI_PROTOTYPES
1632 #ifndef ANSI_PROTOTYPES
1633 msg = va_arg (ap, const char *);
1636 vsprintf (buf, msg, ap);
1638 error_with_file_and_line (input_filename, lineno, "%s (compiler error)", buf);
1641 /* Return the type-qualifier corresponding to the identifier given by
1645 cp_type_qual_from_rid (rid)
1648 if (rid == ridpointers[(int) RID_CONST])
1649 return TYPE_QUAL_CONST;
1650 else if (rid == ridpointers[(int) RID_VOLATILE])
1651 return TYPE_QUAL_VOLATILE;
1652 else if (rid == ridpointers[(int) RID_RESTRICT])
1653 return TYPE_QUAL_RESTRICT;
1655 my_friendly_abort (0);
1656 return TYPE_UNQUALIFIED;