diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 56 |
1 files changed, 33 insertions, 23 deletions
diff --git a/src/main.rs b/src/main.rs index 7bafe5c3c..9afbbb8a9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,7 @@ extern crate futures; extern crate serde_json; mod ansi; +pub mod cli; pub mod compiler; pub mod deno_dir; pub mod errors; @@ -19,8 +20,8 @@ mod http_body; mod http_util; pub mod isolate; pub mod isolate_init; +pub mod isolate_state; pub mod js_errors; -pub mod libdeno; pub mod modules; pub mod msg; pub mod msg_util; @@ -37,6 +38,12 @@ pub mod workers; #[cfg(unix)] mod eager_unix; +use crate::cli::Cli; +use crate::errors::RustOrJsError; +use crate::isolate::Isolate; +use crate::isolate_state::IsolateState; +use futures::lazy; +use futures::Future; use log::{LevelFilter, Metadata, Record}; use std::env; use std::sync::Arc; @@ -58,11 +65,20 @@ impl log::Log for Logger { fn flush(&self) {} } -fn print_err_and_exit(err: errors::RustOrJsError) { +fn print_err_and_exit(err: RustOrJsError) { eprintln!("{}", err.to_string()); std::process::exit(1); } +fn js_check<E>(r: Result<(), E>) +where + E: Into<RustOrJsError>, +{ + if let Err(err) = r { + print_err_and_exit(err.into()); + } +} + fn main() { #[cfg(windows)] ansi_term::enable_ansi_support().ok(); // For Windows 10 @@ -95,39 +111,33 @@ fn main() { let should_prefetch = flags.prefetch || flags.info; let should_display_info = flags.info; - let state = Arc::new(isolate::IsolateState::new(flags, rest_argv, None)); + let state = Arc::new(IsolateState::new(flags, rest_argv, None)); + let state_ = state.clone(); let isolate_init = isolate_init::deno_isolate_init(); let permissions = permissions::DenoPermissions::from_flags(&state.flags); - let mut isolate = - isolate::Isolate::new(isolate_init, state, ops::dispatch, permissions); + let cli = Cli::new(isolate_init, state_, permissions); + let mut isolate = Isolate::new(cli); - tokio_util::init(|| { + let main_future = lazy(move || { // Setup runtime. - isolate - .execute("denoMain();") - .map_err(errors::RustOrJsError::from) - .unwrap_or_else(print_err_and_exit); + js_check(isolate.execute("denoMain()")); // Execute main module. - if let Some(main_module) = isolate.state.main_module() { + if let Some(main_module) = state.main_module() { debug!("main_module {}", main_module); - isolate - .execute_mod(&main_module, should_prefetch) - .unwrap_or_else(print_err_and_exit); + js_check(isolate.execute_mod(&main_module, should_prefetch)); if should_display_info { // Display file info and exit. Do not run file - modules::print_file_info( - &isolate.modules.borrow(), - &isolate.state.dir, - main_module, - ); + isolate.print_file_info(&main_module); std::process::exit(0); } } - isolate - .event_loop() - .map_err(errors::RustOrJsError::from) - .unwrap_or_else(print_err_and_exit); + isolate.then(|result| { + js_check(result); + Ok(()) + }) }); + + tokio_util::run(main_future); } |