diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-07-01 18:00:14 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-02 00:00:14 +0000 |
commit | e746b6d80654ba4e4e26370fe6e4f784ce841d92 (patch) | |
tree | 153ffad92a96126b9ab8e906dcdabf7648755931 /core/examples/wasm.rs | |
parent | b9c0e7cd550ab14fa7da7e33ed87cbeeeb9785a0 (diff) |
refactor(core): Extract deno_core (#19658)
`deno_core` is moving out! You'll find it at
https://github.com/denoland/deno_core/ once this PR lands.
Diffstat (limited to 'core/examples/wasm.rs')
-rw-r--r-- | core/examples/wasm.rs | 67 |
1 files changed, 0 insertions, 67 deletions
diff --git a/core/examples/wasm.rs b/core/examples/wasm.rs deleted file mode 100644 index 5d5c5f6ff..000000000 --- a/core/examples/wasm.rs +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -use deno_core::op; -use deno_core::Extension; -use deno_core::JsRuntime; -use deno_core::RuntimeOptions; -use std::mem::transmute; -use std::ptr::NonNull; - -// This is a hack to make the `#[op]` macro work with -// deno_core examples. -// You can remove this: - -use deno_core::*; - -struct WasmMemory(NonNull<v8::WasmMemoryObject>); - -fn wasm_memory_unchecked(state: &mut OpState) -> &mut [u8] { - let WasmMemory(global) = state.borrow::<WasmMemory>(); - // SAFETY: `v8::Local` is always non-null pointer; the `HandleScope` is - // already on the stack, but we don't have access to it. - let memory_object = unsafe { - transmute::<NonNull<v8::WasmMemoryObject>, v8::Local<v8::WasmMemoryObject>>( - *global, - ) - }; - let backing_store = memory_object.buffer().get_backing_store(); - let ptr = backing_store.data().unwrap().as_ptr() as *mut u8; - let len = backing_store.byte_length(); - // SAFETY: `ptr` is a valid pointer to `len` bytes. - unsafe { std::slice::from_raw_parts_mut(ptr, len) } -} - -#[op(wasm)] -fn op_wasm(state: &mut OpState, memory: Option<&mut [u8]>) { - let memory = memory.unwrap_or_else(|| wasm_memory_unchecked(state)); - memory[0] = 69; -} - -#[op(v8)] -fn op_set_wasm_mem( - scope: &mut v8::HandleScope, - state: &mut OpState, - memory: serde_v8::Value, -) { - let memory = - v8::Local::<v8::WasmMemoryObject>::try_from(memory.v8_value).unwrap(); - let global = v8::Global::new(scope, memory); - state.put(WasmMemory(global.into_raw())); -} - -fn main() { - // Build a deno_core::Extension providing custom ops - let ext = Extension::builder("my_ext") - .ops(vec![op_wasm::decl(), op_set_wasm_mem::decl()]) - .build(); - - // Initialize a runtime instance - let mut runtime = JsRuntime::new(RuntimeOptions { - extensions: vec![ext], - ..Default::default() - }); - - runtime - .execute_script("<usage>", include_ascii_string!("wasm.js")) - .unwrap(); -} |