mirror of
https://github.com/denoland/deno.git
synced 2024-11-28 16:20:57 -05:00
chore(core): remove argc field from OpDecl (#18024)
https://github.com/denoland/deno/pull/18023#discussion_r1125611859
This commit is contained in:
parent
da201d9ea5
commit
d4807f458e
33 changed files with 54 additions and 96 deletions
|
@ -51,9 +51,6 @@ pub struct OpDecl {
|
||||||
pub enabled: bool,
|
pub enabled: bool,
|
||||||
pub is_async: bool,
|
pub is_async: bool,
|
||||||
pub is_unstable: bool,
|
pub is_unstable: bool,
|
||||||
/// V8 argument count. Used as an optimization
|
|
||||||
/// hint by `core.initalizeAsyncOps`.
|
|
||||||
pub argc: usize,
|
|
||||||
pub is_v8: bool,
|
pub is_v8: bool,
|
||||||
pub fast_fn: Option<Box<dyn FastFunction>>,
|
pub fast_fn: Option<Box<dyn FastFunction>>,
|
||||||
}
|
}
|
||||||
|
|
116
ops/lib.rs
116
ops/lib.rs
|
@ -145,7 +145,6 @@ impl Op {
|
||||||
is_async: #is_async,
|
is_async: #is_async,
|
||||||
is_unstable: #is_unstable,
|
is_unstable: #is_unstable,
|
||||||
is_v8: #is_v8,
|
is_v8: #is_v8,
|
||||||
argc: 0,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,7 +159,7 @@ impl Op {
|
||||||
|
|
||||||
let has_fallible_fast_call = active && optimizer.returns_result;
|
let has_fallible_fast_call = active && optimizer.returns_result;
|
||||||
|
|
||||||
let (v8_body, argc) = if is_async {
|
let v8_body = if is_async {
|
||||||
let deferred = attrs.deferred;
|
let deferred = attrs.deferred;
|
||||||
codegen_v8_async(
|
codegen_v8_async(
|
||||||
&core,
|
&core,
|
||||||
|
@ -202,7 +201,6 @@ impl Op {
|
||||||
is_async: #is_async,
|
is_async: #is_async,
|
||||||
is_unstable: #is_unstable,
|
is_unstable: #is_unstable,
|
||||||
is_v8: #is_v8,
|
is_v8: #is_v8,
|
||||||
argc: #argc,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -239,7 +237,7 @@ fn codegen_v8_async(
|
||||||
margs: Attributes,
|
margs: Attributes,
|
||||||
asyncness: bool,
|
asyncness: bool,
|
||||||
deferred: bool,
|
deferred: bool,
|
||||||
) -> (TokenStream2, usize) {
|
) -> TokenStream2 {
|
||||||
let Attributes { is_v8, .. } = margs;
|
let Attributes { is_v8, .. } = margs;
|
||||||
let special_args = f
|
let special_args = f
|
||||||
.sig
|
.sig
|
||||||
|
@ -253,7 +251,7 @@ fn codegen_v8_async(
|
||||||
let rust_i0 = special_args.len();
|
let rust_i0 = special_args.len();
|
||||||
let args_head = special_args.into_iter().collect::<TokenStream2>();
|
let args_head = special_args.into_iter().collect::<TokenStream2>();
|
||||||
|
|
||||||
let (arg_decls, args_tail, argc) = codegen_args(core, f, rust_i0, 1, true);
|
let (arg_decls, args_tail, _) = codegen_args(core, f, rust_i0, 1, true);
|
||||||
let type_params = exclude_lifetime_params(&f.sig.generics.params);
|
let type_params = exclude_lifetime_params(&f.sig.generics.params);
|
||||||
|
|
||||||
let (pre_result, mut result_fut) = match asyncness {
|
let (pre_result, mut result_fut) = match asyncness {
|
||||||
|
@ -284,48 +282,45 @@ fn codegen_v8_async(
|
||||||
false => quote! { let result = Ok(result); },
|
false => quote! { let result = Ok(result); },
|
||||||
};
|
};
|
||||||
|
|
||||||
(
|
quote! {
|
||||||
quote! {
|
use #core::futures::FutureExt;
|
||||||
use #core::futures::FutureExt;
|
// SAFETY: #core guarantees args.data() is a v8 External pointing to an OpCtx for the isolates lifetime
|
||||||
// SAFETY: #core guarantees args.data() is a v8 External pointing to an OpCtx for the isolates lifetime
|
let ctx = unsafe {
|
||||||
let ctx = unsafe {
|
&*(#core::v8::Local::<#core::v8::External>::cast(args.data()).value()
|
||||||
&*(#core::v8::Local::<#core::v8::External>::cast(args.data()).value()
|
as *const #core::_ops::OpCtx)
|
||||||
as *const #core::_ops::OpCtx)
|
};
|
||||||
};
|
let op_id = ctx.id;
|
||||||
let op_id = ctx.id;
|
let realm_idx = ctx.realm_idx;
|
||||||
let realm_idx = ctx.realm_idx;
|
|
||||||
|
|
||||||
let promise_id = args.get(0);
|
let promise_id = args.get(0);
|
||||||
let promise_id = #core::v8::Local::<#core::v8::Integer>::try_from(promise_id)
|
let promise_id = #core::v8::Local::<#core::v8::Integer>::try_from(promise_id)
|
||||||
.map(|l| l.value() as #core::PromiseId)
|
.map(|l| l.value() as #core::PromiseId)
|
||||||
.map_err(#core::anyhow::Error::from);
|
.map_err(#core::anyhow::Error::from);
|
||||||
// Fail if promise id invalid (not an int)
|
// Fail if promise id invalid (not an int)
|
||||||
let promise_id: #core::PromiseId = match promise_id {
|
let promise_id: #core::PromiseId = match promise_id {
|
||||||
Ok(promise_id) => promise_id,
|
Ok(promise_id) => promise_id,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
#core::_ops::throw_type_error(scope, format!("invalid promise id: {}", err));
|
#core::_ops::throw_type_error(scope, format!("invalid promise id: {}", err));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#arg_decls
|
#arg_decls
|
||||||
|
|
||||||
// Track async call & get copy of get_error_class_fn
|
// Track async call & get copy of get_error_class_fn
|
||||||
let get_class = {
|
let get_class = {
|
||||||
let state = ::std::cell::RefCell::borrow(&ctx.state);
|
let state = ::std::cell::RefCell::borrow(&ctx.state);
|
||||||
state.tracker.track_async(op_id);
|
state.tracker.track_async(op_id);
|
||||||
state.get_error_class_fn
|
state.get_error_class_fn
|
||||||
};
|
};
|
||||||
|
|
||||||
#pre_result
|
#pre_result
|
||||||
#core::_ops::queue_async_op(ctx, scope, #deferred, async move {
|
#core::_ops::queue_async_op(ctx, scope, #deferred, async move {
|
||||||
let result = #result_fut
|
let result = #result_fut
|
||||||
#result_wrapper
|
#result_wrapper
|
||||||
(realm_idx, promise_id, op_id, #core::_ops::to_op_result(get_class, result))
|
(realm_idx, promise_id, op_id, #core::_ops::to_op_result(get_class, result))
|
||||||
});
|
});
|
||||||
},
|
}
|
||||||
argc,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn scope_arg(arg: &FnArg) -> Option<TokenStream2> {
|
fn scope_arg(arg: &FnArg) -> Option<TokenStream2> {
|
||||||
|
@ -362,7 +357,7 @@ fn codegen_v8_sync(
|
||||||
f: &syn::ItemFn,
|
f: &syn::ItemFn,
|
||||||
margs: Attributes,
|
margs: Attributes,
|
||||||
has_fallible_fast_call: bool,
|
has_fallible_fast_call: bool,
|
||||||
) -> (TokenStream2, usize) {
|
) -> TokenStream2 {
|
||||||
let Attributes { is_v8, .. } = margs;
|
let Attributes { is_v8, .. } = margs;
|
||||||
let special_args = f
|
let special_args = f
|
||||||
.sig
|
.sig
|
||||||
|
@ -374,7 +369,7 @@ fn codegen_v8_sync(
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
let rust_i0 = special_args.len();
|
let rust_i0 = special_args.len();
|
||||||
let args_head = special_args.into_iter().collect::<TokenStream2>();
|
let args_head = special_args.into_iter().collect::<TokenStream2>();
|
||||||
let (arg_decls, args_tail, argc) = codegen_args(core, f, rust_i0, 0, false);
|
let (arg_decls, args_tail, _) = codegen_args(core, f, rust_i0, 0, false);
|
||||||
let ret = codegen_sync_ret(core, &f.sig.output);
|
let ret = codegen_sync_ret(core, &f.sig.output);
|
||||||
let type_params = exclude_lifetime_params(&f.sig.generics.params);
|
let type_params = exclude_lifetime_params(&f.sig.generics.params);
|
||||||
|
|
||||||
|
@ -393,27 +388,24 @@ fn codegen_v8_sync(
|
||||||
quote! {}
|
quote! {}
|
||||||
};
|
};
|
||||||
|
|
||||||
(
|
quote! {
|
||||||
quote! {
|
// SAFETY: #core guarantees args.data() is a v8 External pointing to an OpCtx for the isolates lifetime
|
||||||
// SAFETY: #core guarantees args.data() is a v8 External pointing to an OpCtx for the isolates lifetime
|
let ctx = unsafe {
|
||||||
let ctx = unsafe {
|
&*(#core::v8::Local::<#core::v8::External>::cast(args.data()).value()
|
||||||
&*(#core::v8::Local::<#core::v8::External>::cast(args.data()).value()
|
as *const #core::_ops::OpCtx)
|
||||||
as *const #core::_ops::OpCtx)
|
};
|
||||||
};
|
|
||||||
|
|
||||||
#fast_error_handler
|
#fast_error_handler
|
||||||
#arg_decls
|
#arg_decls
|
||||||
|
|
||||||
let result = Self::call::<#type_params>(#args_head #args_tail);
|
let result = Self::call::<#type_params>(#args_head #args_tail);
|
||||||
|
|
||||||
// use RefCell::borrow instead of state.borrow to avoid clash with std::borrow::Borrow
|
// use RefCell::borrow instead of state.borrow to avoid clash with std::borrow::Borrow
|
||||||
let op_state = ::std::cell::RefCell::borrow(&*ctx.state);
|
let op_state = ::std::cell::RefCell::borrow(&*ctx.state);
|
||||||
op_state.tracker.track_sync(ctx.id);
|
op_state.tracker.track_sync(ctx.id);
|
||||||
|
|
||||||
#ret
|
#ret
|
||||||
},
|
}
|
||||||
argc,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// (full declarations, idents, v8 argument count)
|
/// (full declarations, idents, v8 argument count)
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_void_async {
|
||||||
is_async: true,
|
is_async: true,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 0usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_async_result {
|
||||||
is_async: true,
|
is_async: true,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_fallback {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_cow_str {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_f64_buf {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -22,7 +22,6 @@ impl op_sync_serialize_object_with_numbers_as_keys {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -22,7 +22,6 @@ impl send_stdin {
|
||||||
is_async: true,
|
is_async: true,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -22,7 +22,6 @@ impl send_stdin {
|
||||||
is_async: true,
|
is_async: true,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -22,7 +22,6 @@ impl op_blob_revoke_object_url {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_ffi_ptr_value {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 2usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -22,7 +22,6 @@ impl op_print {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 2usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_set_exit_code {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl foo {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 2usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -32,7 +32,6 @@ impl op_foo {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 0usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl foo {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 2usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_listen {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 0usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -32,7 +32,6 @@ impl op_now {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_add_4 {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 4usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -22,7 +22,6 @@ impl op_try_close {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_string_length {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -22,7 +22,6 @@ impl op_read_sync {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 2usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -32,7 +32,6 @@ impl op_ffi_ptr_of {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 2usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_is_proxy {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_string_length {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -22,7 +22,6 @@ impl op_string_length {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -22,7 +22,6 @@ impl op_bench_now {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 0usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_import_spki_x25519 {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 2usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_unit_result {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 0usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_set_nodelay {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 2usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_unit {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 0usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -26,7 +26,6 @@ impl op_wasm {
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_unstable: false,
|
is_unstable: false,
|
||||||
is_v8: false,
|
is_v8: false,
|
||||||
argc: 1usize,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
Loading…
Reference in a new issue