diff options
Diffstat (limited to 'gcc/objc/objc-act.h')
-rw-r--r-- | gcc/objc/objc-act.h | 78 |
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] |