diff --git a/examples/1348-ffi-objc-extern-class.sx b/examples/1348-ffi-objc-extern-class.sx new file mode 100644 index 0000000..8b059af --- /dev/null +++ b/examples/1348-ffi-objc-extern-class.sx @@ -0,0 +1,28 @@ +// Phase 3.0 (FFI-linkage) — postfix `extern` on an aggregate (`#objc_class`) +// is the new spelling of the legacy prefix `#foreign #objc_class` import. +// Mirrors 1306's foreign-class chained dispatch with the new syntax: +// Name :: #objc_class("X") extern { … } == Name :: #foreign #objc_class("X") { … } +// +// Red until 3.1 wires the postfix-extern aggregate path through the parser +// + lowering (maps `extern` → reference, same as `#foreign`). + +#import "modules/std.sx"; +#import "modules/build.sx"; + +NSObject :: #objc_class("NSObject") extern { + alloc :: () -> *NSObject; + init :: (self: *Self) -> *Self; +} + +main :: () -> i32 { + inline if OS == .macos { + a := NSObject.alloc().init(); + if a != null { + print("extern-class dispatch ok\n"); + } + } + inline if OS != .macos { + print("extern-class dispatch ok\n"); + } + 0 +} diff --git a/examples/expected/1348-ffi-objc-extern-class.exit b/examples/expected/1348-ffi-objc-extern-class.exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/examples/expected/1348-ffi-objc-extern-class.exit @@ -0,0 +1 @@ +0 diff --git a/examples/expected/1348-ffi-objc-extern-class.stderr b/examples/expected/1348-ffi-objc-extern-class.stderr new file mode 100644 index 0000000..e69de29 diff --git a/examples/expected/1348-ffi-objc-extern-class.stdout b/examples/expected/1348-ffi-objc-extern-class.stdout new file mode 100644 index 0000000..83ec38a --- /dev/null +++ b/examples/expected/1348-ffi-objc-extern-class.stdout @@ -0,0 +1 @@ +extern-class dispatch ok