blob: 33cffaaf8d85d1622e047409a546d6896781395f [file] [log] [blame]
// 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_