123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- /*
- * Copyright (c) 1999-2007 Apple Inc. All Rights Reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
- */
- /*
- * objc.h
- * Copyright 1988-1996, NeXT Software, Inc.
- */
- #ifndef _OBJC_OBJC_H_
- #define _OBJC_OBJC_H_
- #include <sys/types.h> // for __DARWIN_NULL
- #include <Availability.h>
- #include <objc/objc-api.h>
- #include <stdbool.h>
- #if !OBJC_TYPES_DEFINED
- /// An opaque type that represents an Objective-C class.
- typedef struct objc_class *Class;
- /// Represents an instance of a class.
- struct objc_object {
- Class _Nonnull isa OBJC_ISA_AVAILABILITY;
- };
- /// A pointer to an instance of a class.
- typedef struct objc_object *id;
- #endif
- /// An opaque type that represents a method selector.
- typedef struct objc_selector *SEL;
- /// A pointer to the function of a method implementation.
- #if !OBJC_OLD_DISPATCH_PROTOTYPES
- typedef void (*IMP)(void /* id, SEL, ... */ );
- #else
- typedef id _Nullable (*IMP)(id _Nonnull, SEL _Nonnull, ...);
- #endif
- /// Type to represent a boolean value.
- #if defined(__OBJC_BOOL_IS_BOOL)
- // Honor __OBJC_BOOL_IS_BOOL when available.
- # if __OBJC_BOOL_IS_BOOL
- # define OBJC_BOOL_IS_BOOL 1
- # else
- # define OBJC_BOOL_IS_BOOL 0
- # endif
- #else
- // __OBJC_BOOL_IS_BOOL not set.
- # if TARGET_OS_OSX || TARGET_OS_IOSMAC || ((TARGET_OS_IOS || TARGET_OS_BRIDGE) && !__LP64__ && !__ARM_ARCH_7K)
- # define OBJC_BOOL_IS_BOOL 0
- # else
- # define OBJC_BOOL_IS_BOOL 1
- # endif
- #endif
- #if OBJC_BOOL_IS_BOOL
- typedef bool BOOL;
- #else
- # define OBJC_BOOL_IS_CHAR 1
- typedef signed char BOOL;
- // BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C"
- // even if -funsigned-char is used.
- #endif
- #define OBJC_BOOL_DEFINED
- #if __has_feature(objc_bool)
- #define YES __objc_yes
- #define NO __objc_no
- #else
- #define YES ((BOOL)1)
- #define NO ((BOOL)0)
- #endif
- #ifndef Nil
- # if __has_feature(cxx_nullptr)
- # define Nil nullptr
- # else
- # define Nil __DARWIN_NULL
- # endif
- #endif
- #ifndef nil
- # if __has_feature(cxx_nullptr)
- # define nil nullptr
- # else
- # define nil __DARWIN_NULL
- # endif
- #endif
- #ifndef __strong
- # if !__has_feature(objc_arc)
- # define __strong /* empty */
- # endif
- #endif
- #ifndef __unsafe_unretained
- # if !__has_feature(objc_arc)
- # define __unsafe_unretained /* empty */
- # endif
- #endif
- #ifndef __autoreleasing
- # if !__has_feature(objc_arc)
- # define __autoreleasing /* empty */
- # endif
- #endif
- /**
- * Returns the name of the method specified by a given selector.
- *
- * @param sel A pointer of type \c SEL. Pass the selector whose name you wish to determine.
- *
- * @return A C string indicating the name of the selector.
- */
- OBJC_EXPORT const char * _Nonnull sel_getName(SEL _Nonnull sel)
- OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
- /**
- * Registers a method with the Objective-C runtime system, maps the method
- * name to a selector, and returns the selector value.
- *
- * @param str A pointer to a C string. Pass the name of the method you wish to register.
- *
- * @return A pointer of type SEL specifying the selector for the named method.
- *
- * @note You must register a method name with the Objective-C runtime system to obtain the
- * method’s selector before you can add the method to a class definition. If the method name
- * has already been registered, this function simply returns the selector.
- */
- OBJC_EXPORT SEL _Nonnull sel_registerName(const char * _Nonnull str)
- OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
- /**
- * Returns the class name of a given object.
- *
- * @param obj An Objective-C object.
- *
- * @return The name of the class of which \e obj is an instance.
- */
- OBJC_EXPORT const char * _Nonnull object_getClassName(id _Nullable obj)
- OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
- /**
- * Returns a pointer to any extra bytes allocated with an instance given object.
- *
- * @param obj An Objective-C object.
- *
- * @return A pointer to any extra bytes allocated with \e obj. If \e obj was
- * not allocated with any extra bytes, then dereferencing the returned pointer is undefined.
- *
- * @note This function returns a pointer to any extra bytes allocated with the instance
- * (as specified by \c class_createInstance with extraBytes>0). This memory follows the
- * object's ordinary ivars, but may not be adjacent to the last ivar.
- * @note The returned pointer is guaranteed to be pointer-size aligned, even if the area following
- * the object's last ivar is less aligned than that. Alignment greater than pointer-size is never
- * guaranteed, even if the area following the object's last ivar is more aligned than that.
- * @note In a garbage-collected environment, the memory is scanned conservatively.
- */
- OBJC_EXPORT void * _Nullable object_getIndexedIvars(id _Nullable obj)
- OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0)
- OBJC_ARC_UNAVAILABLE;
- /**
- * Identifies a selector as being valid or invalid.
- *
- * @param sel The selector you want to identify.
- *
- * @return YES if selector is valid and has a function implementation, NO otherwise.
- *
- * @warning On some platforms, an invalid reference (to invalid memory addresses) can cause
- * a crash.
- */
- OBJC_EXPORT BOOL sel_isMapped(SEL _Nonnull sel)
- OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
- /**
- * Registers a method name with the Objective-C runtime system.
- *
- * @param str A pointer to a C string. Pass the name of the method you wish to register.
- *
- * @return A pointer of type SEL specifying the selector for the named method.
- *
- * @note The implementation of this method is identical to the implementation of \c sel_registerName.
- * @note Prior to OS X version 10.0, this method tried to find the selector mapped to the given name
- * and returned \c NULL if the selector was not found. This was changed for safety, because it was
- * observed that many of the callers of this function did not check the return value for \c NULL.
- */
- OBJC_EXPORT SEL _Nonnull sel_getUid(const char * _Nonnull str)
- OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
- typedef const void* objc_objectptr_t;
- // Obsolete ARC conversions.
- OBJC_EXPORT id _Nullable objc_retainedObject(objc_objectptr_t _Nullable obj)
- #if !OBJC_DECLARE_SYMBOLS
- OBJC_UNAVAILABLE("use CFBridgingRelease() or a (__bridge_transfer id) cast instead")
- #endif
- ;
- OBJC_EXPORT id _Nullable objc_unretainedObject(objc_objectptr_t _Nullable obj)
- #if !OBJC_DECLARE_SYMBOLS
- OBJC_UNAVAILABLE("use a (__bridge id) cast instead")
- #endif
- ;
- OBJC_EXPORT objc_objectptr_t _Nullable objc_unretainedPointer(id _Nullable obj)
- #if !OBJC_DECLARE_SYMBOLS
- OBJC_UNAVAILABLE("use a __bridge cast instead")
- #endif
- ;
- #if !__OBJC2__
- // The following declarations are provided here for source compatibility.
- #if defined(__LP64__)
- typedef long arith_t;
- typedef unsigned long uarith_t;
- # define ARITH_SHIFT 32
- #else
- typedef int arith_t;
- typedef unsigned uarith_t;
- # define ARITH_SHIFT 16
- #endif
- typedef char *STR;
- #define ISSELECTOR(sel) sel_isMapped(sel)
- #define SELNAME(sel) sel_getName(sel)
- #define SELUID(str) sel_getUid(str)
- #define NAMEOF(obj) object_getClassName(obj)
- #define IV(obj) object_getIndexedIvars(obj)
- #endif
- #endif /* _OBJC_OBJC_H_ */
|