/* Compatibility header between runtimes and APIs. Copyright (C) 2010, 2011 Free Software Foundation, Inc. Original Authors: Ziemowit Laski David Ayers re-work for ObjC2 by Iain Sandoe This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, 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 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ #ifndef _OBJC_NEXT_MAPPING_H_ #define _OBJC_NEXT_MAPPING_H_ /* This file provides a two-way mapping of API names for the original GNU & NeXT APIs. It is being expanded to provide mapping (where possible) between between the older API and API-2. */ #include "objc-test-suite-types.h" #ifndef __NEXT_RUNTIME__ # define CLASSFIELD class_pointer # define CLASSPTRFIELD(x) (x)->class_pointer # define SUPERCLASS superClass # define OBJC_GETCLASS objc_get_class # ifdef __objc_api_INCLUDE_GNU # define class_createInstance(C, S) class_create_instance(C) # endif # define method_get_types(M) (M)->method_types #else /* NeXT */ /* Include next-abi.h to set NEXT_OBJC_USE_NEW_INTERFACE etc.*/ # include "next-abi.h" # ifdef NEXT_OBJC_USE_NEW_INTERFACE /* API=2. */ # include # else /* API=0. */ # include # endif # define CLASSPTRFIELD(x) (x)->isa # define SUPERCLASS superclass # define OBJC_GETCLASS objc_getClass # define objc_get_class(C) objc_getClass(C) # define objc_get_meta_class(C) objc_getMetaClass(C) # define class_get_class_method(C, S) class_getClassMethod(C, S) # define class_get_instance_method(C, S) class_getInstanceMethod(C, S) # define sel_get_name(S) sel_getName(S) # define class_create_instance(C) class_createInstance(C, 0) # define class_get_class_name(C) object_getClassName(C) # define objc_lookup_class(N) objc_lookUpClass(N) # ifdef NEXT_OBJC_USE_NEW_INTERFACE # define object_class_name(O) (object_getClassName(O)) # define object_get_class(O) (object_getClass((id)O)) # define object_get_super_class(O) class_get_super_class(object_get_class(O)) # define object_is_class(O) class_is_meta_class(object_get_class(O)) # define object_is_meta_class(O) (object_is_class(O) && class_is_meta_class(O) \ && class_is_meta_class(object_get_class(O))) # define method_get_imp(M) (method_getImplementation((Method)M)) # define method_get_types(M) (method_getTypeEncoding((Method)M)) # define class_get_super_class(C) (class_getSuperclass((Class)C)) # define class_is_meta_class(C) (class_isMetaClass((Class)C) ? YES: NO) # define class_is_class(C) (class_is_meta_class(C) == NO) # else /* OLD API */ # define object_class_name(O) (O->name) # define object_get_super_class(O) class_get_super_class(*(struct objc_class **)O) # define object_get_class(O) (*(struct objc_class **)O) # define object_is_class(O) class_is_meta_class(*(struct objc_class **)O) # define object_is_meta_class(O) (class_is_meta_class(O) && class_is_meta_class(*(struct objc_class **)O)) # define method_get_imp(M) (((Method)M)->method_imp) # define method_get_types(M) (((Method)M)->method_types) # define class_get_super_class(C) (((struct objc_class *)C)->super_class) # define class_is_meta_class(C) (CLS_GETINFO((struct objc_class *)C, CLS_META)? YES: NO) # define class_is_class(C) (CLS_GETINFO((struct objc_class *)C, CLS_CLASS)? YES: NO) # endif /* NEXT_OBJC_USE_NEW_INTERFACE */ # endif /*__NEXT_RUNTIME__ */ #endif /* _OBJC_NEXT_MAPPING_H_ */