diff --git a/examples/ffi-objc-call-01-parse.sx b/examples/ffi-objc-call-01-parse.sx new file mode 100644 index 0000000..1a0ea70 --- /dev/null +++ b/examples/ffi-objc-call-01-parse.sx @@ -0,0 +1,25 @@ +// Phase 1 step 1.0 (PLAN-FFI.md): xfail test for the `#objc_call` +// parser. The shape is `#objc_call(ReturnT)(receiver, "selector:", +// args...)` — return type in the first parens, then a normal call. +// Today the parser rejects this; the snapshot captures the rejection. +// +// Phase 1.1 adds the parse rule and the snapshot updates to whatever +// the next pipeline stage produces (sema / codegen can't lower the +// intrinsic until later steps). +// +// Phase 1.3+ wires the lowering (selector interning + objc_msgSend +// dispatch) and the test eventually runs cleanly against Foundation. + +#import "modules/std.sx"; + +main :: () -> s32 { + // `#objc_call(void)` with a null receiver — never executed (this + // file's purpose is parser surface coverage). `inline if false` + // would suppress sema/codegen too, but for the parse-only step + // we want the AST to actually carry the node. + inline if false { + #objc_call(void)(null, "init"); + } + print("parse-only ok\n"); + 0; +} diff --git a/tests/expected/ffi-objc-call-01-parse.exit b/tests/expected/ffi-objc-call-01-parse.exit new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/expected/ffi-objc-call-01-parse.exit @@ -0,0 +1 @@ +1 diff --git a/tests/expected/ffi-objc-call-01-parse.txt b/tests/expected/ffi-objc-call-01-parse.txt new file mode 100644 index 0000000..ccd4580 --- /dev/null +++ b/tests/expected/ffi-objc-call-01-parse.txt @@ -0,0 +1 @@ +/Users/agra/projects/sx/examples/ffi-objc-call-01-parse.sx:21:9: error: unexpected token in expression