Add support for variadic arguments in WebIDL

This commit is contained in:
Anton Danilkin
2018-09-06 20:00:38 +03:00
parent 3c41d39b16
commit 1c0a34ff8e
7 changed files with 103 additions and 27 deletions

View File

@ -547,13 +547,26 @@ impl<'a, 'b> Rust2Js<'a, 'b> {
return Err(failure::err_msg("a function with no arguments cannot be variadic"));
}
let last_arg = self.js_arguments.len() - 1; // check implies >= 0
self.ret_expr.replace(
"JS",
&format!("{}({}, ...{})",
invoc,
self.js_arguments[..last_arg].join(", "),
self.js_arguments[last_arg])
)
if self.js_arguments.len() != 1 {
self.ret_expr.replace(
"JS",
&format!(
"{}({}, ...{})",
invoc,
self.js_arguments[..last_arg].join(", "),
self.js_arguments[last_arg],
)
)
} else {
self.ret_expr.replace(
"JS",
&format!(
"{}(...{})",
invoc,
self.js_arguments[last_arg],
)
)
}
} else {
self.ret_expr.replace(
"JS",