From e746b6d80654ba4e4e26370fe6e4f784ce841d92 Mon Sep 17 00:00:00 2001 From: Matt Mastracci Date: Sat, 1 Jul 2023 18:00:14 -0600 Subject: 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. --- core/examples/wasm.rs | 67 --------------------------------------------------- 1 file changed, 67 deletions(-) delete mode 100644 core/examples/wasm.rs (limited to 'core/examples/wasm.rs') 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); - -fn wasm_memory_unchecked(state: &mut OpState) -> &mut [u8] { - let WasmMemory(global) = state.borrow::(); - // 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::, v8::Local>( - *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::::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("", include_ascii_string!("wasm.js")) - .unwrap(); -} -- cgit v1.2.3