mirror of
https://github.com/rustwasm/wasm-bindgen.git
synced 2024-11-28 05:52:21 +03:00
Use a length
accessor instead of byteLength
This way we should be naturally compatible with normal JS arrays that get passed in as well! Closes #133
This commit is contained in:
parent
bd755c0378
commit
0e032955fb
@ -672,7 +672,7 @@ impl<'a> Context<'a> {
|
|||||||
self.expose_uint8_memory();
|
self.expose_uint8_memory();
|
||||||
self.global(&format!("
|
self.global(&format!("
|
||||||
function passArray8ToWasm(arg) {{
|
function passArray8ToWasm(arg) {{
|
||||||
const ptr = wasm.__wbindgen_malloc(arg.byteLength);
|
const ptr = wasm.__wbindgen_malloc(arg.length);
|
||||||
getUint8Memory().set(arg, ptr);
|
getUint8Memory().set(arg, ptr);
|
||||||
return [ptr, arg.length];
|
return [ptr, arg.length];
|
||||||
}}
|
}}
|
||||||
@ -687,7 +687,7 @@ impl<'a> Context<'a> {
|
|||||||
self.expose_uint16_memory();
|
self.expose_uint16_memory();
|
||||||
self.global(&format!("
|
self.global(&format!("
|
||||||
function passArray16ToWasm(arg) {{
|
function passArray16ToWasm(arg) {{
|
||||||
const ptr = wasm.__wbindgen_malloc(arg.byteLength);
|
const ptr = wasm.__wbindgen_malloc(arg.length * 2);
|
||||||
getUint16Memory().set(arg, ptr / 2);
|
getUint16Memory().set(arg, ptr / 2);
|
||||||
return [ptr, arg.length];
|
return [ptr, arg.length];
|
||||||
}}
|
}}
|
||||||
@ -702,7 +702,7 @@ impl<'a> Context<'a> {
|
|||||||
self.expose_uint32_memory();
|
self.expose_uint32_memory();
|
||||||
self.global(&format!("
|
self.global(&format!("
|
||||||
function passArray32ToWasm(arg) {{
|
function passArray32ToWasm(arg) {{
|
||||||
const ptr = wasm.__wbindgen_malloc(arg.byteLength);
|
const ptr = wasm.__wbindgen_malloc(arg.length * 4);
|
||||||
getUint32Memory().set(arg, ptr / 4);
|
getUint32Memory().set(arg, ptr / 4);
|
||||||
return [ptr, arg.length];
|
return [ptr, arg.length];
|
||||||
}}
|
}}
|
||||||
@ -716,7 +716,7 @@ impl<'a> Context<'a> {
|
|||||||
self.required_internal_exports.insert("__wbindgen_malloc");
|
self.required_internal_exports.insert("__wbindgen_malloc");
|
||||||
self.global(&format!("
|
self.global(&format!("
|
||||||
function passArrayF32ToWasm(arg) {{
|
function passArrayF32ToWasm(arg) {{
|
||||||
const ptr = wasm.__wbindgen_malloc(arg.byteLength);
|
const ptr = wasm.__wbindgen_malloc(arg.length * 4);
|
||||||
new Float32Array(wasm.memory.buffer).set(arg, ptr / 4);
|
new Float32Array(wasm.memory.buffer).set(arg, ptr / 4);
|
||||||
return [ptr, arg.length];
|
return [ptr, arg.length];
|
||||||
}}
|
}}
|
||||||
@ -730,7 +730,7 @@ impl<'a> Context<'a> {
|
|||||||
self.required_internal_exports.insert("__wbindgen_malloc");
|
self.required_internal_exports.insert("__wbindgen_malloc");
|
||||||
self.global(&format!("
|
self.global(&format!("
|
||||||
function passArrayF64ToWasm(arg) {{
|
function passArrayF64ToWasm(arg) {{
|
||||||
const ptr = wasm.__wbindgen_malloc(arg.byteLength);
|
const ptr = wasm.__wbindgen_malloc(arg.length * 8);
|
||||||
new Float64Array(wasm.memory.buffer).set(arg, ptr / 8);
|
new Float64Array(wasm.memory.buffer).set(arg, ptr / 8);
|
||||||
return [ptr, arg.length];
|
return [ptr, arg.length];
|
||||||
}}
|
}}
|
||||||
|
@ -228,3 +228,53 @@ fn import() {
|
|||||||
"#)
|
"#)
|
||||||
.test();
|
.test();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn pass_array_works() {
|
||||||
|
project()
|
||||||
|
.file("src/lib.rs", r#"
|
||||||
|
#![feature(proc_macro, wasm_custom_section, wasm_import_module)]
|
||||||
|
|
||||||
|
extern crate wasm_bindgen;
|
||||||
|
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
|
macro_rules! doit {
|
||||||
|
($(($rust:ident, $i:ident))*) => ($(
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub fn $rust(a: &[$i]) {
|
||||||
|
assert_eq!(a.len(), 2);
|
||||||
|
assert_eq!(a[0], 1 as $i);
|
||||||
|
assert_eq!(a[1], 2 as $i);
|
||||||
|
}
|
||||||
|
)*)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
doit! {
|
||||||
|
(rust_i8, i8)
|
||||||
|
(rust_u8, u8)
|
||||||
|
(rust_i16, i16)
|
||||||
|
(rust_u16, u16)
|
||||||
|
(rust_i32, i32)
|
||||||
|
(rust_u32, u32)
|
||||||
|
(rust_f32, f32)
|
||||||
|
(rust_f64, f64)
|
||||||
|
}
|
||||||
|
"#)
|
||||||
|
.file("test.js", r#"
|
||||||
|
const wasm = require("./out");
|
||||||
|
|
||||||
|
module.exports.test = function() {
|
||||||
|
wasm.rust_i8([1, 2]);
|
||||||
|
wasm.rust_u8([1, 2]);
|
||||||
|
wasm.rust_i16([1, 2]);
|
||||||
|
wasm.rust_u16([1, 2]);
|
||||||
|
wasm.rust_i32([1, 2]);
|
||||||
|
wasm.rust_u32([1, 2]);
|
||||||
|
wasm.rust_f32([1, 2]);
|
||||||
|
wasm.rust_f64([1, 2]);
|
||||||
|
};
|
||||||
|
"#)
|
||||||
|
.test();
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user