From 4a048d34fd9c3323fad1435c3ba04f495cf8d69c Mon Sep 17 00:00:00 2001 From: agra Date: Mon, 25 May 2026 21:16:32 +0300 Subject: [PATCH] ffi M1.0 (2/3, xfail): '=>' body inside '#objc_class' member MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit parseForeignClassDecl ([src/parser.zig:1262]) accepts ';' (declaration) or '{ ... }' (block body) but not '=>' for member methods. The arrow form, which parseFnDecl ([src/parser.zig:1647]) already handles for top-level/struct decls (M1.0 1/3), surfaces 'expected ;' at the arrow today. Snapshot pins that error so the next commit (the parser extension) shows up as a single diagnostic→runtime-output diff in 140-expression-bodied-objc-method.{txt,exit}. --- examples/140-expression-bodied-objc-method.sx | 20 +++++++++++++++++++ .../140-expression-bodied-objc-method.exit | 1 + .../140-expression-bodied-objc-method.txt | 1 + 3 files changed, 22 insertions(+) create mode 100644 examples/140-expression-bodied-objc-method.sx create mode 100644 tests/expected/140-expression-bodied-objc-method.exit create mode 100644 tests/expected/140-expression-bodied-objc-method.txt diff --git a/examples/140-expression-bodied-objc-method.sx b/examples/140-expression-bodied-objc-method.sx new file mode 100644 index 0000000..38ee882 --- /dev/null +++ b/examples/140-expression-bodied-objc-method.sx @@ -0,0 +1,20 @@ +// M1.0 (xfail) — '=>' expression-body form inside '#objc_class' +// member methods. +// +// Today: parseForeignClassDecl ([src/parser.zig:1262]) accepts ';' +// (declaration) or '{ ... }' (block body) but not '=>'. Trying +// '=>' surfaces 'expected ;' at the arrow. +// +// Next commit extends the member parser to accept the arrow +// form, mirroring the existing parseFnDecl ('=>') arm, and this +// snapshot flips from a parser error to '42\n'. + +#import "modules/std.sx"; + +SxFoo :: #objc_class("SxFoo") { + greet :: (self: *Self) -> s32 => 42; +} + +main :: () -> s32 { + 0; +} diff --git a/tests/expected/140-expression-bodied-objc-method.exit b/tests/expected/140-expression-bodied-objc-method.exit new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/expected/140-expression-bodied-objc-method.exit @@ -0,0 +1 @@ +1 diff --git a/tests/expected/140-expression-bodied-objc-method.txt b/tests/expected/140-expression-bodied-objc-method.txt new file mode 100644 index 0000000..57d4f6e --- /dev/null +++ b/tests/expected/140-expression-bodied-objc-method.txt @@ -0,0 +1 @@ +/Users/agra/projects/sx/examples/140-expression-bodied-objc-method.sx:15:35: error: expected ';'