diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/bindings.rs | 92 | ||||
-rw-r--r-- | core/es_isolate.rs | 18 | ||||
-rw-r--r-- | core/examples/http_bench.rs | 12 | ||||
-rw-r--r-- | core/isolate.rs | 38 | ||||
-rw-r--r-- | core/ops.rs | 10 |
5 files changed, 87 insertions, 83 deletions
diff --git a/core/bindings.rs b/core/bindings.rs index d34dfe834..25272af84 100644 --- a/core/bindings.rs +++ b/core/bindings.rs @@ -1,7 +1,7 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. use crate::es_isolate::EsIsolate; -use crate::isolate::Isolate; +use crate::isolate::CoreIsolate; use crate::isolate::ZeroCopyBuf; use crate::js_errors::JSError; @@ -251,7 +251,7 @@ pub extern "C" fn host_import_module_dynamically_callback( let mut hs = v8::EscapableHandleScope::new(cbs.enter()); let scope = hs.enter(); let isolate = scope.isolate(); - let deno_isolate: &mut EsIsolate = + let core_isolate: &mut EsIsolate = unsafe { &mut *(isolate.get_data(1) as *mut EsIsolate) }; // NOTE(bartlomieju): will crash for non-UTF-8 specifier @@ -277,13 +277,13 @@ pub extern "C" fn host_import_module_dynamically_callback( let mut resolver_handle = v8::Global::new(); resolver_handle.set(scope, resolver); - let import_id = deno_isolate.next_dyn_import_id; - deno_isolate.next_dyn_import_id += 1; - deno_isolate + let import_id = core_isolate.next_dyn_import_id; + core_isolate.next_dyn_import_id += 1; + core_isolate .dyn_import_map .insert(import_id, resolver_handle); - deno_isolate.dyn_import_cb(&specifier_str, &referrer_name_str, import_id); + core_isolate.dyn_import_cb(&specifier_str, &referrer_name_str, import_id); &mut *scope.escape(promise) } @@ -297,13 +297,13 @@ pub extern "C" fn host_initialize_import_meta_object_callback( let mut hs = v8::HandleScope::new(cbs.enter()); let scope = hs.enter(); let isolate = scope.isolate(); - let deno_isolate: &mut EsIsolate = + let core_isolate: &mut EsIsolate = unsafe { &mut *(isolate.get_data(1) as *mut EsIsolate) }; let id = module.get_identity_hash(); assert_ne!(id, 0); - let info = deno_isolate.modules.get_info(id).expect("Module not found"); + let info = core_isolate.modules.get_info(id).expect("Module not found"); meta.create_data_property( context, @@ -322,10 +322,10 @@ pub extern "C" fn promise_reject_callback(message: v8::PromiseRejectMessage) { let mut hs = v8::HandleScope::new(cbs.enter()); let scope = hs.enter(); - let deno_isolate: &mut Isolate = - unsafe { &mut *(scope.isolate().get_data(0) as *mut Isolate) }; + let core_isolate: &mut CoreIsolate = + unsafe { &mut *(scope.isolate().get_data(0) as *mut CoreIsolate) }; - let context = deno_isolate.global_context.get(scope).unwrap(); + let context = core_isolate.global_context.get(scope).unwrap(); let mut cs = v8::ContextScope::new(scope, context); let scope = cs.enter(); @@ -337,13 +337,13 @@ pub extern "C" fn promise_reject_callback(message: v8::PromiseRejectMessage) { let error = message.get_value(); let mut error_global = v8::Global::<v8::Value>::new(); error_global.set(scope, error); - deno_isolate + core_isolate .pending_promise_exceptions .insert(promise_id, error_global); } v8::PromiseRejectEvent::PromiseHandlerAddedAfterReject => { if let Some(mut handle) = - deno_isolate.pending_promise_exceptions.remove(&promise_id) + core_isolate.pending_promise_exceptions.remove(&promise_id) { handle.reset(scope); } @@ -417,17 +417,17 @@ fn recv( args: v8::FunctionCallbackArguments, _rv: v8::ReturnValue, ) { - let deno_isolate: &mut Isolate = - unsafe { &mut *(scope.isolate().get_data(0) as *mut Isolate) }; + let core_isolate: &mut CoreIsolate = + unsafe { &mut *(scope.isolate().get_data(0) as *mut CoreIsolate) }; - if !deno_isolate.js_recv_cb.is_empty() { + if !core_isolate.js_recv_cb.is_empty() { let msg = v8::String::new(scope, "Deno.core.recv already called.").unwrap(); scope.isolate().throw_exception(msg.into()); return; } let recv_fn = v8::Local::<v8::Function>::try_from(args.get(0)).unwrap(); - deno_isolate.js_recv_cb.set(scope, recv_fn); + core_isolate.js_recv_cb.set(scope, recv_fn); } fn send( @@ -435,9 +435,9 @@ fn send( args: v8::FunctionCallbackArguments, mut rv: v8::ReturnValue, ) { - let deno_isolate: &mut Isolate = - unsafe { &mut *(scope.isolate().get_data(0) as *mut Isolate) }; - assert!(!deno_isolate.global_context.is_empty()); + let core_isolate: &mut CoreIsolate = + unsafe { &mut *(scope.isolate().get_data(0) as *mut CoreIsolate) }; + assert!(!core_isolate.global_context.is_empty()); let op_id = match v8::Local::<v8::Uint32>::try_from(args.get(0)) { Ok(op_id) => op_id.value() as u32, @@ -469,7 +469,7 @@ fn send( // If response is empty then it's either async op or exception was thrown let maybe_response = - deno_isolate.dispatch_op(scope, op_id, control, zero_copy); + core_isolate.dispatch_op(scope, op_id, control, zero_copy); if let Some(response) = maybe_response { // Synchronous response. @@ -488,10 +488,10 @@ fn set_macrotask_callback( args: v8::FunctionCallbackArguments, _rv: v8::ReturnValue, ) { - let deno_isolate: &mut Isolate = - unsafe { &mut *(scope.isolate().get_data(0) as *mut Isolate) }; + let core_isolate: &mut CoreIsolate = + unsafe { &mut *(scope.isolate().get_data(0) as *mut CoreIsolate) }; - if !deno_isolate.js_macrotask_cb.is_empty() { + if !core_isolate.js_macrotask_cb.is_empty() { let msg = v8::String::new(scope, "Deno.core.setMacrotaskCallback already called.") .unwrap(); @@ -501,7 +501,7 @@ fn set_macrotask_callback( let macrotask_cb_fn = v8::Local::<v8::Function>::try_from(args.get(0)).unwrap(); - deno_isolate.js_macrotask_cb.set(scope, macrotask_cb_fn); + core_isolate.js_macrotask_cb.set(scope, macrotask_cb_fn); } fn eval_context( @@ -509,10 +509,10 @@ fn eval_context( args: v8::FunctionCallbackArguments, mut rv: v8::ReturnValue, ) { - let deno_isolate: &mut Isolate = - unsafe { &mut *(scope.isolate().get_data(0) as *mut Isolate) }; - assert!(!deno_isolate.global_context.is_empty()); - let context = deno_isolate.global_context.get(scope).unwrap(); + let core_isolate: &mut CoreIsolate = + unsafe { &mut *(scope.isolate().get_data(0) as *mut CoreIsolate) }; + assert!(!core_isolate.global_context.is_empty()); + let context = core_isolate.global_context.get(scope).unwrap(); let source = match v8::Local::<v8::String>::try_from(args.get(0)) { Ok(s) => s, @@ -645,10 +645,10 @@ fn format_error( args: v8::FunctionCallbackArguments, mut rv: v8::ReturnValue, ) { - let deno_isolate: &mut Isolate = - unsafe { &mut *(scope.isolate().get_data(0) as *mut Isolate) }; + let core_isolate: &mut CoreIsolate = + unsafe { &mut *(scope.isolate().get_data(0) as *mut CoreIsolate) }; let e = JSError::from_v8_exception(scope, args.get(0)); - let e = (deno_isolate.js_error_create_fn)(e); + let e = (core_isolate.js_error_create_fn)(e); let e = e.to_string(); let e = v8::String::new(scope, &e).unwrap(); rv.set(e.into()) @@ -736,19 +736,19 @@ fn shared_getter( _args: v8::PropertyCallbackArguments, mut rv: v8::ReturnValue, ) { - let deno_isolate: &mut Isolate = - unsafe { &mut *(scope.isolate().get_data(0) as *mut Isolate) }; + let core_isolate: &mut CoreIsolate = + unsafe { &mut *(scope.isolate().get_data(0) as *mut CoreIsolate) }; // Lazily initialize the persistent external ArrayBuffer. - if deno_isolate.shared_ab.is_empty() { + if core_isolate.shared_ab.is_empty() { let ab = v8::SharedArrayBuffer::with_backing_store( scope, - deno_isolate.shared.get_backing_store(), + core_isolate.shared.get_backing_store(), ); - deno_isolate.shared_ab.set(scope, ab); + core_isolate.shared_ab.set(scope, ab); } - let shared_ab = deno_isolate.shared_ab.get(scope).unwrap(); + let shared_ab = core_isolate.shared_ab.get(scope).unwrap(); rv.set(shared_ab.into()); } @@ -761,11 +761,11 @@ pub fn module_resolve_callback<'s>( let mut scope = v8::EscapableHandleScope::new(scope.enter()); let scope = scope.enter(); - let deno_isolate: &mut EsIsolate = + let core_isolate: &mut EsIsolate = unsafe { &mut *(scope.isolate().get_data(1) as *mut EsIsolate) }; let referrer_id = referrer.get_identity_hash(); - let referrer_name = deno_isolate + let referrer_name = core_isolate .modules .get_info(referrer_id) .expect("ModuleInfo not found") @@ -780,8 +780,8 @@ pub fn module_resolve_callback<'s>( let req_str = req.to_rust_string_lossy(scope); if req_str == specifier_str { - let id = deno_isolate.module_resolve_cb(&req_str, referrer_id); - let maybe_info = deno_isolate.modules.get_info(id); + let id = core_isolate.module_resolve_cb(&req_str, referrer_id); + let maybe_info = core_isolate.modules.get_info(id); if maybe_info.is_none() { let msg = format!( @@ -812,10 +812,10 @@ fn get_promise_details( args: v8::FunctionCallbackArguments, mut rv: v8::ReturnValue, ) { - let deno_isolate: &mut Isolate = - unsafe { &mut *(scope.isolate().get_data(0) as *mut Isolate) }; - assert!(!deno_isolate.global_context.is_empty()); - let context = deno_isolate.global_context.get(scope).unwrap(); + let core_isolate: &mut CoreIsolate = + unsafe { &mut *(scope.isolate().get_data(0) as *mut CoreIsolate) }; + assert!(!core_isolate.global_context.is_empty()); + let context = core_isolate.global_context.get(scope).unwrap(); let promise = match v8::Local::<v8::Promise>::try_from(args.get(0)) { Ok(val) => val, diff --git a/core/es_isolate.rs b/core/es_isolate.rs index b847005f9..8b6f6fb30 100644 --- a/core/es_isolate.rs +++ b/core/es_isolate.rs @@ -1,6 +1,6 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -// This module provides higher level implementation of Isolate that +// This module provides higher level implementation of CoreIsolate that // supports asynchronous loading and executution of ES Modules. // The isolate.rs should never depend on this module. @@ -27,7 +27,7 @@ use std::task::Poll; use crate::isolate::attach_handle_to_error; use crate::isolate::exception_to_err_result; -use crate::isolate::Isolate; +use crate::isolate::CoreIsolate; use crate::isolate::StartupData; use crate::module_specifier::ModuleSpecifier; use crate::modules::LoadState; @@ -39,14 +39,14 @@ use crate::modules::RecursiveModuleLoad; pub type ModuleId = i32; pub type DynImportId = i32; -/// More specialized version of `Isolate` that provides loading +/// More specialized version of `CoreIsolate` that provides loading /// and execution of ES Modules. /// /// Creating `EsIsolate` requires to pass `loader` argument /// that implements `ModuleLoader` trait - that way actual resolution and /// loading of modules can be customized by the implementor. pub struct EsIsolate { - core_isolate: Box<Isolate>, + core_isolate: Box<CoreIsolate>, loader: Rc<dyn ModuleLoader>, pub modules: Modules, pub(crate) next_dyn_import_id: DynImportId, @@ -58,7 +58,7 @@ pub struct EsIsolate { } impl Deref for EsIsolate { - type Target = Isolate; + type Target = CoreIsolate; fn deref(&self) -> &Self::Target { &self.core_isolate @@ -77,7 +77,7 @@ impl EsIsolate { startup_data: StartupData, will_snapshot: bool, ) -> Box<Self> { - let mut core_isolate = Isolate::new(startup_data, will_snapshot); + let mut core_isolate = CoreIsolate::new(startup_data, will_snapshot); { let v8_isolate = core_isolate.v8_isolate.as_mut().unwrap(); v8_isolate.set_host_initialize_import_meta_object_callback( @@ -174,7 +174,7 @@ impl EsIsolate { /// /// ErrBox can be downcast to a type that exposes additional information about /// the V8 exception. By default this type is JSError, however it may be a - /// different type if Isolate::set_js_error_create_fn() has been used. + /// different type if CoreIsolate::set_js_error_create_fn() has been used. fn mod_instantiate(&mut self, id: ModuleId) -> Result<(), ErrBox> { let v8_isolate = self.core_isolate.v8_isolate.as_mut().unwrap(); let js_error_create_fn = &*self.core_isolate.js_error_create_fn; @@ -219,7 +219,7 @@ impl EsIsolate { /// /// ErrBox can be downcast to a type that exposes additional information about /// the V8 exception. By default this type is JSError, however it may be a - /// different type if Isolate::set_js_error_create_fn() has been used. + /// different type if CoreIsolate::set_js_error_create_fn() has been used. pub fn mod_evaluate(&mut self, id: ModuleId) -> Result<(), ErrBox> { let core_isolate = &mut self.core_isolate; let v8_isolate = core_isolate.v8_isolate.as_mut().unwrap(); @@ -580,7 +580,7 @@ pub mod tests { let mut isolate = EsIsolate::new(loader, StartupData::None, false); - let dispatcher = move |_isolate: &mut Isolate, + let dispatcher = move |_isolate: &mut CoreIsolate, control: &[u8], _zero_copy: Option<ZeroCopyBuf>| -> Op { diff --git a/core/examples/http_bench.rs b/core/examples/http_bench.rs index 9e5808043..f728b2a69 100644 --- a/core/examples/http_bench.rs +++ b/core/examples/http_bench.rs @@ -3,8 +3,12 @@ extern crate derive_deref; #[macro_use] extern crate log; -use deno_core::Isolate as CoreIsolate; -use deno_core::*; +use deno_core::CoreIsolate; +use deno_core::Op; +use deno_core::ResourceTable; +use deno_core::Script; +use deno_core::StartupData; +use deno_core::ZeroCopyBuf; use futures::future::poll_fn; use futures::prelude::*; use futures::task::Context; @@ -111,7 +115,7 @@ impl Isolate { F: 'static + Fn(State, u32, Option<ZeroCopyBuf>) -> Result<u32, Error>, { let state = self.state.clone(); - let core_handler = move |_isolate: &mut deno_core::Isolate, + let core_handler = move |_isolate: &mut CoreIsolate, control_buf: &[u8], zero_copy_buf: Option<ZeroCopyBuf>| -> Op { @@ -141,7 +145,7 @@ impl Isolate { <F::Ok as TryInto<i32>>::Error: Debug, { let state = self.state.clone(); - let core_handler = move |_isolate: &mut deno_core::Isolate, + let core_handler = move |_isolate: &mut CoreIsolate, control_buf: &[u8], zero_copy_buf: Option<ZeroCopyBuf>| -> Op { diff --git a/core/isolate.rs b/core/isolate.rs index 6e0728564..37a9de2ad 100644 --- a/core/isolate.rs +++ b/core/isolate.rs @@ -140,15 +140,15 @@ type JSErrorCreateFn = dyn Fn(JSError) -> ErrBox; type IsolateErrorHandleFn = dyn FnMut(ErrBox) -> Result<(), ErrBox>; /// A single execution context of JavaScript. Corresponds roughly to the "Web -/// Worker" concept in the DOM. An Isolate is a Future that can be used with -/// Tokio. The Isolate future complete when there is an error or when all +/// Worker" concept in the DOM. An CoreIsolate is a Future that can be used with +/// Tokio. The CoreIsolate future complete when there is an error or when all /// pending ops have completed. /// /// Ops are created in JavaScript by calling Deno.core.dispatch(), and in Rust /// by implementing dispatcher function that takes control buffer and optional zero copy buffer /// as arguments. An async Op corresponds exactly to a Promise in JavaScript. #[allow(unused)] -pub struct Isolate { +pub struct CoreIsolate { pub v8_isolate: Option<v8::OwnedIsolate>, snapshot_creator: Option<v8::SnapshotCreator>, has_snapshotted: bool, @@ -171,7 +171,7 @@ pub struct Isolate { error_handler: Option<Box<IsolateErrorHandleFn>>, } -impl Drop for Isolate { +impl Drop for CoreIsolate { fn drop(&mut self) { if let Some(creator) = self.snapshot_creator.take() { // TODO(ry): in rusty_v8, `SnapShotCreator::get_owned_isolate()` returns @@ -212,7 +212,7 @@ pub unsafe fn v8_init() { v8::V8::set_flags_from_command_line(argv); } -impl Isolate { +impl CoreIsolate { /// startup_data defines the snapshot or script used at startup to initialize /// the isolate. pub fn new(startup_data: StartupData, will_snapshot: bool) -> Box<Self> { @@ -233,7 +233,7 @@ impl Isolate { let mut creator = v8::SnapshotCreator::new(Some(&bindings::EXTERNAL_REFERENCES)); let isolate = unsafe { creator.get_owned_isolate() }; - let mut isolate = Isolate::setup_isolate(isolate); + let mut isolate = CoreIsolate::setup_isolate(isolate); let mut hs = v8::HandleScope::new(&mut isolate); let scope = hs.enter(); @@ -257,7 +257,7 @@ impl Isolate { }; let isolate = v8::Isolate::new(params); - let mut isolate = Isolate::setup_isolate(isolate); + let mut isolate = CoreIsolate::setup_isolate(isolate); let mut hs = v8::HandleScope::new(&mut isolate); let scope = hs.enter(); @@ -314,7 +314,7 @@ impl Isolate { boxed_isolate } - pub fn setup_isolate(mut isolate: v8::OwnedIsolate) -> v8::OwnedIsolate { + fn setup_isolate(mut isolate: v8::OwnedIsolate) -> v8::OwnedIsolate { isolate.set_capture_stack_trace_for_uncaught_exceptions(true, 10); isolate.set_promise_reject_callback(bindings::promise_reject_callback); isolate @@ -327,7 +327,7 @@ impl Isolate { /// Requires runtime to explicitly ask for op ids before using any of the ops. pub fn register_op<F>(&mut self, name: &str, op: F) -> OpId where - F: Fn(&mut Isolate, &[u8], Option<ZeroCopyBuf>) -> Op + 'static, + F: Fn(&mut CoreIsolate, &[u8], Option<ZeroCopyBuf>) -> Op + 'static, { self.op_registry.register(name, op) } @@ -400,7 +400,7 @@ impl Isolate { /// /// ErrBox can be downcast to a type that exposes additional information about /// the V8 exception. By default this type is JSError, however it may be a - /// different type if Isolate::set_js_error_create_fn() has been used. + /// different type if CoreIsolate::set_js_error_create_fn() has been used. pub fn execute( &mut self, js_filename: &str, @@ -449,7 +449,7 @@ impl Isolate { /// /// ErrBox can be downcast to a type that exposes additional information about /// the V8 exception. By default this type is JSError, however it may be a - /// different type if Isolate::set_js_error_create_fn() has been used. + /// different type if CoreIsolate::set_js_error_create_fn() has been used. pub fn snapshot(&mut self) -> v8::StartupData { assert!(self.snapshot_creator.is_some()); @@ -473,7 +473,7 @@ impl Isolate { } } -impl Future for Isolate { +impl Future for CoreIsolate { type Output = Result<(), ErrBox>; fn poll(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output> { @@ -727,7 +727,7 @@ pub mod tests { } } panic!( - "Isolate still not ready after polling {} times.", + "CoreIsolate still not ready after polling {} times.", max_poll_count ) } @@ -741,13 +741,13 @@ pub mod tests { OverflowResAsync, } - pub fn setup(mode: Mode) -> (Box<Isolate>, Arc<AtomicUsize>) { + pub fn setup(mode: Mode) -> (Box<CoreIsolate>, Arc<AtomicUsize>) { let dispatch_count = Arc::new(AtomicUsize::new(0)); let dispatch_count_ = dispatch_count.clone(); - let mut isolate = Isolate::new(StartupData::None, false); + let mut isolate = CoreIsolate::new(StartupData::None, false); - let dispatcher = move |_isolate: &mut Isolate, + let dispatcher = move |_isolate: &mut CoreIsolate, control: &[u8], _zero_copy: Option<ZeroCopyBuf>| -> Op { @@ -1141,7 +1141,7 @@ pub mod tests { #[test] fn syntax_error() { - let mut isolate = Isolate::new(StartupData::None, false); + let mut isolate = CoreIsolate::new(StartupData::None, false); let src = "hocuspocus("; let r = isolate.execute("i.js", src); let e = r.unwrap_err(); @@ -1166,13 +1166,13 @@ pub mod tests { #[test] fn will_snapshot() { let snapshot = { - let mut isolate = Isolate::new(StartupData::None, true); + let mut isolate = CoreIsolate::new(StartupData::None, true); js_check(isolate.execute("a.js", "a = 1 + 2")); isolate.snapshot() }; let startup_data = StartupData::Snapshot(Snapshot::JustCreated(snapshot)); - let mut isolate2 = Isolate::new(startup_data, false); + let mut isolate2 = CoreIsolate::new(startup_data, false); js_check(isolate2.execute("check.js", "if (a != 3) throw Error('x')")); } } diff --git a/core/ops.rs b/core/ops.rs index ed9b27e46..0361f5ee9 100644 --- a/core/ops.rs +++ b/core/ops.rs @@ -1,5 +1,5 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -use crate::Isolate; +use crate::CoreIsolate; use crate::ZeroCopyBuf; use futures::Future; use std::collections::HashMap; @@ -22,7 +22,7 @@ pub enum Op { /// Main type describing op pub type OpDispatcher = - dyn Fn(&mut Isolate, &[u8], Option<ZeroCopyBuf>) -> Op + 'static; + dyn Fn(&mut CoreIsolate, &[u8], Option<ZeroCopyBuf>) -> Op + 'static; #[derive(Default)] pub struct OpRegistry { @@ -43,7 +43,7 @@ impl OpRegistry { pub fn register<F>(&mut self, name: &str, op: F) -> OpId where - F: Fn(&mut Isolate, &[u8], Option<ZeroCopyBuf>) -> Op + 'static, + F: Fn(&mut CoreIsolate, &[u8], Option<ZeroCopyBuf>) -> Op + 'static, { let op_id = self.dispatchers.len() as u32; @@ -86,7 +86,7 @@ fn test_op_registry() { expected.insert("test".to_string(), 1); assert_eq!(op_registry.name_to_id, expected); - let mut isolate = Isolate::new(crate::StartupData::None, false); + let mut isolate = CoreIsolate::new(crate::StartupData::None, false); let dispatch = op_registry.get(test_id).unwrap(); let res = dispatch(&mut isolate, &[], None); @@ -126,7 +126,7 @@ fn register_op_during_call() { }; assert!(test_id != 0); - let mut isolate = Isolate::new(crate::StartupData::None, false); + let mut isolate = CoreIsolate::new(crate::StartupData::None, false); let dispatcher1 = { let g = op_registry.lock().unwrap(); |