@@ 94,8 94,6 @@ fn s_method_fntype(
iface: *ast::interface,
meth: *ast::method,
) (void | io::error) = {
- assert(len(meth.caps_out) == 0); // TODO
-
let caps_in = strio::dynamic();
defer io::close(&caps_in)!;
@@ 119,6 117,24 @@ fn s_method_fntype(
fmt::fprint(¶ms, ", ")!;
};
};
+ if (len(meth.caps_out) != 0) {
+ fmt::fprint(¶ms, ", ")!;
+ };
+ for (let i = 0z; i < len(meth.caps_out); i += 1) {
+ const cap = &meth.caps_out[i];
+ assert(!cap.variadic); // TODO
+ if (cap.name != "") {
+ fmt::fprintf(¶ms, "{}: *helios::cap", cap.name)!;
+ } else if (len(meth.caps_out) == 1) {
+ fmt::fprintf(¶ms, "out: *helios::cap")!;
+ } else {
+ fmt::fprintf(¶ms, "out{}: *helios::cap", i)!;
+ };
+
+ if (i + 1 < len(meth.caps_out)) {
+ fmt::fprint(¶ms, ", ")!;
+ };
+ };
let result = strio::dynamic();
defer io::close(&result)!;
@@ 271,6 287,12 @@ fn s_method_dispatch(
ipc_type(¶ms, ¶m.param_type)!;
fmt::fprint(¶ms, ",")!;
};
+ for (let i = 0z; i < len(meth.caps_out); i += 1) {
+ const cap = &meth.caps_out[i];
+ assert(!cap.variadic); // TODO
+ fmt::fprint(¶ms, "\n\t\t\t")!;
+ fmt::fprintf(¶ms, "&rt::ipcbuf.params[{}],", i)!;
+ };
let rval_store = strio::dynamic();
defer io::close(&rval_store)!;