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