Step 5.1.A of the FFI plan (variadic heterogeneous type packs → generic `Into(Block)` impl). The eventual step-5.2 impl body will read `#insert build_block_convert($args, $R);` to emit a per-shape `__invoke` `callconv(.c)` trampoline + Block literal. 5.1.A pins the builder's expected output verbatim across three void-returning pack shapes (0, 1, 2 args) plus one non-void shape (`f64 -> s32`) that exercises the `return typed_fn(...)` branch. Today: 4× "unresolved 'build_block_convert'" diagnostics — the builder isn't in stdlib yet. The next commit adds it to `library/modules/std/objc_block.sx` and the test flips green. The per-position type names in the emitted source come from `type_name(args[i])`; the slice itself is `[]Type` flowing through the new-form variadic + bare-`$args` path that the recent issues-0048/0049/0050 fixes unblocked.
11 lines
1.4 KiB
Plaintext
11 lines
1.4 KiB
Plaintext
--- void / 0 args ---
|
|
__invoke :: (block_self: *Block) -> void callconv(.c) { typed_fn : (*void) -> void = xx block_self.sx_fn; typed_fn(block_self.sx_env); } return .{ isa = @_NSConcreteStackBlock, flags = 0, reserved = 0, invoke = xx @__invoke, descriptor = xx @__sx_block_descriptor, sx_env = self.env, sx_fn = self.fn_ptr, };
|
|
--- void / bool ---
|
|
__invoke :: (block_self: *Block, arg0: bool) -> void callconv(.c) { typed_fn : (*void, bool) -> void = xx block_self.sx_fn; typed_fn(block_self.sx_env, arg0); } return .{ isa = @_NSConcreteStackBlock, flags = 0, reserved = 0, invoke = xx @__invoke, descriptor = xx @__sx_block_descriptor, sx_env = self.env, sx_fn = self.fn_ptr, };
|
|
--- void / s64, string ---
|
|
__invoke :: (block_self: *Block, arg0: s64, arg1: string) -> void callconv(.c) { typed_fn : (*void, s64, string) -> void = xx block_self.sx_fn; typed_fn(block_self.sx_env, arg0, arg1); } return .{ isa = @_NSConcreteStackBlock, flags = 0, reserved = 0, invoke = xx @__invoke, descriptor = xx @__sx_block_descriptor, sx_env = self.env, sx_fn = self.fn_ptr, };
|
|
--- s32 / f64 ---
|
|
__invoke :: (block_self: *Block, arg0: f64) -> s32 callconv(.c) { typed_fn : (*void, f64) -> s32 = xx block_self.sx_fn; return typed_fn(block_self.sx_env, arg0); } return .{ isa = @_NSConcreteStackBlock, flags = 0, reserved = 0, invoke = xx @__invoke, descriptor = xx @__sx_block_descriptor, sx_env = self.env, sx_fn = self.fn_ptr, };
|
|
--- build done ---
|
|
rt
|