mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-06-17 23:11:23 +00:00
Support passing booleans back and forth
This commit is contained in:
@ -128,6 +128,14 @@ impl Js {
|
||||
arg_conversions.push_str(&format!("_assertNum({});\n", name));
|
||||
pass(&name)
|
||||
}
|
||||
shared::Type::Boolean => {
|
||||
dst.push_str("boolean");
|
||||
self.expose_assert_bool();
|
||||
arg_conversions.push_str(&format!("\
|
||||
const bool{i} = _assertBoolean({name});
|
||||
", name = name, i = i));
|
||||
pass(&format!("bool{i}", i = i))
|
||||
}
|
||||
shared::Type::BorrowedStr |
|
||||
shared::Type::String => {
|
||||
dst.push_str("string");
|
||||
@ -191,6 +199,10 @@ impl Js {
|
||||
dst.push_str("number");
|
||||
format!("return ret;")
|
||||
}
|
||||
Some(&shared::Type::Boolean) => {
|
||||
dst.push_str("boolean");
|
||||
format!("return ret != 0;")
|
||||
}
|
||||
Some(&shared::Type::JsObject) => {
|
||||
dst.push_str("any");
|
||||
self.expose_take_object();
|
||||
@ -270,6 +282,11 @@ impl Js {
|
||||
invocation.push_str(&format!("arg{}", i));
|
||||
dst.push_str(&format!("arg{}: number", i));
|
||||
}
|
||||
shared::Type::Boolean => {
|
||||
ts_dst.push_str("boolean");
|
||||
invocation.push_str(&format!("arg{} != 0", i));
|
||||
dst.push_str(&format!("arg{}: number", i));
|
||||
}
|
||||
shared::Type::BorrowedStr => {
|
||||
ts_dst.push_str("string");
|
||||
self.expose_get_string_from_wasm();
|
||||
@ -298,11 +315,18 @@ impl Js {
|
||||
}
|
||||
ts_dst.push_str("): ");
|
||||
dst.push_str("): ");
|
||||
let mut convert = None;
|
||||
match import.ret {
|
||||
Some(shared::Type::Number) => {
|
||||
ts_dst.push_str("number");
|
||||
dst.push_str("number");
|
||||
}
|
||||
Some(shared::Type::Boolean) => {
|
||||
ts_dst.push_str("boolean");
|
||||
dst.push_str("number");
|
||||
convert = Some("_assertBoolean");
|
||||
self.expose_assert_bool();
|
||||
}
|
||||
None => {
|
||||
ts_dst.push_str("void");
|
||||
dst.push_str("void");
|
||||
@ -311,7 +335,12 @@ impl Js {
|
||||
}
|
||||
ts_dst.push_str("\n");
|
||||
dst.push_str(" {\n");
|
||||
dst.push_str(&format!("return _imports.{}({});\n}}", import.name, invocation));
|
||||
let invoc = format!("_imports.{}({})", import.name, invocation);
|
||||
let invoc = match convert {
|
||||
Some(s) => format!("{}({})", s, invoc),
|
||||
None => invoc,
|
||||
};
|
||||
dst.push_str(&format!("return {};\n}}", invoc));
|
||||
|
||||
self.imports.push((import.name.clone(), dst, ts_dst));
|
||||
}
|
||||
@ -773,6 +802,23 @@ impl Js {
|
||||
");
|
||||
}
|
||||
|
||||
fn expose_assert_bool(&mut self) {
|
||||
if !self.exposed_globals.insert("assert_bool") {
|
||||
return
|
||||
}
|
||||
self.globals.push_str("\
|
||||
function _assertBoolean(n: boolean): number {
|
||||
if (typeof(n) !== 'boolean')
|
||||
throw new Error('expected a boolean argument');
|
||||
if (n) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
");
|
||||
}
|
||||
|
||||
fn expose_pass_string_to_wasm(&mut self) {
|
||||
if !self.exposed_globals.insert("pass_string_to_wasm") {
|
||||
return
|
||||
|
Reference in New Issue
Block a user