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:
Ryan Dahl 2019-03-25 17:43:31 -04:00 committed by GitHub
parent 5ae78eb1de
commit d8714281b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 79 additions and 79 deletions

View file

@ -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],

View file

@ -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],

View file

@ -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)?;

View file

@ -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 {}

View file

@ -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(),
})