zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

objc.h (7654B) - Raw


      1 /*
      2  * Copyright (c) 1999-2007 Apple Inc.  All Rights Reserved.
      3  * 
      4  * @APPLE_LICENSE_HEADER_START@
      5  * 
      6  * This file contains Original Code and/or Modifications of Original Code
      7  * as defined in and that are subject to the Apple Public Source License
      8  * Version 2.0 (the 'License'). You may not use this file except in
      9  * compliance with the License. Please obtain a copy of the License at
     10  * http://www.opensource.apple.com/apsl/ and read it before using this
     11  * file.
     12  * 
     13  * The Original Code and all software distributed under the License are
     14  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
     15  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
     16  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
     17  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
     18  * Please see the License for the specific language governing rights and
     19  * limitations under the License.
     20  * 
     21  * @APPLE_LICENSE_HEADER_END@
     22  */
     23 /*
     24  *	objc.h
     25  *	Copyright 1988-1996, NeXT Software, Inc.
     26  */
     27 
     28 #ifndef _OBJC_OBJC_H_
     29 #define _OBJC_OBJC_H_
     30 
     31 #include <stdlib.h>
     32 #include <Availability.h>
     33 #include <objc/objc-api.h>
     34 #include <stdbool.h>
     35 
     36 #if !OBJC_TYPES_DEFINED
     37 /// An opaque type that represents an Objective-C class.
     38 typedef struct objc_class *Class;
     39 
     40 /// Represents an instance of a class.
     41 struct objc_object {
     42     Class _Nonnull isa  OBJC_ISA_AVAILABILITY;
     43 };
     44 
     45 /// A pointer to an instance of a class.
     46 typedef struct objc_object *id;
     47 #endif
     48 
     49 /// An opaque type that represents an Objective-C protocol.
     50 #ifdef __OBJC__
     51 @class Protocol;
     52 #else
     53 typedef struct objc_object Protocol;
     54 #endif
     55 
     56 /// An opaque type that represents a method selector.
     57 typedef struct objc_selector *SEL;
     58 
     59 /// A pointer to the function of a method implementation. 
     60 #if !OBJC_OLD_DISPATCH_PROTOTYPES
     61 typedef void (*IMP)(void /* id, SEL, ... */ ); 
     62 #else
     63 typedef id _Nullable (*IMP)(id _Nonnull, SEL _Nonnull, ...); 
     64 #endif
     65 
     66 /// Type to represent a boolean value.
     67 
     68 #if defined(__OBJC_BOOL_IS_BOOL)
     69     // Honor __OBJC_BOOL_IS_BOOL when available.
     70 #   if __OBJC_BOOL_IS_BOOL
     71 #       define OBJC_BOOL_IS_BOOL 1
     72 #   else
     73 #       define OBJC_BOOL_IS_BOOL 0
     74 #   endif
     75 #else
     76     // __OBJC_BOOL_IS_BOOL not set.
     77 #   if TARGET_OS_OSX || TARGET_OS_MACCATALYST || ((TARGET_OS_IOS || 0) && !__LP64__ && !__ARM_ARCH_7K)
     78 #      define OBJC_BOOL_IS_BOOL 0
     79 #   else
     80 #      define OBJC_BOOL_IS_BOOL 1
     81 #   endif
     82 #endif
     83 
     84 #if OBJC_BOOL_IS_BOOL
     85     typedef bool BOOL;
     86 #else
     87 #   define OBJC_BOOL_IS_CHAR 1
     88     typedef signed char BOOL; 
     89     // BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" 
     90     // even if -funsigned-char is used.
     91 #endif
     92 
     93 #define OBJC_BOOL_DEFINED
     94 
     95 #if __has_feature(objc_bool)
     96 #define YES __objc_yes
     97 #define NO  __objc_no
     98 #else
     99 #define YES ((BOOL)1)
    100 #define NO  ((BOOL)0)
    101 #endif
    102 
    103 #ifndef Nil
    104 # if __has_feature(cxx_nullptr)
    105 #   define Nil nullptr
    106 # else
    107 #   define Nil __DARWIN_NULL
    108 # endif
    109 #endif
    110 
    111 #ifndef nil
    112 # if __has_feature(cxx_nullptr)
    113 #   define nil nullptr
    114 # else
    115 #   define nil __DARWIN_NULL
    116 # endif
    117 #endif
    118 
    119 #ifndef __strong
    120 # if !__has_feature(objc_arc)
    121 #   define __strong /* empty */
    122 # endif
    123 #endif
    124 
    125 #ifndef __unsafe_unretained
    126 # if !__has_feature(objc_arc)
    127 #   define __unsafe_unretained /* empty */
    128 # endif
    129 #endif
    130 
    131 #ifndef __autoreleasing
    132 # if !__has_feature(objc_arc)
    133 #   define __autoreleasing /* empty */
    134 # endif
    135 #endif
    136 
    137 /// Forward declaration for zone support
    138 typedef struct _malloc_zone_t *objc_zone_t;
    139 
    140 /** 
    141  * Returns the name of the method specified by a given selector.
    142  * 
    143  * @param sel A pointer of type \c SEL. Pass the selector whose name you wish to determine.
    144  * 
    145  * @return A C string indicating the name of the selector.
    146  */
    147 OBJC_EXPORT const char * _Nonnull sel_getName(SEL _Nonnull sel)
    148     OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
    149 
    150 /** 
    151  * Registers a method with the Objective-C runtime system, maps the method 
    152  * name to a selector, and returns the selector value.
    153  * 
    154  * @param str A pointer to a C string. Pass the name of the method you wish to register.
    155  * 
    156  * @return A pointer of type SEL specifying the selector for the named method.
    157  * 
    158  * @note You must register a method name with the Objective-C runtime system to obtain the
    159  *  method’s selector before you can add the method to a class definition. If the method name
    160  *  has already been registered, this function simply returns the selector.
    161  */
    162 OBJC_EXPORT SEL _Nonnull sel_registerName(const char * _Nonnull str)
    163     OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
    164 
    165 /** 
    166  * Returns the class name of a given object.
    167  * 
    168  * @param obj An Objective-C object.
    169  * 
    170  * @return The name of the class of which \e obj is an instance.
    171  */
    172 OBJC_EXPORT const char * _Nonnull object_getClassName(id _Nullable obj)
    173     OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
    174 
    175 /** 
    176  * Returns a pointer to any extra bytes allocated with an instance given object.
    177  * 
    178  * @param obj An Objective-C object.
    179  * 
    180  * @return A pointer to any extra bytes allocated with \e obj. If \e obj was
    181  *   not allocated with any extra bytes, then dereferencing the returned pointer is undefined.
    182  * 
    183  * @note This function returns a pointer to any extra bytes allocated with the instance
    184  *  (as specified by \c class_createInstance with extraBytes>0). This memory follows the
    185  *  object's ordinary ivars, but may not be adjacent to the last ivar.
    186  * @note The returned pointer is guaranteed to be pointer-size aligned, even if the area following
    187  *  the object's last ivar is less aligned than that. Alignment greater than pointer-size is never
    188  *  guaranteed, even if the area following the object's last ivar is more aligned than that.
    189  * @note In a garbage-collected environment, the memory is scanned conservatively.
    190  */
    191 OBJC_EXPORT void * _Nullable object_getIndexedIvars(id _Nullable obj)
    192     OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
    193 
    194 /** 
    195  * Identifies a selector as being valid or invalid.
    196  * 
    197  * @param sel The selector you want to identify.
    198  * 
    199  * @return YES if selector is valid and has a function implementation, NO otherwise. 
    200  * 
    201  * @warning On some platforms, an invalid reference (to invalid memory addresses) can cause
    202  *  a crash. 
    203  */
    204 OBJC_EXPORT BOOL sel_isMapped(SEL _Nonnull sel)
    205     OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
    206 
    207 /** 
    208  * Registers a method name with the Objective-C runtime system.
    209  * 
    210  * @param str A pointer to a C string. Pass the name of the method you wish to register.
    211  * 
    212  * @return A pointer of type SEL specifying the selector for the named method.
    213  * 
    214  * @note The implementation of this method is identical to the implementation of \c sel_registerName.
    215  * @note Prior to OS X version 10.0, this method tried to find the selector mapped to the given name
    216  *  and returned \c NULL if the selector was not found. This was changed for safety, because it was
    217  *  observed that many of the callers of this function did not check the return value for \c NULL.
    218  */
    219 OBJC_EXPORT SEL _Nonnull sel_getUid(const char * _Nonnull str)
    220     OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
    221 
    222 typedef const void* objc_objectptr_t;
    223 
    224 
    225 // Obsolete ARC conversions.
    226 
    227 OBJC_EXPORT id _Nullable objc_retainedObject(objc_objectptr_t _Nullable obj)
    228 #if !OBJC_DECLARE_SYMBOLS
    229     OBJC_UNAVAILABLE("use CFBridgingRelease() or a (__bridge_transfer id) cast instead")
    230 #endif
    231     ;
    232 OBJC_EXPORT id _Nullable objc_unretainedObject(objc_objectptr_t _Nullable obj)
    233 #if !OBJC_DECLARE_SYMBOLS
    234     OBJC_UNAVAILABLE("use a (__bridge id) cast instead")
    235 #endif
    236     ;
    237 OBJC_EXPORT objc_objectptr_t _Nullable objc_unretainedPointer(id _Nullable obj)
    238 #if !OBJC_DECLARE_SYMBOLS
    239     OBJC_UNAVAILABLE("use a __bridge cast instead")
    240 #endif
    241     ;
    242 
    243 #endif  /* _OBJC_OBJC_H_ */