diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-01-05 20:52:03 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-05 20:52:03 +0100 |
commit | a29eeaf326681fc44eefa099ba04c525e5af5010 (patch) | |
tree | 71f8d83f15170b27667e707a868f9e4beb4586fa /core/libdeno.rs | |
parent | c1d99ebeb99cce0bd061f8220f8980cc81bec3f5 (diff) |
libdeno: don't pass pointers between core::Isolate and libdeno (#3602)
Diffstat (limited to 'core/libdeno.rs')
-rw-r--r-- | core/libdeno.rs | 99 |
1 files changed, 19 insertions, 80 deletions
diff --git a/core/libdeno.rs b/core/libdeno.rs index c6e47d0bb..eea8cfd41 100644 --- a/core/libdeno.rs +++ b/core/libdeno.rs @@ -27,16 +27,16 @@ pub type OpId = u32; #[allow(non_camel_case_types)] pub type isolate = DenoIsolate; -struct ModuleInfo { - main: bool, - name: String, - handle: v8::Global<v8::Module>, - import_specifiers: Vec<String>, +pub struct ModuleInfo { + pub main: bool, + pub name: String, + pub handle: v8::Global<v8::Module>, + pub import_specifiers: Vec<String>, } pub struct DenoIsolate { isolate_: Option<v8::OwnedIsolate>, - last_exception_: Option<String>, + pub last_exception_: Option<String>, last_exception_handle_: v8::Global<v8::Value>, context_: v8::Global<v8::Context>, mods_: HashMap<deno_mod, ModuleInfo>, @@ -208,7 +208,7 @@ impl DenoIsolate { id } - fn get_module_info(&self, id: deno_mod) -> Option<&ModuleInfo> { + pub fn get_module_info(&self, id: deno_mod) -> Option<&ModuleInfo> { if id == 0 { return None; } @@ -925,7 +925,7 @@ lazy_static! { ]); } -pub unsafe fn deno_new_snapshotter(config: deno_config) -> *mut isolate { +pub unsafe fn deno_new_snapshotter(config: deno_config) -> *mut DenoIsolate { assert_ne!(config.will_snapshot, 0); // TODO(ry) Support loading snapshots before snapshotting. assert!(config.load_snapshot.is_none()); @@ -1382,7 +1382,7 @@ fn initialize_context<'a>( context.exit(); } -pub unsafe fn deno_new(config: deno_config) -> *mut isolate { +pub unsafe fn deno_new(config: deno_config) -> *mut DenoIsolate { if config.will_snapshot != 0 { return deno_new_snapshotter(config); } @@ -1416,21 +1416,7 @@ pub unsafe fn deno_new(config: deno_config) -> *mut isolate { Box::into_raw(d) } -pub unsafe fn deno_delete(i: *mut DenoIsolate) { - let deno_isolate = unsafe { Box::from_raw(i as *mut DenoIsolate) }; - drop(deno_isolate); -} - -pub unsafe fn deno_last_exception(i: *mut DenoIsolate) -> Option<String> { - (*i).last_exception_.clone() -} - -pub unsafe fn deno_clear_last_exception(i: *mut DenoIsolate) { - let i_mut: &mut DenoIsolate = unsafe { &mut *i }; - i_mut.last_exception_ = None; -} - -pub unsafe fn deno_check_promise_errors(i: *mut DenoIsolate) { +pub unsafe fn deno_check_promise_errors(i_mut: &mut DenoIsolate) { /* if (d->pending_promise_map_.size() > 0) { auto* isolate = d->isolate_; @@ -1448,7 +1434,6 @@ pub unsafe fn deno_check_promise_errors(i: *mut DenoIsolate) { } } */ - let i_mut: &mut DenoIsolate = unsafe { &mut *i }; let isolate = i_mut.isolate_.as_ref().unwrap(); if i_mut.pending_promise_map_.is_empty() { @@ -1473,20 +1458,7 @@ pub unsafe fn deno_check_promise_errors(i: *mut DenoIsolate) { context.exit(); } -pub unsafe fn deno_lock(i: *mut DenoIsolate) { - let i_mut: &mut DenoIsolate = unsafe { &mut *i }; - assert!(i_mut.locker_.is_none()); - let mut locker = v8::Locker::new(i_mut.isolate_.as_ref().unwrap()); - i_mut.locker_ = Some(locker); -} - -pub unsafe fn deno_unlock(i: *mut DenoIsolate) { - let i_mut: &mut DenoIsolate = unsafe { &mut *i }; - i_mut.locker_.take().unwrap(); -} - -pub unsafe fn deno_throw_exception(i: *mut DenoIsolate, text: &str) { - let i_mut: &mut DenoIsolate = unsafe { &mut *i }; +pub unsafe fn deno_throw_exception(i_mut: &mut DenoIsolate, text: &str) { let isolate = i_mut.isolate_.as_ref().unwrap(); let mut locker = v8::Locker::new(isolate); let mut hs = v8::HandleScope::new(&mut locker); @@ -1551,7 +1523,7 @@ pub unsafe fn deno_import_buf<'sc>( } pub unsafe fn deno_respond( - i: *mut isolate, + deno_isolate: &mut DenoIsolate, core_isolate: *const c_void, op_id: OpId, buf: deno_buf, @@ -1569,7 +1541,6 @@ pub unsafe fn deno_respond( return; } */ - let deno_isolate: &mut DenoIsolate = unsafe { &mut *i }; if !deno_isolate.current_args_.is_null() { // Synchronous response. @@ -1673,12 +1644,11 @@ pub unsafe fn deno_respond( } pub unsafe fn deno_execute( - i: *mut DenoIsolate, + i_mut: &mut DenoIsolate, core_isolate: *mut c_void, js_filename: &str, js_source: &str, ) { - let i_mut: &mut DenoIsolate = unsafe { &mut *i }; i_mut.core_isolate_ = core_isolate; let isolate = i_mut.isolate_.as_ref().unwrap(); // println!("deno_execute -> Isolate ptr {:?}", isolate); @@ -1737,35 +1707,6 @@ pub unsafe fn deno_run_microtasks(i: *mut isolate, core_isolate: *mut c_void) { // Modules -pub unsafe fn deno_mod_new( - i: *mut DenoIsolate, - main: bool, - name: &str, - source: &str, -) -> deno_mod { - let i_mut: &mut DenoIsolate = unsafe { &mut *i }; - i_mut.register_module(main, name, source) -} - -pub unsafe fn deno_mod_imports_len(i: *mut DenoIsolate, id: deno_mod) -> usize { - let info = (*i).get_module_info(id).unwrap(); - info.import_specifiers.len() -} - -pub unsafe fn deno_mod_imports_get( - i: *mut DenoIsolate, - id: deno_mod, - index: size_t, -) -> Option<String> { - match (*i).get_module_info(id) { - Some(info) => match info.import_specifiers.get(index) { - Some(specifier) => Some(specifier.to_string()), - None => None, - }, - None => None, - } -} - fn resolve_callback( context: v8::Local<v8::Context>, specifier: v8::Local<v8::String>, @@ -1822,12 +1763,11 @@ fn resolve_callback( } pub unsafe fn deno_mod_instantiate( - i: *mut DenoIsolate, + i_mut: &mut DenoIsolate, resolve_context: *mut c_void, id: deno_mod, resolve_cb: deno_resolve_cb, ) { - let i_mut: &mut DenoIsolate = unsafe { &mut *i }; i_mut.resolve_context_ = resolve_context; let isolate = i_mut.isolate_.as_ref().unwrap(); let mut locker = v8::Locker::new(isolate); @@ -1868,11 +1808,10 @@ pub unsafe fn deno_mod_instantiate( } pub unsafe fn deno_mod_evaluate( - i: *mut DenoIsolate, + deno_isolate: &mut DenoIsolate, core_isolate: *const c_void, id: deno_mod, ) { - let deno_isolate: &mut DenoIsolate = unsafe { &mut *i }; let core_isolate: *mut c_void = unsafe { std::mem::transmute(core_isolate) }; deno_isolate.core_isolate_ = core_isolate; let isolate = deno_isolate.isolate_.as_ref().unwrap(); @@ -1920,13 +1859,12 @@ pub unsafe fn deno_mod_evaluate( /// Call exactly once for every deno_dyn_import_cb. pub unsafe fn deno_dyn_import_done( - i: *mut DenoIsolate, + deno_isolate: &mut DenoIsolate, core_isolate: *const c_void, id: deno_dyn_import_id, mod_id: deno_mod, error_str: Option<String>, ) { - let deno_isolate: &mut DenoIsolate = unsafe { &mut *i }; assert!( (mod_id == 0 && error_str.is_some()) || (mod_id != 0 && error_str.is_none()) @@ -1981,8 +1919,9 @@ pub unsafe fn deno_dyn_import_done( deno_isolate.core_isolate_ = std::ptr::null_mut(); } -pub fn deno_snapshot_new(i: *mut DenoIsolate) -> v8::OwnedStartupData { - let deno_isolate: &mut DenoIsolate = unsafe { &mut *i }; +pub fn deno_snapshot_new( + deno_isolate: &mut DenoIsolate, +) -> v8::OwnedStartupData { assert!(deno_isolate.snapshot_creator_.is_some()); let isolate = deno_isolate.isolate_.as_ref().unwrap(); |