aboutsummaryrefslogtreecommitdiff
path: root/gcc/objc/objc-act.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/objc/objc-act.h')
-rw-r--r--gcc/objc/objc-act.h78
1 files changed, 64 insertions, 14 deletions
diff --git a/gcc/objc/objc-act.h b/gcc/objc/objc-act.h
index 9925d96ce6c..5aab65e214b 100644
--- a/gcc/objc/objc-act.h
+++ b/gcc/objc/objc-act.h
@@ -22,13 +22,21 @@ Boston, MA 02111-1307, USA. */
#ifndef GCC_OBJC_ACT_H
#define GCC_OBJC_ACT_H
+/* APPLE LOCAL begin Radar 4015820 FSF candidate */
+/* For enum gimplify_status */
+#include "tree-gimple.h"
+/* APPLE LOCAL end Radar 4015820 FSF candidate */
/*** Language hooks ***/
bool objc_init (void);
const char *objc_printable_name (tree, int);
+/* APPLE LOCAL Radar 3926484 FSF candidate */
+tree objc_get_callee_fndecl (tree);
void objc_finish_file (void);
tree objc_fold_obj_type_ref (tree, tree);
int objc_types_compatible_p (tree, tree);
+/* APPLE LOCAL Radar 4015820 FSF candidate */
+enum gimplify_status objc_gimplify_expr (tree *, tree *, tree *);
/* NB: The remaining public functions are prototyped in c-common.h, for the
benefit of stub-objc.c and objc-act.c. */
@@ -71,42 +79,46 @@ int objc_types_compatible_p (tree, tree);
/* ObjC-specific information pertaining to RECORD_TYPEs are stored in
the LANG_SPECIFIC structures, which may itself need allocating first. */
+
+/* APPLE LOCAL begin Objective-C++ */
+/* The following three macros must be overridden (in objcp/objcp-decl.h)
+ for Objective-C++. */
#define TYPE_OBJC_INFO(TYPE) TYPE_LANG_SPECIFIC (TYPE)->objc_info
+#define SIZEOF_OBJC_TYPE_LANG_SPECIFIC sizeof (struct lang_type)
+#define ALLOC_OBJC_TYPE_LANG_SPECIFIC(NODE) \
+ do { \
+ TYPE_LANG_SPECIFIC (NODE) = GGC_CNEW (struct lang_type); \
+ } while (0)
+
#define TYPE_HAS_OBJC_INFO(TYPE) \
- (TYPE_LANG_SPECIFIC (TYPE) \
- && TYPE_LANG_SPECIFIC (TYPE)->objc_info)
+ (TYPE_LANG_SPECIFIC (TYPE) && TYPE_OBJC_INFO (TYPE))
#define TYPE_OBJC_INTERFACE(TYPE) TREE_VEC_ELT (TYPE_OBJC_INFO (TYPE), 0)
#define TYPE_OBJC_PROTOCOL_LIST(TYPE) TREE_VEC_ELT (TYPE_OBJC_INFO (TYPE), 1)
+
#define INIT_TYPE_OBJC_INFO(TYPE) \
do \
{ \
if (!TYPE_LANG_SPECIFIC (TYPE)) \
- TYPE_LANG_SPECIFIC (TYPE) \
- = ALLOC_OBJC_TYPE_LANG_SPECIFIC; \
- if (!TYPE_LANG_SPECIFIC (TYPE)->objc_info) \
- TYPE_LANG_SPECIFIC (TYPE)->objc_info \
+ ALLOC_OBJC_TYPE_LANG_SPECIFIC(TYPE); \
+ if (!TYPE_OBJC_INFO (TYPE)) \
+ TYPE_OBJC_INFO (TYPE) \
= make_tree_vec (OBJC_INFO_SLOT_ELTS); \
} \
while (0)
#define DUP_TYPE_OBJC_INFO(DST, SRC) \
do \
{ \
- TYPE_LANG_SPECIFIC (DST) \
- = ALLOC_OBJC_TYPE_LANG_SPECIFIC; \
+ ALLOC_OBJC_TYPE_LANG_SPECIFIC(DST); \
if (TYPE_LANG_SPECIFIC (SRC)) \
memcpy (TYPE_LANG_SPECIFIC (DST), \
TYPE_LANG_SPECIFIC (SRC), \
SIZEOF_OBJC_TYPE_LANG_SPECIFIC); \
- TYPE_LANG_SPECIFIC (DST)->objc_info \
+ TYPE_OBJC_INFO (DST) \
= make_tree_vec (OBJC_INFO_SLOT_ELTS); \
} \
while (0)
-
-/* The following two macros must be overridden (in objcp/objcp-decl.h)
- for Objective-C++. */
-#define ALLOC_OBJC_TYPE_LANG_SPECIFIC GGC_CNEW (struct lang_type)
-#define SIZEOF_OBJC_TYPE_LANG_SPECIFIC sizeof (struct lang_type)
+/* APPLE LOCAL end Objective-C++ */
#define TYPED_OBJECT(TYPE) \
(TREE_CODE (TYPE) == RECORD_TYPE \
@@ -115,6 +127,11 @@ int objc_types_compatible_p (tree, tree);
#define OBJC_TYPE_NAME(TYPE) TYPE_NAME(TYPE)
#define OBJC_SET_TYPE_NAME(TYPE, NAME) (TYPE_NAME (TYPE) = NAME)
+/* APPLE LOCAL begin objc speedup --dpatel */
+#define IDENTIFIER_INTERFACE_VALUE(NODE) \
+ (((struct lang_identifier *) (NODE))->interface_value)
+/* APPLE LOCAL end objc speedup --dpatel */
+
/* Define the Objective-C or Objective-C++ language-specific tree codes. */
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,
@@ -164,6 +181,8 @@ struct imp_entry GTY(())
tree imp_template;
tree class_decl; /* _OBJC_CLASS_<my_name>; */
tree meta_decl; /* _OBJC_METACLASS_<my_name>; */
+ /* APPLE LOCAL ObjC C++ ivars */
+ BOOL_BITFIELD has_cxx_cdtors : 1;
};
extern GTY(()) struct imp_entry *imp_list;
@@ -185,6 +204,8 @@ enum objc_tree_index
OCTI_SELF_DECL,
OCTI_UMSG_DECL,
+ /* APPLE LOCAL ObjC direct dispatch */
+ OCTI_UMSG_FAST_DECL,
OCTI_UMSG_SUPER_DECL,
OCTI_UMSG_STRET_DECL,
OCTI_UMSG_SUPER_STRET_DECL,
@@ -235,6 +256,11 @@ enum objc_tree_index
OCTI_UUCLS_SUPER_REF,
OCTI_METH_TEMPL,
OCTI_IVAR_TEMPL,
+ /* APPLE LOCAL begin Objective-C++ */
+ OCTI_METH_LIST_TEMPL,
+ OCTI_METH_PROTO_LIST_TEMPL,
+ OCTI_IVAR_LIST_TEMPL,
+ /* APPLE LOCAL end Objective-C++ */
OCTI_SYMTAB_TEMPL,
OCTI_MODULE_TEMPL,
OCTI_SUPER_TEMPL,
@@ -272,6 +298,13 @@ enum objc_tree_index
OCTI_CATCH_TYPE,
OCTI_EXECCLASS_DECL,
+ /* APPLE LOCAL begin ObjC GC */
+ OCTI_ASSIGN_IVAR_DECL,
+ OCTI_ASSIGN_IVAR_FAST_DECL,
+ OCTI_ASSIGN_GLOBAL_DECL,
+ OCTI_ASSIGN_STRONGCAST_DECL,
+ /* APPLE LOCAL end ObjC GC */
+
OCTI_MAX
};
@@ -291,6 +324,8 @@ extern GTY(()) tree objc_global_trees[OCTI_MAX];
#define self_decl objc_global_trees[OCTI_SELF_DECL]
#define umsg_decl objc_global_trees[OCTI_UMSG_DECL]
+/* APPLE LOCAL ObjC GC */
+#define umsg_fast_decl objc_global_trees[OCTI_UMSG_FAST_DECL]
#define umsg_super_decl objc_global_trees[OCTI_UMSG_SUPER_DECL]
#define umsg_stret_decl objc_global_trees[OCTI_UMSG_STRET_DECL]
#define umsg_super_stret_decl objc_global_trees[OCTI_UMSG_SUPER_STRET_DECL]
@@ -402,8 +437,23 @@ extern GTY(()) tree objc_global_trees[OCTI_MAX];
#define execclass_decl objc_global_trees[OCTI_EXECCLASS_DECL]
+/* APPLE LOCAL begin ObjC GC */
+#define objc_assign_ivar_decl objc_global_trees[OCTI_ASSIGN_IVAR_DECL]
+#define objc_assign_ivar_fast_decl \
+ objc_global_trees[OCTI_ASSIGN_IVAR_FAST_DECL]
+#define objc_assign_global_decl objc_global_trees[OCTI_ASSIGN_GLOBAL_DECL]
+#define objc_assign_strong_cast_decl \
+ objc_global_trees[OCTI_ASSIGN_STRONGCAST_DECL]
+/* APPLE LOCAL end ObjC GC */
+
#define objc_method_template objc_global_trees[OCTI_METH_TEMPL]
#define objc_ivar_template objc_global_trees[OCTI_IVAR_TEMPL]
+/* APPLE LOCAL begin Objective-C++ */
+#define objc_method_list_ptr objc_global_trees[OCTI_METH_LIST_TEMPL]
+#define objc_method_proto_list_ptr \
+ objc_global_trees[OCTI_METH_PROTO_LIST_TEMPL]
+#define objc_ivar_list_ptr objc_global_trees[OCTI_IVAR_LIST_TEMPL]
+/* APPLE LOCAL end Objective-C++ */
#define objc_symtab_template objc_global_trees[OCTI_SYMTAB_TEMPL]
#define objc_module_template objc_global_trees[OCTI_MODULE_TEMPL]
#define objc_super_template objc_global_trees[OCTI_SUPER_TEMPL]