| // Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // This file exposes a subset of the Objective C runtime. Ideally we'd just run |
| // FFIgen directly on the runtime headers that come with XCode, but those |
| // headers don't have everything we need (e.g. the ObjCBlockImpl struct). |
| |
| #ifndef OBJECTIVE_C_SRC_OBJECTIVE_C_RUNTIME_H_ |
| #define OBJECTIVE_C_SRC_OBJECTIVE_C_RUNTIME_H_ |
| |
| #include "include/dart_api_dl.h" |
| |
| typedef struct _ObjCSelector ObjCSelector; |
| typedef struct _ObjCObjectImpl ObjCObjectImpl; |
| typedef struct _ObjCProtocolImpl ObjCProtocolImpl; |
| |
| ObjCSelector *sel_registerName(const char *name); |
| const char * sel_getName(ObjCSelector* sel); |
| ObjCObjectImpl *objc_getClass(const char *name); |
| ObjCObjectImpl *objc_retain(ObjCObjectImpl *object); |
| ObjCObjectImpl *objc_retainBlock(const ObjCObjectImpl *object); |
| void objc_release(ObjCObjectImpl *object); |
| ObjCObjectImpl *objc_autorelease(ObjCObjectImpl *object); |
| ObjCObjectImpl *object_getClass(ObjCObjectImpl *object); |
| ObjCObjectImpl** objc_copyClassList(unsigned int* count); |
| void *objc_autoreleasePoolPush(void); |
| void objc_autoreleasePoolPop(void *pool); |
| |
| // The signature of this function is just a placeholder. This function is used |
| // by every method invocation, and is cast to every signature we need. |
| void objc_msgSend(void); |
| void objc_msgSend_fpret(void); |
| void objc_msgSend_stret(void); |
| |
| // https://opensource.apple.com/source/libclosure/libclosure-38/Block_private.h |
| extern void *_NSConcreteStackBlock[32]; |
| extern void *_NSConcreteMallocBlock[32]; |
| extern void *_NSConcreteAutoBlock[32]; |
| extern void *_NSConcreteFinalizingBlock[32]; |
| extern void *_NSConcreteGlobalBlock[32]; |
| extern void *_NSConcreteWeakBlockVariable[32]; |
| |
| typedef struct _ObjCMethodDesc { |
| ObjCSelector* name; |
| const char* types; |
| } ObjCMethodDesc; |
| |
| ObjCProtocolImpl* objc_getProtocol(const char* name); |
| ObjCMethodDesc protocol_getMethodDescription( |
| ObjCProtocolImpl* protocol, ObjCSelector* sel, bool isRequiredMethod, |
| bool isInstanceMethod); |
| const char *protocol_getName(ObjCProtocolImpl *proto); |
| |
| extern const ObjCObjectImpl *NSKeyValueChangeIndexesKey; |
| extern const ObjCObjectImpl *NSKeyValueChangeKindKey; |
| extern const ObjCObjectImpl *NSKeyValueChangeNewKey; |
| extern const ObjCObjectImpl *NSKeyValueChangeNotificationIsPriorKey; |
| extern const ObjCObjectImpl *NSKeyValueChangeOldKey; |
| extern const ObjCObjectImpl *NSLocalizedDescriptionKey; |
| |
| #endif // OBJECTIVE_C_SRC_OBJECTIVE_C_RUNTIME_H_ |