mirror of
https://github.com/denoland/deno.git
synced 2024-10-31 09:14:20 -04:00
f3c0f0565b
This commit adds an ability to "ref" or "unref" pending ops. Up to this point Deno had a notion of "async ops" and "unref async ops"; the former keep event loop alive, while the latter do not block event loop from finishing. It was not possible to change between op types after dispatching, one had to decide which type to use before dispatch. Instead of storing ops in two separate "FuturesUnordered" collections, now ops are stored in a single collection, with supplemental "HashSet" storing ids of promises that were "unrefed". Two APIs were added to "Deno.core": "Deno.core.refOp(promiseId)" which allows to mark promise id to be "refed" and keep event loop alive (the default behavior) "Deno.core.unrefOp(promiseId)" which allows to mark promise id as "unrefed" which won't block event loop from exiting
131 lines
3.8 KiB
Rust
131 lines
3.8 KiB
Rust
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
|
|
mod async_cancel;
|
|
mod async_cell;
|
|
mod bindings;
|
|
pub mod error;
|
|
mod error_codes;
|
|
mod extensions;
|
|
mod flags;
|
|
mod gotham_state;
|
|
mod inspector;
|
|
mod module_specifier;
|
|
mod modules;
|
|
mod normalize_path;
|
|
mod ops;
|
|
mod ops_builtin;
|
|
mod ops_json;
|
|
mod ops_metrics;
|
|
mod resources;
|
|
mod runtime;
|
|
|
|
// Re-exports
|
|
pub use anyhow;
|
|
pub use futures;
|
|
pub use parking_lot;
|
|
pub use serde;
|
|
pub use serde_json;
|
|
pub use serde_v8;
|
|
pub use serde_v8::Buffer as ZeroCopyBuf;
|
|
pub use serde_v8::ByteString;
|
|
pub use serde_v8::StringOrBuffer;
|
|
pub use url;
|
|
pub use v8;
|
|
|
|
pub use crate::async_cancel::CancelFuture;
|
|
pub use crate::async_cancel::CancelHandle;
|
|
pub use crate::async_cancel::CancelTryFuture;
|
|
pub use crate::async_cancel::Cancelable;
|
|
pub use crate::async_cancel::Canceled;
|
|
pub use crate::async_cancel::TryCancelable;
|
|
pub use crate::async_cell::AsyncMut;
|
|
pub use crate::async_cell::AsyncMutFuture;
|
|
pub use crate::async_cell::AsyncRef;
|
|
pub use crate::async_cell::AsyncRefCell;
|
|
pub use crate::async_cell::AsyncRefFuture;
|
|
pub use crate::async_cell::RcLike;
|
|
pub use crate::async_cell::RcRef;
|
|
pub use crate::flags::v8_set_flags;
|
|
pub use crate::inspector::InspectorSessionProxy;
|
|
pub use crate::inspector::JsRuntimeInspector;
|
|
pub use crate::inspector::LocalInspectorSession;
|
|
pub use crate::module_specifier::resolve_import;
|
|
pub use crate::module_specifier::resolve_path;
|
|
pub use crate::module_specifier::resolve_url;
|
|
pub use crate::module_specifier::resolve_url_or_path;
|
|
pub use crate::module_specifier::ModuleResolutionError;
|
|
pub use crate::module_specifier::ModuleSpecifier;
|
|
pub use crate::module_specifier::DUMMY_SPECIFIER;
|
|
pub use crate::modules::FsModuleLoader;
|
|
pub use crate::modules::ModuleId;
|
|
pub use crate::modules::ModuleLoadId;
|
|
pub use crate::modules::ModuleLoader;
|
|
pub use crate::modules::ModuleSource;
|
|
pub use crate::modules::ModuleSourceFuture;
|
|
pub use crate::modules::NoopModuleLoader;
|
|
pub use crate::runtime::CompiledWasmModuleStore;
|
|
pub use crate::runtime::SharedArrayBufferStore;
|
|
// TODO(bartlomieju): this struct should be implementation
|
|
// detail nad not be public
|
|
pub use crate::modules::RecursiveModuleLoad;
|
|
pub use crate::normalize_path::normalize_path;
|
|
pub use crate::ops::serialize_op_result;
|
|
pub use crate::ops::Op;
|
|
pub use crate::ops::OpAsyncFuture;
|
|
pub use crate::ops::OpCall;
|
|
pub use crate::ops::OpFn;
|
|
pub use crate::ops::OpId;
|
|
pub use crate::ops::OpPayload;
|
|
pub use crate::ops::OpResult;
|
|
pub use crate::ops::OpState;
|
|
pub use crate::ops::OpTable;
|
|
pub use crate::ops::PromiseId;
|
|
pub use crate::ops_builtin::op_close;
|
|
pub use crate::ops_builtin::op_print;
|
|
pub use crate::ops_builtin::op_resources;
|
|
pub use crate::ops_json::op_async;
|
|
pub use crate::ops_json::op_sync;
|
|
pub use crate::ops_json::void_op_async;
|
|
pub use crate::ops_json::void_op_sync;
|
|
pub use crate::resources::AsyncResult;
|
|
pub use crate::resources::Resource;
|
|
pub use crate::resources::ResourceId;
|
|
pub use crate::resources::ResourceTable;
|
|
pub use crate::runtime::GetErrorClassFn;
|
|
pub use crate::runtime::JsErrorCreateFn;
|
|
pub use crate::runtime::JsRuntime;
|
|
pub use crate::runtime::RuntimeOptions;
|
|
pub use crate::runtime::Snapshot;
|
|
// pub use crate::runtime_modules::include_js_files!;
|
|
pub use crate::extensions::Extension;
|
|
pub use crate::extensions::OpMiddlewareFn;
|
|
pub use crate::extensions::OpPair;
|
|
|
|
pub fn v8_version() -> &'static str {
|
|
v8::V8::get_version()
|
|
}
|
|
|
|
/// A helper macro that will return a call site in Rust code. Should be
|
|
/// used when executing internal one-line scripts for JsRuntime lifecycle.
|
|
///
|
|
/// Returns a string in form of: "`[deno:<filename>:<line>:<column>]`"
|
|
#[macro_export]
|
|
macro_rules! located_script_name {
|
|
() => {
|
|
format!(
|
|
"[deno:{}:{}:{}]",
|
|
std::file!(),
|
|
std::line!(),
|
|
std::column!()
|
|
);
|
|
};
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_v8_version() {
|
|
assert!(v8_version().len() > 3);
|
|
}
|
|
}
|