|
| 1 | +use rustpython_vm::{Interpreter}; |
| 2 | + |
| 3 | +unsafe extern "C" { |
| 4 | + fn kv_get(kp: i32, kl: i32, vp: i32, vl: i32) -> i32; |
| 5 | + |
| 6 | + /// kp and kl are the key pointer and length in wasm memory, vp and vl are for the value |
| 7 | + fn kv_put(kp: i32, kl: i32, vp: i32, vl: i32) -> i32; |
| 8 | + |
| 9 | + fn print(p: i32, l: i32) -> i32; |
| 10 | +} |
| 11 | + |
| 12 | +#[unsafe(no_mangle)] |
| 13 | +pub unsafe extern "C" fn eval(s: *const u8, l: usize) -> i32 { |
| 14 | + // let src = unsafe { std::slice::from_raw_parts(s, l) }; |
| 15 | + // let src = std::str::from_utf8(src).unwrap(); |
| 16 | + // TODO: use src |
| 17 | + let src = "1 + 3"; |
| 18 | + |
| 19 | + // 2. Execute Python code |
| 20 | + let interpreter = Interpreter::without_stdlib(Default::default()); |
| 21 | + let result = interpreter.enter(|vm| { |
| 22 | + let scope = vm.new_scope_with_builtins(); |
| 23 | + let res = match vm.run_block_expr(scope, src) { |
| 24 | + Ok(val) => val, |
| 25 | + Err(_) => return Err(-1), // Python execution error |
| 26 | + }; |
| 27 | + let repr_str = match res.repr(vm) { |
| 28 | + Ok(repr) => repr.as_str().to_string(), |
| 29 | + Err(_) => return Err(-1), // Failed to get string representation |
| 30 | + }; |
| 31 | + Ok(repr_str) |
| 32 | + }); |
| 33 | + let result = match result { |
| 34 | + Ok(r) => r, |
| 35 | + Err(code) => return code, |
| 36 | + }; |
| 37 | + |
| 38 | + let msg = format!("eval result: {result}"); |
| 39 | + |
| 40 | + unsafe { |
| 41 | + print( |
| 42 | + msg.as_str().as_ptr() as usize as i32, |
| 43 | + msg.len() as i32, |
| 44 | + ) |
| 45 | + }; |
| 46 | + |
| 47 | + 0 |
| 48 | +} |
| 49 | + |
| 50 | +#[unsafe(no_mangle)] |
| 51 | +unsafe extern "Rust" fn __getrandom_v03_custom( |
| 52 | + _dest: *mut u8, |
| 53 | + _len: usize, |
| 54 | +) -> Result<(), getrandom::Error> { |
| 55 | + // Err(getrandom::Error::UNSUPPORTED) |
| 56 | + |
| 57 | + // WARNING: This function **MUST** perform proper getrandom |
| 58 | + Ok(()) |
| 59 | +} |
0 commit comments