diff --git a/examples/ffi-objc-call-02-void-return.sx b/examples/ffi-objc-call-02-void-return.sx new file mode 100644 index 0000000..86e114f --- /dev/null +++ b/examples/ffi-objc-call-02-void-return.sx @@ -0,0 +1,25 @@ +// Phase 1 step 1.3 (PLAN-FFI.md): smallest end-to-end `#objc_call`. +// Void return, nil receiver — Obj-C runtime guarantees that messages +// to nil are no-ops with a zero result, so we don't need to set up +// a real object graph to exercise the lowering surface. +// +// Today (step 1.3, test-add): codegen rejects the FfiIntrinsicCall +// AST node. Snapshot pins the failure mode. +// Next (step 1.3, make-green): emit_llvm.zig synthesizes +// %sel = call ptr @sel_registerName(ptr @"sel:init") +// call void @objc_msgSend(ptr null, ptr %sel) +// per call site (no selector interning until step 1.5). + +#import "modules/std.sx"; +#import "modules/compiler.sx"; + +main :: () -> s32 { + inline if OS == .macos { + #objc_call(void)(null, "init"); + print("ok\n"); + } + inline if OS != .macos { + print("skipped (not macos)\n"); + } + 0; +} diff --git a/tests/expected/ffi-objc-call-02-void-return.exit b/tests/expected/ffi-objc-call-02-void-return.exit new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/expected/ffi-objc-call-02-void-return.exit @@ -0,0 +1 @@ +1 diff --git a/tests/expected/ffi-objc-call-02-void-return.txt b/tests/expected/ffi-objc-call-02-void-return.txt new file mode 100644 index 0000000..2214600 --- /dev/null +++ b/tests/expected/ffi-objc-call-02-void-return.txt @@ -0,0 +1 @@ +/Users/agra/projects/sx/examples/ffi-objc-call-02-void-return.sx:18:9: error: unresolved: 'unknown_expr'