]>
Commit | Line | Data |
---|---|---|
82d4ee2b | 1 | /* Language-dependent hooks for Objective-C++. |
d353bf18 | 2 | Copyright (C) 2005-2015 Free Software Foundation, Inc. |
82d4ee2b | 3 | Contributed by Ziemowit Laski <zlaski@apple.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 | |
97e6b62e | 9 | the Free Software Foundation; either version 3, or (at your option) |
82d4ee2b | 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 | |
97e6b62e | 18 | along with GCC; see the file COPYING3. If not see |
19 | <http://www.gnu.org/licenses/>. */ | |
20 | ||
82d4ee2b | 21 | #include "config.h" |
22 | #include "system.h" | |
23 | #include "coretypes.h" | |
24 | #include "tm.h" | |
b20a8bb4 | 25 | #include "vec.h" |
b20a8bb4 | 26 | #include "alias.h" |
27 | #include "symtab.h" | |
28 | #include "options.h" | |
b20a8bb4 | 29 | #include "inchash.h" |
82d4ee2b | 30 | #include "tree.h" |
31 | #include "cp-tree.h" | |
7bedc3a0 | 32 | #include "c-family/c-common.h" |
6c536c4f | 33 | #include "c-family/c-objc.h" |
82d4ee2b | 34 | #include "objc-act.h" |
35 | #include "langhooks.h" | |
36 | #include "langhooks-def.h" | |
cc7d6aed | 37 | #include "target.h" |
82d4ee2b | 38 | #include "cp-objcp-common.h" |
39 | ||
40 | enum c_language_kind c_language = clk_objcxx; | |
4dd41a12 | 41 | static void objcxx_init_ts (void); |
82d4ee2b | 42 | |
43 | /* Lang hooks common to C++ and ObjC++ are declared in cp/cp-objcp-common.h; | |
44 | consequently, there should be very few hooks below. */ | |
45 | ||
46 | #undef LANG_HOOKS_NAME | |
47 | #define LANG_HOOKS_NAME "GNU Objective-C++" | |
48 | #undef LANG_HOOKS_INIT | |
49 | #define LANG_HOOKS_INIT objc_init | |
bf2e0d73 | 50 | #undef LANG_HOOKS_GIMPLIFY_EXPR |
51 | #define LANG_HOOKS_GIMPLIFY_EXPR objc_gimplify_expr | |
4dd41a12 | 52 | #undef LANG_HOOKS_INIT_TS |
53 | #define LANG_HOOKS_INIT_TS objcxx_init_ts | |
54 | ||
82d4ee2b | 55 | /* Each front end provides its own lang hook initializer. */ |
34e5cced | 56 | struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; |
82d4ee2b | 57 | |
82d4ee2b | 58 | /* Lang hook routines common to C++ and ObjC++ appear in cp/cp-objcp-common.c; |
59 | there should be very few (if any) routines below. */ | |
60 | ||
61 | tree | |
62 | objcp_tsubst_copy_and_build (tree t, tree args, tsubst_flags_t complain, | |
63 | tree in_decl, bool function_p ATTRIBUTE_UNUSED) | |
64 | { | |
bde9ebf7 | 65 | #define RECURSE(NODE) \ |
66 | tsubst_copy_and_build (NODE, args, complain, in_decl, \ | |
67 | /*function_p=*/false, \ | |
68 | /*integral_constant_expression_p=*/false) | |
82d4ee2b | 69 | |
70 | /* The following two can only occur in Objective-C++. */ | |
71 | ||
72 | switch ((int) TREE_CODE (t)) | |
73 | { | |
74 | case MESSAGE_SEND_EXPR: | |
75 | return objc_finish_message_expr | |
76 | (RECURSE (TREE_OPERAND (t, 0)), | |
77 | TREE_OPERAND (t, 1), /* No need to expand the selector. */ | |
d67e8485 | 78 | RECURSE (TREE_OPERAND (t, 2)), NULL); |
82d4ee2b | 79 | |
80 | case CLASS_REFERENCE_EXPR: | |
81 | return objc_get_class_reference | |
82 | (RECURSE (TREE_OPERAND (t, 0))); | |
83 | ||
84 | default: | |
85 | break; | |
86 | } | |
87 | ||
88 | /* Fall back to C++ processing. */ | |
89 | return NULL_TREE; | |
90 | ||
91 | #undef RECURSE | |
92 | } | |
93 | ||
4dd41a12 | 94 | static void |
95 | objcxx_init_ts (void) | |
96 | { | |
9b88d08d | 97 | objc_common_init_ts (); |
98 | cp_common_init_ts (); | |
1118bb28 | 99 | |
4dd41a12 | 100 | init_shadowed_var_for_decl (); |
101 | } | |
102 | ||
82d4ee2b | 103 | #include "gtype-objcp.h" |