Skip to content

Commit

Permalink
Update webidl_ty field in multi-value transform (#1839)
Browse files Browse the repository at this point in the history
* Reduce indentation in interface types processing

Just a small stylistic change

* Update `webidl_ty` field in multi-value transform

When we're emitting a bindings section we need to be sure to update the
listed type of the binding in addition to the actual binding
expressions. This should help remove the stray return pointer being
listed there by accident!
  • Loading branch information
alexcrichton authored Oct 29, 2019
1 parent 0397e52 commit 9b8711a
Showing 1 changed file with 24 additions and 14 deletions.
38 changes: 24 additions & 14 deletions crates/cli-support/src/webidl/standard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,22 +54,32 @@ pub fn add_multi_value(
// Finally, unset `return_via_outptr`, fix up its incoming bindings'
// argument numberings, and update its function type.
for (id, binding) in &mut bindings.exports {
if binding.return_via_outptr.take().is_some() {
if binding.incoming.is_empty() {
bail!("missing incoming binding expression for return pointer parameter");
}
if !is_ret_ptr_bindings(binding.incoming.remove(0)) {
bail!("unexpected incoming binding expression for return pointer parameter");
}
if binding.return_via_outptr.take().is_none() {
continue;
}
if binding.incoming.is_empty() {
bail!("missing incoming binding expression for return pointer parameter");
}
if !is_ret_ptr_bindings(binding.incoming.remove(0)) {
bail!("unexpected incoming binding expression for return pointer parameter");
}

fixup_binding_argument_gets(&mut binding.incoming)?;
fixup_binding_argument_gets(&mut binding.incoming)?;

let func = match module.exports.get(*id).item {
walrus::ExportItem::Function(f) => f,
_ => unreachable!(),
};
binding.wasm_ty = module.funcs.get(func).ty();
}
let func = match module.exports.get(*id).item {
walrus::ExportItem::Function(f) => f,
_ => unreachable!(),
};
binding.wasm_ty = module.funcs.get(func).ty();

// Be sure to delete the out-param pointer from the WebIDL type as well.
let webidl_ty = bindings
.types
.get::<ast::WebidlFunction>(binding.webidl_ty)
.unwrap();
let mut new_ty = webidl_ty.clone();
new_ty.params.remove(0);
binding.webidl_ty = bindings.types.insert(new_ty);
}

Ok(())
Expand Down

0 comments on commit 9b8711a

Please sign in to comment.