mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 02:48:24 +00:00
Resolve callback moved from Behavior to mod_instantiate() (#1999)
This simplifies the Behavior trait and makes it more explicit where the resolve callback is being made. Also s/StartupScript/Script
This commit is contained in:
parent
5ae78eb1de
commit
d8714281b4
7 changed files with 79 additions and 79 deletions
|
@ -2,7 +2,6 @@
|
|||
use crate::isolate_state::*;
|
||||
use crate::ops;
|
||||
use deno_core::deno_buf;
|
||||
use deno_core::deno_mod;
|
||||
use deno_core::Behavior;
|
||||
use deno_core::Op;
|
||||
use deno_core::StartupData;
|
||||
|
@ -43,10 +42,6 @@ impl Behavior for CliBehavior {
|
|||
self.startup_data.take()
|
||||
}
|
||||
|
||||
fn resolve(&mut self, specifier: &str, referrer: deno_mod) -> deno_mod {
|
||||
self.state_resolve(specifier, referrer)
|
||||
}
|
||||
|
||||
fn dispatch(
|
||||
&mut self,
|
||||
control: &[u8],
|
||||
|
|
|
@ -9,7 +9,6 @@ use crate::startup_data;
|
|||
use crate::workers;
|
||||
use crate::workers::WorkerBehavior;
|
||||
use deno_core::deno_buf;
|
||||
use deno_core::deno_mod;
|
||||
use deno_core::Behavior;
|
||||
use deno_core::Buf;
|
||||
use deno_core::Op;
|
||||
|
@ -51,10 +50,6 @@ impl Behavior for CompilerBehavior {
|
|||
Some(startup_data::compiler_isolate_init())
|
||||
}
|
||||
|
||||
fn resolve(&mut self, specifier: &str, referrer: deno_mod) -> deno_mod {
|
||||
self.state_resolve(specifier, referrer)
|
||||
}
|
||||
|
||||
fn dispatch(
|
||||
&mut self,
|
||||
control: &[u8],
|
||||
|
|
|
@ -14,6 +14,7 @@ use deno_core::Behavior;
|
|||
use deno_core::JSError;
|
||||
use futures::Async;
|
||||
use futures::Future;
|
||||
use std::sync::atomic::Ordering;
|
||||
use std::sync::Arc;
|
||||
|
||||
pub trait DenoBehavior: Behavior + IsolateStateContainer + Send {}
|
||||
|
@ -122,9 +123,17 @@ impl<B: DenoBehavior> Isolate<B> {
|
|||
|
||||
self.mod_load_deps(id)?;
|
||||
|
||||
let state = self.state.clone();
|
||||
|
||||
let mut resolve = move |specifier: &str, referrer: deno_mod| -> deno_mod {
|
||||
state.metrics.resolve_count.fetch_add(1, Ordering::Relaxed);
|
||||
let mut modules = state.modules.lock().unwrap();
|
||||
modules.resolve_cb(&state.dir, specifier, referrer)
|
||||
};
|
||||
|
||||
self
|
||||
.inner
|
||||
.mod_instantiate(id)
|
||||
.mod_instantiate(id, &mut resolve)
|
||||
.map_err(RustOrJsError::from)?;
|
||||
if !is_prefetch {
|
||||
self.inner.mod_evaluate(id).map_err(RustOrJsError::from)?;
|
||||
|
|
|
@ -5,7 +5,6 @@ use crate::flags;
|
|||
use crate::global_timer::GlobalTimer;
|
||||
use crate::modules::Modules;
|
||||
use crate::permissions::DenoPermissions;
|
||||
use deno_core::deno_mod;
|
||||
use deno_core::Buf;
|
||||
use futures::sync::mpsc as async_mpsc;
|
||||
use std;
|
||||
|
@ -144,16 +143,3 @@ impl IsolateState {
|
|||
pub trait IsolateStateContainer {
|
||||
fn state(&self) -> Arc<IsolateState>;
|
||||
}
|
||||
|
||||
/// Provides state_resolve function for IsolateStateContainer implementors
|
||||
pub trait IsolateStateModuleResolution: IsolateStateContainer {
|
||||
fn state_resolve(&mut self, specifier: &str, referrer: deno_mod) -> deno_mod {
|
||||
let state = self.state();
|
||||
state.metrics.resolve_count.fetch_add(1, Ordering::Relaxed);
|
||||
let mut modules = state.modules.lock().unwrap();
|
||||
modules.resolve_cb(&state.dir, specifier, referrer)
|
||||
}
|
||||
}
|
||||
|
||||
// Auto implementation for all IsolateStateContainer implementors
|
||||
impl<T> IsolateStateModuleResolution for T where T: IsolateStateContainer {}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||||
use deno_core::deno_buf;
|
||||
use deno_core::{StartupData, StartupScript};
|
||||
use deno_core::{Script, StartupData};
|
||||
|
||||
pub fn deno_isolate_init() -> StartupData {
|
||||
if cfg!(feature = "no-snapshot-init") {
|
||||
|
@ -11,7 +11,7 @@ pub fn deno_isolate_init() -> StartupData {
|
|||
#[cfg(feature = "check-only")]
|
||||
let source_bytes = vec![];
|
||||
|
||||
StartupData::Script(StartupScript {
|
||||
StartupData::Script(Script {
|
||||
filename: "gen/bundle/main.js".to_string(),
|
||||
source: std::str::from_utf8(source_bytes).unwrap().to_string(),
|
||||
})
|
||||
|
@ -38,7 +38,7 @@ pub fn compiler_isolate_init() -> StartupData {
|
|||
#[cfg(feature = "check-only")]
|
||||
let source_bytes = vec![];
|
||||
|
||||
StartupData::Script(StartupScript {
|
||||
StartupData::Script(Script {
|
||||
filename: "gen/bundle/compiler.js".to_string(),
|
||||
source: std::str::from_utf8(source_bytes).unwrap().to_string(),
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue