From 99932f6422e2ce000d54dd38cb63c6b55058337c Mon Sep 17 00:00:00 2001 From: Robby Madruga Date: Thu, 9 Aug 2018 13:12:27 -0700 Subject: [PATCH] Change Deno::new to return an owned Box --- src/main.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index db923a31d4..49b7f09934 100644 --- a/src/main.rs +++ b/src/main.rs @@ -102,24 +102,26 @@ pub struct Deno { static DENO_INIT: std::sync::Once = std::sync::ONCE_INIT; impl Deno { - fn new<'a>() -> &'a mut Deno { + fn new() -> Box { DENO_INIT.call_once(|| { unsafe { binding::deno_init() }; }); - let deno_box = Box::new(Deno { + let mut deno_box = Box::new(Deno { ptr: 0 as *const binding::DenoC, dir: deno_dir::DenoDir::new(None).unwrap(), rt: tokio::runtime::current_thread::Runtime::new().unwrap(), timers: HashMap::new(), }); - let deno: &'a mut Deno = Box::leak(deno_box); - let external_ptr = deno as *mut _ as *const c_void; - let internal_deno_ptr = unsafe { - binding::deno_new(external_ptr, binding::deno_handle_msg_from_js) + + (*deno_box).ptr = unsafe { + binding::deno_new( + deno_box.as_ref() as *const _ as *const c_void, + binding::deno_handle_msg_from_js, + ) }; - deno.ptr = internal_deno_ptr; - deno + + deno_box } fn execute( @@ -205,7 +207,7 @@ fn main() { println!("version: {}", version); */ - let d = Deno::new(); + let mut d = Deno::new(); d.execute("deno_main.js", "denoMain();") .unwrap_or_else(|err| {