swift_rs/
autorelease.rs

1/// Run code with its own autorelease pool. Semantically, this is identical
2/// to [`@autoreleasepool`](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html)
3/// in Objective-C
4///
5///
6/// ```no_run
7/// use swift_rs::autoreleasepool;
8///
9/// autoreleasepool!({
10///     // do something memory intensive stuff
11/// })
12/// ```
13#[macro_export]
14macro_rules! autoreleasepool {
15    ( $expr:expr ) => {{
16        extern "C" {
17            fn objc_autoreleasePoolPush() -> *mut std::ffi::c_void;
18            fn objc_autoreleasePoolPop(context: *mut std::ffi::c_void);
19        }
20
21        let pool = unsafe { objc_autoreleasePoolPush() };
22        let r = { $expr };
23        unsafe { objc_autoreleasePoolPop(pool) };
24        r
25    }};
26}