?? objc-act.h
字號:
/* Declarations for objc-act.c. Copyright (C) 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.This file is part of GCC.GCC is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GCC is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GCC; see the file COPYING. If not, write tothe Free Software Foundation, 51 Franklin Street, Fifth Floor,Boston, MA 02110-1301, USA. */#ifndef GCC_OBJC_ACT_H#define GCC_OBJC_ACT_H/* For enum gimplify_status */#include "tree-gimple.h"/*** Language hooks ***/bool objc_init (void);const char *objc_printable_name (tree, int);tree objc_get_callee_fndecl (tree);void objc_finish_file (void);tree objc_fold_obj_type_ref (tree, tree);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. *//* Objective-C structures */#define CLASS_LANG_SLOT_ELTS 5#define PROTOCOL_LANG_SLOT_ELTS 2#define OBJC_INFO_SLOT_ELTS 2/* KEYWORD_DECL */#define KEYWORD_KEY_NAME(DECL) ((DECL)->decl_minimal.name)#define KEYWORD_ARG_NAME(DECL) ((DECL)->decl_non_common.arguments)/* INSTANCE_METHOD_DECL, CLASS_METHOD_DECL */#define METHOD_SEL_NAME(DECL) ((DECL)->decl_minimal.name)#define METHOD_SEL_ARGS(DECL) ((DECL)->decl_non_common.arguments)#define METHOD_ADD_ARGS(DECL) ((DECL)->decl_non_common.result)#define METHOD_ADD_ARGS_ELLIPSIS_P(DECL) ((DECL)->decl_common.lang_flag_0)#define METHOD_DEFINITION(DECL) ((DECL)->decl_common.initial)#define METHOD_ENCODING(DECL) ((DECL)->decl_minimal.context)/* CLASS_INTERFACE_TYPE, CLASS_IMPLEMENTATION_TYPE, CATEGORY_INTERFACE_TYPE, CATEGORY_IMPLEMENTATION_TYPE, PROTOCOL_INTERFACE_TYPE */#define CLASS_NAME(CLASS) ((CLASS)->type.name)#define CLASS_SUPER_NAME(CLASS) (TYPE_CHECK (CLASS)->type.context)#define CLASS_IVARS(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 0)#define CLASS_RAW_IVARS(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 1)#define CLASS_NST_METHODS(CLASS) ((CLASS)->type.minval)#define CLASS_CLS_METHODS(CLASS) ((CLASS)->type.maxval)#define CLASS_STATIC_TEMPLATE(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 2)#define CLASS_CATEGORY_LIST(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 3)#define CLASS_PROTOCOL_LIST(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 4)#define PROTOCOL_NAME(CLASS) ((CLASS)->type.name)#define PROTOCOL_LIST(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 0)#define PROTOCOL_NST_METHODS(CLASS) ((CLASS)->type.minval)#define PROTOCOL_CLS_METHODS(CLASS) ((CLASS)->type.maxval)#define PROTOCOL_FORWARD_DECL(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 1)#define PROTOCOL_DEFINED(CLASS) TREE_USED (CLASS)/* ObjC-specific information pertaining to RECORD_TYPEs are stored in the LANG_SPECIFIC structures, which may itself need allocating first. *//* 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_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)) \ 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 \ { \ 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_OBJC_INFO (DST) \ = make_tree_vec (OBJC_INFO_SLOT_ELTS); \ } \ while (0)#define TYPED_OBJECT(TYPE) \ (TREE_CODE (TYPE) == RECORD_TYPE \ && TYPE_HAS_OBJC_INFO (TYPE) \ && TYPE_OBJC_INTERFACE (TYPE))#define OBJC_TYPE_NAME(TYPE) TYPE_NAME(TYPE)#define OBJC_SET_TYPE_NAME(TYPE, NAME) (TYPE_NAME (TYPE) = NAME)/* Define the Objective-C or Objective-C++ language-specific tree codes. */#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,enum objc_tree_code {#if defined (GCC_CP_TREE_H) LAST_BASE_TREE_CODE = LAST_CPLUS_TREE_CODE,#else #if defined (GCC_C_TREE_H) LAST_BASE_TREE_CODE = LAST_C_TREE_CODE,#else #error You must include <c-tree.h> or <cp/cp-tree.h> before <objc/objc-act.h>#endif#endif#include "objc-tree.def" LAST_OBJC_TREE_CODE};#undef DEFTREECODE/* Hash tables to manage the global pool of method prototypes. */typedef struct hashed_entry *hash;typedef struct hashed_attribute *attr;struct hashed_attribute GTY(()){ attr next; tree value;};struct hashed_entry GTY(()){ attr list; hash next; tree key;};extern GTY ((length ("SIZEHASHTABLE"))) hash *nst_method_hash_list;extern GTY ((length ("SIZEHASHTABLE"))) hash *cls_method_hash_list;#define SIZEHASHTABLE 257/* Objective-C/Objective-C++ @implementation list. */struct imp_entry GTY(()){ struct imp_entry *next; tree imp_context; tree imp_template; tree class_decl; /* _OBJC_CLASS_<my_name>; */ tree meta_decl; /* _OBJC_METACLASS_<my_name>; */ BOOL_BITFIELD has_cxx_cdtors : 1;};extern GTY(()) struct imp_entry *imp_list;extern GTY(()) int imp_count; /* `@implementation' */extern GTY(()) int cat_count; /* `@category' */extern GTY(()) enum tree_code objc_inherit_code;extern GTY(()) int objc_public_flag;/* Objective-C/Objective-C++ global tree enumeration. */enum objc_tree_index{ OCTI_STATIC_NST, OCTI_STATIC_NST_DECL, OCTI_SELF_ID, OCTI_UCMD_ID, OCTI_SELF_DECL, OCTI_UMSG_DECL, OCTI_UMSG_FAST_DECL, OCTI_UMSG_SUPER_DECL, OCTI_UMSG_STRET_DECL, OCTI_UMSG_SUPER_STRET_DECL, OCTI_GET_CLASS_DECL, OCTI_GET_MCLASS_DECL, OCTI_SUPER_TYPE, OCTI_SEL_TYPE, OCTI_ID_TYPE, OCTI_CLS_TYPE, OCTI_NST_TYPE, OCTI_PROTO_TYPE, OCTI_CLS_CHAIN, OCTI_ALIAS_CHAIN, OCTI_INTF_CHAIN, OCTI_PROTO_CHAIN, OCTI_IMPL_CHAIN, OCTI_CLS_REF_CHAIN, OCTI_SEL_REF_CHAIN, OCTI_IVAR_CHAIN, OCTI_CLS_NAMES_CHAIN, OCTI_METH_VAR_NAMES_CHAIN, OCTI_METH_VAR_TYPES_CHAIN, OCTI_SYMBOLS_DECL, OCTI_NST_VAR_DECL, OCTI_CLS_VAR_DECL, OCTI_NST_METH_DECL, OCTI_CLS_METH_DECL, OCTI_CLS_DECL, OCTI_MCLS_DECL, OCTI_SEL_TABLE_DECL, OCTI_MODULES_DECL, OCTI_GNU_INIT_DECL,
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -