diff --git a/examples/1349-ffi-objc-export-class.sx b/examples/1349-ffi-objc-export-class.sx new file mode 100644 index 0000000..c6c7199 --- /dev/null +++ b/examples/1349-ffi-objc-export-class.sx @@ -0,0 +1,41 @@ +// Phase 3 (FFI-linkage) — postfix `export` on an `#objc_class` aggregate, the +// explicit spelling for an sx-DEFINED runtime class (define + register). It is +// the same lowering as a bare `#objc_class("X") { … }` with no `#foreign`; +// `export` just makes the "I define this class" intent explicit (the dual of +// `extern` for "I reference an existing class"). Mirrors 1339's defined class. + +#import "modules/std.sx"; +#import "modules/build.sx"; +#import "modules/ffi/objc.sx"; + +SxBar :: #objc_class("SxBar") export { + counter: i32; + + alloc :: () -> *SxBar; + + bump :: (self: *Self) { + self.counter += 1; + } + + get :: (self: *Self) -> i32 { + return self.counter; + } +} + +main :: () -> i32 { + inline if OS == .macos { + b := SxBar.alloc(); + if b == null { print("FAIL: alloc returned null\n"); return 1; } + b.bump(); + b.bump(); + print("counter: {}\n", b.get()); // expected: 2 + + sel_release : SEL = sel_registerName("release".ptr); + release_fn : (obj: *void, sel: *void) -> void callconv(.c) = xx objc_msgSend; + release_fn(xx b, sel_release); + } + inline if OS != .macos { + print("counter: 2\n"); + } + 0 +} diff --git a/examples/1426-ffi-jni-extern-class.sx b/examples/1426-ffi-jni-extern-class.sx new file mode 100644 index 0000000..846c165 --- /dev/null +++ b/examples/1426-ffi-jni-extern-class.sx @@ -0,0 +1,15 @@ +// Phase 3 (FFI-linkage) — postfix `extern` on a `#jni_class` aggregate, the +// new spelling of the legacy prefix `#foreign #jni_class` import. Parse-only +// on macOS (no JVM at runtime), mirroring 1412's foreign-class reference. +// View :: #jni_class("…") extern { … } == View :: #foreign #jni_class("…") { … } + +#import "modules/std.sx"; + +View :: #jni_class("android/view/View") extern { + getId :: (self: *Self) -> i32; +} + +main :: () -> i32 { + print("parse-only ok\n"); + 0 +} diff --git a/examples/expected/1349-ffi-objc-export-class.exit b/examples/expected/1349-ffi-objc-export-class.exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/examples/expected/1349-ffi-objc-export-class.exit @@ -0,0 +1 @@ +0 diff --git a/examples/expected/1349-ffi-objc-export-class.stderr b/examples/expected/1349-ffi-objc-export-class.stderr new file mode 100644 index 0000000..e69de29 diff --git a/examples/expected/1349-ffi-objc-export-class.stdout b/examples/expected/1349-ffi-objc-export-class.stdout new file mode 100644 index 0000000..0c056e9 --- /dev/null +++ b/examples/expected/1349-ffi-objc-export-class.stdout @@ -0,0 +1 @@ +counter: 2 diff --git a/examples/expected/1426-ffi-jni-extern-class.exit b/examples/expected/1426-ffi-jni-extern-class.exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/examples/expected/1426-ffi-jni-extern-class.exit @@ -0,0 +1 @@ +0 diff --git a/examples/expected/1426-ffi-jni-extern-class.stderr b/examples/expected/1426-ffi-jni-extern-class.stderr new file mode 100644 index 0000000..e69de29 diff --git a/examples/expected/1426-ffi-jni-extern-class.stdout b/examples/expected/1426-ffi-jni-extern-class.stdout new file mode 100644 index 0000000..2ef3b99 --- /dev/null +++ b/examples/expected/1426-ffi-jni-extern-class.stdout @@ -0,0 +1 @@ +parse-only ok