mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-06-12 20:41:24 +00:00
Merge pull request #1397 from RReverser/option-char-abi
Simplify ABI for Option<char>
This commit is contained in:
@ -343,9 +343,8 @@ impl<'a, 'b> Js2Rust<'a, 'b> {
|
||||
self.cx.expose_is_like_none();
|
||||
self.js_arguments
|
||||
.push((name.clone(), "string | undefined".to_string()));
|
||||
self.rust_arguments.push(format!("!isLikeNone({0})", name));
|
||||
self.rust_arguments
|
||||
.push(format!("isLikeNone({0}) ? 0 : {0}.codePointAt(0)", name));
|
||||
.push(format!("isLikeNone({0}) ? 0xFFFFFF : {0}.codePointAt(0)", name));
|
||||
return Ok(self);
|
||||
}
|
||||
Descriptor::Enum { hole } => {
|
||||
@ -633,17 +632,10 @@ impl<'a, 'b> Js2Rust<'a, 'b> {
|
||||
}
|
||||
Descriptor::Char => {
|
||||
self.ret_ty = "string | undefined".to_string();
|
||||
self.cx.expose_global_argument_ptr()?;
|
||||
self.cx.expose_uint32_memory();
|
||||
self.prelude("const retptr = globalArgumentPtr();");
|
||||
self.rust_arguments.insert(0, "retptr".to_string());
|
||||
self.ret_expr = "
|
||||
RET;
|
||||
const present = getUint32Memory()[retptr / 4];
|
||||
const value = getUint32Memory()[retptr / 4 + 1];
|
||||
return present === 0 ? undefined : String.fromCodePoint(value);
|
||||
"
|
||||
.to_string();
|
||||
const ret = RET;
|
||||
return ret === 0xFFFFFF ? undefined : String.fromCodePoint(ret);
|
||||
".to_string();
|
||||
return Ok(self);
|
||||
}
|
||||
Descriptor::Enum { hole } => {
|
||||
|
@ -215,12 +215,8 @@ impl<'a, 'b> Rust2Js<'a, 'b> {
|
||||
return Ok(());
|
||||
}
|
||||
Descriptor::Char => {
|
||||
let value = self.shim_argument();
|
||||
self.js_arguments.push(format!(
|
||||
"{present} === 0 ? undefined : String.fromCodePoint({value})",
|
||||
value = value,
|
||||
present = abi,
|
||||
));
|
||||
self.js_arguments
|
||||
.push(format!("{0} === 0xFFFFFF ? undefined : String.fromCodePoint({0})", abi));
|
||||
return Ok(());
|
||||
}
|
||||
Descriptor::RustStruct(ref class) => {
|
||||
@ -471,13 +467,9 @@ impl<'a, 'b> Rust2Js<'a, 'b> {
|
||||
return Ok(());
|
||||
}
|
||||
Descriptor::Char => {
|
||||
self.cx.expose_is_like_none();
|
||||
self.cx.expose_uint32_memory();
|
||||
self.shim_arguments.insert(0, "ret".to_string());
|
||||
self.ret_expr = "
|
||||
const val = JS;
|
||||
getUint32Memory()[ret / 4] = !isLikeNone(val);
|
||||
getUint32Memory()[ret / 4 + 1] = isLikeNone(val) ? 0 : val.codePointAt(0);
|
||||
return isLikeNone(val) ? 0xFFFFFF : val.codePointAt(0);
|
||||
"
|
||||
.to_string();
|
||||
return Ok(());
|
||||
|
Reference in New Issue
Block a user