~sircmpwn/ipcgen

7d2c825b3e78314148d003bb30e769d20a7b6560 — Drew DeVault 2 months ago 5860e5d
gen/server: generate proper reply tag
1 files changed, 7 insertions(+), 1 deletions(-)

M gen/server.ha
M gen/server.ha => gen/server.ha +7 -1
@@ 191,7 191,7 @@ const s_iface_dispatch_method_src: str = `	case $iface_label::$methodid =>
		${rval_store}object._iface.$method(
			object,${caps_in}$params
		);
		match (helios::reply(0${rval_param})) {
		match (helios::reply((0 << 16) | (${caps_out} << 8) | ${params_out}${rval_param})) {
		case void =>
			yield;
		case errors::invalid_cslot =>


@@ 299,11 299,15 @@ fn s_method_dispatch(
	defer io::close(&rval_store)!;
	let rval_param = strio::dynamic();
	defer io::close(&rval_param)!;
	let params_out = 0z;
	if (!(meth.result is ptype) || meth.result as ptype != ptype::VOID) {
		fmt::fprintf(&rval_store, "const rval = ")!;
		fmt::fprintf(&rval_param, ", rval")!;
		params_out += 1;
	};

	// XXX: capabilities out can leak if the caller wants to destroy them
	// after transfer
	tmpl::execute(&st_iface_dispatch_method, out,
		("iface", iface.name),
		("method", meth.name),


@@ 312,5 316,7 @@ fn s_method_dispatch(
		("params", strio::string(&params)),
		("rval_store", strio::string(&rval_store)),
		("rval_param", strio::string(&rval_param)),
		("caps_out", len(meth.caps_out)),
		("params_out", params_out),
	)?;
};