aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArslaan Pathan <[email protected]>2026-10-02 22:24:55 +1300
committerArslaan Pathan <[email protected]>2026-10-02 22:24:55 +1300
commitba9deab178f68f905cb63d50de2c64641362607d (patch)
tree4fc9c3a06524a1507a2262f6b07529385a78e384
parent6159fd844f6807d59e04dc8805ee417d5b13bf32 (diff)
downloadParadox-ba9deab178f68f905cb63d50de2c64641362607d.tar.xz
Paradox-ba9deab178f68f905cb63d50de2c64641362607d.zip
autorelease and ARC, also switch to libobjc2 ABI instead of legacy objc ABI
-rw-r--r--include/Paradox/Object.h2
-rw-r--r--meson.build3
-rw-r--r--src/Object.m8
-rw-r--r--tests/AutoreleasePool.m15
4 files changed, 27 insertions, 1 deletions
diff --git a/include/Paradox/Object.h b/include/Paradox/Object.h
index 87b93f5..ca602d7 100644
--- a/include/Paradox/Object.h
+++ b/include/Paradox/Object.h
@@ -14,6 +14,8 @@
- (instancetype)init;
- (void)dealloc;
- (void)release;
+- (instancetype)autorelease;
+- (void)healthCheck;
@end
#endif
diff --git a/meson.build b/meson.build
index a97cc69..09e4649 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
project('paradox', 'objc', version: '0.0.1')
-add_project_arguments('-Wno-objc-root-class', '-Werror', '-pedantic', '-Wall', language: 'objc')
+add_project_arguments('-Wno-objc-root-class', '-Werror', '-pedantic', '-Wall', '-fobjc-runtime=gnustep-2.0', language: 'objc')
deps = []
deps += dependency('libobjc') # This is libobjc2, not libobjc - do not be fooled
@@ -24,6 +24,7 @@ test_deps += dependency('libobjc')
test_deps += declare_dependency(link_with: paradox, include_directories: inc, dependencies: deps)
executable('Object', 'tests/Object.m', dependencies: test_deps)
+executable('AutoreleasePool', 'tests/AutoreleasePool.m', objc_args: ['-fobjc-arc'], dependencies: test_deps)
pkg = import('pkgconfig')
pkg.generate(paradox, subdirs: 'paradox', version: '0.0.1', name: 'paradox', filebase: 'paradox', description: 'Application framework for Objective-C built from first principles.', requires: ['libobjc'])
diff --git a/src/Object.m b/src/Object.m
index 7b26bf8..f9a0184 100644
--- a/src/Object.m
+++ b/src/Object.m
@@ -34,6 +34,10 @@
objc_release_fast_np(self);
}
+- (instancetype) autorelease {
+ return objc_autorelease(self);
+}
+
- (instancetype)init {
return self;
}
@@ -42,4 +46,8 @@
object_dispose(self);
}
+- (void)healthCheck {
+ printf("PXObject health check: %p\n", (void*)self);
+}
+
@end
diff --git a/tests/AutoreleasePool.m b/tests/AutoreleasePool.m
new file mode 100644
index 0000000..f0b3599
--- /dev/null
+++ b/tests/AutoreleasePool.m
@@ -0,0 +1,15 @@
+#include <Paradox/Core.h>
+#include <stdio.h>
+
+int main(void) {
+ printf("PXObject autorelease test\n");
+
+ @autoreleasepool {
+ PXObject *object = [PXObject new];
+ printf("created object in autorelease pool\n");
+ printf("attempting healthCheck\n");
+ [object healthCheck];
+ }
+ printf("autorelease pool end\n");
+ printf("test complete\n");
+}