feat: works

This commit is contained in:
2023-01-22 00:41:15 +08:00
parent 2de77003fb
commit 49b6d71886
3 changed files with 55 additions and 20 deletions

View File

@@ -15,8 +15,8 @@ fn main() -> Result<()> {
let memory = instance.get_memory(&mut store, "memory").expect("SHOULD NOT HAPPEN");
let malloc = instance.get_typed_func::<i32, i32>(&mut store, "malloc")?;
let free = instance.get_typed_func::<(i32, i32), ()>(&mut store, "free")?;
let eval = instance.get_typed_func::<(i32, i32), (i32, i32)>(&mut store, "eval")?;
let free = instance.get_typed_func::<i32, ()>(&mut store, "free")?;
let eval = instance.get_typed_func::<i32, i32>(&mut store, "eval")?;
let js = "1+2";
let js_bytes = js.as_bytes();
@@ -24,10 +24,26 @@ fn main() -> Result<()> {
let ptr = malloc.call(&mut store, js.as_bytes().len() as i32)?;
let memory_data_mut = memory.data_mut(&mut store);
for i in 0..js_bytes_len {
memory_data_mut[ptr as usize + i] = js_bytes[i];
memory_data_mut[4 + ptr as usize + i] = js_bytes[i];
}
let eval_result = eval.call(&mut store, (ptr, js_bytes_len as i32))?;
let eval_result = eval.call(&mut store, ptr)?;
println!("Eval result: {:?}", eval_result);
let memory = instance.get_memory(&mut store, "memory").expect("SHOULD NOT HAPPEN");
let memory_data_mut = memory.data_mut(&mut store);
let mut a = [0_u8; 4];
a[0] = memory_data_mut[eval_result as usize + 0];
a[1] = memory_data_mut[eval_result as usize + 1];
a[2] = memory_data_mut[eval_result as usize + 2];
a[3] = memory_data_mut[eval_result as usize + 3];
let aa = u32::from_be_bytes(a);
println!("Len: {}", aa);
let mut s = Vec::with_capacity(aa as usize);
for i in 0..aa {
s.push(memory_data_mut[eval_result as usize + 4 + i as usize]);
}
let ss = unsafe { String::from_utf8_unchecked(s) };
println!("Result: {}", ss);
Ok(())
}