From 0bde545f24f6dd5677e1536f4148016b2f144292 Mon Sep 17 00:00:00 2001 From: agra Date: Sun, 14 Jun 2026 15:00:37 +0300 Subject: [PATCH] test(ffi-linkage): xfail postfix extern on #objc_class aggregate (Phase 3.0) --- examples/1348-ffi-objc-extern-class.sx | 28 +++++++++++++++++++ .../expected/1348-ffi-objc-extern-class.exit | 1 + .../1348-ffi-objc-extern-class.stderr | 0 .../1348-ffi-objc-extern-class.stdout | 1 + 4 files changed, 30 insertions(+) create mode 100644 examples/1348-ffi-objc-extern-class.sx create mode 100644 examples/expected/1348-ffi-objc-extern-class.exit create mode 100644 examples/expected/1348-ffi-objc-extern-class.stderr create mode 100644 examples/expected/1348-ffi-objc-extern-class.stdout 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