1 /* Language-dependent hooks for C++. 2 Copyright 2001, 2002, 2004 Free Software Foundation, Inc. 3 Contributed by Alexandre Oliva <aoliva@redhat.com> 4 5 This file is part of GCC. 6 7 GCC is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 2, or (at your option) 10 any later version. 11 12 GCC is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with GCC; see the file COPYING. If not, write to 19 the Free Software Foundation, 51 Franklin Street, Fifth Floor, 20 Boston, MA 02110-1301, USA. */ 21 22 #include "config.h" 23 #include "system.h" 24 #include "coretypes.h" 25 #include "tm.h" 26 #include "tree.h" 27 #include "cp-tree.h" 28 #include "c-common.h" 29 #include "toplev.h" 30 #include "langhooks.h" 31 #include "langhooks-def.h" 32 #include "diagnostic.h" 33 #include "debug.h" 34 #include "cp-objcp-common.h" 35 #include "hashtab.h" 36 37 enum c_language_kind c_language = clk_cxx; 38 static void cp_init_ts (void); 39 40 /* Lang hooks common to C++ and ObjC++ are declared in cp/cp-objcp-common.h; 41 consequently, there should be very few hooks below. */ 42 43 #undef LANG_HOOKS_NAME 44 #define LANG_HOOKS_NAME "GNU C++" 45 #undef LANG_HOOKS_INIT 46 #define LANG_HOOKS_INIT cxx_init 47 #undef LANG_HOOKS_DECL_PRINTABLE_NAME 48 #define LANG_HOOKS_DECL_PRINTABLE_NAME cxx_printable_name 49 #undef LANG_HOOKS_FOLD_OBJ_TYPE_REF 50 #define LANG_HOOKS_FOLD_OBJ_TYPE_REF cp_fold_obj_type_ref 51 #undef LANG_HOOKS_INIT_TS 52 #define LANG_HOOKS_INIT_TS cp_init_ts 53 54 /* Each front end provides its own lang hook initializer. */ 55 const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; 56 57 /* Tree code classes. */ 58 59 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE, 60 61 const enum tree_code_class tree_code_type[] = { 62 #include "tree.def" 63 tcc_exceptional, 64 #include "c-common.def" 65 tcc_exceptional, 66 #include "cp-tree.def" 67 }; 68 #undef DEFTREECODE 69 70 /* Table indexed by tree code giving number of expression 71 operands beyond the fixed part of the node structure. 72 Not used for types or decls. */ 73 74 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH, 75 76 const unsigned char tree_code_length[] = { 77 #include "tree.def" 78 0, 79 #include "c-common.def" 80 0, 81 #include "cp-tree.def" 82 }; 83 #undef DEFTREECODE 84 85 /* Names of tree components. 86 Used for printing out the tree and error messages. */ 87 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME, 88 89 const char *const tree_code_name[] = { 90 #include "tree.def" 91 "@@dummy", 92 #include "c-common.def" 93 "@@dummy", 94 #include "cp-tree.def" 95 }; 96 #undef DEFTREECODE 97 98 /* Lang hook routines common to C++ and ObjC++ appear in cp/cp-objcp-common.c; 99 there should be very few routines below. */ 100 101 /* The following function does something real, but only in Objective-C++. */ 102 103 tree 104 objcp_tsubst_copy_and_build (tree t ATTRIBUTE_UNUSED, 105 tree args ATTRIBUTE_UNUSED, 106 tsubst_flags_t complain ATTRIBUTE_UNUSED, 107 tree in_decl ATTRIBUTE_UNUSED, 108 bool function_p ATTRIBUTE_UNUSED) 109 { 110 return NULL_TREE; 111 } 112 113 114 static void 115 cp_init_ts (void) 116 { 117 tree_contains_struct[NAMESPACE_DECL][TS_DECL_NON_COMMON] = 1; 118 tree_contains_struct[USING_DECL][TS_DECL_NON_COMMON] = 1; 119 tree_contains_struct[TEMPLATE_DECL][TS_DECL_NON_COMMON] = 1; 120 121 tree_contains_struct[NAMESPACE_DECL][TS_DECL_WITH_VIS] = 1; 122 tree_contains_struct[USING_DECL][TS_DECL_WITH_VIS] = 1; 123 tree_contains_struct[TEMPLATE_DECL][TS_DECL_WITH_VIS] = 1; 124 125 tree_contains_struct[NAMESPACE_DECL][TS_DECL_WRTL] = 1; 126 tree_contains_struct[USING_DECL][TS_DECL_WRTL] = 1; 127 tree_contains_struct[TEMPLATE_DECL][TS_DECL_WRTL] = 1; 128 129 tree_contains_struct[NAMESPACE_DECL][TS_DECL_COMMON] = 1; 130 tree_contains_struct[USING_DECL][TS_DECL_COMMON] = 1; 131 tree_contains_struct[TEMPLATE_DECL][TS_DECL_COMMON] = 1; 132 133 tree_contains_struct[NAMESPACE_DECL][TS_DECL_MINIMAL] = 1; 134 tree_contains_struct[USING_DECL][TS_DECL_MINIMAL] = 1; 135 tree_contains_struct[TEMPLATE_DECL][TS_DECL_MINIMAL] = 1; 136 137 init_shadowed_var_for_decl (); 138 139 } 140 141 void 142 finish_file (void) 143 { 144 cp_finish_file (); 145 } 146 147 #include "gtype-cp.h" 148