ObjFW  Artifact [42c2973f24]

Artifact 42c2973f24c2441ac16cd0dd679448cedda5f9fce380d744616f6cb936769e69:

  • File src/autorelease-foundation.m — part of check-in [21f9b3bab8] at 2025-03-17 20:20:35 on branch trunk — Optimize autorelease pools on macOS Leopard (user: js size: 1507) [more...]

/*
 * Copyright (c) 2008-2025 Jonathan Schleifer <js@nil.im>
 *
 * All rights reserved.
 *
 * This program is free software: you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License version 3.0 only,
 * as published by the Free Software Foundation.
 *
 * This program 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 Lesser General Public License
 * version 3.0 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3.0 along with this program. If not, see
 * <https://www.gnu.org/licenses/>.
 */

/*
 * This file provides a wrapper to use the Foundation implementation for
 * autorelease pools.
 *
 * If we're using the Apple runtime and it doesn't have autorelease pools, we
 * need to use the implementation from Foundation to make ObjFWBridge work. We
 * can't use the ObjFWRT implementation as that would result in two parallel
 * autorelease pool chains.
 */

#include "config.h"

extern void *NSPushAutoreleasePool(unsigned int count);
extern void NSPopAutoreleasePool(void *pool);
extern void NSAutoreleaseObject(id object);

void *
objc_autoreleasePoolPush(void)
{
	return NSPushAutoreleasePool(0);
}

void
objc_autoreleasePoolPop(void *pool)
{
	NSPopAutoreleasePool(pool);
}

id
_objc_rootAutorelease(id object)
{
	NSAutoreleaseObject(object);

	return object;
}